v221013
authorKilian Saffran <ksaffran@dks.lu>
Thu, 13 Oct 2022 17:55:55 +0000 (19:55 +0200)
committerKilian Saffran <ksaffran@dks.lu>
Thu, 13 Oct 2022 17:55:55 +0000 (19:55 +0200)
328 files changed:
.vscode/settings.json
11111111-1111-1111-1111-111111111111 Ale.txt [new file with mode: 0644]
DeveloperReadMe.md
app/css/theme.css
app/db.php
app/lib/POT/Period.php
app/lib/POT/Staff.php
app/lib/POT/TimeTracker.php
app/lib/config.php
app/lib/version.php
app/tmpl/block/pnl_nodata.html
app/tmpl/module/index.html
app/tmpl/module/periods/periodday.js
app/tmpl/module/periods/reportperiod.js
app/tmpl/module/periods/staffperiodweeks.js
app/tmpl/module/staff/staff.js
app/tmpl/module/staff/staffmonths.js
app/tmpl/module/timeclock/timeclock.js
app/tmpl/module/timetrack/app.js
app/tmpl/module/timetrack/panels/config.html [new file with mode: 0644]
app/tmpl/module/timetrack/panels/pincode.html [new file with mode: 0644]
app/tmpl/module/timetrack/panels/scanbadge.html [new file with mode: 0644]
app/tmpl/module/timetrack/panels/screensaver.html [new file with mode: 0644]
app/tmpl/module/timetrack/panels/statusmsg.html [new file with mode: 0644]
app/tmpl/module/timetrack/panels/timetrack.html [new file with mode: 0644]
app/tmpl/module/timetrack/panels/userlist.html [new file with mode: 0644]
app/tmpl/module/timetrack/timeclock.js [new file with mode: 0644]
app/tmpl/timetrack.html
icons/Accounting_01.svg [new file with mode: 0644]
icons/Data_Add.svg [new file with mode: 0644]
icons/Data_Copy.svg [new file with mode: 0644]
icons/Data_Delete.svg [new file with mode: 0644]
icons/Data_Import.svg [new file with mode: 0644]
icons/Data_Information.svg [new file with mode: 0644]
icons/Data_Network.svg [new file with mode: 0644]
icons/Data_Replace.svg [new file with mode: 0644]
icons/Data_Synchronize.svg [new file with mode: 0644]
icons/Document_Music.svg [new file with mode: 0644]
icons/E_Service_01.svg [new file with mode: 0644]
icons/Euro_Tag.svg [new file with mode: 0644]
icons/Exit___03.svg [new file with mode: 0644]
icons/Export___02.svg [new file with mode: 0644]
icons/Folder_Open_01.svg [new file with mode: 0644]
icons/Graduate_Degree.svg [new file with mode: 0644]
icons/Import__02.svg [new file with mode: 0644]
icons/Internet_Facilities.svg [new file with mode: 0644]
icons/Location__02.svg [new file with mode: 0644]
icons/Lock_Information.svg [new file with mode: 0644]
icons/MS_System_settings_Configuration_Manger_02.svg [new file with mode: 0644]
icons/Microsoft_Excel_2013_01.svg [new file with mode: 0644]
icons/Office.svg [new file with mode: 0644]
icons/Out.svg [new file with mode: 0644]
icons/Payment_02.svg [new file with mode: 0644]
icons/Pending_Invoice.svg [new file with mode: 0644]
icons/Product_Box.svg [new file with mode: 0644]
icons/Product_Box_With_Disc.svg [new file with mode: 0644]
icons/Receipt.svg [new file with mode: 0644]
icons/Sand_Clock__01.svg [new file with mode: 0644]
icons/Save_As.svg [new file with mode: 0644]
icons/Scale.svg [new file with mode: 0644]
icons/Shopping_02.svg [new file with mode: 0644]
icons/Show.svg [new file with mode: 0644]
icons/Sync___03.svg [new file with mode: 0644]
icons/Team_02.svg [new file with mode: 0644]
icons/Timer.svg [new file with mode: 0644]
icons/User_Group.svg [new file with mode: 0644]
icons/Web.svg [new file with mode: 0644]
icons/add_user.svg [new file with mode: 0644]
icons/addressbook.svg [new file with mode: 0644]
icons/app.svg [new file with mode: 0644]
icons/arrow_down.svg [new file with mode: 0644]
icons/arrow_up.svg [new file with mode: 0644]
icons/arrowhead_down.svg [new file with mode: 0644]
icons/arrowhead_up.svg [new file with mode: 0644]
icons/bill.svg [new file with mode: 0644]
icons/cash_register.svg [new file with mode: 0644]
icons/cheque.svg [new file with mode: 0644]
icons/clipboard.svg [new file with mode: 0644]
icons/clock.svg [new file with mode: 0644]
icons/closed.svg [new file with mode: 0644]
icons/cloud_upload.svg [new file with mode: 0644]
icons/contacts_edit.svg [new file with mode: 0644]
icons/contatcs.svg [new file with mode: 0644]
icons/creditcard.svg [new file with mode: 0644]
icons/info_circle.svg [new file with mode: 0644]
icons/users.svg [new file with mode: 0644]
pointeuse/.hourtrax/auth.clear.passwd [new file with mode: 0644]
pointeuse/.hourtrax/auth.passwd [new file with mode: 0644]
pointeuse/.hourtrax/hourtrax.conf [new file with mode: 0644]
pointeuse/.hourtrax/hourtrax.json [new file with mode: 0644]
pointeuse/.hourtrax/hourtrax.sql [new file with mode: 0644]
pointeuse/.hourtrax/hourtrax.sqlite [new file with mode: 0644]
pointeuse/.hourtrax/potsync.conf [new file with mode: 0644]
pointeuse/.hourtrax/staff.json [new file with mode: 0644]
pointeuse/.hourtrax/sync.conf [new file with mode: 0644]
pointeuse/dev/.config/lxsession/LXDE-pi/autostart [new file with mode: 0644]
pointeuse/dev/DKS-VPN-dks-hourtraxtest.ovpn [new file with mode: 0644]
pointeuse/dev/UART-Fignerprint-RaspberryPi.tar.gz [new file with mode: 0644]
pointeuse/dev/UART_Fingerprint_Sensor_(C)_User_Manual_en.pdf [new file with mode: 0644]
pointeuse/dev/db/dumpdb.sh [new file with mode: 0644]
pointeuse/dev/db/hourtrax.backup.sql [new file with mode: 0644]
pointeuse/dev/db/hourtrax.sql [new file with mode: 0644]
pointeuse/dev/db/hourtrax.sqlite [new file with mode: 0644]
pointeuse/dev/db/hourtrax.sqlite.dump.sql [new file with mode: 0644]
pointeuse/dev/db/hourtrax.sqlite.schema.sql [new file with mode: 0644]
pointeuse/dev/db/hourtrax.sqlite.testdata.sql [new file with mode: 0644]
pointeuse/dev/db/hourtrax_dev.sql [new file with mode: 0644]
pointeuse/dev/devfingerread.pl [new file with mode: 0644]
pointeuse/dev/devfingerunload.pl [new file with mode: 0644]
pointeuse/dev/devfingerwrite.pl [new file with mode: 0644]
pointeuse/dev/fpall.py [new file with mode: 0644]
pointeuse/dev/hourtrax.pl [new file with mode: 0644]
pointeuse/dev/install.txt [new file with mode: 0644]
pointeuse/dev/lib/DB/PgSQL.pm [new file with mode: 0644]
pointeuse/dev/lib/DB/SQLite.pm [new file with mode: 0644]
pointeuse/dev/lib/Module/DB.pm [new file with mode: 0644]
pointeuse/dev/lib/Module/Staff.pm [new file with mode: 0644]
pointeuse/dev/lib/POT/TimeTracker/Staff.pm [new file with mode: 0644]
pointeuse/dev/main.py [new file with mode: 0644]
pointeuse/dev/new_install/fileto_change.txt [new file with mode: 0644]
pointeuse/dev/new_install/history.txt [new file with mode: 0644]
pointeuse/dev/new_install/hourtrax.sqlite [new file with mode: 0644]
pointeuse/dev/new_install/install_steps.txt [new file with mode: 0644]
pointeuse/dev/new_install/pi_groups.txt [new file with mode: 0644]
pointeuse/dev/potsync.sh [new file with mode: 0644]
pointeuse/dev/sourcefiles.local.txt [new file with mode: 0644]
pointeuse/dev/sourcefiles.remote.txt [new file with mode: 0644]
pointeuse/dev/splash.png [new file with mode: 0644]
pointeuse/dev/splash.xcf [new file with mode: 0644]
pointeuse/dev/syncdb.pl [new file with mode: 0644]
pointeuse/dev/syncdev.sh [new file with mode: 0644]
pointeuse/dev/sys/boot/config.txt [new file with mode: 0644]
pointeuse/dev/sys/etc/lightdm/lightdm.conf [new file with mode: 0644]
pointeuse/dev/sys/etc/modprobe.d/raspi-blacklist.conf [new file with mode: 0644]
pointeuse/dev/sys/etc/modules [new file with mode: 0644]
pointeuse/dev/sys/etc/openvpn/DKS-VPN-dks-hourtrax.conf [new file with mode: 0644]
pointeuse/dev/sys/etc/ssh/sshd_config [new file with mode: 0644]
pointeuse/dev/sys/etc/sudoers [new file with mode: 0644]
pointeuse/dev/sys/etc/systemd/system/autologin@.service [new file with mode: 0644]
pointeuse/dev/sys/etc/xdg/lxsession/LXDE-pi/autostart [new file with mode: 0644]
pointeuse/dev/sys/etc/xdg/lxsession/LXDE-pi/sshpwd.sh [new file with mode: 0644]
pointeuse/dev/sys/etc/xdg/lxsession/LXDE/autostart [new file with mode: 0644]
pointeuse/dev/sys/etc/xdg/openbox/menu.xml [new file with mode: 0644]
pointeuse/dev/sys/usr/share/plymouth/themes/pix/splash.png [new file with mode: 0644]
pointeuse/dev/sys/var/spool/cron/crontabs/dks [new file with mode: 0644]
pointeuse/dev/tmp.sql [new file with mode: 0644]
pointeuse/dev/tools/fingerdelete.py [new file with mode: 0644]
pointeuse/dev/tools/fingerenroll.py [new file with mode: 0644]
pointeuse/dev/tools/fingerindex.py [new file with mode: 0644]
pointeuse/dev/tools/fingerledoff.py [new file with mode: 0644]
pointeuse/dev/tools/fingerledon.py [new file with mode: 0644]
pointeuse/dev/tools/fingersearch.py [new file with mode: 0644]
pointeuse/dev/tools/fpunload.sh [new file with mode: 0644]
pointeuse/dev/tools/pyfingerprint2/__init__.py [new file with mode: 0644]
pointeuse/dev/tools/pyfingerprint2/pyfingerprint.orig.py [new file with mode: 0644]
pointeuse/dev/tools/pyfingerprint2/pyfingerprint.py [new file with mode: 0644]
pointeuse/dev/updatedata.pl [new file with mode: 0644]
pointeuse/install/.hourtrax/hourtrax.json [new file with mode: 0644]
pointeuse/install/.hourtrax/hourtrax.sqlite [new file with mode: 0644]
pointeuse/install/.hourtrax/ht.sql [new file with mode: 0644]
pointeuse/install/.hourtrax/sync.conf [new file with mode: 0644]
pointeuse/install/bin/clearfingerprint.sh [new file with mode: 0644]
pointeuse/install/bin/electron/electron-v9.3.2-linux-armv7l.zip [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/css/fonts/appicons.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/css/fonts/appicons.ttf [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/css/fonts/appicons.woff [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/css/icons.css [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/css/theme.css [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/POT-logo.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/Thumbs.db [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/dks_1000.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/Thumbs.db [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-144x144.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-192x192.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-36x36.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-48x48.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-72x72.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-96x96.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-114x114.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-120x120.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-144x144.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-152x152.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-180x180.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-57x57.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-60x60.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-72x72.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-76x76.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-precomposed.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/browserconfig.xml [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/favicon-16x16.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/favicon-32x32.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/favicon-96x96.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/favicon.ico [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/manifest.json [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/ms-icon-144x144.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/ms-icon-150x150.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/ms-icon-310x310.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/favicon/ms-icon-70x70.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/fingerprint/finger1.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/fingerprint/finger2.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/fingerprint/finger3.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/fingerprint/finger4.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/fingerprint/finger5.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-check.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-crosshair.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-remove.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-remove_white.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-scanning-index.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-scanning.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-search.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-simple.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/hourtrax copy.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/hourtrax.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/hourtrax.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/hwbagde.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/key-fob.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/logo_512.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/nfc-scan.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/nfc-scan_alt.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/pot.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/poticon512.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/potlogowhite.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/pottop.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/toplogo.png [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/img/touch.svg [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/index.fingerprint.html [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/index.nfc.html [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/js/app.js [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/js/fingerprint.js [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/js/lang.js [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/js/renderer.js [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/js/shell.js [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/js/sqlite.js [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/js/sync.js [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/js/timecalc.js [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/js/timeclock.fingerprint.js [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/js/timeclock.nfc.js [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/main.js [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/package-lock.json [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/package.json [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/vendor/moment/locales.js [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/vendor/moment/locales.min.js [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/vendor/moment/locales.min.js.map [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/vendor/moment/moment-with-locales.js [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/vendor/moment/moment-with-locales.min.js [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/vendor/moment/moment-with-locales.min.js.map [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/vendor/moment/moment.js [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/vendor/moment/moment.min.js [new file with mode: 0644]
pointeuse/install/bin/electron/resources/app/vendor/moment/moment.min.js.map [new file with mode: 0644]
pointeuse/install/bin/exportToJSON.sh [new file with mode: 0644]
pointeuse/install/bin/fp.py [new file with mode: 0644]
pointeuse/install/bin/fpunload.sh [new file with mode: 0644]
pointeuse/install/bin/nfcimportid.sh [new file with mode: 0644]
pointeuse/install/bin/nfcread.c [new file with mode: 0644]
pointeuse/install/bin/nfcreadbadge.sh [new file with mode: 0644]
pointeuse/install/bin/nfcunload.sh [new file with mode: 0644]
pointeuse/install/bin/reboot.sh [new file with mode: 0644]
pointeuse/install/bin/resetgui.sh [new file with mode: 0644]
pointeuse/install/bin/savewlan.sh [new file with mode: 0644]
pointeuse/install/bin/scanwlan.sh [new file with mode: 0644]
pointeuse/install/bin/sendnfcuid.sh [new file with mode: 0644]
pointeuse/install/bin/sendtrack.sh [new file with mode: 0644]
pointeuse/install/bin/setstaff.sh [new file with mode: 0644]
pointeuse/install/bin/shutdown.sh [new file with mode: 0644]
pointeuse/install/bin/startapp.sh [new file with mode: 0644]
pointeuse/install/bin/syncdown.pl [new file with mode: 0644]
pointeuse/install/bin/turnscreen.sh [new file with mode: 0644]
pointeuse/install/create_pkg.sh [new file with mode: 0644]
pointeuse/install/installpot01.sh [new file with mode: 0644]
pointeuse/install/installpot02.sh [new file with mode: 0644]
pointeuse/install/installvpnkey.sh [new file with mode: 0644]
pointeuse/install/linkstationtoserver.sh [new file with mode: 0644]
pointeuse/install/splash.png [new file with mode: 0644]
pointeuse/server/home/dks/bin/checkcert.sh [new file with mode: 0644]
pointeuse/server/home/dks/bin/lib/ConfigFile.pm [new file with mode: 0644]
pointeuse/server/home/dks/bin/lib/DB/PgSQL.pm [new file with mode: 0644]
pointeuse/server/home/dks/bin/lib/DB/SQLite.pm [new file with mode: 0644]
pointeuse/server/home/dks/bin/lib/SSH.pm [new file with mode: 0644]
pointeuse/server/home/dks/bin/sync_pot_to_timetracker.pl [new file with mode: 0644]
pointeuse/server/home/dks/bin/sync_timetracker_to_pot.pl [new file with mode: 0644]
pointeuse/server/home/dks/bin/syncpot_alicehartmann.sh [new file with mode: 0644]
pointeuse/server/home/dks/bin/syncpot_elch.sh [new file with mode: 0644]
pointeuse/server/home/dks/bin/syncpot_ldiner.sh [new file with mode: 0644]
pointeuse/server/home/dks/bin/testsync.sh [new file with mode: 0644]
pointeuse/server/home/dks/conf/dhartmann01.conf [new file with mode: 0644]
pointeuse/server/home/dks/conf/dhartmann02.conf [new file with mode: 0644]
pointeuse/server/home/dks/conf/dhartmann03.conf [new file with mode: 0644]
pointeuse/server/home/dks/conf/elch.conf [new file with mode: 0644]
pointeuse/server/home/dks/conf/lousdiner.conf [new file with mode: 0644]
pointeuse/server/home/dks/conf/pot.conf [new file with mode: 0644]
pointeuse/server/home/dks/public_html/.htaccess [new file with mode: 0644]
pointeuse/server/home/dks/public_html/.htpasswd [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/.htaccess [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/api.php [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/cmds.log [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/data/.htaccess [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/data/hosts/dhart-hourtrax01.json [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/data/hosts/dhart-pot01.json [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/data/hosts/dhart-pot02.json [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/data/hosts/dhart-pot03.json [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/data/hosts/dksserver.json [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/data/hosts/dolvi-pot07.json [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/data/hosts/elch-pothourtrax.json [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/data/hosts/ldin-hourtrax.json [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/data/hosts/vince-pot06.json [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/data/params.log [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/index.html [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/index.php [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/lib/config.php [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/lib/database.php [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/lib/dksssh.php [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/lib/modules/data.php [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/lib/modules/ovpn.php [new file with mode: 0644]
pointeuse/server/home/dks/public_html/htx/lib/modules/ssh.php [new file with mode: 0644]
pointeuse/server/home/dks/public_html/index.html [new file with mode: 0644]
pointeuse/server/home/dks/public_html/index.php [new file with mode: 0644]
pointeuse/vpn/DKS-VPN-dbs-hourtrax.ovpn [new file with mode: 0644]
pointeuse/vpn/DKS-VPN-dhart-hourtrax01.ovpn [new file with mode: 0644]
pointeuse/vpn/DKS-VPN-dhart-hourtrax02.ovpn [new file with mode: 0644]
pointeuse/vpn/DKS-VPN-dhart-hourtrax03.ovpn [new file with mode: 0644]
pointeuse/vpn/DKS-VPN-dks-hourtrax.ovpn [new file with mode: 0644]
pointeuse/vpn/DKS-VPN-dks-hourtraxtest.ovpn [new file with mode: 0644]
pointeuse/vpn/DKS-VPN-dolvi-pot08.ovpn [new file with mode: 0644]
pointeuse/vpn/DKS-VPN-elch-hourtrax.ovpn [new file with mode: 0644]
pointeuse/vpn/DKS-VPN-elch-pothourtrax.ovpn [new file with mode: 0644]
pointeuse/vpn/DKS-VPN-lanx-pot01.ovpn [new file with mode: 0644]
pointeuse/vpn/DKS-VPN-ldin-hourtrax.ovpn [new file with mode: 0644]

index b317e6b..4fe9fb3 100644 (file)
@@ -3,10 +3,6 @@
         "*.html.mustache": "html",
         "*.js.mustache": "javascript"
       },
-    "perlSyntax.includePaths": [
-    "C:/Users/ksaff/Workspace/pot_lu/app/lib/perl5","C:/Users/ksaff/Workspace/pot_lu/app/lib","C:/Users/ksaff/Workspace/pot_lu/website/api/lib","D:/Workspace/pot_lu/app/lib/perl5","D:/Workspace/pot_lu/app/lib","D:/Workspace/pot_lu/website/api/lib"
-],
-"es6-css-minify.minifyOnSave": "no",
 "git.ignoreLimitWarning": true,
 "tidyHtml.formatOnSave": false,
 "tidyHtml.optionsTidy": {
diff --git a/11111111-1111-1111-1111-111111111111 Ale.txt b/11111111-1111-1111-1111-111111111111 Ale.txt
new file mode 100644 (file)
index 0000000..f13a932
--- /dev/null
@@ -0,0 +1,6 @@
+11111111-1111-1111-1111-111111111111               Alexander   Silva   04782852fd6a80
+b13ede48-2bd0-7359-cb18-dbea81809541               Dorothé     Roos   04746252fd6a80
+56a0bbf9-08df-460c-b60e-d91c1d314154               Daniela     Pesch   04781452fd6a80
+
+
+sqlite3 --header .hourtrax/hourtrax.sqlite "select * from badges where id_staff in ('11111111-1111-1111-1111-111111111111','b13ede48-2bd0-7359-cb18-dbea81809541','56a0bbf9-08df-460c-b60e-d91c1d314154');"
\ No newline at end of file
index c420e36..7c2a9ac 100644 (file)
@@ -91,10 +91,13 @@ Install required Modules:
 ^: `install Algorithm::Diff Apache::LogFormat::Compiler AppConfig Archive::Tar Archive::Zip Audio::FLAC::Header Authen::SASL B::Hooks::EndOfScope BSD::Resource Business::Tax::VAT::Validation CGI CGI::Compile CGI::Emulate::PSGI CGI::Session CPAN::Meta::Check Canary::Stability Capture::Tiny Class::Inspector Class::Load Class::Load::XS Class::Method::Modifiers Clone Cookie::Baker Cpanel::JSON::XS Crypt::CBC Crypt::PasswdMD5 Crypt::RC4 Crypt::Random::Source Crypt::Rijndael Crypt::Rijndael::PP DBD::PgPP DBD::SQLite DBD::mysql DBI Danga::Socket Data::OptList Date::Parse Devel::Caller Devel::GlobalDestruction Devel::OverloadInfo Devel::StackTrace Devel::StackTrace::AsHTML Digest::HMAC Digest::Perl::MD5 Digest::SHA Digest::SHA::PurePerl Dist::CheckConflicts Email::Address Email::Address::XS Email::Date::Format Email::MIME Email::MIME::ContentType Email::MIME::Encodings Email::MessageID Email::Simple Encode Encode::Locale Error Eval::Closure Exporter::Tiny ExtUtils::Config ExtUtils::Helpers ExtUtils::InstallPaths File::Copy::Recursive File::KeePass File::Listing File::Path File::ShareDir File::ShareDir::Install File::pushd Filesys::Notify::Simple Font::TTF Getopt::ArgvFile HTML::Parser HTML::Tagset HTML::Tree HTTP::Cookies HTTP::Daemon HTTP::Date HTTP::Entity::Parser HTTP::Headers::Fast HTTP::Message HTTP::MultiPartParser HTTP::Negotiate Hash::MultiValue IO::AIO IO::HTML IO::Socket::SSL IO::String IO::Stringy IO::Tty IPC::Run3 Image::Size JSON JSON::MaybeXS LWP::MediaTypes LWP::Protocol::https List::Util Locale::Maketext Locale::Maketext::Lexicon Locale::Msgfmt MIME::Lite MIME::Type::FileName MIME::Types MLDBM MP3::Info MP4::Info MRO::Compat MailTools Math::Base::Convert Module::Build Module::Build::Tiny Module::Find Module::Implementation Module::Runtime Module::Runtime::Conflicts Module::ScanDeps Module::Signature Moo Moose MooseX::Params::Validate Mozilla::CA Net Net::HTTP Net::OpenSSH Net::SSLeay OLE::Storage_Lite Ogg::Vorbis::Header::PurePerl PAR PAR::Dist PAR::Packer PDF::API2 PDF::Table POSIX::strftime::Compiler Package::DeprecationManager Package::Stash Package::Stash::XS PadWalker Params::Util Params::Validate Path::Tiny Perl Perlbal Plack Plack::App::EventSource Plack::Middleware::DirIndex Readonly Role::Tiny SQL::Statement Smart::Comments Sort::Naturally Spreadsheet::ParseExcel Spreadsheet::XLSX Starlight Stream::Buffered String::HexConvert String::Random Sub::Exporter Sub::Exporter::Progressive Sub::Identify Sub::Install Sub::Name Sub::Quote Sub::Uplevel Sys::Syscall Template Template::DBI Term::ReadKey Term::ReadLine Term::ShellUI Test::CleanNamespaces Test::Deep Test::Exception Test::Fatal Test::File Test::MockTime Test::Needs Test::NoWarnings Test::Pod Test::Requires Test::RequiresInternet Test::SharedFork Test::TCP Test::Time Test::Warn Test::Warnings Test::utf8 Text::Soundex Text::Unidecode Tk::Getopt Try::Tiny Type::Tiny URI URI::Encode UUID::Tiny Variable::Magic WWW::Form::UrlEncoded WWW::RobotRules XML::NamespaceSupport XML::Parser XML::SAX XML::SAX::Base XML::SAX::Expat XML::Simple common::sense install libwww::perl namespace::clean version`
 
 
-Archive::Tar Archive::Zip Audio::FLAC::Header Digest::Perl::MD5 Digest::SHA Digest::SHA::PurePerl Digest::SHA Email::Address Email::Address::XS Email::Date::Format Email::MIME Email::MIME::ContentType Email::MIME::Encodings Email::MessageID Email::Simple Encode Encode::Locale File::Copy::Recursive File::KeePass Filesys::Notify::Simple Font::TTF File::Find::Rule Net::SSLeay
+Archive::Tar Archive::Zip Audio::FLAC::Header Digest::Perl::MD5 Digest::SHA Digest::SHA::PurePerl Digest::SHA Email::Address EmailFile::Copy::Recursive File::KeePass::Address::XS Email::Date::Format Email::MIME Email::MIME::ContentType Email::MIME::Encodings Email::MessageID Email::Simple Encode Encode::Locale File::Copy::Recursive File::KeePass Filesys::Notify::Simple Font::TTF File::Find::Rule Net::SSLeay
 
-MP3::Info MP4::Info Image::Size MailTools Ogg::Vorbis::Header::PurePerl PAR PAR::Dist PAR::Packer Plack::Middleware::DirIndex PadWalker PDF::API2 Starlight Template  URI::Encode UUID::Tiny Template::DBI MIME::Lite MIME::Type::FileName MIME::Types IO::Tty
+MP3::Info MP4::Info Image::Size  Ogg::Vorbis::Header::PurePerl PAR PAR::Dist PAR::Packer Plack::Middleware::DirIndex PadWalker PDF::API2 Starlight Template  URI::Encode  Template::DBI MIME::Lite MIME::Type::FileName MIME::Types IO::Tty
 ---
+PDF::API2
+UUID::Tiny
+MailTools
 
 Setup Apache
 
index 413cb5d..2fca9fd 100644 (file)
@@ -971,6 +971,3 @@ a.inlinebtn:focus
 #help_page hr {
   border-top: 1px solid #757575;
 }
-
-
-
index 612ac20..f34ee9f 100644 (file)
       }
       
       $usql = "UPDATE ".$schema.".".$db->securetext($p["table"])." SET ".$db->securetext($p["column"])."=".$val." WHERE id='".$db->securetext($p["id"])."';";
+      file_put_contents("log/sqlx.log",date('Y-m-d H:i:s').":".$usql."\n", FILE_APPEND);
       $html["result"] = $db->exec($usql);  
     } 
   }
index ee39b12..7cc99d0 100644 (file)
@@ -36,10 +36,12 @@ class Period{
     select '".$prd["id"]."' as id_reportperiod,id_staff from ".$schema.".staffcontract sc 
     left join ".$schema.".staff st on (st.id=sc.id_staff)
     where st.isdeleted is null and sc.enddate is null or ( sc.startdate between date('".$prdstart["rpstart"]."') and date ('".$prdend["rpend"]."')) or (sc.enddate between date('".$prdstart["rpstart"]."') and date('".$prdend["rpend"]."')) on   conflict on constraint uniq_staffreportperiod_cal do nothing returning id_staff;");
+    $st = new Staff($this->dbh, $this->cfg);
     foreach ($staff as  $s){
       //add staff period row
-      $this->setStaffPeriodDays($schema,$prd["id"],$s["id"]);
-      $this->updateStaffPeriod($schema,$prd["id"],$s["id"]);
+      $st->setStaffContractDays($schema,$s["id_staff"]);
+      $this->setStaffPeriodDays($schema,$prd["id"],$s["id_staff"]);
+      $this->updateStaffPeriod($schema,$prd["id"],$s["id_staff"]);
     }
     return $prd["id"];
   }
@@ -49,7 +51,7 @@ class Period{
     return $ret;
   }
 
-public function getMonthsByStaff($schema,$id_staff,$id_groups){
+public function getMonthsByStaff($schema,$id_staff,$id_groups=null){
   $where = "";
   $wgroups = "";
   if (isset($id_staff) && $id_staff != null){
@@ -512,8 +514,8 @@ public function updatePeriodDaySums($schema,$dayids){
        from ( select id, recuperationhours,vacancyhours,vacillhours,vacextrahours,otherpaidhours,payedpause,partunemplhours,nighthours,
        case when timestart1 is not null and timeend1 is not null then case when timeend1 < timestart1 then  '24:00:00'::interval + timeend1::interval - timestart1::interval else  timeend1::interval - timestart1::interval end else  '00:00:00'::interval end as dt1,
        case when timestart2 is not null and timeend2 is not null then case when timeend2 < timestart2 then  '24:00:00'::interval + timeend2::interval - timestart2::interval else  timeend2::interval - timestart2::interval end  else  '00:00:00'::interval end as dt2,
-       case when pausestart1 is not null and pauseend1 is not null then case when pauseend1 < pausestart1 then '24:00:00'::interval + pauseend1::interval - pausestart1::interval else  pauseend1::interval - pausestart1::interval end else '00:00:00'::interval end as pdt1,
-       case when pausestart2 is not null and pauseend2 is not null then case when pauseend2 < pausestart2 then '24:00:00'::interval + pauseend2::interval - pausestart2::interval else  pauseend2::interval - pausestart2::interval end else '00:00:00'::interval end as pdt2,
+       case when pausestart1 is not null and pauseend1 is not null and pausestart1 < timestart1 then case when pauseend1 < pausestart1 then '24:00:00'::interval + pauseend1::interval - pausestart1::interval else  pauseend1::interval - pausestart1::interval end else '00:00:00'::interval end as pdt1,
+       case when pausestart2 is not null and pauseend2 is not null and pausestart2 < timestart2 then case when pauseend2 < pausestart2 then '24:00:00'::interval + pauseend2::interval - pausestart2::interval else  pauseend2::interval - pausestart2::interval end else '00:00:00'::interval end as pdt2,
     case when timestart2 is not null and timeend1 is not null and timestart1 is not null and timeend2 is not null then  
         timestart2::interval - timeend1::interval
     else null end as interruption,
index 358cbac..90e184f 100644 (file)
@@ -56,13 +56,13 @@ public function setStaffContractDays($schema ,$id_staff){
 startdate >= date((select min(startdate) from ".$schema.".staffcontract where id_staff='".$id_staff."'))
 or date((select min(startdate) from ".$schema.".staffcontract where id_staff='".$id_staff."')) between startdate and enddate order by startdate,enddate;";
   $perioddata = $this->dbh->queryarray($periodssql);
-
+  $stopdate = $this->dbh->query("select enddate from ".$schema.".staffcontract where id_staff='".$id_staff."' order by enddate desc nulls first limit 1;"); 
   $period = new Period($this->dbh,$this->cfg);
   
   foreach ($perioddata as $pp){
-    $period->setStaffPeriodDays($schema,$pp["id"],$id_staff);
     $this->dbh->exec("INSERT INTO ".$schema.".staffreportperiod (id_reportperiod, id_staff) 
     VALUES ('".$pp["id"]."','".$id_staff."') on conflict on constraint uniq_staffreportperiod_cal do nothing;");
+    $period->setStaffPeriodDays($schema,$pp["id"],$id_staff);
   }
   $cpsql = "select reportperiodunit,reportperiodlength from public.companies where schemata='".$schema."'";
   $rprol = $this->dbh->query($cpsql);
index 8e2534e..8be8e89 100644 (file)
@@ -135,7 +135,7 @@ public function setTracker($schema,$tracker,$data){
     $cmd = 'bin/setstaff.sh \''.$cmd.'\'';
   }
   
-  //error_log("CMD to SEND:". $cmd);
+  file_put_contents("log/sendtimetrack.log",date("Y-m-d H:i:s").";CMD to SEND:Host:".print_r($hh,true).": ". $cmd."\n",FILE_APPEND);
   $res = array();
   foreach ($hh as $host){
     $res[$host] = $this->exec_curl('{"cl":"ssh","fn":"exec","host":"'.$host.'","cmd":"'.$cmd.'"}');
@@ -216,6 +216,8 @@ public function setTracker($schema,$tracker,$data){
    xx.fritime,xx.frientry,xx.friexit,
    xx.sattime,xx.satentry,xx.satexit,
    xx.suntime,xx.sunentry,xx.sunexit,
+   zz.monthstamptime as amonthsum,
+   uu.workhours as amonthwork,uu.hoursdiff as amonthdiff,
     xx.weeksum from (
     select st.id as id_staff,st.staffnumber,coalesce(st.surname || ' ','') || coalesce(st.prename,'') as staffname,gg.groupname  from ".$schema.".staffcontract sc  join ".$schema.".staff st on (st.id=sc.id_staff) left join ".$schema.".staffgroups gg on (gg.id=st.id_staffgroup)
     where (sc.enddate >= date(date_trunc('week',date('".$date."'))) or enddate is null) and sc.startdate <= date(date_trunc('week',date('".$date."')) + interval '6 days')
@@ -252,7 +254,35 @@ public function setTracker($schema,$tracker,$data){
        case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
        date_part('isodow',daydate) as dow,daydate
        from ".$schema.".timetracker tt where tt.daydate between date_trunc('week',date('".$date."')) and date(date_trunc('week',date('".$date."')) + interval '6 days') group by tt.id_staff,daydate
-       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff order by staffnumber,staffname;";
+       ) ttd group by id_staff,cw) xx on yy.id_staff=xx.id_staff  left join (
+        select id_staff,to_char(sum(daystamptime),'HH24:MI')  as monthstamptime from ( 
+      select id_staff, 
+         daydate,
+           case when sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) >= '06:00:00'::interval then sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) - '00:30:00'::interval else sum(coalesce((stamp_out-stamp_in)::interval,'00:00:00')) end as daystamptime,
+           date_part('isodow',daydate) as dow,daydate
+           from ".$schema.".timetracker tt where tt.daydate between date_trunc('month',date('".$date."')) and date(date_trunc('month',date('".$date."')) + interval '1 Month' - interval '1 day') group by tt.id_staff,daydate) uu group by uu.id_staff
+        ) zz on yy.id_staff=zz.id_staff 
+        left join (
+          select 
+          pdu.id_staff,
+          coalesce(case when position('-' in to_char(sum(pdu.dayhours)-sum(pdu.contracthours), 'HH24:MI'::text)) > 0 then '-' || replace(to_char(sum(pdu.dayhours)-sum(pdu.contracthours), 'HH24:MI'::text),'-','') else to_char(sum(pdu.dayhours)-sum(pdu.contracthours), 'HH24:MI'::text) end,'00:00') as hoursdiff,
+          coalesce(to_char(sum(pdu.contracthours), 'HH24:MI'::text),'00:00') as contracthours,
+          coalesce(to_char(sum(pdu.workhours), 'HH24:MI'::text),'00:00') as workhours,
+          coalesce(to_char(sum(pdu.dayhours), 'HH24:MI'::text),'00:00') as dayhours
+          from ".$schema.".staffreportperioddays pdu
+          join (
+          select id as id_reportperiod,date(date_trunc('month',date(substartdate))) as splitter,date(substartdate) as startdate, date(date(substartdate) + subinterval::interval - interval '1 day') as enddate  from (
+         select rpx.id,rpx.subinterval, date(generate_series(rpx.startdate::timestamp,rpx.enddate::timestamp,rpx.subinterval::interval)) as substartdate from ".$schema.".reportperiod rpx
+         ) gp
+         ) psplit on (pdu.daydate between psplit.startdate and psplit.enddate)
+         join ".$schema.".staffreportperiod srp on (pdu.id_staff=srp.id_staff and srp.id_reportperiod=psplit.id_reportperiod)
+         join ".$schema.".reportperiod rp on (rp.id=srp.id_reportperiod)
+         join ".$schema.".staff st on (pdu.id_staff=st.id)
+         LEFT JOIN ".$schema.".staffgroups sgr ON st.id_staffgroup = sgr.id
+         WHERE st.isdeleted IS null and daydate between date_trunc('month',date('".$date."')) and date(date_trunc('month',date('".$date."')) + interval '1 Month' - interval '1 day')
+         group by srp.id,pdu.id_staff,psplit.id_reportperiod,psplit.splitter,sgr.groupname
+         ) uu on yy.id_staff=uu.id_staff
+        order by staffnumber,staffname;";
    return $this->dbh->queryarray($xsql);
  }
 
index 237cdb6..25caaa8 100644 (file)
@@ -24,7 +24,7 @@
       "user" => 'potlu2_user',
       "password" => 'dMY8xGB6cBLzrDGE',
       "logfile" => "log/sql.log",
-      "debug" => 0
+      "debug" => 1
     ),
     "htxuser" => "htx",
     "htxpwd" => "Aib5aevo",
index c63b803..383bf1c 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-$cfg["appversion"] = '1.15.5';
+$cfg["appversion"] = '1.16.01';
   if ($cfg["debug"] == 1){
     $cfg["appversion"] = date('YmdHi');//$cfg["version"];
   } 
index cdf7a3d..4ad1ad7 100644 (file)
@@ -4,7 +4,7 @@
       &nbsp;
     </div>
   </div>
-  <div class="row center" style="margin-top: 200px; height: calc(100vh - 160px);">
+  <div class="row center" style="margin-top: 50px; height: calc(100vh - 160px);">
     <img src="{{ abspath}}{{ staticpath }}img/toplogo.png" style="margin: auto;">
   </div>
 </div>
index dfb9298..7199f47 100644 (file)
       <a class="bar-item bodybtn right" onclick="profile.showdlgnewpassword(); return false;"><span class="icon icon-access" style="font-size: 24px;"></span>{{ lbl.newpassword }}</a>
     </div>
   </div>
-  
+  {% if (debug == '1') %}
+  <div class="card" style="margin-top: 10px;">
+    <header class="container moduletoolbar">
+      <h3>{{ lbl.staff }}</h3>
+    </header>
+    <div class="bar">
+      <a class="bar-item bodybtn" href="{{ abspath }}myprofile.html"><span class="icon icon-profile" style="font-size: 24px;"></span>{{ lbl.basedata }}</a>
+      <a class="bar-item bodybtn" href="{{ abspath }}myvacancy.html"><span class="icon icon-holidays" style="font-size: 24px;"></span>{{ lbl.vacyearly }}</a>
+      <a class="bar-item bodybtn" href="{{ abspath }}myworkplan.html"><span class="icon icon-calendar1" style="font-size: 24px;"></span>{{ lbl.workplan }}</a>
+      <a class="bar-item bodybtn right" target="_blank" href="{{ abspath }}/cgv/cgv.pdf"><span class="icon icon-aggrement" style="font-size: 24px;"></span>{{ lbl.terms }}</a>
+      <a class="bar-item bodybtn right" onclick="profile.showdlgnewpassword(); return false;"><span class="icon icon-access" style="font-size: 24px;"></span>{{ lbl.newpassword }}</a>
+    </div>
+  </div>
+  {% endif %}
 </div>
 {{ include('block/dlgterms.html') }}
 {{ include('block/dlg_newpassword.html') }} 
index 2493551..05377ab 100644 (file)
@@ -74,7 +74,7 @@ let periodday = {
     wpdata["fn"] ="saveform";
     wpdata["table"]="staffreportperioddays";
     wpdata["schemata"] = schemata;
-    //console.log(wpdata);
+    console.log("DayData to save",wpdata);
     showdataloaddlg('','<div class="xxlarge">{{ lbl.waitmsg }}</div>');
     // console.log("start save day data",wpdata);
     // postData("db.php",wpdata).then(data => {
index 6e55b4a..ce9d3bd 100644 (file)
@@ -189,7 +189,8 @@ let reportperiod ={
       } else {
         postData("db.php",{"fn":"add_reportperiod","schemata":schemata}).then(nrepid => {
           //console.log(nrepid);
-          reportperiod.gettbldata();
+          reportperiod.gettbldatafilter();
+          //reportperiod.gettbldata();
         }).catch(err => { console.log(err)});
         
       }
index 160c19b..46ff1ad 100644 (file)
@@ -201,9 +201,10 @@ let staffperiodweeks = {
           //console.log("Data to Set",data2.result);
           //staffperiodweeks.tbl.redraw();
           staffperiodweeks.tbl.setData(data2.result.data).then(dd => {
-            if (staffperiodweeks.selectedid != null){
-              staffperiodweeks.tbl.selectRow(staffperiodweeks.selectedid);
-              staffperiodweeks.tbl.scrollToRow(staffperiodweeks.selectedid, "center", false);
+            console.log("PeriodDay selected ID",periodday.selectedid);
+            if (periodday.selectedid != null){
+              staffperiodweeks.tbl.selectRow(periodday.selectedid);
+              staffperiodweeks.tbl.scrollToRow(periodday.selectedid, "center", false);
             }
           });
           
@@ -333,7 +334,7 @@ let staffperiodweeks = {
     let sel = staffperiodweeks.tbl.getSelectedData();
     let selrp = staffperiodweeks.parenttbl.getSelectedData();
     if (sel.length > 0){
-      staffperiodweeks.selectedid = sel[0].id;
+      periodday.selectedid = sel[0].id;
       asel = [];
       for (s=0;s<sel.length;s++){
         asel.push(sel[s].id);
@@ -345,7 +346,7 @@ let staffperiodweeks = {
     let sel = staffperiodweeks.tbl.getSelectedData();
     let selrp = staffperiodweeks.parenttbl.getSelectedData();
     if (sel.length > 0){
-      staffperiodweeks.selectedid = sel[0].id;
+      periodday.selectedid = sel[0].id;
       asel = [];
       for (s=0;s<sel.length;s++){
         asel.push(sel[s].id);
@@ -370,7 +371,7 @@ let staffperiodweeks = {
     let sel = staffperiodweeks.tbl.getSelectedData();
     let selrp = staffperiodweeks.parenttbl.getSelectedData();
     if (sel.length > 0){
-      staffperiodweeks.selectedid = sel[0].id;
+      periodday.selectedid = sel[0].id;
     let id_workplan = staffperiodweeks.choices["id_workplan"].selected();
     let keepvac = document.getElementById("keepvacancy").checked;
     let keeprec = document.getElementById("keeprecuperation").checked;
@@ -400,7 +401,14 @@ let staffperiodweeks = {
   },
   settransferdiff(){
 
-  }
+  },
+  updateWeekHours: function(){
+    let selrp = staffperiodweeks.parenttbl.getSelectedData();
+    postData("db.php",{"cl":"Period","fn":"updateStaffPeriod","schema":schemata,"id_period":selrp[0].id_reportperiod,"id_staff":selrp[0].id_staff}).then( data => {
+      //dataform.formsaved({});
+     // closedataloaddlg();
+    }).catch(e => {closedataloaddlg();});
+  },
 };
 
 let nullFormatter = function(cell, formatterParams){
index 776987e..d632a5b 100644 (file)
@@ -31,7 +31,7 @@ let staff ={
       mode: 'inline',
       display: 'block',
       width: '100%',
-      height: '150',
+      height: '97',
       popupDisplay: 'full',
       buttonList: [
           ['bold', 'underline','italic','strike','fontSize','fontColor']
index b30ce2e..2bc5a71 100644 (file)
@@ -49,8 +49,11 @@ let staffmonths = {
   gettbldata: function(){
     //console.log("stafftable data");
     postData("db.php",{ "cl":"Period","fn":"getMonthsByStaff","schema":schemata,"id_staff":staff.current_id,"id_groups":'{{session.staffgroups}}'}).then(data => {
-      //console.log("staffdata",data);
-      staffmonths.tbl.setData(data.result.data);
+      //console.log("staffmonth Data",data);
+      if (data.result.data){
+        staffmonths.tbl.setData(data.result.data);
+      }
+      
     });
   },
 
index d324034..d977fdf 100644 (file)
@@ -55,8 +55,16 @@ let timeclock = {
       columns: [\r
       { title: "{{ lbl.staffnumber }}",field: "staffnumber",headerFilter:"input",frozen:true,tooltip:false},\r
       { title: "{{ lbl.staffname }}",field: "staffname",headerFilter:"input", frozen: true,tooltip:false},\r
-      { title: "{{ lbl.weektotal }}",field: "weeksum",headerSort: false,width:100,formatter:boldFormatter, frozen: true,tooltip:false},\r
-      { title: "{{ lbl.monthtotal }}",field: "monthsum",headerSort: false,width:100,formatter:boldFormatter, frozen: true,tooltip:false},\r
+      { title: "{{ lbl.month }}",frozen: true,\r
+        columns: [\r
+          {title:'Soll',field:"amonthwork",headerSort: false,width:70,tooltip:false,formatter:},\r
+          {title:'Ist',field:"amonthsum",headerSort: false,width:70,tooltip:false},\r
+          // {title:'Diff',field:"monthdiff",headerSort: false,width:60,tooltip:false},\r
+        ]\r
+      },\r
+      { title: "<span style=\"font-size: 8pt;\">{{ lbl.weektotal }}</span>",field: "weeksum",headerSort: false,width:70,formatter:boldFormatter, frozen: true,tooltip:false},\r
+      \r
+      //{ title: "{{ lbl.monthtotal }}",field: "monthsum",headerSort: false,width:100,formatter:boldFormatter, frozen: true,tooltip:false},\r
       { title: "<span id=\"mondate\">DD.MM.YYYY</span>",\r
         columns: [\r
           {title:'<span class="icon icon-timeentry"></span>',field:"monentry",headerSort: false,width:60,tooltip:true},\r
index bbd63da..5a47257 100644 (file)
@@ -3,7 +3,7 @@
 
 
 
-let preferences= {"lang":"fr"};
+let pref= {"lang":"fr"};
 
 let app = {
     currentview: null,
@@ -58,6 +58,9 @@ let app = {
 }
 
 document.addEventListener("DOMContentLoaded", function() {
+  if (!pref.companyid){
+    app.viewpanel('trackerconfig');
+  }
   //preferences = usersystem.getPref('hourtrax');
   //console.log("Content loaded",preferences);
   //db.connect(usersystem.dataPath() + preferences.db);
diff --git a/app/tmpl/module/timetrack/panels/config.html b/app/tmpl/module/timetrack/panels/config.html
new file mode 100644 (file)
index 0000000..2683efe
--- /dev/null
@@ -0,0 +1,26 @@
+<div class="display-container panel" id="pnl_trackerconfig" style="height: 100vh;">
+  <div class="bar toolbar">
+   <div class="bar-item PageHeadTitle lbl" style="font-size: 12pt;" data-lbl="msgchoosename">Settings!</div>
+   <!-- <button class="bar-item toolbarbtn right" ></button> -->
+   <button class="bar-item toolbarbtn right" onclick="timeclock.loadscreensaver();return false;"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
+   <!-- <button class="bar-item toolbarbtn right" onclick="timeclock.nextusers();return false;" style="display: none;" id="mnubtn_usersnext"><span class="icon icon-next" style="font-size: 32px;"></span></button>
+   <button class="bar-item toolbarbtn right" onclick="timeclock.prevusers();return false;" style="display: none;" id="mnubtn_usersprev"><span class="icon icon-back" style="font-size: 32px;"></span></button> -->
+   <!-- <button class="bar-item toolbarbtn right" onclick="timeclock.loadadmin();return false;"  id="mnubtn_admin"><span class="icon icon-settings" style="font-size: 32px;"></span></button> -->
+ </div>
+ <form id="frm_trackerconfig">
+ <div class="container center">
+   <div class="container">
+    <label class="label" for="trackerconfig_companyid">Company ID</label>
+    <input class="input border text data_trackerconfig " data-column="companyid" data-id="" data-table="table" id="trackerconfig_companyid"  onblur="" type="text">
+   </div>
+   <div class="container">
+    <label class="label" for="trackerconfig_hostname">Host-Name</label>
+    <input class="input border text data_hostname " data-column="hostname" data-id="" data-table="table" id="trackerconfig_hostname"  onblur="" type="text">
+   </div>
+   <div class="container">
+   
+    <button class="btn toolbarbtn"><span class="icon icon-save"></span>Save</button>
+   </div>
+ </div>
+</form>
+</div>
\ No newline at end of file
diff --git a/app/tmpl/module/timetrack/panels/pincode.html b/app/tmpl/module/timetrack/panels/pincode.html
new file mode 100644 (file)
index 0000000..9a1deb1
--- /dev/null
@@ -0,0 +1,37 @@
+<!-- Pincode Identification-->
+<div class="display-container panel"  id="pnl_pincode" style="display: none;">
+  <div class="bar toolbar">
+    <div class="bar-item PageHeadTitle lbl" data-lbl="enterpincode" style="font-size: 12pt;">PinCode </div>
+    <div class="bar-item PageHeadTitle" id="lbl_username"></div>
+    <button class="bar-item toolbarbtn right" style="width: 85px;"></button>
+    <button class="bar-item toolbarbtn right" onclick="timeclock.loadusers();"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
+  </div>
+  <div class="center">
+  <div class="bar">
+    <input type="password" class="bar-item input center xlarge border" value="" id="pincode" placeholder="Code" readonly onclick="timeclock.selectfield('pincode','pincode2');"/>
+    <input type="password" class="bar-item input center xlarge border" value="" id="pincode2"  placeholder="répéter Code" readonly onclick="timeclock.selectfield('pincode2','pincode');"/>
+  </div></div>
+  <div id="keypad">
+  <div class="row center">
+    <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('1');">1</button> 
+    <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('2');">2</button> 
+    <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('3');">3</button>
+  </div>
+  <div class="row center">
+    <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('4');">4</button> 
+    <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('5');">5</button> 
+    <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('6');">6</button>
+  </div>
+  <div class="row center">
+    <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('7');">7</button> 
+    <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('8');">8</button> 
+    <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('9');">9</button> 
+  </div>
+  <div class="row center">
+    <button class="btnkeypad button border s4 light-grey text-red xlarge" style="height:85px; width:85px;" onclick="timeclock.clearUserPin();">COR</button> 
+    <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('0');">0</button> 
+    <button class="btnkeypad button border s4 light-grey text-green xlarge" style="height:85px; width:85px;" onclick="timeclock.checkuserpin();">OK</button>
+  </div>
+  </div>
+  <div class="container" id="pincodemsg"></div>
+</div>
\ No newline at end of file
diff --git a/app/tmpl/module/timetrack/panels/scanbadge.html b/app/tmpl/module/timetrack/panels/scanbadge.html
new file mode 100644 (file)
index 0000000..20baff5
--- /dev/null
@@ -0,0 +1,16 @@
+<!-- Panel Users -->
+<div class="display-container panel" id="pnl_users" style="height: 100vh;">
+  <div class="bar toolbar">
+   <div class="bar-item PageHeadTitle lbl" style="font-size: 12pt;" data-lbl="msgchoosename">Scan badge!</div>
+   <button class="bar-item toolbarbtn right" style="width: 85px;"></button>
+   <button class="bar-item toolbarbtn right" onclick="timeclock.loadscreensaver();return false;"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
+   <!-- <button class="bar-item toolbarbtn right" onclick="timeclock.nextusers();return false;" style="display: none;" id="mnubtn_usersnext"><span class="icon icon-next" style="font-size: 32px;"></span></button>
+   <button class="bar-item toolbarbtn right" onclick="timeclock.prevusers();return false;" style="display: none;" id="mnubtn_usersprev"><span class="icon icon-back" style="font-size: 32px;"></span></button> -->
+   <!-- <button class="bar-item toolbarbtn right" onclick="timeclock.loadadmin();return false;"  id="mnubtn_admin"><span class="icon icon-settings" style="font-size: 32px;"></span></button> -->
+ </div>
+ <br>
+ <div class="container center">
+   <img src="img/nfc-scan.svg" style="height: 300px;" /><br/>
+   <button class="button moduletoolbar xxlarge block" id="btn_haspincode" onclick="timeclock.loaduserlist();" style="display: none;">PinCode</button>
+ </div>
+</div>
\ No newline at end of file
diff --git a/app/tmpl/module/timetrack/panels/screensaver.html b/app/tmpl/module/timetrack/panels/screensaver.html
new file mode 100644 (file)
index 0000000..333f441
--- /dev/null
@@ -0,0 +1,5 @@
+<!-- Panel Screen Saver -->
+<div class="display-container panel center" id="pnl_screensaver" onclick="timeclock.loadusers();return false;" style="background-color: #000; height: 100vh; ">
+  <img src="{{abspath}}img/logo_512.png" style="margin-top: 100px;max-width: 512px;width: 80%;"><br>
+  <img src="{{abspath}}img/touch.svg" style="height: 100px;">
+</div>
\ No newline at end of file
diff --git a/app/tmpl/module/timetrack/panels/statusmsg.html b/app/tmpl/module/timetrack/panels/statusmsg.html
new file mode 100644 (file)
index 0000000..e688cd2
--- /dev/null
@@ -0,0 +1,3 @@
+<div class="display-container panel center" id="pnl_status" style="height: 470px;display: none;">
+  <div id="statusmsg" class="textblack xlarge lbl" data-lbl="msgtrackregistered" style=" margin: auto; margin-top: 100px; width: 600px; font-size: 20px;" >Merci,<br/> le pointage a été enregistré!</div>
+</div>
\ No newline at end of file
diff --git a/app/tmpl/module/timetrack/panels/timetrack.html b/app/tmpl/module/timetrack/panels/timetrack.html
new file mode 100644 (file)
index 0000000..21e19c9
--- /dev/null
@@ -0,0 +1,51 @@
+<div class="display-container panel" id="pnl_timetrack" style="display: none;">
+  <div class="bar toolbar">
+    <div class="bar-item PageHeadTitle lbl" style="font-size: 12pt;" data-lbl="tracking">Pointage</div>
+    <button class="bar-item toolbarbtn right" style="width: 85px;"></button>
+    <button class="bar-item toolbarbtn right" onclick="timeclock.loadscreensaver();"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
+  </div>
+  <div class="container center" >
+    <div>
+    <label class="label xlarge"><span id="username"></span></label>
+  </div>
+        <div class="row">
+          <div class="container half" style="margin-top: 30px;">
+          <div class="container margin">
+              <button class="col button xxlarge moduletoolbar lbl" id="btntrackin" data-lbl="trackin" onclick="timeclock.setTrack('in');">Entrée</button>
+          </div>
+          <div class="container margin" style="margin-top: 100px;">
+              <button class="col button xxlarge moduletoolbar lbl" id="btntrackout"  data-lbl="trackout" onclick="timeclock.setTrack('out');">Sortie</button>
+          </div>
+          <!--<div class="container margin" style="display: none;">
+              <button class="col button xlarge moduletoolbar lbl" id="btntrackinpause" onclick="timeclock.setTrackPause('in');" data-lbl="startpause">Début Pause</button>
+          </div>
+          <div class="container margin" style="display: none;" style="margin-top: 100px;">
+              <button class="col button xlarge moduletoolbar lbl" id="btntrackoutpause" onclick="timeclock.setTrackPause('out');" data-lbl="endpause">Fin Pause<br/>Ende Pause</button>
+          </div>-->
+          </div>
+          <div class="container half">
+            <table>
+              <thead>
+                <tr><th colsspan="2">Aktueller Monat (h)</th></tr>
+              </thead>
+              <tbody>
+                <tr><th>Gesamt</th><td>000:00</td></tr>
+                <tr><th>Gebucht</th><td>000:00</td></tr>
+                <tr><th>Diff</th><td>000:00</td></tr>
+              </tbody>
+            </table>
+            <table>
+              <thead>
+                <tr><th colsspan="2">Aktuelle Periode (h)</th></tr>
+              </thead>
+              <tbody>
+                <tr><th>Gesamt</th><td>000:00</td></tr>
+                <tr><th>Gebucht</th><td>000:00</td></tr>
+                <tr><th>Diff</th><td>000:00</td></tr>
+              </tbody>
+            </table>
+          </div>
+         
+        </div>
+</div>
+</div>
\ No newline at end of file
diff --git a/app/tmpl/module/timetrack/panels/userlist.html b/app/tmpl/module/timetrack/panels/userlist.html
new file mode 100644 (file)
index 0000000..127024e
--- /dev/null
@@ -0,0 +1,12 @@
+<!-- Panel Time Track -->
+<div class="display-container panel" id="pnl_userlist">
+  <div class="bar toolbar">
+   <div class="bar-item PageHeadTitle lbl" style="font-size: 12pt;" data-lbl="msgusername">Sélectionner votre nom!</div>
+   <button class="bar-item toolbarbtn right" style="width: 85px;"></button>
+   <button class="bar-item toolbarbtn right" onclick="timeclock.loadscreensaver();"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
+   <button class="bar-item toolbarbtn right" onclick="timeclock.nextusers();return false;" style="display: none;" id="mnubtn_usersnext"><span class="icon icon-next" style="font-size: 32px;"></span></button>
+   <button class="bar-item toolbarbtn right" onclick="timeclock.prevusers();return false;" style="display: none;" id="mnubtn_usersprev"><span class="icon icon-back" style="font-size: 32px;"></span></button>
+   <button class="bar-item toolbarbtn right" onclick="timeclock.loadadmin();return false;"  id="mnubtn_admin"><span class="icon icon-settings" style="font-size: 32px;"></span></button>
+ </div>
+    <div id="userlists"></div>
+</div>
\ No newline at end of file
diff --git a/app/tmpl/module/timetrack/timeclock.js b/app/tmpl/module/timetrack/timeclock.js
new file mode 100644 (file)
index 0000000..1c3d1cf
--- /dev/null
@@ -0,0 +1,360 @@
+
+let timeclock = {
+  current_index: null,
+  current_staff_id: null,
+  currentpanel: null,
+  currentwday: null,
+  tbl: null,
+  lasttrack: null,
+  interval: null,
+  lang: pref.lang,
+  userdata: [],
+  weekdays:['sun','mon','tue','wed','thu','fri','sat'],
+  currentuserlist: 1,
+  intervaltime: pref.timeout,
+  loadscreensaver: function(){
+    timeclock.lang = "fr";
+    ////console.log("Load screensaver");
+    timeclock.currentpanel = 'screensaver';
+    timeclock.currentuser= null;
+    //shell.nfcunload();
+    timeclock.stopCheckIdle();
+    app.viewpanel('screensaver');
+    return false;
+  },
+  loadstatus: function(msg){
+    if (msg == null){
+      msg = '';
+    }
+    document.getElementById("statusmsg").innerHTML=msg;
+    app.viewpanel('status');
+    setTimeout('timeclock.loadscreensaver()',3000);
+  },
+  loadusers: function(){
+    ////console.log("Load users");
+    timeclock.currentpanel = 'users';
+    timeclock.current_staff_id=null;
+    
+    if (pref.pinview == "1"){
+      document.getElementById("btn_haspincode").style.display = 'block';
+    } else {
+      document.getElementById("btn_haspincode").style.display = 'none';
+    }
+    //shell.nfcwaitbadge();
+    app.viewpanel('users');
+    timeclock.startCheckIdle();
+    return false;
+  },
+  loaduserlist: function(){
+    timeclock.stopCheckIdle();
+    //shell.nfcunload();
+    let ulist = "";
+    db.queryarray("select * from (select st.id,coalesce(st.prename,'') as prename,coalesce(st.surname,'') as surname, count(fp.id) as badgecount,st.pin, fp.id as nfcuid from staff st left join badges fp on (st.id=fp.id_staff) group by st.id order by st.surname,st.prename) where badgecount > 0 order by surname,prename;").then(data => {
+      ////console.log("userdata",data);
+      timeclock.userdata = data;
+      if (timeclock.userdata.length > 24){
+        document.getElementById("mnubtn_usersprev").style.display = 'block';
+        document.getElementById("mnubtn_usersnext").style.display = 'block';
+      }
+      ulistnum = 1;
+      for (i=0; i < timeclock.userdata.length;i++){
+        ulist += '<button class="button col m3 moduletoolbar border" onclick="timeclock.loadpincode(\''+ i+'\');return false;"><span class="large">'+timeclock.userdata[i].surname+'</span><br/>' + timeclock.userdata[i].prename +'</button>';
+        if (i == 23) {ulistnum++;ulist += '</div><div class="row userlistdata" id="userlist'+ ulistnum+'" style="display: none;height: 400px;">';}
+      }
+      ulist += '</div>';
+      document.getElementById('userlists').innerHTML=ulist;
+      app.viewpanel('userlist');
+    });
+    return false;
+  },
+  
+  prevusers: function(){
+    let ulx = document.getElementsByClassName("userlistdata");
+    ////console.log(ulx);
+    if (timeclock.currentuserlist == 1 ){ return false;}
+    for (u=0;u<ulx.length;u++){
+      //console.log(u);
+      ulx[u].style.display = 'none';
+    }
+    timeclock.currentuserlist=timeclock.currentuserlist-1;
+    document.getElementById('userlist' +timeclock.currentuserlist).style.display = 'block';
+    return false;
+  },
+  nextusers: function(){
+    let ulx = document.getElementsByClassName("userlistdata");
+    //console.log(ulx.length);
+    if (timeclock.currentuserlist == ulx.length ){ return false;}
+    for (u=0;u<ulx.length;u++){
+      //console.log(u);
+      ulx[u].style.display = 'none';
+    }
+    timeclock.currentuserlist=timeclock.currentuserlist+1;
+    document.getElementById('userlist' +timeclock.currentuserlist).style.display = 'block';
+    return false;
+  },
+  loadadmin: function(){
+    timeclock.stopCheckIdle();
+    timeclock.loadpincode(null);
+  },
+  loadbadges: function(){
+    timeclock.stopCheckIdle();
+    //shell.nfcunload();
+    app.viewpanel('badges');
+    
+    db.queryarray("select * from (select st.id,coalesce(st.prename,'') as prename,coalesce(st.surname,'') as surname,st.pin, count(fp.id) as badgecount, fp.id as nfcuid from staff st left join badges fp on (st.id=fp.id_staff) group by st.id order by st.surname,st.prename) where badgecount > 0 order by surname,prename;").then(data => {
+      
+      let ulist = document.getElementById("userlistbadge");
+      ulist.innerHTML ='';
+      for (i=0; i < data.length;i++){
+        var uadata = '<li class="display-container xlarge">'+
+        '<span>'+ data[i].surname + ' ' + data[i].prename +'<br/>('+data[i].nfcuid+')</span>';
+        //console.log("has pin:",data[i].pin,pref.pinview);
+        if ((pref.pinview == "1") && (data[i].pin != null)){
+          //console.log("set pin button!");
+          uadata += '<span onclick="timeclock.cleanpincode(\''+ data[i].id + '\');" class="button display-left2 xxlarge border red" style="font-weight: bold; width:120px;">&times;Pin</span>';
+        }
+        uadata += '<span onclick="timeclock.removebadge(\''+ data[i].id + '\');" class="button display-left xxlarge border red" style="font-weight: bold; width:120px;">&times;</span>'+
+        '<span onclick="timeclock.removebadge(\''+ data[i].id + '\');" class="button display-right xxlarge border red" style="font-weight: bold; width:120px;">&times;</span>'+
+        '</li>';
+        ulist.insertAdjacentHTML("beforeend",uadata);
+      }
+    });
+  },
+  cleanpincode: function(iduser){
+    db.exec("UPDATE staff set pin=null where id='"+iduser+"'").then(data => {
+      timeclock.loadbadges();
+    });
+  },
+  addbadge: function(){
+    document.getElementById("addbagescanimg").style.display ='block';
+    document.getElementById("addusertobadge").style.display ='none';
+    //.nfcimportid();
+    app.viewpanel('addbadge');
+  },
+  setbadgetouser: function(nuid){
+    db.queryarray("select * from (select st.id,coalesce(st.prename,'') as prename,coalesce(st.surname,'') as surname, count(fp.id) as badgecount from staff st left join badges fp on (st.id=fp.id_staff) group by st.id order by st.surname,st.prename) where badgecount == 0 order by surname,prename;").then(data => {
+      document.getElementById("addbagescanimg").style.display ='none';
+      document.getElementById("addusertobadge").style.display ='block';
+      let ulist = document.getElementById("userlistnobadge");
+      ulist.innerHTML ='';
+    for (i=0; i < data.length;i++){
+        ulist.insertAdjacentHTML("beforeend",'<li class="display-container xxlarge">'+ data[i].surname + ' ' + data[i].prename +'<span onclick="timeclock.savebadge(\''+ nuid +'\',\''+ data[i].id + '\');" class="button display-left xxlarge border green" style="font-weight: bold;width:120px;">&check;</span><span onclick="timeclock.savebadge(\''+ nuid +'\',\''+ data[i].id + '\');" class="button display-right xxlarge border green" style="font-weight: bold;width:120px;">&check;</span></li>');  
+      }
+    });
+  },
+  savebadge: function(nuid,staffid){
+    let sql = "REPLACE INTO badges (id,id_staff,type) VALUES ('" +nuid+"','" +staffid+"','nfc');";
+    db.exec(sql).then(data => {
+      syncdata.sendnfcuid(staffid);
+      app.snackbar('Badge Added','green');
+      timeclock.loadbadges();
+    }).catch(e => {
+      app.snackbar('error on saving','red');
+      timeclock.loadbadges();}
+    );
+  },
+  removebadge: function(staffid){
+    let sql = "DELETE FROM badges where id_staff='" +staffid+"';";
+    db.exec(sql).then(data => {
+      syncdata.sendnfcuid(staffid);
+      app.snackbar('badge deleted!','green');
+      timeclock.loadbadges();
+    }).catch(e => {
+      app.snackbar('error on saving','red');
+      timeclock.loadbadges();}
+    );
+  },
+  loadpincode: function(uindex){
+      
+      timeclock.current_index = uindex;
+
+      //console.log("Current Index",timeclock.current_index);
+      //console.log("Current Userdata",timeclock.userdata[timeclock.current_index]);
+      timeclock.selectfield('pincode','pincode2');
+      document.getElementById("pincode").value="";
+      document.getElementById("pincode2").value="";
+      if (timeclock.current_index == null){
+        document.getElementById("lbl_username").innerHTML = "Administrator";
+        //load admin
+        document.getElementById("pincode2").style.display="none";
+      } else {
+        //load user
+        document.getElementById("lbl_username").innerHTML = timeclock.userdata[timeclock.current_index].surname + " " + timeclock.userdata[timeclock.current_index].prename;
+        if (timeclock.userdata[timeclock.current_index].pin == null){
+          document.getElementById("pincode2").style.display="inline";
+        }  else {
+          document.getElementById("pincode2").style.display="none";
+        }
+      }
+      
+      timeclock.startCheckIdle();
+      app.viewpanel('pincode');
+    return false;
+  },
+  checkuserpin: function(){
+    timeclock.stopCheckIdle();
+    let pcode = document.getElementById("pincode").value;
+    //console.log(pcode +" = " + pref.pincode );
+    //console.log('CIndex',timeclock.current_index);
+    if (document.getElementById("pincode2").style.display == 'inline'){
+      if (document.getElementById("pincode2").value != document.getElementById("pincode").value){
+        document.getElementById("pincode").value = "";
+        document.getElementById("pincode2").value = "";
+        timeclock.startCheckIdle();
+        app.snackbar(lang['fr'].pincode_notsame,'red');
+        return false;
+      } else {
+        db.exec("UPDATE staff SET pin='"+document.getElementById("pincode").value+ "' where id='"+timeclock.userdata[timeclock.current_index].id+"';").then(data => {
+          timeclock.current_staff_id = timeclock.userdata[timeclock.current_index].id;
+          timeclock.loadtimetrack();
+        }).catch(e => { app.snackbar("Erreur de sauvegarde!",'red');});
+        
+      }
+    }
+    else if ((timeclock.current_index == null) &&  (pcode == pref.pincode)){
+      ////console.log("goto badge registration");
+      app.viewpanel("admin");
+    } else if ((timeclock.current_index != null) && (timeclock.userdata[timeclock.current_index].pin = document.getElementById("pincode").value)){
+      timeclock.current_staff_id = timeclock.userdata[timeclock.current_index].id;
+      timeclock.loadtimetrack();
+    }
+    else {
+      document.getElementById("pincode").value = "";
+      timeclock.startCheckIdle();
+      app.snackbar(lang['fr'].pinerrormsg,'red');
+    }
+    return false;
+  },
+  selectfield: function(fid,fid2){
+    timeclock.pinfield = fid;
+    document.getElementById(fid).style.backgroundColor = 'yellow';
+    document.getElementById(fid2).style.backgroundColor = 'white';
+  },
+  loadtimetrack: function(){
+    timeclock.stopCheckIdle();
+    document.getElementById("btntrackin").disabled = true;
+    document.getElementById("btntrackout").disabled = true;
+    var sql = "select tt.id,st.id as id_staff,st.lang,st.isenabled,date('now','localtime') as today,strftime('%w',date('now','localtime')) as weekday,date('now','-1 day','localtime') as yesterday,strftime('%H:%M',time('now','localtime')) as timenow,st.prename,st.surname,st.monstart,st.monend,st.tuestart,st.tueend,st.wedstart,st.wedend,st.thustart,st.thuend,st.fristart,st.friend,st.satstart,st.satend,st.sunstart,st.sunend,tt.daydate,tt.stamp_in,tt.stamp_out from staff st left join timetracks tt on (st.id=tt.id_staff) where st.id='" + timeclock.current_staff_id + "' or tt.stamp_in=(select max(stamp_in) as stamp_in from timetracks where id_staff='" + timeclock.current_staff_id + "') order by tt.stamp_in DESC LIMIT 1;";
+    db.query(sql).then(trdata => {
+      //console.log("userdata",trdata);
+      
+      let ulang = timeclock.lang;
+      if (trdata.lang != null){
+        ulang = trdata.lang;
+        timeclock.lang=trdata.lang;
+      }
+      if (trdata.isenabled != '1'){
+        app.snackbar(lang[ulang].badge_notauthorized,'red');
+        timeclock.startCheckIdle();
+        return false;
+      } else {
+        app.setlanguage(ulang);
+      }
+      let today = trdata.today;
+      let yesterday = trdata.yesterday;
+      let hournow = trdata.timenow;
+      let weekday = timeclock.weekdays[trdata.weekday];
+      let regmsg = "";
+      if (trdata){
+         timeclock.lasttrack = trdata;
+        
+      }
+      let notimeauth = false;
+      if ((trdata[weekday + "start"] != null) || (trdata[weekday + "end"] != null)){
+      
+        if ((trdata[weekday + "start"] > hournow) || (trdata[weekday + "end"] < hournow)){ 
+          notimeauth =true;
+        }
+        if (trdata[weekday + "start"] != null){
+          regmsg += lang[ulang].msgstarttime+"<br>";
+        }
+        if (trdata[weekday + "end"] != null)   {
+          regmsg += lang[ulang].msgendtime+"<br>";
+        }
+      }
+      if (notimeauth == true){
+        regmsg = regmsg.replace(/%%daystarttime%%/g,trdata[weekday + "start"]).replace(/%%dayendtime%%/g,trdata[weekday + "end"]);
+        timeclock.loadstatus(regmsg);
+        return false;
+      }
+      document.getElementById("username").innerHTML = trdata.surname+" " + trdata.prename;
+      if (trdata.stamp_in != null && trdata.stamp_out == null){
+        if (((trdata.daydate == yesterday) && (hournow < "06:00:00")) || (trdata.daydate == today)){
+          document.getElementById("btntrackout").disabled = false;
+        } else {
+          document.getElementById("btntrackin").disabled = false;
+        }
+      } else {
+        document.getElementById("btntrackin").disabled = false;
+      }
+      app.viewpanel('timetrack');
+      timeclock.startCheckIdle();
+    }).catch(e => {
+      //console.log("SQL error: " + e);
+      document.getElementById("btntrackin").disabled = false;
+      timeclock.startCheckIdle();
+      return false;
+    });
+     
+  },
+  setTrack:function (direction){
+    let sql = "";
+    db.newuuid().then(newid => {
+        var syncid=newid.id;
+        if (direction == 'in'){
+          sql = "INSERT INTO timetracks (id,id_staff,daydate, stamp_in) VALUES ('"+ newid.id+"','"+timeclock.current_staff_id+"',date('now','localtime'),datetime('now','localtime'));";
+        } else if (direction == 'out'){
+          syncid=timeclock.lasttrack.id;
+          sql = "UPDATE timetracks SET stamp_out=datetime('now','localtime') where id_staff='"+ timeclock.current_staff_id+"' and id='"+timeclock.lasttrack.id+"';";
+        }
+        
+        ////console.log("SET TrackSQL",sql);
+        db.exec(sql).then(data => {
+          //console.log("LANG:" + timeclock.lang);
+          var msgreg = lang[timeclock.lang].msgtrackregistered;
+          timeclock.loadstatus(msgreg);
+          syncdata.track(syncid);
+        }).catch(e => {
+          app.snackbar('ERROR on saving (1)!','red');
+        });
+        
+    }).catch(e => {
+      app.snackbar('ERROR on saving (2)!','red');
+    });
+      
+    
+  
+},
+  checkIdle: function (){
+  if (timeclock.intervaltime <= 0){
+    timeclock.loadscreensaver();
+  } else {
+    document.getElementById("timer").innerHTML = timeclock.intervaltime;
+    timeclock.intervaltime = timeclock.intervaltime - 1; 
+  }
+},
+startCheckIdle: function (){
+   window.clearInterval(timeclock.interval);
+   timeclock.intervaltime = pref.timeout;
+   document.getElementById("timer").style.display = 'block';
+   
+   timeclock.interval = window.setInterval("timeclock.checkIdle()",1000);
+  
+}, 
+stopCheckIdle: function (){
+  document.getElementById("timer").style.display = 'none';
+  window.clearInterval(timeclock.interval);
+},
+setPinValue: function(key){
+  var cobj = document.getElementById(timeclock.pinfield);
+  var cpin = cobj.value;
+  cobj.value = cpin + key;
+  return false;
+},
+clearUserPin: function(){
+  document.getElementById(timeclock.pinfield).value = "";
+  return false;
+}
+
+
+}
index d245671..2c1523f 100644 (file)
@@ -7,74 +7,17 @@
   <link href="{{abspath}}css/theme.css?v=2" rel="stylesheet">
   <title>POT - TimeTrack</title>
 </head>
-<body >
-  <div class="display-container" style=" overflow: hidden; background-color: #fff;">
-    <!-- Panel Screen Saver -->
-    <div class="display-container panel center" id="pnl_screensaver" onclick="timeclock.loadusers();return false;" style="background-color: #000; height: 100vh; ">
-          <img src="{{abspath}}img/logo_512.png" style="margin-top: 100px;max-width: 512px;width: 80%;"><br>
-          <img src="{{abspath}}img/touch.svg" style="height: 100px;">
-    </div>
-    <!-- Panel Users -->
-    <div class="display-container panel" id="pnl_users" style="height: 100vh;display: none;">
-         <div class="bar toolbar">
-          <div class="bar-item PageHeadTitle lbl" style="font-size: 12pt;" data-lbl="msgchoosename">Scan badge!</div>
-          <button class="bar-item toolbarbtn right" style="width: 85px;"></button>
-          <button class="bar-item toolbarbtn right" onclick="timeclock.loadscreensaver();return false;"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
-          <!-- <button class="bar-item toolbarbtn right" onclick="timeclock.nextusers();return false;" style="display: none;" id="mnubtn_usersnext"><span class="icon icon-next" style="font-size: 32px;"></span></button>
-          <button class="bar-item toolbarbtn right" onclick="timeclock.prevusers();return false;" style="display: none;" id="mnubtn_usersprev"><span class="icon icon-back" style="font-size: 32px;"></span></button> -->
-          <!-- <button class="bar-item toolbarbtn right" onclick="timeclock.loadadmin();return false;"  id="mnubtn_admin"><span class="icon icon-settings" style="font-size: 32px;"></span></button> -->
-        </div>
-        <br>
-        <div class="container center">
-          <img src="img/nfc-scan.svg" style="height: 300px;" /><br/>
-          <button class="button moduletoolbar xxlarge block" id="btn_haspincode" onclick="timeclock.loaduserlist();" style="display: none;">PinCode</button>
-        </div>
-    </div>
-    <!-- Panel Time Track -->
-    <div class="display-container panel" id="pnl_userlist" style="display: none;">
-      <div class="bar toolbar">
-       <div class="bar-item PageHeadTitle lbl" style="font-size: 12pt;" data-lbl="msgusername">Sélectionner votre nom!</div>
-       <button class="bar-item toolbarbtn right" style="width: 85px;"></button>
-       <button class="bar-item toolbarbtn right" onclick="timeclock.loadscreensaver();"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
-       <button class="bar-item toolbarbtn right" onclick="timeclock.nextusers();return false;" style="display: none;" id="mnubtn_usersnext"><span class="icon icon-next" style="font-size: 32px;"></span></button>
-       <button class="bar-item toolbarbtn right" onclick="timeclock.prevusers();return false;" style="display: none;" id="mnubtn_usersprev"><span class="icon icon-back" style="font-size: 32px;"></span></button>
-       <button class="bar-item toolbarbtn right" onclick="timeclock.loadadmin();return false;"  id="mnubtn_admin"><span class="icon icon-settings" style="font-size: 32px;"></span></button>
-     </div>
-        <div id="userlists"></div>
-    </div>
-    <div class="display-container panel" id="pnl_timetrack" style="display: none;">
-      <div class="bar toolbar">
-        <div class="bar-item PageHeadTitle lbl" style="font-size: 12pt;" data-lbl="tracking">Pointage</div>
-        <button class="bar-item toolbarbtn right" style="width: 85px;"></button>
-        <button class="bar-item toolbarbtn right" onclick="timeclock.loadscreensaver();"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
-      </div>
-      <div class="container center" >
-        <div>
-        <label class="label xlarge"><span id="username"></span></label>
-      </div>
-            <div class="row">
-              <div class="container col" style="margin-top: 30px;">
-              <div class="container margin">
-                  <button class="col button xxlarge moduletoolbar lbl" id="btntrackin" data-lbl="trackin" onclick="timeclock.setTrack('in');">Entrée</button>
-              </div>
-              <div class="container margin" style="margin-top: 100px;">
-                  <button class="col button xxlarge moduletoolbar lbl" id="btntrackout"  data-lbl="trackout" onclick="timeclock.setTrack('out');">Sortie</button>
-              </div>
-              <!--<div class="container margin" style="display: none;">
-                  <button class="col button xlarge moduletoolbar lbl" id="btntrackinpause" onclick="timeclock.setTrackPause('in');" data-lbl="startpause">Début Pause</button>
-              </div>
-              <div class="container margin" style="display: none;" style="margin-top: 100px;">
-                  <button class="col button xlarge moduletoolbar lbl" id="btntrackoutpause" onclick="timeclock.setTrackPause('out');" data-lbl="endpause">Fin Pause<br/>Ende Pause</button>
-              </div>-->
-              </div>
-             
-            </div>
-    </div>
-    </div>
+<body style="background-color: #ff0";>
+  <div class="display-container border" style="height: 470px!important; width: 800px!important; overflow: hidden; background-color: #fff;">
+    {{ include("module/timetrack/panels/config.html")}}
+    {{ include("module/timetrack/panels/screensaver.html")}}
+    {{ include("module/timetrack/panels/scanbadge.html")}}
+    {{ include("module/timetrack/panels/userlist.html")}}
+    {{ include("module/timetrack/panels/timetrack.html")}}
+    {{ include("module/timetrack/panels/statusmsg.html")}}
+    {{ include("module/timetrack/panels/pincode.html")}}
     <!-- Panel Status Msg -->
-    <div class="display-container panel center" id="pnl_status" style="height: 470px;display: none;">
-      <div id="statusmsg" class="textblack xlarge lbl" data-lbl="msgtrackregistered" style=" margin: auto; margin-top: 100px; width: 600px; font-size: 20px;" >Merci,<br/> le pointage a été enregistré!</div>
-    </div>
+    
 
     <!-- <div class="display-container panel" id="pnl_admin" style="display: none;">
       <div class="bar toolbar">
           </ul>
         </div>
   </div> -->
-  <!-- Pincode Identification-->
-  <div class="display-container panel"  id="pnl_pincode" style="display: none;">
-    <div class="bar toolbar">
-      <div class="bar-item PageHeadTitle lbl" data-lbl="enterpincode" style="font-size: 12pt;">PinCode </div>
-      <div class="bar-item PageHeadTitle" id="lbl_username"></div>
-      <button class="bar-item toolbarbtn right" style="width: 85px;"></button>
-      <button class="bar-item toolbarbtn right" onclick="timeclock.loadusers();"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
-    </div>
-    <div class="center">
-    <div class="bar">
-      <input type="password" class="bar-item input center xlarge border" value="" id="pincode" placeholder="Code" readonly onclick="timeclock.selectfield('pincode','pincode2');"/>
-      <input type="password" class="bar-item input center xlarge border" value="" id="pincode2"  placeholder="répéter Code" readonly onclick="timeclock.selectfield('pincode2','pincode');"/>
-    </div></div>
-    <div id="keypad">
-    <div class="row center">
-      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('1');">1</button> 
-      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('2');">2</button> 
-      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('3');">3</button>
-    </div>
-    <div class="row center">
-      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('4');">4</button> 
-      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('5');">5</button> 
-      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('6');">6</button>
-    </div>
-    <div class="row center">
-      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('7');">7</button> 
-      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('8');">8</button> 
-      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('9');">9</button> 
-    </div>
-    <div class="row center">
-      <button class="btnkeypad button border s4 light-grey text-red xlarge" style="height:85px; width:85px;" onclick="timeclock.clearUserPin();">COR</button> 
-      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('0');">0</button> 
-      <button class="btnkeypad button border s4 light-grey text-green xlarge" style="height:85px; width:85px;" onclick="timeclock.checkuserpin();">OK</button>
-    </div>
-    </div>
-    <div class="container" id="pincodemsg"></div>
-  </div>
+  
   <div id="snackbar"></div>
   <div class="xxlarge timer text-white"  id="timer"></div>
   <!-- <script src="{{abspath}}timetrack/renderer.js?v=1" type="text/javascript"></script> -->
   <!-- <script src="{{abspath}}timetrack/shell.js?v=1" type="text/javascript"></script> -->
   <!-- <script src="{{abspath}}timetrack/sync.js?v=1" type="text/javascript"></script>   -->
   <script src="{{abspath}}vendors/moment/moment.min.js?v=1" type="text/javascript"></script> 
-  <script src="{{abspath}}timetrack/timeclock.nfc.js?v=1" type="text/javascript"></script>
+  <script src="{{abspath}}timetrack/timeclock.js?v=1" type="text/javascript"></script>
 </body>
 </html>
diff --git a/icons/Accounting_01.svg b/icons/Accounting_01.svg
new file mode 100644 (file)
index 0000000..bd28c94
--- /dev/null
@@ -0,0 +1,4 @@
+
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="50px" height="50px" viewBox="0 0 47.58 64"> 
+<path d="M9.3809996,50.26L38.193,50.26 38.193,54.681002 9.3809996,54.681002z M8.6139994,28.488002L22.638218,28.488002 22.638218,29.292206C20.049345,29.801009 18.547602,31.471219 18.547601,33.600231 18.547602,35.948645 20.316952,37.159152 22.906526,38.028458 24.695377,38.633861 25.468999,39.215465 25.468999,40.13137 25.468999,41.100676 24.526872,41.632978 23.147933,41.632978 21.573188,41.632978 20.145147,41.123376 19.130018,40.568072L18.405398,43.398889C19.324724,43.931492,20.895969,44.364095,22.519615,44.440195L22.519615,45.247 8.6139994,45.247z M25.012598,28.488001L38.963999,28.488001 38.963999,45.243 24.889792,45.243 24.889792,44.267833C27.671694,43.785345 29.195349,41.9434 29.195349,39.794065 29.195349,37.61513 28.034808,36.285267 25.154702,35.270199 23.097528,34.493122 22.250999,33.986938 22.250999,33.186959 22.250999,32.512281 22.760617,31.834201 24.330973,31.834201 26.074036,31.834201 27.184776,32.390486 27.816198,32.654576L28.518124,29.920358C27.720696,29.536771,26.632957,29.195579,25.012598,29.122883z M9.3809996,18.816001L38.193,18.816001 38.193,23.241001 9.3809996,23.241001z M13.124999,9.3150005L34.452999,9.3150005 34.452999,13.737 13.124999,13.737z M3.2803936,3.2804012L3.2803936,60.7162 44.294209,60.7162 44.297607,60.7162 44.297607,3.2804012z M0,0L47.578001,0 47.578001,64.000002 0,64.000002z"/> 
+</svg>
\ No newline at end of file
diff --git a/icons/Data_Add.svg b/icons/Data_Add.svg
new file mode 100644 (file)
index 0000000..d791206
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 59.1 57.57"> \r<path d="M2.880352,35.504997L25.563028,35.504997 25.461889,35.77055C24.680614,37.90033 24.254,40.199783 24.254,42.596951 24.254,44.994007 24.680614,47.293259 25.461889,49.422794L25.562908,49.688 2.880352,49.688C1.290522,49.688,3.8410201E-07,48.396416,0,46.807915L0,38.38258C3.8410201E-07,36.794079,1.290522,35.504997,2.880352,35.504997z M41.691601,32.867001L41.691601,40.591217 33.968002,40.591217 33.968002,45.48729 41.691601,45.48729 41.691601,53.211002 46.587406,53.211002 46.587406,45.48729 54.311005,45.48729 54.311005,40.591217 46.587406,40.591217 46.587406,32.867001z M44.126499,27.625C52.394669,27.625 59.098,34.325611 59.098,42.596501 59.098,50.859093 52.394669,57.565003 44.126499,57.565003 35.858036,57.565003 29.156,50.859093 29.156,42.596501 29.156,34.325611 35.858036,27.625 44.126499,27.625z M2.880352,17.594002L43.182121,17.594002C44.771912,17.594002,46.061001,18.882946,46.061001,20.471779L46.061001,22.816408 45.653107,22.780068C45.149128,22.741593 44.639954,22.722 44.126297,22.722 37.278214,22.722 31.227619,26.205 27.652683,31.492657L27.472803,31.773003 2.880352,31.773003C1.290522,31.773001,3.8410201E-07,30.484057,8.8062882E-07,28.893322L8.8062882E-07,20.471779C3.8410201E-07,18.882946,1.290522,17.594002,2.880352,17.594002z M8.4794798,3.8200022C6.678607,3.8200022 5.2110004,5.2864023 5.2110014,7.0887662 5.2110004,8.8935586 6.678607,10.357 8.4794798,10.357 10.281624,10.357 11.748,8.8935586 11.748,7.0887662 11.748,5.2864023 10.281624,3.8200022 8.4794798,3.8200022z M2.880352,0L43.182117,0C44.771912,5.590332E-07,46.061001,1.2890898,46.061001,2.8779911L46.061001,11.302441C46.061001,12.893875,44.771912,14.18,43.182117,14.18L2.880352,14.18C1.290522,14.18,3.8410201E-07,12.893875,0,11.302441L0,2.8779911C3.8410201E-07,1.2890898,1.290522,5.590332E-07,2.880352,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Data_Copy.svg b/icons/Data_Copy.svg
new file mode 100644 (file)
index 0000000..8e9c30c
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 56.49 62.66"> \r<path d="M26.79975,52.910086L54.507193,52.910086C55.597094,52.910086,56.487011,53.799538,56.487011,54.898861L56.487011,60.685295C56.487011,61.774624,55.597094,62.664076,54.507193,62.664076L26.79975,62.664076C25.70985,62.664076,24.819932,61.774624,24.819933,60.685295L24.819933,54.898861C24.819932,53.799538,25.70985,52.910086,26.79975,52.910086z M26.799705,40.599995L54.507109,40.599995C55.597097,40.599995,56.486908,41.490101,56.486908,42.580179L56.486908,48.370812C56.486908,49.4709,55.597097,50.350995,54.507109,50.350995L26.799705,50.350995C25.70984,50.350995,24.819907,49.4709,24.819907,48.370812L24.819907,42.580179C24.819907,41.490101,25.70984,40.599995,26.799705,40.599995z M2.9911785,37.030091L22.608904,37.030091 22.608904,51.823042 2.9911785,51.823042C1.3305244,51.823042,0,50.473685,0,48.814476L0,40.038657C0,38.379448,1.3305244,37.030091,2.9911785,37.030091z M30.649395,31.131425C29.409509,31.131425 28.399602,32.141932 28.399601,33.382554 28.399602,34.623177 29.409509,35.633683 30.649395,35.633684 31.88928,35.633683 32.899187,34.623177 32.899187,33.382554 32.899187,32.141932 31.88928,31.131425 30.649395,31.131425z M26.79975,28.510111L54.507193,28.510111C55.597094,28.510111,56.487011,29.400558,56.487011,30.491104L56.487011,36.284009C56.487011,37.374557,55.597094,38.254998,54.507193,38.254997L26.79975,38.254997C25.70985,38.254998,24.819932,37.374557,24.819932,36.284009L24.819932,30.491104C24.819932,29.400558,25.70985,28.510111,26.79975,28.510111z M2.9901848,18.350023L45.032776,18.350023C46.692879,18.350023,48.042961,19.700212,48.042961,21.350445L48.042961,25.911087 25.311561,25.911087C23.821469,25.911087,22.601394,27.121258,22.601394,28.611467L22.601394,33.142105 2.9901848,33.142105C1.3300819,33.142106,0,31.801917,0,30.141683L0,21.350445C0,19.700212,1.3300819,18.350023,2.9901848,18.350023z M8.8305454,3.9897499C6.9604301,3.9897499 5.4203358,5.509655 5.4203358,7.3895416 5.4203358,9.2794228 6.9604301,10.799328 8.8305454,10.799328 10.710661,10.799328 12.240755,9.2794228 12.240755,7.3895416 12.240755,5.509655 10.710661,3.9897499 8.8305454,3.9897499z M2.9901848,0L45.032776,0C46.692879,0,48.042961,1.3499146,48.042961,3.0098114L48.042961,11.789267C48.042961,13.449163,46.692879,14.789082,45.032776,14.789082L2.9901848,14.789082C1.3300819,14.789082,0,13.449163,0,11.789267L0,3.0098114C0,1.3499146,1.3300819,0,2.9901848,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Data_Delete.svg b/icons/Data_Delete.svg
new file mode 100644 (file)
index 0000000..bba5aeb
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 59.1 57.56"> \r<path d="M2.8803511,35.504998L25.562742,35.504998 25.461922,35.769711C24.680624,37.899521 24.254,40.199002 24.254,42.596199 24.254,44.993397 24.680624,47.292763 25.461922,49.42239L25.563091,49.688 2.8803511,49.688C1.2905214,49.688,-1.9703777E-07,48.395962,2.2562905E-14,46.807518L2.2562905E-14,38.382981C-1.9703777E-07,36.794033,1.2905214,35.504998,2.8803511,35.504998z M38.677929,34.116001L35.216003,37.578362 40.677326,43.039303 35.216003,48.500141 38.677929,51.962002 44.139351,46.501164 49.600777,51.962002 53.062004,48.500141 47.600876,43.039303 53.062004,37.578362 49.600777,34.116001 44.139351,39.576943z M44.126499,27.625C52.394669,27.625 59.098,34.325222 59.098,42.596249 59.098,50.859478 52.394669,57.564999 44.126499,57.564999 35.858036,57.564999 29.156,50.859478 29.156,42.596249 29.156,34.325222 35.858036,27.625 44.126499,27.625z M2.8803511,17.594002L43.182117,17.594002C44.771912,17.594002,46.061001,18.883038,46.061001,20.471483L46.061001,22.815359 45.653645,22.779068C45.149654,22.740591 44.640469,22.720999 44.126797,22.720999 37.278542,22.720999 31.227795,26.204043 27.652769,31.491766L27.471674,31.774002 2.8803511,31.774002C1.2905214,31.774002,-1.9703777E-07,30.484967,2.2562905E-14,28.893622L2.2562905E-14,20.471483C-1.9703777E-07,18.883038,1.2905214,17.594002,2.8803511,17.594002z M8.4794798,3.8200004C6.6786065,3.82 5.211,5.2858002 5.2109985,7.0880244 5.211,8.8926909 6.6786065,10.356001 8.4794798,10.356001 10.281624,10.356001 11.748,8.8926909 11.748,7.0880244 11.748,5.2858002 10.281624,3.82 8.4794798,3.8200004z M2.8803511,0L43.182117,0C44.771912,1.7200194E-07,46.061001,1.2890874,46.061001,2.8775013L46.061001,11.302039C46.061001,12.893373,44.771912,14.18,43.182117,14.180001L2.8803511,14.180001C1.2905214,14.18,-1.9703777E-07,12.893373,2.2562905E-14,11.302039L2.2562905E-14,2.8775013C-1.9703777E-07,1.2890874,1.2905214,1.7200194E-07,2.8803511,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Data_Import.svg b/icons/Data_Import.svg
new file mode 100644 (file)
index 0000000..d73e843
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 64 51.2"> \r<path d="M27.187227,8.4450006L27.187227,16.512667C61.32288,16.512667 64,36.689709 64,40.721001 56.637947,24.585644 27.187227,32.648121 27.187227,32.648121L27.187227,40.721001 10.122,25.598541z M0,0L42.667,0 42.667,4.2655888 42.667,8.5337868 38.401371,8.5337868 38.401371,4.2655888 4.2656202,4.2655888 4.2656202,46.934441 38.401371,46.934441 38.401371,42.666283 42.667,42.666283 42.667,46.934441 42.667,51.200001 38.401371,51.200001 0,51.200001 0,46.934441 0,4.2655888z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Data_Information.svg b/icons/Data_Information.svg
new file mode 100644 (file)
index 0000000..c8139b7
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 58.09 62.67"> \r<path d="M3.6302565,44.778976L54.463745,44.778976C56.463886,44.778976,58.094002,46.40593,58.094002,48.409958L58.094002,59.032944C58.094002,61.038925,56.463886,62.666977,54.463745,62.666977L3.6302565,62.666977C1.6201072,62.666977,-4.1301246E-07,61.038925,0,59.032944L0,48.409958C-4.1301246E-07,46.40593,1.6201072,44.778976,3.6302565,44.778976z M3.6303759,22.189999L54.463905,22.189999C56.464047,22.189999,58.094158,23.813999,58.094158,25.817999L58.094158,36.441003C58.094158,38.444003,56.464047,40.073003,54.463905,40.073003L3.6303759,40.073003C1.6202369,40.073003,0.00012442552,38.444003,0.00012419682,36.441003L0.00012419682,25.817999C0.00012442552,23.813999,1.6202369,22.189999,3.6303759,22.189999z M10.690867,4.8160019C8.4207087,4.8160019 6.5705806,6.6650047 6.570581,8.9400024 6.5705806,11.215004 8.4207087,13.063005 10.690867,13.063005 12.961024,13.063005 14.811153,11.215004 14.811153,8.9400024 14.811153,6.6650047 12.961024,4.8160019 10.690867,4.8160019z M3.6303769,0L54.463905,0C56.464047,0,58.094158,1.625,58.094158,3.6320038L58.094158,14.254005C58.094158,16.257006,56.464047,17.883005,54.463905,17.883005L3.6303769,17.883005C1.6202369,17.883005,0.00012442552,16.257006,0.00012419682,14.254005L0.00012419682,3.6320038C0.00012442552,1.625,1.6202369,0,3.6303769,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Data_Network.svg b/icons/Data_Network.svg
new file mode 100644 (file)
index 0000000..bbabb01
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 61.56 64"> \r<path d="M41.768002,58.550999L59.858448,58.550999C60.793278,58.550999 61.555,59.316509 61.555,60.253899 61.555,61.193989 60.793278,61.957001 59.858448,61.957001L41.768002,61.957001z M1.6980257,58.550999L19.792,58.550999 19.792,61.957001 1.6980257,61.957001C0.76307344,61.957001 0,61.193989 0,60.253899 0,59.316509 0.76307344,58.550999 1.6980257,58.550999z M29.073,50.260998L32.476601,50.260998 32.476601,56.510672 37.763199,56.510672C38.549599,56.513371,39.2085,57.168346,39.211002,57.957418L39.211002,62.558752C39.2085,63.343822,38.549599,64,37.763199,64L23.794399,64C23.0079,64,22.3542,63.343822,22.349001,62.558752L22.349001,57.957418C22.3542,57.168346,23.0079,56.513371,23.794399,56.510672L29.073,56.510672z M10.000219,33.564002L50.231731,33.564002C53.817711,33.564001,56.715,36.169326,56.715,39.382635L56.715,41.597467C56.715,44.810974,53.817711,47.415002,50.231731,47.415002L10.000219,47.415002C6.4195461,47.415002,3.5209998,44.810974,3.5209999,41.597467L3.5209999,39.382635C3.5209998,36.169326,6.4195461,33.564001,10.000219,33.564002z M10.000219,16.782999L50.231731,16.782999C53.817715,16.782999,56.715,19.385786,56.715,22.600447L56.715,24.816451C56.715,28.028612,53.817715,30.63,50.231731,30.629999L10.000219,30.629999C6.4195461,30.63,3.5209999,28.028612,3.5209999,24.816451L3.5209999,22.600447C3.5209999,19.385786,6.4195461,16.782999,10.000219,16.782999z M48.609539,4.666851C47.362045,4.666851 46.346447,5.6785927 46.346447,6.9220295 46.346447,8.1720562 47.362045,9.1851387 48.609539,9.1851387 49.854134,9.1851387 50.867226,8.1720562 50.867226,6.9220295 50.867226,5.6785927 49.854134,4.666851 48.609539,4.666851z M10.000219,0L50.231731,0C53.817715,0,56.715,2.6016159,56.715,5.8165359L56.715,8.0341129C56.715,11.243742,53.817715,13.848,50.231731,13.848L10.000219,13.848C6.4195461,13.848,3.5209999,11.243742,3.5209999,8.0341129L3.5209999,5.8165359C3.5209999,2.6016159,6.4195461,0,10.000219,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Data_Replace.svg b/icons/Data_Replace.svg
new file mode 100644 (file)
index 0000000..a37ffa6
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 62.67 42.32"> \r<path d="M2.4502515,30.239936L36.782893,30.239936C38.132999,30.239936,39.233085,31.340499,39.233085,32.69119L39.233085,39.874864C39.233085,41.225556,38.132999,42.316114,36.782893,42.316114L2.4502515,42.316114C1.1001481,42.316114,6.3459745E-05,41.225556,6.3502213E-05,39.874864L6.3502213E-05,32.69119C6.3459745E-05,31.340499,1.1001481,30.239936,2.4502515,30.239936z M52.689521,22.949975L47.879756,27.758855 62.129058,27.758855 62.129058,30.828139 47.85976,30.828139 52.689521,35.657014 48.489726,35.657014 42.150039,29.308494 48.489726,22.959973z M2.4502515,14.979946L36.782893,14.979946C38.132999,14.979946,39.233085,16.079961,39.233085,17.42998L39.233085,24.610078C39.233085,25.960097,38.132999,27.060113,36.782893,27.060113L2.4502515,27.060113C1.1001481,27.060113,6.3459745E-05,25.960097,6.3502213E-05,24.610078L6.3502213E-05,17.42998C6.3459745E-05,16.079961,1.1001481,14.979946,2.4502515,14.979946z M52.130008,8.8201027L56.320014,8.8201027 62.67002,15.173005 56.320014,21.515903 52.12001,21.525907 56.930015,16.723714 42.690002,16.723714 42.690002,13.642305 56.960014,13.642305z M7.2205264,3.2516616C5.6905019,3.2516623 4.4404055,4.5023017 4.4404055,6.0331145 4.4404055,7.5736967 5.6905019,8.8243361 7.2205264,8.8243361 8.7606842,8.8243361 10.00077,7.5736967 10.00077,6.0331145 10.00077,4.5023017 8.7606842,3.2516623 7.2205264,3.2516616z M2.4502618,4.5474735E-13L36.782863,4.5474735E-13C38.132941,-5.8764545E-07,39.233001,1.0904007,39.233001,2.4512041L39.233001,9.6247941C39.233001,10.985598,38.132941,12.075999,36.782863,12.075999L2.4502618,12.075999C1.1000603,12.075999,0,10.985598,0,9.6247941L0,2.4512041C0,1.0904007,1.1000603,-5.8764545E-07,2.4502618,4.5474735E-13z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Data_Synchronize.svg b/icons/Data_Synchronize.svg
new file mode 100644 (file)
index 0000000..2bc30d7
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 64 64"> \r<path d="M44.817715,32.701C44.817715,36.424438 43.317719,39.769474 40.880226,42.212898 38.434834,44.649822 35.091141,46.147739 31.369753,46.150341 27.679762,46.150341 24.35157,44.671223 21.919287,42.2715L26.742264,37.44965 13.336,37.44965 13.336,50.854187 17.786488,46.404942C21.270859,49.861279 26.078165,52 31.369753,52 42.028622,51.998199 50.661396,43.359409 50.663998,32.701z M32.635052,12C21.97893,12.002014,13.341001,20.637493,13.341001,31.295L19.187323,31.295C19.189894,27.57238 20.68988,24.227364 23.127359,21.784601 25.567509,19.347088 28.913782,17.849091 32.635052,17.84647 36.379917,17.84647 39.757488,19.373089 42.197472,21.83989L37.58041,26.455275 50.660995,26.455275 50.660995,13.373056 46.330338,17.702539C42.838165,14.183121,37.989204,12,32.635052,12z M32,0C49.6744,0 64,14.3269 64,32 64,49.673199 49.6744,64 32,64 14.3281,64 0,49.673199 0,32 0,14.3269 14.3281,0 32,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Document_Music.svg b/icons/Document_Music.svg
new file mode 100644 (file)
index 0000000..95ac7e0
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 51.28 64"> \r<path d="M40.834312,26.460001C41.390308,26.460001,41.846001,26.990206,41.846001,27.644011L41.846001,33.006855 41.846001,33.76276 41.846001,48.602684C41.846001,48.702286 41.834301,48.798084 41.817402,48.890285 42.033501,50.868401 40.911114,53.105721 38.792736,54.501732 35.994568,56.344048 32.531105,56.022743 31.050623,53.781025 29.576641,51.536808 30.646929,48.22768 33.441196,46.383965 35.497173,45.030952 37.904648,44.847851 39.627327,45.732059L39.627327,35.056271 20.691341,36.806286 20.691341,49.342991C21.365732,51.486507 20.242146,54.161831 17.834572,55.749241 15.039104,57.593056 11.572944,57.267857 10.09636,55.027138 8.6185465,52.785419 9.6888447,49.472889 12.486933,47.629074 14.460911,46.330265 16.766884,46.112461 18.472666,46.883968L18.472666,35.733479 18.472666,35.721779 18.472666,29.616226C18.472666,28.962421,18.92436,28.434618,19.480453,28.434618z M22.157541,5.39746L21.794342,17.167999C21.794342,17.167999,21.32424,24.952101,12.747424,24.0117L5.3958206,23.8125 5.3958206,57.253899C5.3958206,57.999001,6.0025716,58.603001,6.7473927,58.603001L44.531384,58.603001C45.273487,58.603001,45.880287,57.999001,45.880287,57.253899L45.880287,6.7460899C45.880287,6.0039101,45.273487,5.39746,44.531384,5.39746z M21.804743,0L44.531384,0C48.257893,0,51.279999,3.02246,51.279999,6.7460899L51.279999,57.253899C51.279999,60.980499,48.257893,64,44.531384,64L6.7473927,64C3.0208156,64,0,60.980499,0,57.253899L0,23.0054 2.6718845,20.186501 2.6744452,20.1094 16.677132,5.39746 16.638033,5.39746 12.894525,9.3466797 16.816433,5.1914101 16.872433,5.1914101 16.996132,5.0615196 17.007832,5.0615196z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/E_Service_01.svg b/icons/E_Service_01.svg
new file mode 100644 (file)
index 0000000..2474b04
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 994.48 1093.96"> \r<path d="M239.750991821289,1043.58226607392C253.667999267578,1043.58226607392 264.940994262695,1054.86205123017 264.940994262695,1068.75072310517 264.940994262695,1082.67845748017 253.667999267578,1093.95921919892 239.750991821289,1093.95921919892 225.835983276367,1093.95921919892 214.56298828125,1082.67845748017 214.56298828125,1068.75072310517 214.56298828125,1054.86205123017 225.835983276367,1043.58226607392 239.750991821289,1043.58226607392z M93.8241809606552,1043.39928267548C107.740937232971,1043.39928267548 119.010982513428,1054.68028853486 119.010984420776,1068.56920455048 119.010982513428,1082.49522994111 107.740937232971,1093.77428267548 93.8241809606552,1093.77428267548 79.9073276519775,1093.77428267548 68.6359844207764,1082.49522994111 68.6359920501709,1068.56920455048 68.6359844207764,1054.68028853486 79.9073276519775,1043.39928267548 93.8241809606552,1043.39928267548z M94.459946513176,871.199758749703L94.459946513176,934.453237753609 253.355880737305,928.042227011421 259.93489074707,871.199758749703z M0,803.720205527046L85.5028266906738,803.720205527046 85.5028266906738,836.403555136421 301.004974365234,836.403555136421 283.605941772461,958.227224570015 85.5028266906738,974.964224081734 85.5028266906738,994.916250448921 286.150939941406,994.916250448921 286.150939941406,1029.01427290986 56.5215606689453,1029.01427290986 56.5215606689453,836.403555136421 0,836.403555136421z M433.031234741211,798.150137167671C510.973281860352,798.300100546578 588.914352416992,798.240102987984 666.855422973633,798.240102987984 715.149429321289,798.240102987984 763.445449829102,798.230154257515 811.739517211914,798.250112753609 823.695510864258,798.250112753609 830.530532836914,804.039785605171 832.198501586914,816.028982382515 833.292495727539,823.878469687203 833.953506469727,831.577993612984 829.486526489258,839.117544394234 823.336502075195,849.486868124703 813.423477172852,852.526663046578 802.928482055664,852.596670370796 742.20344543457,852.966665487984 681.474380493164,852.776663046578 620.746353149414,852.766653280953 560.260330200195,852.766653280953 499.770278930664,852.926626425484 439.283248901367,852.616689902046 427.385238647461,852.556692343453 417.195236206055,847.856985312203 411.486221313477,836.287710409859 406.551223754883,826.278372030953 408.001235961914,816.028982382515 413.514236450195,807.57951949189 417.387222290039,801.649893027046 424.71223449707,798.140127402046 433.031234741211,798.150137167671z M431.592758178711,677.630178671578C556.891738891602,677.690176230171 682.19075012207,677.680166464546 807.488723754883,677.680166464546 825.322708129883,677.680166464546 838.240737915039,694.37932417939 833.302749633789,711.418508749703 829.617752075195,724.117849570015 822.383743286133,731.237539511421 807.718704223633,731.077505331734 746.033767700195,730.377554159859 684.33674621582,730.777517538765 622.643753051758,730.777517538765 559.276748657227,730.777517538765 495.910751342773,730.78752730439 432.542770385742,730.777517538765 418.729751586914,730.777517538765 406.304763793945,715.558279257515 408.729751586914,701.76897261689 410.153762817383,693.66936324189 411.993759155273,686.169729452828 419.903762817383,681.26994917939 423.733749389648,678.900076132515 427.197769165039,677.630178671578 431.592758178711,677.630178671578z M808.221389770508,558.360403280953C829.822463989258,558.280447226265 837.41145324707,582.110891562203 831.487442016602,595.97112105439 827.14143371582,606.15129683564 819.18440246582,611.961416464546 807.66438293457,611.881399374703 745.491287231445,611.411428671578 683.314102172852,611.661428671578 621.13801574707,611.661428671578 559.19987487793,611.661428671578 497.262741088867,611.661428671578 435.326583862305,611.661428671578 419.242568969727,611.661428671578 413.15153503418,606.501333456734 410.170547485352,590.340994101265 407.644546508789,576.650747519234 411.132553100586,568.530630331734 422.345565795898,561.480459433296 425.881576538086,559.25041792939 429.671585083008,558.550405722359 433.728591918945,558.550405722359 558.559860229492,558.560415487984 683.391128540039,558.79045699189 808.221389770508,558.360403280953z M67.4396743774414,454.068105917671C67.699275970459,453.980581503609 67.994815826416,454.090627890328 68.3479804992676,454.515951376656 67.9948139190674,454.776113730171 67.6430473327637,455.04631636689 66.7469844818115,454.806143027046 66.9564056396484,454.440908652046 67.1800708770752,454.15569136689 67.4396743774414,454.068105917671z M456.319046020508,278.471029501656C470.538101196289,278.341024618843 486.855117797852,293.50334761689 482.146102905273,311.196096640328 477.77311706543,327.628622275093 471.279098510742,333.219473105171 454.388046264648,333.219473105171 426.166000366211,333.219473105171 397.942947387695,333.219473105171 369.720901489258,333.219473105171 341.257827758789,333.219473105171 312.750778198242,332.229330282906 284.350723266602,333.559530478218 265.465682983398,334.449667196968 248.749649047852,309.945883017281 260.752670288086,292.643209677437 266.106689453125,284.922018271187 272.882705688477,278.641073446968 283.397705078125,278.651052695015 341.038833618164,278.691061239937 398.68196105957,278.961111288765 456.319046020508,278.471029501656z M457.827621459961,159.400381308296C466.018600463867,159.330373984078 481.000564575195,171.681036215523 482.163558959961,181.961553793648 484.918563842773,206.292883139351 468.656600952148,216.193395834664 448.661636352539,216.773428183296 421.895706176758,217.55347273896 395.089767456055,216.963445883492 368.301834106445,216.963445883492 342.46989440918,216.963445883492 316.637954711914,216.92343733857 290.80598449707,216.983450155953 270.446060180664,217.023443442085 261.384078979492,204.472784262398 256.790084838867,189.792013388374 254.376098632813,182.071584921578 264.391067504883,166.490759115914 273.337051391602,162.500539999703 277.983032226563,160.430441122749 282.698028564453,159.39038680146 287.880020141602,159.470403891304 303.901977539063,159.700399618843 319.929946899414,159.55039046357 335.954879760742,159.55039046357 376.579818725586,159.55039046357 417.205703735352,159.740392904976 457.827621459961,159.400381308296z M617.639724731445,0.000119525742775295C626.194717407227,-0.0198438761144644 632.624771118164,2.46013639519515 638.251724243164,8.04017947266402 646.269729614258,15.9901649768144 654.751724243164,23.4301054293901 662.619827270508,31.6002466494829 671.879776000977,41.2101347262651 681.54377746582,50.6503202731401 691.235794067383,59.9400884921342 721.956802368164,89.3803007418901 752.151809692383,119.400312643746 781.764785766602,149.960119467476 794.655838012695,163.260168295601 808.554885864258,175.510168295601 821.174880981445,189.020178061226 850.166885375977,220.050207358101 882.315872192383,247.850256186226 911.730911254883,278.440115195015 937.196914672852,304.930074911812 964.235916137695,329.880270224312 989.055923461914,357.020162802437 992.732925415039,361.040182333687 994.484939575195,365.230123739937 994.47395324707,370.900289755562 994.303909301758,468.010153036812 994.34992980957,565.120229941109 994.34992980957,662.230093222359 994.34992980957,757.910269003609 994.381912231445,853.590200644234 994.330947875977,949.270132284859 994.316909790039,975.850210409859 987.547927856445,1000.48009322236 971.929946899414,1022.25011275361 958.618911743164,1040.81017134736 942.809951782227,1056.54015181611 922.774917602539,1068.24010298798 899.567886352539,1081.78014205048 874.912857055664,1088.21019576142 848.211868286133,1088.2001859958 681.733779907227,1088.13011763642 515.255722045898,1088.1201078708 348.776596069336,1088.33019087861 342.311614990234,1088.34020064423 341.137619018555,1086.63011763642 341.129623413086,1080.54015181611 341.104614257813,1062.4501859958 342.310623168945,1044.34020064423 340.549606323242,1026.26012251923 340.337615966797,1024.07018111298 341.270614624023,1021.68004439423 344.589614868164,1022.10021040986 346.236618041992,1022.32018111298 347.934616088867,1022.14024947236 349.608627319336,1022.14024947236 509.866714477539,1022.14024947236 670.127822875977,1022.36022017548 830.386856079102,1021.94005415986 858.913833618164,1021.86022017548 886.035842895508,1015.47008345673 906.68489074707,993.190054159859 920.51692199707,978.260122519234 928.294937133789,960.740102987984 928.304946899414,940.310171347359 928.386917114258,767.860220175484 928.298904418945,595.410269003609 928.479934692383,422.950094443062 928.487930297852,416.500143271187 926.983901977539,414.840231161812 920.443923950195,414.860250693062 856.58088684082,415.140279989937 792.710891723633,415.470113974312 728.853775024414,414.800192099312 703.994827270508,414.540182333687 679.350784301758,410.480123739937 656.656814575195,399.400289755562 645.180740356445,393.800192099312 634.195755004883,387.400289755562 624.813735961914,378.110250693062 612.802749633789,366.220113974312 601.034744262695,354.160299521187 592.772750854492,339.450094443062 582.744735717773,321.600240927437 575.212753295898,302.730123739937 575.233749389648,281.65032027314 575.297744750977,212.760168295601 575.179733276367,143.870290976265 575.396743774414,74.980138998726 575.415725708008,69.2001249606401 574.319747924805,67.5302030856401 568.172744750977,67.5402128512651 457.903671264648,67.7601835543901 347.636611938477,67.5702421481401 237.368591308594,67.7901899630815 210.406555175781,67.8402616793901 189.527351379395,80.0802519137651 173.675918579102,101.790189963082 162.904037475586,116.550214987496 159.235038757324,133.32024214814 159.162002563477,150.850271445015 158.858337402344,225.000158529976 158.947334289551,299.150289755562 159.150314331055,373.300192099312 159.175140380859,381.980123739937 156.811336517334,723.560171347359 148.943313598633,722.810171347359 132.008724212646,721.200063925484 115.716413497925,723.810171347359 100.084028720856,730.580190878609 95.4894044399261,732.570181112984 92.8774433415383,732.350210409859 92.8920095348312,725.860220175484 93.0745536088943,643.580190878609 92.9095735978335,221.910314779976 93.0934931337833,139.620290976265 93.1344138681889,121.480146628121 98.7642164230347,104.440107565621 106.163519859314,88.1002790744096 111.540782928467,76.2201444918901 116.754514694214,64.2802030856401 126.119003295898,54.530172568062 139.469326019287,40.6303007418901 152.51602935791,25.7401640231401 169.966026306152,17.710104208687 186.287551879883,10.2001259143144 203.18856048584,2.91033170769515 221.881591796875,1.36024795124831 230.645568847656,0.630302589634084 239.355575561523,0.300224464634084 248.086547851563,0.300176870325231 371.270645141602,0.210136574009084 494.455673217773,0.350273292759084 617.639724731445,0.000119525742775295z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Euro_Tag.svg b/icons/Euro_Tag.svg
new file mode 100644 (file)
index 0000000..c6d4736
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 42.33 64.51"> \r<path d="M23.540623,29.727104C22.639606,29.732088 21.398977,29.920237 19.977411,30.492665 15.73785,32.195114 13.504718,36.42313 14.32113,41.827782L12.252,42.659706 13.141413,44.873967 14.895338,44.169548C15.08674,44.862168 15.180542,45.238579 15.469546,45.957997 15.66095,46.432011 15.743051,46.574513 15.953954,47.011425L14.271629,47.687245 15.153142,49.881306 17.07637,49.107785C19.964413,53.649014 24.243174,55.469963 28.774441,53.649014 30.870871,52.809689 32.293991,51.625454 32.849998,50.861836L31.055773,47.86425C30.394264,48.663174 29.200247,49.529698 27.948929,50.034211 25.136387,51.162545 22.526949,50.238716 20.559521,47.709946L27.900728,44.760063 27.019215,42.566601 19.316002,45.66119C19.058199,45.178074 18.934498,44.97757 18.713093,44.423355 18.44619,43.762635 18.370689,43.452027 18.209186,42.838112L25.888998,39.752026 24.998285,37.537861 17.73908,40.455242C17.485176,37.184254 18.895397,34.836586 21.459234,33.81506 22.866854,33.247341 24.176674,33.180939 25.172789,33.309143L24.543878,29.814947C24.289562,29.760414,23.950176,29.724837,23.540623,29.727104z M8.4118766,15.872406C8.8919668,15.864384 9.5332813,15.975798 10.462218,16.135922 10.967408,16.221222 11.493497,16.319523 12.029886,16.420523 12.002487,16.553921 11.993486,16.685421 11.954388,16.81692 11.769491,17.430819 11.217403,18.631413 10.608015,19.86311 9.3189916,20.283709 8.2500429,21.303305 7.829462,22.699099 7.1471662,24.965391 8.4310092,27.355982 10.699214,28.038281 12.964766,28.721178 15.355317,27.435385 16.037603,25.169792 16.294098,24.320195 16.273298,23.453696 16.028503,22.663899 16.723789,21.264805 17.467272,19.658711 17.792767,18.574715 17.878765,18.291516 17.896965,18.009016 17.958162,17.725216 22.244474,18.773913 25.990499,19.91981 26.232693,20.368906L41.399082,48.599411C42.332664,50.335007,41.680378,52.502297,39.942112,53.435292L21.070101,63.573853C19.331835,64.507447,17.16518,63.855858,16.232899,62.119564L1.066601,33.888558C0.37911236,32.604061 4.1485681,23.195198 6.2383651,18.412615 7.0798063,16.485766 7.355679,15.890053 8.4118766,15.872406z M9.2408761,0.0010007097C9.7095222,-0.0058863123 10.184318,0.022701029 10.662227,0.089046776 13.319842,0.45421959 15.576356,1.8461005 17.015163,4.0069016 18.379772,6.0557631 18.927875,8.6650375 18.556774,11.35319 17.466967,19.259983 13.229942,24.530012 13.047641,24.750208 12.740339,25.127802 12.292437,25.323 11.841933,25.323 11.495631,25.323 11.147929,25.209101 10.857528,24.973406 10.190924,24.431813 10.089323,23.450026 10.631026,22.780735 10.670027,22.733237 14.50085,17.931902 15.466955,10.926096 15.733957,8.993893 15.361455,7.1508387 14.420049,5.7360676 13.468244,4.3083466 12.021634,3.4242094 10.237823,3.1781827 6.8184528,2.7276781 3.6778135,5.1007565 3.2064905,8.5074485 3.0059297,9.95871 3.201241,13.745158 3.2924308,15.082341 3.3523118,15.941628 2.7025875,16.686419 1.8444826,16.745117 1.0033574,16.824416 0.24028771,16.157126 0.18041252,15.296437 0.14397411,14.771744 -0.16333969,10.112308 0.11662983,8.081734 0.75500268,3.4490488 4.7106294,0.067579038 9.2408761,0.0010007097z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Exit___03.svg b/icons/Exit___03.svg
new file mode 100644 (file)
index 0000000..422872d
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 20.16 21.09"> \r<path d="M16.558326,5.0859997L20.156,8.68471 16.558326,12.286 16.558326,9.8942828 9.8749997,9.8942828 9.8749997,7.4738474 16.558326,7.4738474z M0,0L15.423,0 15.423,6.641973 13.663823,6.641973 13.663823,1.8333275 2.8033037,1.8333275 5.7551756,3.7630357 5.7551756,15.537947 13.663823,15.537947 13.663823,10.729302 15.423,10.729302 15.423,17.371265 5.7551756,17.371265 5.7551756,21.09 0,17.371265z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Export___02.svg b/icons/Export___02.svg
new file mode 100644 (file)
index 0000000..a4eaf40
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 21.33 13.71"> \r<path d="M0,12.289L21.333,12.289 21.333,13.711 0,13.711z M3.0663068,5.3459998L8.0662365,5.3459998 8.0662365,9.697566 13.266713,9.697566 13.266713,5.3459998 18.266642,5.3459998 21.333,11.212 0,11.212z M10.666455,0L15.289001,3.8539475 12.20037,3.8539475 12.20037,8.6310008 9.1325903,8.6310008 9.1325903,3.8539475 6.0440001,3.8539475z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Folder_Open_01.svg b/icons/Folder_Open_01.svg
new file mode 100644 (file)
index 0000000..66c9c4a
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 22.94 15.26"> \r<path d="M5.388822,5.0339882L22.943006,5.0339882 18.721215,15.256989 1.6100047,15.256989z M0,0L6.6660105,0 8.0000125,2.9348083 18.70703,2.9348083 18.70403,3.8337495 4.5530072,3.8337495 0.33200061,15.257004 0,15.257004z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Graduate_Degree.svg b/icons/Graduate_Degree.svg
new file mode 100644 (file)
index 0000000..01f9db3
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 64.81 61.5"> \r<path d="M37.117872,40.924002L50.506003,55.464827 43.235132,54.643202 42.063321,61.504004 29.985002,46.33686z M47.541636,33.532002L64.000004,40.792327 57.861979,43.767359 59.276184,50.361002 39.828003,38.973271z M22.45092,20.61991C23.532913,20.652822,24.211258,20.953975,24.211258,20.953975L9.1802597,32.134935C20.818081,35.343352,19.859888,46.969714,19.859888,46.969714L32.654001,37.633664C32.495102,40.213178,29.74262,43.103793,29.74262,43.103793L16.672308,52.693745C11.174946,55.753561 7.4613724,53.348648 7.4613724,53.348648 5.6646118,52.718344 2.2766647,49.357727 2.2766647,49.357727 -2.785862,43.787396 2.175045,39.224872 2.175045,39.224872 5.7504616,36.756059 9.3989582,38.79647 9.3989582,38.79647 13.211332,40.56468 14.273926,45.580406 14.273926,45.580406L11.695843,46.18971C10.013554,39.422773 4.7452774,40.980082 4.7452774,40.980081 0.099472046,43.875998 4.6228714,47.943719 4.6228714,47.943719 12.320839,55.575159 16.198412,49.247026 16.198412,49.247026 19.365091,43.640196 14.393724,38.261267 14.393724,38.261267 8.6827621,32.296435 4.0551529,35.844654 4.0551529,35.844654L2.5161057,33.538542 18.268698,21.89528C19.883287,20.822324,21.368927,20.586998,22.45092,20.61991z M27.931086,16.431051C30.030733,16.438269 32.578069,17.223774 35.41463,19.658504 35.41463,19.658504 42.792083,26.333 40.568127,33.486802 40.568127,33.486802 39.021358,37.784964 33.998059,40.444002 33.998059,40.444002 38.609967,33.145597 32.370491,24.062167 32.370492,24.062167 29.039659,18.02818 21.868002,18.878492 21.868002,18.878492 24.188236,16.418188 27.931086,16.431051z M36.842772,9.9370022C37.633915,9.9368954 38.49829,10.042305 39.41488,10.312323 39.414881,10.312323 47.008735,12.22887 49.646753,22.533299 49.646753,22.533299 50.612861,27.099579 47.578939,30.380893L42.977506,33.856001C42.977506,33.856001 46.37843,22.743094 33.966843,15.471087 33.966842,15.471087 30.763819,13.994425 28.545003,14.047924L32.125828,11.283596C32.125829,11.283596,34.017261,9.9373779,36.842772,9.9370022z M50.886588,0C52.837581,-0.00043487549 55.353003,0.5996933 58.130627,2.7348595 58.130627,2.7348595 64.812771,8.0213261 63.250208,16.142643 63.250208,16.142643 62.127834,19.599594 59.518595,21.171317L51.563078,27.010001 52.36516,23.069744 58.510717,18.491578C58.510717,18.491578 61.81794,16.475948 60.53157,10.992868 60.53157,10.992868 58.979506,4.9158001 52.891148,2.9548626 52.891148,2.9548626 49.643823,2.2596321 47.677668,3.7712536L41.54761,8.2349281 37.566002,7.7010307 46.802788,0.99389267C46.802788,0.99389267,48.37817,0.0005607605,50.886588,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Import__02.svg b/icons/Import__02.svg
new file mode 100644 (file)
index 0000000..17a78f7
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 21.33 14.03"> \r<path d="M0,12.609L21.333,12.609 21.333,14.031 0,14.031z M3.0663068,5.6669999L5.4464531,5.6669999 10.666451,10.019903 15.886376,5.6669999 18.266642,5.6669999 21.333,11.533 0,11.533z M9.1325903,0L12.20037,0 12.20037,4.7759482 15.289001,4.7759482 10.666455,8.6299996 6.0440001,4.7759482 9.1325903,4.7759482z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Internet_Facilities.svg b/icons/Internet_Facilities.svg
new file mode 100644 (file)
index 0000000..cc74b2b
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 40.81 42.67"> \r<path d="M25.385547,33.513004L15.440051,33.536404 14.291639,38.398308 26.55736,38.398308z M4.0508192,28.486999L36.84116,28.486999 40.809002,40.260649 40.809002,42.666999 0,42.666999 0,40.260649z M20.3407,15.047C21.27051,15.047 22.026001,15.802278 22.026001,16.73195 22.026001,17.661622 21.27051,18.417 20.3407,18.417 19.408489,18.417 18.656,17.661622 18.656,16.73195 18.656,15.802278 19.408489,15.047 20.3407,15.047z M20.410578,11.991055C21.851992,11.997005 23.554455,12.486309 25.291632,14.049782 25.571445,14.302143 25.593946,14.734278 25.340935,15.015434 25.207128,15.166811 25.020618,15.242 24.833111,15.242 24.670502,15.242 24.507894,15.184908 24.376089,15.065227 20.252292,11.351995 16.476312,14.830962 16.317106,14.981739 16.043592,15.2395 15.611472,15.229301 15.35126,14.955943 15.091947,14.682486 15.101248,14.249951 15.37466,13.989691 15.423963,13.942899 16.593519,12.839067 18.392904,12.294651 18.972151,12.117441 19.655552,11.987938 20.410578,11.991055z M20.448896,8.0851421C22.595718,8.0967655 25.133497,8.8178596 27.728683,11.114372 28.011381,11.366835 28.037281,11.796474 27.787283,12.080633 27.651985,12.233912 27.463085,12.312 27.275587,12.312 27.113989,12.312 26.952789,12.254908 26.822491,12.140123 24.025612,9.6639404 21.002136,8.8881702 17.83666,9.8357944 15.451479,10.549553 13.887491,11.999544 13.871891,12.015142 13.597493,12.272905 13.164797,12.260206 12.906098,11.983946 12.648201,11.708086 12.6609,11.276049 12.937299,11.018286 13.010097,10.950396 14.752184,9.3334274 17.445062,8.526413 18.307113,8.2676296 19.324369,8.0790558 20.448896,8.0851421z M6.5597528,2.5312595L6.5597528,24.138291 34.205707,24.138291 34.205707,2.5312595z M4.0080002,0L36.673,0 36.673,26.503001 4.0080002,26.503001z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Location__02.svg b/icons/Location__02.svg
new file mode 100644 (file)
index 0000000..5f43a8e
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 15.39 25"> \r<path d="M3.6821513,18.694C3.8694701,18.957005 4.0545387,19.216108 4.2327666,19.458313 3.3746376,19.95702 2.8266425,20.622431 2.8266425,21.333242 2.8266425,22.789064 5.1026263,24.066586 7.6964951,24.066586 10.290353,24.066586 12.565157,22.789064 12.565157,21.333242 12.565157,20.622431 12.017032,19.95702 11.160293,19.458313 11.337301,19.216108 11.52341,18.957005 11.709818,18.694 12.808668,19.362011 13.499,20.294325 13.499,21.333242 13.499,23.358173 10.901081,25 7.6964951,25 4.4905987,25 1.893,23.358173 1.8929999,21.333242 1.893,20.294325 2.5829716,19.36071 3.6821513,18.694z M7.6953101,2.5234644C5.3919702,2.5234644 3.52478,4.3893385 3.5247798,6.693996 3.52478,8.9973736 5.3919702,10.864548 7.6953101,10.864548 10,10.864548 11.8672,8.9973736 11.8672,6.693996 11.8672,4.3893385 10,2.5234644 7.6953101,2.5234644z M7.6966601,0C11.9467,0 15.392,3.4453216 15.392,7.6966119 15.392,11.946532 7.6966601,21.333 7.6966601,21.333 7.6966601,21.333 1.4901161E-08,11.946532 0,7.6966119 1.4901161E-08,3.4453216 3.4453101,0 7.6966601,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Lock_Information.svg b/icons/Lock_Information.svg
new file mode 100644 (file)
index 0000000..912f19a
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 40.12 38.83"> \r<path d="M34.732987,27.649016L29.950987,28.165015 29.772988,28.537014C29.962988,28.527014 30.131987,28.526015 30.284987,28.526015 30.587988,28.526015 30.832987,28.579014 31.011988,28.690014 31.190987,28.794014 31.281989,28.921013 31.281989,29.062014 31.281989,29.280013 31.190987,29.601012 30.999987,30.030013L29.040987,34.525004C28.876988,34.882002 28.795989,35.176001 28.795989,35.409003 28.795989,35.762 28.975987,36.047999 29.336987,36.277998 29.701989,36.510001 30.183987,36.623 30.792988,36.623 32.391987,36.623 33.902989,35.800002 35.327988,34.151003L34.83899,33.963004C34.254986,34.572005 33.745987,34.990004 33.313988,35.226 33.164986,35.317 33.001988,35.367003 32.840989,35.367003 32.74899,35.367003 32.659989,35.332003 32.578988,35.272002 32.496987,35.205 32.452988,35.146002 32.452988,35.083003 32.452988,34.961001 32.529988,34.705004 32.681988,34.325003L35.569989,27.649016z M33.557988,23.318024C32.986989,23.318024 32.501988,23.454024 32.10299,23.728024 31.704987,23.996024 31.507988,24.326022 31.507988,24.708022 31.507988,25.08902 31.709988,25.41602 32.113987,25.68402 32.51299,25.95102 32.995987,26.08602 33.557988,26.08602 34.128987,26.08602 34.619988,25.95102 35.028988,25.68402 35.436989,25.41602 35.638989,25.08902 35.638989,24.708022 35.638989,24.326022 35.436989,23.996024 35.033989,23.728024 34.634987,23.454024 34.143986,23.318024 33.557988,23.318024z M13.258012,22.986985C11.80301,22.986985 10.62401,24.100024 10.62401,25.470999 10.62401,26.470025 11.251009,27.306941 12.145998,27.706965L12.145998,31.101992 14.378007,31.101992 14.378007,27.706965C15.273012,27.306941 15.899004,26.46502 15.899004,25.470999 15.899004,24.100024 14.718004,22.986985 13.258012,22.986985z M32.027989,22.650025C36.495987,22.650025 40.118989,26.272019 40.118989,30.74001 40.118989,35.208003 36.495987,38.830996 32.027989,38.830996 27.560988,38.830996 23.937987,35.208003 23.937987,30.74001 23.937987,26.272019 27.560988,22.650025 32.027989,22.650025z M13.579011,2.8789117C9.9140029,2.8789119,6.9470072,5.8479123,6.9470072,9.5079541L6.9470072,13.016017C6.9470072,13.566922,7.020997,14.10098,7.1480112,14.61502L20.013003,14.61502C20.140002,14.10098,20.214999,13.566922,20.214999,13.016017L20.214999,9.5079541C20.214999,5.8479123,17.241,2.8789119,13.579011,2.8789117z M13.579011,0C18.497012,-6.071059E-08,22.48601,3.9909749,22.48601,8.9120049L22.48601,13.613919C22.48601,14.048978 22.444003,14.476958 22.384005,14.893951 24.770007,15.626985 26.517001,17.823035 26.517001,20.44694L26.517001,21.882979C23.259005,23.365038 20.991,26.641045 20.991,30.455018 20.991,33.096991 22.082003,35.478953 23.831011,37.190993 22.923007,37.776076 21.84801,38.123003 20.689013,38.123003L5.8280029,38.123003C2.6070101,38.123003,0,35.512034,0,32.294013L0,20.44694C0,17.60001 2.0449984,15.230988 4.7490087,14.724029 4.7040105,14.358916 4.6730046,13.991971 4.6730046,13.613919L4.6730046,8.9120049C4.6730046,3.9909749,8.6580062,-6.071059E-08,13.579011,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/MS_System_settings_Configuration_Manger_02.svg b/icons/MS_System_settings_Configuration_Manger_02.svg
new file mode 100644 (file)
index 0000000..61bc7ca
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 41.72 38.96"> \r<path d="M33.732557,32.921222L32.921337,33.733106 32.921337,34.88278 33.732557,35.694761 34.883585,35.694761 35.696106,34.88278 35.696106,33.733106 34.883585,32.921222z M27.232397,20.419L37.08284,30.267683C38.964386,32.150541 38.964386,35.199972 37.08284,37.08143 35.201294,38.96219 32.150417,38.96219 30.268871,37.08143L19.322001,26.134973 22.019967,23.439134 24.447128,25.866779 27.418501,22.893646 27.198496,22.461155C26.862587,21.80307,26.891188,21.042686,27.232397,20.419z M35.50946,1.434L41.723003,7.6463243 30.452124,18.918466C29.376616,18.367763 28.027605,18.540966 27.1266,19.441372 26.226793,20.341076 26.053692,21.690689 26.604496,22.764896L24.44688,24.922411 22.018462,22.494594 11.76699,32.748069 11.866091,32.846367 11.69159,33.886778 7.3087182,36.971998 6.2500003,35.913389 9.2696722,31.464859 10.31118,31.291656 10.408981,31.390659 20.662953,21.138483 18.234536,18.710266 20.390851,16.553249C21.46766,17.103454 22.816669,16.930253 23.716475,16.030447 24.61618,15.130039 24.789284,13.77983 24.238579,12.705022z M9.0453155,7.0333481E-05C11.33821,0.0091023445 13.627788,0.88797247 15.377007,2.6370169 17.641397,4.9013218 18.440928,8.0679628 17.791203,10.977297L22.737999,15.925221C22.421587,16.097119 22.068673,16.200017 21.697558,16.200017 21.349944,16.200017 21.00483,16.115918 20.697518,15.95842L20.263901,15.735824 17.291183,18.710277 19.72098,21.136741 17.021573,23.833999 10.977033,17.790493C8.0681376,18.439481 4.9013221,17.640695 2.6368926,15.37703 0.3047657,13.045066 -0.48042154,9.7515169 0.28132772,6.7716533L6.569358,13.061366 10.996634,10.995698 13.061615,6.569266 6.771206,0.28097141C7.5163507,0.090697169,8.2810173,-0.002940774,9.0453155,7.0333481E-05z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Microsoft_Excel_2013_01.svg b/icons/Microsoft_Excel_2013_01.svg
new file mode 100644 (file)
index 0000000..6c14cc2
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 200.36 194"> \r<path d="M154.46533,137.481L154.46533,157.481 187.3549,157.481 187.3549,137.481z M154.46533,111.481L154.46533,131.481 187.3549,131.481 187.3549,111.481z M154.46533,85.481003L154.46533,105.481 187.3549,105.481 187.3549,85.481003z M67.577698,60.258995L57.577702,85.148185 49.133602,62.481582 35.577702,62.481582 49.3563,95.14814 34.023003,127.593 47.3563,127.593 57.3563,104.4811 67.3563,129.81398 82.023003,129.81398 65.133598,94.037147 80.911003,60.258995z M154.46533,59.4813L154.46533,79.4813 187.3549,79.4813 187.3549,59.4813z M154.46533,33.4813L154.46533,53.4813 187.3549,53.4813 187.3549,33.4813z M119.021,22.147997L197.68828,22.147997C199.161,22.147999,200.355,23.341999,200.355,24.814699L200.355,167.481C200.355,168.955,199.161,170.147,197.68828,170.147L119.021,170.147 119.021,157.481 148.35458,157.481 148.35458,137.481 119.021,137.481 119.021,131.481 148.35458,131.481 148.35458,111.481 119.021,111.481 119.021,105.481 148.35458,105.481 148.35458,85.481003 119.021,85.481003 119.021,79.4813 148.35458,79.4813 148.35458,59.4813 119.021,59.4813 119.021,53.4813 148.35458,53.4813 148.35458,33.4813 119.021,33.4813z M115.333,0L115.333,193.99899 0,173.99902 0,19.99996z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Office.svg b/icons/Office.svg
new file mode 100644 (file)
index 0000000..aed572e
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 64 54.01"> \r<path d="M52.042995,40.508999L52.042995,48.527 57.106998,48.527 57.106998,40.508999z M40.930999,40.508999L40.930999,48.527 45.994999,48.527 45.994999,40.508999z M29.818998,40.508999L29.818998,48.527 34.882999,48.527 34.882999,40.508999z M18.708,40.508999L18.708,48.527 23.771999,48.527 23.771999,40.508999z M52.042995,26.444L52.042995,34.461 57.106998,34.461 57.106998,26.444z M40.930999,26.444L40.930999,34.461 45.994999,34.461 45.994999,26.444z M29.818998,26.444L29.818998,34.461 34.882999,34.461 34.882999,26.444z M18.708,26.444L18.708,34.461 23.771999,34.461 23.771999,26.444z M7.5959998,26.444L7.5959998,34.461 12.66,34.461 12.66,26.444z M1.5480003,21.099001L63.437,21.099001 63.437,54.012999 12.66,54.012999 12.66,40.508999 7.5959998,40.508999 7.5959998,54.012999 1.5480003,54.012999z M49.793998,0L58.091999,0 58.091999,16.035 64,16.035 64,18.989 0,18.989 0,16.035 6.039426,16.035 19.271003,9.9870005 19.271003,15.837735 32.070991,9.9870005 32.070991,15.773616 44.728996,9.9870005 44.728996,16.035 49.793998,16.035z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Out.svg b/icons/Out.svg
new file mode 100644 (file)
index 0000000..4b16d40
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 285.31 191.5"> \r<path d="M194.946686588228,0L285.305023990572,101.774623095582 194.946686588228,191.501002490113 194.946686588228,143.610926806519C194.946686588228,143.610926806519 39.0003059729934,95.7808639403083 0,191.501002490113 0,167.585963427613 14.1771210059524,47.8907958861091 194.946686588228,47.8907958861091z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Payment_02.svg b/icons/Payment_02.svg
new file mode 100644 (file)
index 0000000..9af60ac
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 64 47.36"> \r<path d="M15.958999,25.439433L15.958999,28.889256C17.439,28.719266 18.179,28.179294 18.179,27.259339 18.179,26.519378 17.439,25.909408 15.958999,25.439433z M13.692998,17.989812C12.254997,18.179801 11.535997,18.729773 11.535997,19.639728 11.535997,20.419688 12.254997,21.069655 13.692998,21.589629z M13.692998,13.210054L15.958999,13.210054 15.958999,15.279949C18.142,15.349946,19.772,15.609933,20.848001,16.049911L20.848001,19.119754C19.399,18.479787,17.77,18.079806,15.958999,17.939815L15.958999,22.249595C18.225,22.849565 19.849,23.539529 20.832001,24.309489 21.815001,25.079452 22.307001,26.009404 22.307001,27.099347 22.307001,28.359284 21.758001,29.369233 20.662001,30.139194 19.565001,30.909154 17.997,31.37913 15.958999,31.549121L15.958999,34.018996 13.692998,34.018996 13.692998,31.619119C11.592997,31.609118,9.6369963,31.259137,7.8269954,30.569171L7.8269954,27.419332C8.4259958,27.769315 9.3209962,28.109296 10.510996,28.409282 11.700997,28.709266 12.761998,28.889256 13.692998,28.929255L13.692998,24.789466C11.271997,24.129498 9.6189963,23.419536 8.7339957,22.649575 7.8499956,21.879613 7.4069953,20.939662 7.4069953,19.829719 7.4069953,18.639779 7.9819956,17.61983 9.1299961,16.789872 10.277997,15.949915 11.799997,15.45994 13.692998,15.319947z M3.6670208,3.4600541L40.262993,12.079637C40.262993,12.079637 18.857009,27.548884 34.539997,43.658103 34.539997,43.658103 16.94901,30.938722 32.632998,13.559565L5.7160196,6.9898829C5.7160192,6.9898834 -3.8919735,28.608834 12.993014,42.168178 12.993014,42.168178 -8.3429699,31.99867 3.6670208,3.4600541z M12.922041,0L64.001001,8.2603903C24.837604,24.359843,34.712486,39.398501,38.754524,43.705031L38.845398,43.800044 46.101,43.800044 46.101,47.355044 1.2119999,47.355044 1.2119999,43.800044 38.471766,43.800044 38.025221,43.452384C18.706147,28.080951,48.741713,10.380483,48.741713,10.380483L10.802998,1.9001124z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Pending_Invoice.svg b/icons/Pending_Invoice.svg
new file mode 100644 (file)
index 0000000..dd8f482
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 58.67 37.33"> \r<path d="M8.276001,22.832L21.276,22.832 21.276,25.165 8.276001,25.165z M39.101602,22.502859C38.790456,22.502859 38.519703,22.614655 38.299742,22.83485 38.079679,23.054845 37.967699,23.323137 37.967699,23.629029 37.967699,23.940322 38.079679,24.211015 38.299742,24.431008 38.519703,24.651204 38.790456,24.763 39.101602,24.763 39.412747,24.763 39.6836,24.651204 39.903562,24.431008 40.123524,24.211015 40.235604,23.940322 40.235604,23.629029 40.235604,23.323137 40.123524,23.054845 39.903562,22.83485 39.6836,22.614655 39.412747,22.502859 39.101602,22.502859z M8.276001,17.498L21.276,17.498 21.276,19.832 8.276001,19.832z M39.117199,13.175001C38.794456,13.175 38.514503,13.305097 38.288043,13.56289 38.070581,13.808984 37.96,14.134375 37.96,14.527665 37.96,14.669561 37.975498,14.885856 38.008092,15.173449L38.721568,21.739678 39.496133,21.739678 40.226506,15.169549C40.248602,14.935154 40.259,14.753059 40.259,14.621462 40.259,14.167074 40.152219,13.811684 39.941356,13.56559 39.720094,13.306297 39.442742,13.175 39.117199,13.175001z M8.276001,12.165L21.276,12.165 21.276,14.498 8.276001,14.498z M41.351661,8.4049996L42.987166,11.1992 46.201984,10.816396 46.225384,14.053533 49.199398,15.329347 47.59919,18.144579 49.538,20.735707 46.744888,22.376326 47.12649,25.589961 43.889374,25.610761 42.613366,28.587396 39.798354,26.985778 37.204538,28.926 35.567732,26.131768 32.353017,26.514573 32.329515,23.277436 29.355501,21.998921 30.95571,19.18639 29.017001,16.592562 31.810013,14.954343 31.428412,11.741007 34.665528,11.717506 35.941535,8.7433831 38.756548,10.342491z M2.8881359,2.7773094L2.8881359,34.554328 55.776487,34.554328 55.776487,2.7773094z M0,0L58.667002,0 58.667002,37.332999 0,37.332999z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Product_Box.svg b/icons/Product_Box.svg
new file mode 100644 (file)
index 0000000..9cb14f3
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 42.53 64.89"> \r<path d="M42.526999,2.0220003L41.231428,50.569268 12.752866,64.890996 11.295999,5.1781473z M31.717268,0L40.941,1.1314702 9.7095088,4.2877798 11.166618,64.000001 1.9426451,59.144501 0,2.91272z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Product_Box_With_Disc.svg b/icons/Product_Box_With_Disc.svg
new file mode 100644 (file)
index 0000000..01e34ac
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 59.52 64.89"> \r<path d="M42.5273,41.723001C43.526165,41.723001 44.334997,42.532689 44.334997,43.52985 44.334997,44.527212 43.526165,45.337 42.5273,45.337 41.529735,45.337 40.721001,44.527212 40.721001,43.52985 40.721001,42.532689 41.529735,41.723001 42.5273,41.723001z M42.526852,38.675563C39.845855,38.675563 37.672762,40.848755 37.672762,43.529648 37.672762,46.21204 39.845855,48.383831 42.526852,48.383831 45.209139,48.383831 47.382336,46.21204 47.382336,43.529648 47.382336,40.848755 45.209139,38.675563 42.526852,38.675563z M42.526852,26.538999C51.91102,26.538999 59.519001,34.145677 59.519001,43.529648 59.519001,52.91382 51.91102,60.521997 42.526852,60.521997 33.142777,60.521997 25.535999,52.91382 25.536,43.529648 25.535999,34.145677 33.142777,26.538999 42.526852,26.538999z M42.526997,2.0219994L41.908512,25.210945C32.078032,25.541048 24.17721,33.62052 24.17721,43.530008 24.17721,48.569153 26.220764,53.138992 29.52009,56.459223L12.752867,64.890997 11.296,5.1781483z M31.717268,0L40.941,1.1314697 9.709528,4.2877789 11.166617,63.999998 1.9426556,59.144499 0,2.9126587z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Receipt.svg b/icons/Receipt.svg
new file mode 100644 (file)
index 0000000..e119c21
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 49.88 64"> \r<path d="M9.4910002,33.103001L9.4910002,35.531002 40.387001,35.531002 40.387001,33.103001z M9.4910002,23.172001L9.4910002,25.598999 40.387001,25.598999 40.387001,23.172001z M9.4910002,13.241L9.4910002,15.669 40.387001,15.669 40.387001,13.241z M0,0L49.875999,0 49.875999,63.796902 45.821415,58.2383 41.628731,52.230499 37.570148,58.330799 33.498562,64 33.144367,64 28.949081,58.248798 24.756399,52.241001 20.697817,58.341202 16.634033,64 16.264233,64 12.076752,58.259201 7.8840885,52.251301 3.8254242,58.351601 0,63.677101z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Sand_Clock__01.svg b/icons/Sand_Clock__01.svg
new file mode 100644 (file)
index 0000000..fb95791
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 16.58 21.33"> \r<path d="M2.8319826947934,2.93701099610189L2.8319826947934,4.06701492524007C2.83198293321198,5.3080122396932 6.11456378572052,10.2220117971883 6.11456378572052,10.8430139944539 6.11456378572052,11.4699966833577 2.83198293321198,16.3860104010091 2.8319826947934,17.6260006353841L2.8319826947934,18.7489864752279 4.45967372529572,18.7489864752279 4.45967372529572,18.3070003912435C5.37756856553619,15.6740057394491,7.72785457246368,12.6769974157796,7.72785457246368,12.6769974157796L7.72785457246368,10.4429895803914C7.72785457246368,8.77499031281332,5.52866777055328,6.96999859070638,5.52866777055328,6.96999859070638L10.8632348405606,6.96999859070638C10.8632348405606,6.96999859070638,8.65754731767242,8.25100445008138,8.65754731767242,10.4429895803914L8.65754731767242,12.6769974157796C8.65754731767242,12.6769974157796,10.7395356523282,15.3999884054647,11.932228408981,18.3070003912435L11.932228408981,18.7489864752279 13.5520194398648,18.7489864752279 13.5520194398648,17.6260006353841C13.5520194398648,16.3860104010091 10.2434399949796,11.4630081579671 10.2434399949796,10.8430139944539 10.2434399949796,10.2220117971883 13.5520194398648,5.3080122396932 13.5520194398648,4.06701492524007L13.5520194398648,2.93701099610189z M0.200598441291504,0L16.5780003892667,0 16.5780003892667,1.56600879883626 15.6966060029752,1.56600879883626 15.6966060029752,2.93701099610189 14.6262124406583,2.93701099610189 14.6262124406583,4.06701492524007C14.6262124406583,5.79101347184042 11.5247319566495,10.4779932425008 11.3606322633511,10.8430139944539 11.5247319566495,11.2149927542196 14.6262124406583,15.8949835226522 14.6262124406583,17.6260006353841L14.6262124406583,18.7489864752279 15.6966060029752,18.7489864752279 15.6966060029752,19.7699825689779 16.3775037156827,19.7699825689779 16.3775037156827,21.3329994604574 0,21.3329994604574 0,19.7699825689779 0.690095566440277,19.7699825689779 0.690095566440277,18.7489864752279 1.75778945558136,18.7489864752279 1.75778945558136,17.6260006353841C1.75778957479065,15.9020025656209 4.85937150590485,11.1870081350789 5.00526984803741,10.8500025198446 4.85937150590485,10.5119898245321 1.75778957479065,5.79900907730917 1.75778945558136,4.06701492524007L1.75778945558136,2.93701099610189 0.690095566440277,2.93701099610189 0.690095566440277,1.56600879883626 0.200598441291504,1.56600879883626z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Save_As.svg b/icons/Save_As.svg
new file mode 100644 (file)
index 0000000..459843d
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 52.52 54.01"> \r<path d="M15.342,43.641001L15.342,48.223001 44.771999,48.223001 44.771999,43.641001z M19.417,8.7200002L25.077,8.7200002 25.077,20.264 19.417,20.264z M7.6669996,8.6700003L15.142873,8.6700003 15.142873,22.531861 44.772419,22.531861 44.772419,8.6700003 52.521,8.6700003 52.521,54.011 7.6669996,54.011z M11.75,0.06000042L17.41,0.06000042 17.41,6 11.75,6z M37.105419,0L44.854,0 44.854,6 42.10524,6 42.10524,6.0100532 37.105419,6.0100532z M0,0L7.475813,0 7.475813,6 4.9999998,6 4.9999998,45.341002 0,45.341002z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Scale.svg b/icons/Scale.svg
new file mode 100644 (file)
index 0000000..149a0bd
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 42.67 32.9"> \r<path d="M36.142006,10.962172L32.702682,19.484018 39.562656,19.484018z M21.377508,3.9540111C20.638903,3.9540111 20.040033,4.5530071 20.040033,5.2910022 20.040033,6.0299968 20.638903,6.628993 21.377508,6.6289934 22.116112,6.628993 22.714981,6.0299968 22.714981,5.2910022 22.714981,4.5530071 22.116112,3.9540111 21.377508,3.9540111z M6.6772561,2.9800028L2.754442,12.676995 10.570013,12.676995z M22.358694,0L23.716986,0.50600021 22.821655,2.9272763 22.930405,2.9933538C23.667496,3.4914021,24.152054,4.3347625,24.152054,5.2910132L24.149601,5.3880271 36.3316,8.6201219C36.687801,8.7148008,36.912186,9.0652198,36.856457,9.4242076L36.854034,9.4358653 40.896374,19.484018 42.039047,19.484018C42.379021,19.484018 42.668999,19.764019 42.668999,20.110018 42.668999,20.435331 42.414135,20.702635 42.10215,20.734777L42.051029,20.737402 42.044209,20.979973C41.883854,23.824837 39.268093,26.088999 36.061001,26.088999 32.853897,26.088999 30.238142,23.824837 30.077787,20.979973L30.070986,20.738018 30.069948,20.738018C29.729973,20.738018 29.449993,20.457018 29.449993,20.110018 29.449993,19.764019 29.729973,19.484018 30.069948,19.484018L31.367119,19.484018 35.273426,9.8214015 23.728537,6.7583441 23.678848,6.8401408C23.529467,7.0612735,23.349003,7.2596955,23.143724,7.429131L23.073011,7.482017 23.073011,29.562002 40.337971,29.562002 40.337971,32.895 2.5100434,32.895 2.5100434,29.562002 19.739973,29.562002 19.739973,7.5201239 19.618309,7.429131C19.002472,6.9208245,18.60998,6.1516399,18.60998,5.2910132L18.611324,5.2378539 7.7520838,2.3584441 11.894357,12.676995 12.589052,12.676995C12.939026,12.676995 13.219004,12.957995 13.219004,13.303996 13.219004,13.629309 12.97293,13.895735 12.6538,13.927768L12.601033,13.9304 12.594211,14.173107C12.433858,17.018515 9.818099,19.284 6.611002,19.284 3.4039052,19.284 0.78814697,17.018515 0.62779361,14.173107L0.62097508,13.93055 0.56520373,13.927768C0.24607517,13.895735 0,13.629309 0,13.303996 0,12.957995 0.27997872,12.676995 0.62995219,12.676995L1.4269502,12.676995 5.9680638,1.4442006 5.9658251,1.4318957C5.9537902,1.3398513 5.9600406,1.243728 5.9875469,1.1482275 6.0688004,0.83705931 6.3415871,0.62754457 6.6449142,0.61463474 6.7149138,0.61165541 6.7865396,0.61914628 6.8578115,0.63827442L19.011492,3.8599045 19.083187,3.7418858C19.581125,3.0047764,20.424408,2.5200102,21.381016,2.5200097L21.417152,2.520924z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Shopping_02.svg b/icons/Shopping_02.svg
new file mode 100644 (file)
index 0000000..bbe6144
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 21.85 19.18"> \r<path d="M8.5322104,15.636C9.5086436,15.636 10.304,16.424511 10.304,17.40625 10.304,18.381687 9.5086436,19.178 8.5322104,19.178 7.5571065,19.178 6.763,18.381687 6.763,17.40625 6.763,16.424511 7.5571065,15.636 8.5322104,15.636z M15.709601,15.635999C16.684744,15.635999 17.479,16.424511 17.479,17.406249 17.479,18.381687 16.684744,19.177999 15.709601,19.177999 14.726556,19.177999 13.931,18.381687 13.931,17.406249 13.931,16.424511 14.726556,15.635999 15.709601,15.635999z M7.3562694,10.925014L7.5750194,12.670999 17.534672,12.670999 18.052872,10.925014z M6.9174585,7.4096632L7.1505189,9.2737737 18.542473,9.2737737 19.093274,7.4096632z M0.69618416,0.00016880035C0.7723217,0.0019874573 0.85144043,0.01855278 0.93176079,0.05206871 4.5906458,1.7786493 6.2937679,2.628911 6.3992381,3.311264 6.5112081,3.9870167 6.7065182,5.6316261 6.7065182,5.6316261L6.7065182,5.638217 20.224775,5.6316261C21.852377,5.6316261,21.206576,7.3212185,21.206576,7.3152981L19.024273,13.796853C19.024273,13.796853,18.843273,14.761,17.921372,14.761L6.9174585,14.761C5.8172073,14.761 5.7729273,13.553442 5.7729273,13.553442 5.7729273,13.553442 4.6036453,4.8757296 4.5476761,4.3503742 4.4851761,3.8250189 3.8158951,3.4357195 3.8158951,3.4357195L0.93176079,2.0923948C-0.49722481,1.3430805,-0.039812088,-0.017410278,0.69618416,0.00016880035z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Show.svg b/icons/Show.svg
new file mode 100644 (file)
index 0000000..0685f13
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 42.67 23.18"> \r<path d="M13.068723,6.3391984C10.02902,7.8790036 7.4492722,9.9387431 5.6594467,11.588534 8.9291277,14.598154 14.83855,19.027594 21.327917,19.027594 27.817283,19.027594 33.736705,14.598154 36.996387,11.588534 35.21656,9.9387431 32.626813,7.8790036 29.597109,6.3391984 29.837086,7.0291111 29.967073,7.74902 29.967073,8.508924 29.967073,12.668398 26.097451,16.037971 21.327917,16.037971 16.558382,16.037971 12.698759,12.668398 12.698759,8.508924 12.698759,7.74902 12.828746,7.0291111 13.068723,6.3391984z M21.327917,0C33.106767,0 42.665833,11.588534 42.665833,11.588534 42.665833,11.588534 33.106767,23.177069 21.327917,23.177069 9.5490665,23.177069 0,11.588534 0,11.588534 0,11.588534 9.5490665,0 21.327917,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Sync___03.svg b/icons/Sync___03.svg
new file mode 100644 (file)
index 0000000..28e1978
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 21.33 14.84"> \r<path d="M4.2225809,2.401L8.4471716,6.626348 5.7824216,6.626348 5.7824216,11.989755 10.702999,11.989755 10.702999,14.844001 2.9270048,14.844001 2.9270048,6.626348 0,6.626348z M9.8840003,0L18.478946,0 18.478946,7.8908901 21.333,7.8908901 17.110467,12.115 12.885933,7.8908901 15.62419,7.8908901 15.62419,2.8542242 9.8840003,2.8542242z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Team_02.svg b/icons/Team_02.svg
new file mode 100644 (file)
index 0000000..e5871ba
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 64 41.15"> \r<path d="M11.79943,19.497001C12.699824,20.018496 14.249915,20.826788 16.057805,21.593681 15.943905,21.71788 15.822206,21.834679 15.714106,21.964578 12.496025,25.831043 11.116434,32.544481 11.058534,32.829179L10.733636,34.440764 16.869,36.261448 16.573401,41.125904 5.5533466,41.148003 5.9289846,34.94276 0,33.184376C0,33.184376 1.3124924,26.675635 4.2740545,23.115868 6.9530883,19.896797 11.279833,19.598299 11.79943,19.497001z M39.379139,19.463003C39.898043,19.564107 44.224867,19.862714 46.903879,23.081803 49.866194,26.641704 51.178003,33.150684 51.178003,33.150684L45.248968,34.909233 45.625273,41.114506 32.019104,41.087204 32.019104,41.120705 18.375731,41.148005 18.752132,34.942533 12.823001,33.184083C12.823,33.184083 14.134907,26.675104 17.097123,23.115204 19.775537,19.896015 24.102961,19.597507 24.621862,19.496204 26.010571,20.300127 28.932486,21.787767 31.982,22.750095L31.982,22.731396C35.044518,21.782867,37.984634,20.270225,39.379139,19.463003z M52.201269,19.463001C52.720064,19.564102 57.047541,19.862703 59.725924,23.081717 62.688108,26.641534 63.999998,33.150364 63.999998,33.150364L58.071035,34.908872 58.447332,41.114 47.425898,41.091999 47.130999,36.227478 53.268263,34.40667 52.942766,32.795162C52.884867,32.510261 51.503275,25.79683 48.287191,21.930413 48.181093,21.802412 48.061293,21.687512 47.948595,21.565111 49.753984,20.797608 51.301474,19.983804 52.201269,19.463001z M45.059782,1.5258789E-05C53.421171,-0.013179779 51.684465,9.0731459 51.684465,9.0731459 53.970839,10.88652 50.896074,13.408985 50.896074,13.408985 50.187078,15.774052 49.240492,16.720039 49.240492,16.720039 48.058203,20.425187 44.62204,19.725397 44.62204,19.725396L44.62204,19.718698C44.441643,19.753397 41.216476,20.321189 40.06739,16.720039 40.06739,16.720039 39.691694,16.342244 39.235998,15.473156 39.373398,15.151961 39.510696,14.804965 39.641594,14.413871 40.338186,13.735381 41.520473,12.3243 41.506775,10.609024 41.500975,10.014933 41.349976,9.2188931 40.754183,8.4421043 40.882481,6.9582453 40.87668,4.0663147 39.393597,1.7079487 40.469685,0.64460945 42.110968,-0.082307816 44.65394,0.0075950623 44.791796,0.0027275085 44.927061,0.00022506714 45.059782,1.5258789E-05z M31.425911,1.5258789E-05C31.558647,0.00022506714 31.693928,0.0027275085 31.8318,0.0075950623 40.655052,-0.30392456 38.86268,9.0731459 38.86268,9.0731459 41.148571,10.88652 38.074249,13.408985 38.074249,13.408985 37.36462,15.774052 36.418583,16.720039 36.418583,16.720039 35.236237,20.425187 31.7999,19.725397 31.7999,19.725396L31.7999,19.718698C31.618893,19.753397 28.394164,20.321189 27.244418,16.720039 27.244418,16.720039 26.29838,15.774052 25.588752,13.408985 25.588752,13.408985 22.51443,10.88652 24.800321,9.0731459 24.800321,9.0731459 23.063523,-0.013179779 31.425911,1.5258789E-05z M18.603106,1.5258789E-05C18.735829,0.00022506714 18.871097,0.0027275085 19.008955,0.0075950623 21.551277,-0.082307816 23.192591,0.64436531 24.2688,1.707098 22.785087,4.0658855 22.777887,6.9593449 22.907388,8.4421043 22.311683,9.2188931 22.160682,10.014933 22.155481,10.609024 22.143082,12.3243 23.326092,13.735381 24.021997,14.413871 24.152899,14.804766 24.289599,15.151661 24.427001,15.472757 23.971897,16.342144 23.596194,16.720039 23.596194,16.720039 22.413284,20.425187 18.977655,19.725397 18.977655,19.725396L18.977655,19.718698C18.796754,19.753397 15.571427,20.321189 14.422318,16.720039 14.422317,16.720039 13.476409,15.774052 12.766703,13.408985 12.766703,13.408985 9.6924677,10.88652 11.978297,9.0731459 11.978297,9.0731459 10.241554,-0.013179779 18.603106,1.5258789E-05z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Timer.svg b/icons/Timer.svg
new file mode 100644 (file)
index 0000000..0d67191
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 55.41 64"> \r<path d="M27.706001,20.639925C17.439005,20.639925,10.268993,30.859642,12.889994,41.079359L27.706001,35.389559z M27.706001,16.620006C28.129982,16.620005 28.553993,16.640024 28.973,16.66993 31.060005,16.799932 33.058998,17.260004 34.920996,17.989966 35.663977,18.279876 36.385992,18.619956 37.084997,18.99995 37.63999,19.29987 38.181982,19.62994 38.707983,19.979907 39.749975,20.68985 40.726994,21.499889 41.616978,22.389881 45.178989,25.94973 47.381992,30.859642 47.381992,36.299448 47.381992,41.729368 45.178989,46.649168 41.616978,50.209137 40.726994,51.099129 39.749975,51.909046 38.707983,52.609104 38.181982,52.959068 37.644995,53.299026 37.084997,53.589058 36.385992,53.979065 35.663977,54.309013 34.920996,54.599045 33.058998,55.339016 31.060005,55.798965 28.973,55.928967 28.553993,55.948986 28.129982,55.969006 27.706001,55.969006 24.308998,55.969006 21.11799,55.109039 18.327982,53.589058 17.775003,53.299026 17.232004,52.959068 16.704996,52.609104 15.663004,51.909046 14.685984,51.099129 13.797007,50.209137 10.236003,46.649168 8.0319938,41.729368 8.0319939,36.299448 8.0319938,30.859642 10.236003,25.94973 13.797007,22.389881 14.685984,21.499889 15.659007,20.68985 16.704996,19.979907 17.232004,19.62994 17.768991,19.29987 18.327982,18.99995 21.11799,17.489979 24.308998,16.620005 27.706001,16.620006z M27.706499,13.290001C23.717427,13.290001 19.95636,14.320001 16.6843,16.110001 14.725266,17.190001 12.944233,18.530001 11.386206,20.110001 7.2571309,24.270001 4.7000849,29.990001 4.7000847,36.300001 4.7000849,48.990002 15.022271,59.299999 27.706499,59.299999 40.396729,59.299999 50.714912,48.990002 50.714912,36.300001 50.714912,23.610001 40.396729,13.290001 27.706499,13.290001z M10.88799,7.7400103C12.433994,7.7400103 13.845998,8.3001432 14.931,9.240366 11.228991,10.990781 7.9459826,13.491373 5.2639751,16.532094 4.8999748,15.741906 4.6889744,14.861698 4.6889744,13.94148 4.6889744,10.510667 7.4619814,7.7400103 10.88799,7.7400103z M20.614371,0L34.796627,0C35.593641,0 36.239653,0.86000061 36.239653,1.9000006 36.239653,2.9500008 35.593641,3.8000011 34.796627,3.8000011L32.396584,3.8000011 32.396584,9.000001C45.46682,11.220001 55.414997,22.600001 55.414997,36.300001 55.414997,51.600002 43.007774,64 27.706499,64 12.408224,64 0,51.600002 0,36.300001 0,29.460001 2.4800448,23.220001 6.5781183,18.390001 9.2331666,15.250001 12.570227,12.730001 16.357295,11.030001 18.453333,10.080001 20.685373,9.3900008 23.017415,9.000001L23.017415,3.8000011 20.614371,3.8000011C19.822357,3.8000011 19.175345,2.9500008 19.175345,1.9000006 19.175345,0.86000061 19.822357,0 20.614371,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/User_Group.svg b/icons/User_Group.svg
new file mode 100644 (file)
index 0000000..d9a9079
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 64 45.42"> \r<path d="M49.064877,21.829L55.408657,21.829C60.154791,21.829,64,25.675322,64,30.421926L64,41.675001 49.289984,41.675001 49.289984,30.72202C49.289984,27.545084 48.18725,24.626543 46.359,22.30619 47.215623,22.021696 48.111648,21.829 49.064877,21.829z M8.5926628,21.829L14.93779,21.829C15.604393,21.829 16.244997,21.922698 16.870001,22.066595 14.92469,24.422048 13.757984,27.437487 13.757984,30.72202L13.757984,41.674999 0,41.674999 0,30.421926C0,25.675323,3.8503647,21.829,8.5926628,21.829z M27.382854,19.500999L35.665446,19.500999C41.861966,19.501,46.884,24.5238,46.884,30.721701L46.884,45.415003 16.163002,45.415003 16.163002,30.721701C16.163002,24.5238,21.185135,19.501,27.382854,19.500999z M52.44305,6.894001C56.282557,6.894001 59.396999,10.009309 59.396999,13.84967 59.396999,17.692832 56.282557,20.808 52.44305,20.808 48.600643,20.808 45.485,17.692832 45.485001,13.84967 45.485,10.009309 48.600643,6.894001 52.44305,6.894001z M11.970249,6.894001C15.810389,6.894001 18.925001,10.009309 18.925001,13.84967 18.925001,17.692832 15.810389,20.808 11.970249,20.808 8.1276245,20.808 5.0130005,17.692832 5.0130005,13.84967 5.0130005,10.009309 8.1276245,6.894001 11.970249,6.894001z M31.790152,0C31.946936,0 32.102792,0.0039710999 32.257627,0.011817932 32.412461,0.019664764 32.566274,0.031389236 32.718968,0.046892166 32.871663,0.062397003 33.023241,0.081682205 33.173606,0.10465431 33.323971,0.12762451 33.473124,0.15428162 33.620968,0.18452835 33.768812,0.21477699 33.915349,0.24861526 34.060483,0.28594971 34.205617,0.32328415 34.349348,0.36411285 34.491582,0.40834427 34.633815,0.45257568 34.774549,0.50020599 34.913692,0.55114365 35.052833,0.6020813 35.190381,0.65632439 35.326241,0.71377754 35.462102,0.7712307 35.596273,0.83189392 35.728662,0.89567375 35.86105,0.95945358 35.991653,1.0263481 36.120379,1.096262 36.249105,1.1661777 36.375953,1.2391148 36.500826,1.3149757 36.625699,1.3908367 36.748598,1.4696236 36.869428,1.5512409 36.990258,1.6328564 37.109019,1.7173042 37.225616,1.8044853 37.342213,1.8916683 37.456645,1.9815845 37.568818,2.0741444 37.680991,2.1667004 37.790905,2.261898 37.898464,2.3596401 38.006023,2.4573841 38.111228,2.5576725 38.213983,2.6604099 38.316738,2.7631474 38.417043,2.8683357 38.514803,2.9758778 38.612563,3.0834217 38.707778,3.1933193 38.800354,3.3054771 38.892929,3.417635 38.982864,3.532053 39.070064,3.6486359 39.157263,3.7652187 39.241728,3.8839645 39.323362,4.0047817 39.404996,4.1255989 39.4838,4.2484856 39.559678,4.3733463 39.635556,4.498209 39.708509,4.6250458 39.77844,4.7537613 39.848372,4.8824768 39.915284,5.013073 39.979079,5.1454525 40.042874,5.277832 40.103553,5.4119968 40.161021,5.5478497 40.21849,5.6837044 40.272747,5.8212471 40.323697,5.9603853 40.374648,6.0995235 40.422293,6.2402554 40.466536,6.3824873 40.510779,6.5247192 40.55162,6.6684494 40.588965,6.8135853 40.626311,6.9587202 40.660159,7.1052599 40.690416,7.253108 40.720673,7.4009571 40.747338,7.5501146 40.770316,7.7004871 40.793294,7.8508587 40.812585,8.0024452 40.828094,8.1551504 40.843603,8.3078556 40.85533,8.4616804 40.86318,8.6165285 40.871029,8.7713766 40.875002,8.927249 40.875002,9.0840502 40.875002,9.2407866 40.871029,9.396595 40.86318,9.5513821 40.85533,9.7061691 40.843603,9.8599339 40.828094,10.012582 40.812585,10.16523 40.793294,10.31676 40.770316,10.467079 40.747338,10.617397 40.720673,10.766503 40.690416,10.914302 40.660159,11.0621 40.626311,11.208591 40.588965,11.353681 40.55162,11.498769 40.510779,11.642455 40.466536,11.784643 40.422293,11.926831 40.374648,12.067522 40.323697,12.20662 40.272747,12.345718 40.21849,12.483223 40.161021,12.61904 40.103553,12.754857 40.042874,12.888987 39.979079,13.021333 39.915284,13.153678 39.848372,13.284242 39.77844,13.412927 39.708509,13.541611 39.635556,13.668417 39.559678,13.793251 39.4838,13.918084 39.404996,14.040944 39.323362,14.161736 39.241728,14.282526 39.157263,14.401249 39.070064,14.517809 38.982864,14.634368 38.892929,14.748764 38.800354,14.860901 38.707778,14.973038 38.612563,15.082916 38.514803,15.19044 38.417043,15.297965 38.316738,15.403135 38.213983,15.505857 38.111228,15.608578 38.006023,15.70885 37.898464,15.806579 37.790905,15.904307 37.680991,15.999491 37.568818,16.092036 37.456645,16.184581 37.342213,16.274487 37.225616,16.361659 37.109019,16.44883 36.990258,16.533267 36.869428,16.614874 36.748598,16.696481 36.625699,16.775259 36.500826,16.851112 36.375953,16.926966 36.249105,16.999894 36.120379,17.069803 35.991653,17.139712 35.86105,17.206601 35.728662,17.270375 35.596273,17.334149 35.462102,17.394808 35.326241,17.452257 35.190381,17.509706 35.052833,17.563945 34.913692,17.61488 34.774549,17.665813 34.633815,17.713442 34.491582,17.75767 34.349348,17.801898 34.205617,17.842727 34.060483,17.88006 33.915349,17.917392 33.768812,17.95123 33.620968,17.981476 33.473124,18.011723 33.323971,18.038379 33.173606,18.061349 33.023241,18.08432 32.871663,18.103604 32.718968,18.119108 32.566274,18.134612 32.412461,18.146335 32.257627,18.154182 32.102792,18.162029 31.946936,18.166 31.790152,18.166 31.633411,18.166 31.477598,18.162029 31.322807,18.154182 31.168016,18.146335 31.014247,18.134612 30.861595,18.119108 30.708943,18.103604 30.557409,18.08432 30.407087,18.061349 30.256765,18.038379 30.107655,18.011723 29.959854,17.981476 29.81205,17.951229 29.665556,17.917392 29.520464,17.88006 29.375372,17.842727 29.231682,17.801899 29.089489,17.75767 28.947298,17.713442 28.806604,17.665813 28.667503,17.61488 28.528402,17.563945 28.390894,17.509706 28.255074,17.452257 28.119253,17.394808 27.985121,17.334149 27.852772,17.270375 27.720423,17.206601 27.589857,17.139712 27.46117,17.069803 27.332481,16.999894 27.205673,16.926966 27.080837,16.851112 26.956001,16.775259 26.833138,16.696481 26.712345,16.614874 26.591551,16.533267 26.472824,16.44883 26.356262,16.361659 26.2397,16.274487 26.125303,16.184581 26.013165,16.092036 25.901024,15.999491 25.791143,15.904307 25.683617,15.806579 25.57609,15.70885 25.470919,15.608578 25.368195,15.505857 25.265471,15.403135 25.165195,15.297965 25.067467,15.19044 24.969736,15.082916 24.87455,14.973038 24.782001,14.860901 24.689455,14.748764 24.599548,14.634368 24.512375,14.517809 24.425201,14.401249 24.340763,14.282526 24.259155,14.161736 24.177546,14.040944 24.098766,13.918084 24.022911,13.793251 23.947058,13.668418 23.874126,13.541611 23.804218,13.412927 23.734306,13.284242 23.667418,13.153678 23.603642,13.021333 23.539865,12.888987 23.479206,12.754857 23.421757,12.61904 23.364305,12.483223 23.310066,12.345718 23.25913,12.20662 23.208197,12.067522 23.160566,11.926831 23.116337,11.784643 23.072107,11.642455 23.031279,11.498769 22.993946,11.353681 22.956612,11.208591 22.922775,11.0621 22.892529,10.914302 22.86228,10.766503 22.835623,10.617397 22.812653,10.467079 22.789682,10.31676 22.770397,10.16523 22.754894,10.012582 22.739389,9.8599339 22.727665,9.7061691 22.719818,9.5513821 22.711971,9.396595 22.708,9.2407866 22.708,9.0840502 22.708,8.927249 22.711971,8.7713766 22.719818,8.6165285 22.727665,8.4616804 22.739389,8.3078556 22.754894,8.1551504 22.770397,8.0024452 22.789682,7.8508587 22.812653,7.7004871 22.835623,7.5501146 22.86228,7.4009571 22.892529,7.253108 22.922775,7.1052599 22.956612,6.9587202 22.993946,6.8135853 23.031279,6.6684494 23.072107,6.5247192 23.116337,6.3824873 23.160566,6.2402554 23.208197,6.0995235 23.25913,5.9603853 23.310066,5.8212471 23.364305,5.6837044 23.421757,5.5478497 23.479206,5.4119968 23.539865,5.277832 23.603642,5.1454525 23.667418,5.013073 23.734306,4.8824768 23.804218,4.7537613 23.874126,4.6250458 23.947058,4.498209 24.022911,4.3733463 24.098766,4.2484856 24.177546,4.1255989 24.259155,4.0047817 24.340763,3.8839645 24.425201,3.7652187 24.512375,3.6486359 24.599548,3.532053 24.689455,3.417635 24.782001,3.3054771 24.87455,3.1933193 24.969736,3.0834217 25.067467,2.9758778 25.165195,2.8683357 25.265471,2.7631474 25.368195,2.6604099 25.470919,2.5576725 25.57609,2.4573841 25.683617,2.3596401 25.791143,2.261898 25.901024,2.1667004 26.013165,2.0741444 26.125303,1.9815845 26.2397,1.8916683 26.356262,1.8044853 26.472824,1.7173042 26.591551,1.6328564 26.712345,1.5512409 26.833138,1.4696236 26.956001,1.3908367 27.080837,1.3149757 27.205673,1.2391148 27.332481,1.1661777 27.46117,1.096262 27.589857,1.0263481 27.720423,0.95945358 27.852772,0.89567375 27.985121,0.83189392 28.119253,0.7712307 28.255074,0.71377754 28.390894,0.65632439 28.528402,0.6020813 28.667503,0.55114365 28.806604,0.50020599 28.947298,0.45257568 29.089489,0.40834427 29.231682,0.36411285 29.375372,0.32328415 29.520464,0.28594971 29.665556,0.24861526 29.81205,0.21477699 29.959854,0.18452835 30.107655,0.15428162 30.256765,0.12762451 30.407087,0.10465431 30.557409,0.081682205 30.708943,0.062397003 30.861595,0.046892166 31.014247,0.031389236 31.168016,0.019664764 31.322807,0.011817932 31.477598,0.0039710999 31.633411,0 31.790152,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/Web.svg b/icons/Web.svg
new file mode 100644 (file)
index 0000000..25b0bff
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 63.96 55.49"> \r<path d="M50.88357,42.746001L59.590027,42.746001C56.096504,48.155969 50.809469,52.413583 44.573027,54.350999 45.970737,52.90976 47.224745,51.13244 48.298852,49.111627 49.305459,47.231608 50.167464,45.037704 50.88357,42.746001z M38.065026,42.746001L48.048027,42.746001C47.439939,44.587245 46.728354,46.341187 45.930169,47.842523 43.669814,52.053521 40.84687,54.640885 37.959027,55.361001z M24.647027,42.746001L35.367027,42.746001 35.262227,55.488C32.137811,55.014012 29.063614,52.292775 26.688022,47.680886 25.906777,46.167821 25.232963,44.597558 24.647027,42.746001z M53.054509,29.353L63.962029,29.353C63.721714,33.179835,62.721659,36.806071,61.108366,40.055001L51.624027,40.055001C52.430874,36.754069,52.924301,33.140836,53.054509,29.353z M38.170128,29.353L50.361026,29.353C50.221024,33.179835,49.691115,36.79847,48.850001,40.055001L38.088027,40.055001z M32.477137,29.353L35.479026,29.353 35.390431,40.055001 23.899201,40.055001C23.759927,39.485995,23.64811,38.893491,23.532027,38.304984L30.852927,30.983315z M51.817026,15.522L61.286795,15.522C62.917055,18.915422,63.87343,22.666856,63.999027,26.663L53.091095,26.663C53.041697,22.712358,52.597707,18.959623,51.817026,15.522z M38.288123,15.522L49.039695,15.522C49.859855,18.906222,50.34363,22.670656,50.397027,26.663L38.201027,26.663z M24.1148,15.522L35.598027,15.522 35.507425,26.663 22.573027,26.663C22.690217,22.670656,23.237161,18.893221,24.1148,15.522z M45.009026,1.2940006C51.193827,3.329155,56.408026,7.3724136,59.811028,12.823001L51.112427,12.823001C50.436027,10.537905 49.616326,8.4791198 48.653526,6.5936909 47.606526,4.5545464 46.381826,2.7536612 45.009026,1.2940006z M28.387008,1.1539993C26.986008,2.5949659 25.728007,4.3719254 24.651007,6.393878 21.713005,11.898751 19.917006,19.712571 19.846004,27.959381L19.840006,27.958382C19.837006,28.406371,19.857006,28.84236,19.865005,29.28435L29.154008,29.28435 14.578003,43.862014 0,29.28435 8.972002,29.28435C8.9510021,28.811361 8.8980026,28.347372 8.9010029,27.872383 9.0060024,15.41567 17.196005,4.6269188 28.387008,1.1539993z M38.41373,0.17300034C41.294617,0.93873405 44.0772,3.5754538 46.256366,7.8294334 47.026489,9.3294687 47.70371,10.988458 48.285027,12.823001L38.316027,12.823001z M35.725027,0L35.618126,12.823001 24.911027,12.823001C25.523703,11.000172 26.220979,9.1550832 27.022376,7.6654897 29.470279,3.0950184 32.587498,0.42575836 35.725027,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/add_user.svg b/icons/add_user.svg
new file mode 100644 (file)
index 0000000..24cea40
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 51.09 40.78"> \r<path d="M12.376258,17.731459C8.76828,17.731459 5.8464198,20.653926 5.8464198,24.257386 5.8464198,27.864745 8.76828,30.787913 12.376258,30.787913 15.981746,30.787913 18.904936,27.864745 18.904936,24.257386 18.904936,20.653926 15.981746,17.731459 12.376258,17.731459z M2.5768914,8.6820003L3.9987664,8.6820003 6.0390391,8.6820003 19.712233,8.6820003C18.903635,10.693038 18.445236,12.886413 18.445236,15.183288 18.445236,22.605104 23.106821,28.940932 29.650999,31.463706L29.650999,38.207831C29.650999,39.628913,28.497303,40.78,27.075508,40.78L25.819012,40.78 25.819012,39.244918 25.819012,38.256629C25.819012,34.131675,22.474524,30.787913,18.348938,30.787913L17.022142,30.787913C15.708346,31.726102 14.106752,32.279397 12.376258,32.279397 10.644464,32.279397 9.0442791,31.726102 7.7317843,30.787913L6.4010983,30.787913C3.6796775,30.787913,1.3060256,32.251397,0,34.42467L0,11.258832C0,9.8350673,1.153686,8.6820002,2.5768914,8.6820003z M31.151197,8.3334801L31.151197,14.830996 26.164248,14.830996 26.164248,14.832995 35.907551,24.577224 45.651054,14.832995 45.651054,14.830996 41.0952,14.830996 41.0952,8.3334801z M35.907551,0C44.29427,0 51.091,6.7969697 51.091,15.183201 51.091,23.57001 44.29427,30.367 35.907551,30.367 27.523733,30.367 20.723001,23.57001 20.723001,15.183201 20.723001,6.7969697 27.523733,0 35.907551,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/addressbook.svg b/icons/addressbook.svg
new file mode 100644 (file)
index 0000000..b943944
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 63.82 64"> \r<path d="M57.181991,44.716L61.113593,44.716C63.357936,44.716,63.823007,46.539116,63.823007,48.783258L63.823007,56.375742C63.823007,58.618883,63.357936,60.441999,61.113593,60.441999L57.181991,60.441999z M20.486206,26.10902C19.382179,26.10902 18.486156,27.004817 18.486156,28.109014 18.486156,29.21321 19.382179,30.109007 20.486206,30.109008L33.709534,30.109008C34.81356,30.109007 35.709583,29.21321 35.709583,28.109014 35.709583,27.004817 34.81356,26.10902 33.709534,26.10902z M57.181992,24.313006L61.113594,24.313006C63.357924,24.313006,63.822992,26.136237,63.822992,28.37978L63.822992,35.971729C63.822992,38.215074,63.357924,40.039006,61.113594,40.039006L57.181992,40.039006z M20.486206,13.758759C19.382179,13.758759 18.486156,14.654655 18.486156,15.758752 18.486156,16.862948 19.382179,17.758746 20.486206,17.758746L42.098742,17.758746C43.202769,17.758746 44.098791,16.862948 44.098791,15.758752 44.098791,14.654655 43.202769,13.758759 42.098742,13.758759z M57.181991,3.911005L61.113593,3.911005C63.357936,3.911005,63.823007,5.7343349,63.823007,7.9777508L63.823007,15.56926C63.823007,17.812474,63.357936,19.636004,61.113593,19.636003L57.181991,19.636003z M12.64901,0L49.048914,0C49.509925,0 49.943936,0.074199677 50.356946,0.21680069 51.915985,0.74559784 53.048013,2.1891937 53.109015,3.9109879L53.115016,4.0667877 53.115016,59.933016C53.115015,60.102015 53.102015,60.272013 53.082015,60.441015 52.831008,62.447008 51.122966,64.000002 49.048914,64.000002L12.64901,64.000002z M4.0664864,0L7.9030075,0 7.9030075,64.000002 4.0664864,64.000002C1.8237686,64.000002,0,62.176008,0,59.933016L0,4.0667877C0,2.2772942 1.1528549,0.75919914 2.7586517,0.21680069 3.1655998,0.074199677 3.605545,0 4.0664864,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/app.svg b/icons/app.svg
new file mode 100644 (file)
index 0000000..acfbeae
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 64 54.95"> \r<path d="M34.830002,23.177L50.209,33.786633 46.142063,36.551353 51.43,43.729195 48.013557,46.244999 42.632095,38.937447 38.731636,41.589001z M2.7487221,16.969C2.481751,16.969,2.263,17.185001,2.2630005,17.453302L2.2630005,51.393597C2.263,51.661697,2.481751,51.877998,2.7487221,51.877998L61.414398,51.877998C61.681198,51.877998,61.900002,51.661697,61.900002,51.393597L61.900002,17.453302C61.900002,17.185001,61.681198,16.969,61.414398,16.969z M2.8332348,11.555C2.5637019,11.555,2.3429999,11.771081,2.3430004,12.039357L2.3430004,14.463643C2.3429999,14.731719,2.5637019,14.948,2.8332348,14.948L61.489998,14.948C61.762199,14.948,61.980999,14.731719,61.980999,14.463643L61.980999,12.039357C61.980999,11.771081,61.762199,11.555,61.489998,11.555z M56.727539,3.151C56.057674,3.1509998,55.515999,3.6925464,55.515999,4.3644619L55.515999,6.5442982C55.515999,7.2162132,56.057674,7.7579999,56.727539,7.7579994L58.504757,7.7579994C59.175426,7.7579999,59.718998,7.2162132,59.718998,6.5442982L59.718998,4.3644619C59.718998,3.6925464,59.175426,3.1509998,58.504757,3.151z M48.970642,3.151C48.300774,3.151,47.758999,3.6925464,47.758999,4.3644619L47.758999,6.5442982C47.758999,7.2162137,48.300774,7.7579999,48.970642,7.7579994L50.747856,7.7579994C51.417824,7.7579999,51.961998,7.2162137,51.961998,6.5442982L51.961998,4.3644619C51.961998,3.6925464,51.417824,3.151,50.747856,3.151z M41.212669,3.151C40.542786,3.151,40.000999,3.6925464,40.000999,4.3644619L40.000999,6.5442982C40.000999,7.2162137,40.542786,7.7579999,41.212669,7.7579994L42.989929,7.7579994C43.660515,7.7579999,44.203999,7.2162137,44.203999,6.5442982L44.203999,4.3644619C44.203999,3.6925464,43.660515,3.151,42.989929,3.151z M2.6660194,0L61.334599,0C62.807301,0,64,1.1926299,64,2.66675L64,52.283897C64,53.755096,62.807301,54.947998,61.334599,54.947998L2.6660194,54.947998C1.19458,54.947998,0,53.755096,0,52.283897L0,2.66675C0,1.1926299,1.19458,0,2.6660194,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/arrow_down.svg b/icons/arrow_down.svg
new file mode 100644 (file)
index 0000000..89e7185
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 17.48 21.33"> \r<path d="M5.4634059,8.565L12.019194,8.565 12.019194,12.590991 17.484001,12.590991 8.7406901,21.333 0,12.590991 5.4619459,12.590991z M5.4840001,5.7329996L12.019,5.7329996 12.019,7.0559999 5.4840001,7.0559999z M5.4749998,2.8479996L12.009,2.8479996 12.009,4.1709995 5.4749998,4.1709995z M5.4840001,0L12.019,0 12.019,1.3229995 5.4840001,1.3229995z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/arrow_up.svg b/icons/arrow_up.svg
new file mode 100644 (file)
index 0000000..eedcaa8
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 17.48 21.33"> \r<path d="M5.4650004,20.01L12,20.01 12,21.333 5.4650004,21.333z M5.4750002,17.163L12.01,17.163 12.01,18.486 5.4750002,18.486z M5.4650004,14.277001L12,14.277001 12,15.6 5.4650004,15.6z M8.7434094,0L17.484999,8.7420531 12.0221,8.7420531 12.020799,12.768 5.4654496,12.768 5.4647196,8.7420531 0,8.7420531z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/arrowhead_down.svg b/icons/arrowhead_down.svg
new file mode 100644 (file)
index 0000000..e77ecc7
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 517 319"> \r<path d="M0,0L516.999987125397,0 258.499987125397,318.999981067944z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/arrowhead_up.svg b/icons/arrowhead_up.svg
new file mode 100644 (file)
index 0000000..7b47ae6
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 517 319"> \r<path d="M258.49918220978,0L516.997992024233,318.996997113514 0,318.996997113514z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/bill.svg b/icons/bill.svg
new file mode 100644 (file)
index 0000000..b891cd2
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 51.96 68.12"> \r<path d="M37.080555,47.576L38.291435,47.576 38.291435,48.950867C39.222343,48.979565,39.857681,49.200859,40.330234,49.437954L39.931873,50.797321C39.577709,50.635822 38.926773,50.294731 37.922974,50.294731 36.889175,50.294731 36.52071,50.82592 36.52071,51.328606 36.52071,51.935291 37.05196,52.273685 38.307034,52.776371 39.960472,53.396156 40.700001,54.193035 40.700001,55.508102 40.700001,56.763271 39.827686,57.872646 38.202846,58.138241L38.202846,59.659 36.992065,59.659 36.992065,58.226837C36.062454,58.198139,35.131546,57.929943,34.598999,57.575752L34.99876,56.187786C35.575504,56.528877 36.401024,56.838871 37.301933,56.838871 38.232841,56.838871 38.868179,56.380482 38.868179,55.672199 38.868179,55.005516 38.35133,54.578526 37.257637,54.180038 35.70829,53.617451 34.70319,52.909168 34.70319,51.5368 34.70319,50.266033 35.588604,49.289558 37.080555,49.023766z M19.890465,44.274742C18.776022,45.96743,17.721376,47.70702,16.707029,49.442707L19.890465,49.442707z M10.073271,39.625072L10.073271,49.442707 16.087261,49.442707C14.479343,47.218723 13.008019,44.855537 11.292008,42.739552 11.601892,42.252655 12.000272,41.852859 12.487246,41.54166 13.336102,42.229156 14.060065,42.85675 15.086012,43.593845 15.231905,43.696545 16.205755,44.364643 16.286449,44.35944 16.47394,44.343842 16.968815,43.468746 17.273399,43.091148 18.04686,42.134056 18.941313,41.134064 19.890465,40.161568L19.890465,39.625072z M29.507999,39.112L41.888,39.112 41.888,41.778999 29.507999,41.778999z M25.371981,35.487C25.884954,35.487 26.403128,35.487 26.9188,35.487 27.012497,35.684898 26.543821,35.932396 26.285934,36.192795 24.460527,38.015682 22.787514,40.10677 21.223696,42.322956L21.223696,50.775997 8.7399997,50.775997 8.7399997,38.291679 21.223696,38.291679 21.223696,38.847778C22.605225,37.545586,24.04265,36.358093,25.371981,35.487z M19.890465,26.353916C18.777222,28.046638,17.721376,29.784861,16.708328,31.520683L19.890465,31.520683z M29.507999,26.334999L41.888,26.334999 41.888,29.000999 29.507999,29.000999z M10.073271,21.705454L10.073271,31.520683 16.08596,31.520683C14.477943,29.296654 13.008019,26.934523 11.292008,24.817295 11.601892,24.330389 12.000272,23.931984 12.487246,23.620779 13.336102,24.306988 14.060065,24.935898 15.086012,25.674107 15.231905,25.775707 16.205755,26.443716 16.286449,26.437216 16.47394,26.424116 16.968815,25.546604 17.273399,25.169001 18.04686,24.211887 18.941313,23.213175 19.890465,22.240461L19.890465,21.705454z M25.371981,17.566C25.884954,17.566 26.403128,17.566 26.9188,17.566 27.012497,17.762503 26.543821,18.011305 26.285934,18.27051 24.460527,20.094633 22.787514,22.18586 21.223696,24.401989L21.223696,32.854 8.7399997,32.854 8.7399997,20.372036 21.223696,20.372036 21.223696,20.926744C22.605225,19.624626,24.04265,18.438412,25.371981,17.566z M4.8593511,5.1484103L4.8593511,62.978733 47.09613,62.978733 47.09613,18.101395 33.713406,18.101395 33.713406,5.1484103z M0,0L33.713406,0 36.46339,0 51.958,15.170411 51.958,68.122002 0,68.122002z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/cash_register.svg b/icons/cash_register.svg
new file mode 100644 (file)
index 0000000..64290ff
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 46.46 46.73"> \r<path d="M22.598998,38.592068C21.339798,38.592068 20.320298,39.61026 20.320298,40.870749 20.320298,42.127237 21.339798,43.149328 22.598998,43.149328 23.858198,43.149328 24.876298,42.127237 24.876298,40.870749 24.876298,39.61026 23.858198,38.592068 22.598998,38.592068z M15.611898,38.592068C14.352898,38.592068 13.335899,39.61026 13.335899,40.870749 13.335899,42.127237 14.352898,43.149328 15.611898,43.149328 16.871098,43.149328 17.890598,42.127237 17.890598,40.870749 17.890598,39.61026 16.871098,38.592068 15.611898,38.592068z M8.6275597,38.592068C7.371088,38.592068 6.3515587,39.61026 6.3515587,40.870749 6.3515587,42.127237 7.371088,43.149328 8.6275597,43.149328 9.8867188,43.149328 10.9063,42.127237 10.9063,40.870749 10.9063,39.61026 9.8867188,38.592068 8.6275597,38.592068z M22.598998,32.213223C21.339798,32.213223 20.320298,33.234114 20.320298,34.491903 20.320298,35.746992 21.339798,36.765284 22.598998,36.765284 23.858198,36.765284 24.876298,35.746992 24.876298,34.491903 24.876298,33.234114 23.858198,32.213223 22.598998,32.213223z M15.611898,32.213223C14.352898,32.213223 13.335899,33.234114 13.335899,34.491903 13.335899,35.746992 14.352898,36.765284 15.611898,36.765284 16.871098,36.765284 17.890598,35.746992 17.890598,34.491903 17.890598,33.234114 16.871098,32.213223 15.611898,32.213223z M8.6275597,32.213223C7.371088,32.213223 6.3515587,33.234114 6.3515587,34.491903 6.3515587,35.746992 7.371088,36.765284 8.6275597,36.765284 9.8867188,36.765284 10.9063,35.746992 10.9063,34.491903 10.9063,33.234114 9.8867188,32.213223 8.6275597,32.213223z M25.247298,26.318773C23.990998,26.318773 22.969998,27.338264 22.969998,28.593554 22.969998,29.853843 23.990998,30.870834 25.247298,30.870834 26.505198,30.870834 27.524798,29.853843 27.524798,28.593554 27.524798,27.338264 26.505198,26.318773 25.247298,26.318773z M18.263099,26.318773C17.003899,26.318773 15.984398,27.338264 15.984398,28.593554 15.984398,29.853843 17.003899,30.870834 18.263099,30.870834 19.522099,30.870834 20.541598,29.853843 20.541598,28.593554 20.541598,27.338264 19.522099,26.318773 18.263099,26.318773z M11.277298,26.318773C10.018198,26.318773 8.9986591,27.338264 8.9986591,28.593554 8.9986591,29.853843 10.018198,30.870834 11.277298,30.870834 12.535198,30.870834 13.554699,29.853843 13.554699,28.593554 13.554699,27.338264 12.535198,26.318773 11.277298,26.318773z M41.420387,16.688001L46.457,16.688001 46.457,44.711861 46.457,44.791258C46.457,45.866825,45.586082,46.734001,44.513055,46.734001L33.238,46.734001 33.238,44.711861 33.238,38.075262C33.238,32.096337,36.533573,27.809967,41.420387,25.008051z M17.661498,3.4609098C17.361898,3.4609098,17.117199,3.705658,17.117199,4.0050955L17.117199,9.3136396C17.117199,9.615757,17.361898,9.8592949,17.661498,9.8592944L36.756498,9.8592944C37.058498,9.8592949,37.302098,9.615757,37.302098,9.3136396L37.302098,4.0050955C37.302098,3.705658,37.058498,3.4609098,36.756498,3.4609098z M16.200598,0L38.218898,0C40.162698,0,41.740998,1.5832357,41.740998,3.5259695L41.740998,9.7941055C41.740998,11.739399,40.162698,13.314985,38.218898,13.314985L29.744798,13.314985 29.744798,16.687356 38.663898,16.687356 38.663898,24.083092C33.774798,26.890368,30.479098,32.096024,30.479098,38.075073L30.479098,44.711815 30.479098,46.733997 1.9439697,46.733997C0.87109375,46.733997,0,45.866806,0,44.791214L0,44.711815 0,38.075073C0,32.096024,3.2955284,26.890368,8.183588,24.083092L8.183588,16.687356 24.671898,16.687356 24.671898,13.314985 16.200598,13.314985C14.256498,13.314985,12.675798,11.739399,12.675798,9.7941055L12.675798,3.5259695C12.675798,1.5832357,14.256498,0,16.200598,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/cheque.svg b/icons/cheque.svg
new file mode 100644 (file)
index 0000000..8a3148d
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 60.01 40.46"> \r<path d="M58.176777,26.829075C58.47649,26.833259,58.759991,27.012973,58.877216,27.306997L59.847118,29.691175C60.00732,30.087703,59.817318,30.531837,59.42532,30.692548L49.082989,34.901863C48.68969,35.063976,48.241688,34.875164,48.082985,34.483333L47.111485,32.094455C46.950184,31.703025,47.140182,31.256492,47.533386,31.09758L57.877213,26.885666C57.975163,26.845787,58.07687,26.827678,58.176777,26.829075z M57.167923,24.683122C57.546432,24.689113,57.904846,24.916862,58.055298,25.290353L58.373001,26.065735C58.113796,26.028637,57.841492,26.054035,57.583988,26.157533L47.23481,30.368332C46.445694,30.691925,46.062889,31.598802,46.385796,32.392383L47.31921,34.68993 45.791885,35.308315C45.496479,35.43071,45.180073,35.381912,44.926067,35.222416L34.729294,39.373417C34.528889,39.453514,34.315086,39.420314,34.143383,39.316719L29.323,38.973625 32.539253,35.359111C32.583557,35.165718,32.71106,34.992622,32.908863,34.914524L43.112236,30.759622C43.185238,30.471229,43.372742,30.214636,43.669449,30.094339L56.789673,24.753868C56.913349,24.703769,57.041752,24.681125,57.167923,24.683122z M42.066566,16.710197C41.657299,16.728662 41.265518,16.988847 41.103859,17.530088 40.529564,19.444797 40.512863,20.166801 40.267963,21.495006 39.21067,20.909004 38.156078,19.901798 37.119381,19.255996 36.536087,18.890695 35.689892,19.171396 35.445095,19.960399 35.083195,21.134905 35.434692,22.279411 35.489395,23.397316 34.195103,22.764515 32.989407,22.01511 31.833216,21.110805 31.074018,20.517702 30.162525,21.052204 29.946224,21.875108 29.463228,23.705217 29.083231,26.656433 29.258728,28.530742 29.406128,30.04775 31.744616,29.767149 31.602514,28.25934 31.503616,27.211034 31.843613,24.936424 31.921713,23.89932 33.184704,24.721523 34.572697,25.632328 35.990589,26.198131 36.534985,26.418131 37.347282,26.199331 37.534981,25.574327 37.836781,24.544422 37.517982,23.129717 37.429482,22.122511 38.385174,22.792514 39.412472,23.82632 40.554462,24.211021 41.16246,24.418821 41.835556,24.212421 42.097256,23.589317 42.797749,21.920011 42.95155,20.216901 43.27425,18.450092 43.47937,17.320087 42.74868,16.67942 42.066566,16.710197z M39.455471,8.216231L7.7354245,21.041805 8.6223898,23.233316 40.336765,10.407653z M41.885155,0L51.397999,23.521019 9.5130043,40.456001 0,16.938284z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/clipboard.svg b/icons/clipboard.svg
new file mode 100644 (file)
index 0000000..c79c16c
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 46.83 64.34"> \r<path d="M5.1369983,14.389L5.1369983,59.294998 41.695999,59.294998 41.695999,14.389 35.229999,14.389 35.229999,20.865 11.604,20.865 11.604,14.389z M23.416599,2.7189999C21.47262,2.7190001 19.896,4.2111921 19.896,6.0525045 19.896,7.8918576 21.47262,9.3859997 23.416599,9.3859997 25.360378,9.3859997 26.937,7.8918576 26.937,6.0525045 26.937,4.2111921 25.360378,2.7190001 23.416599,2.7189999z M23.416601,0C26.83604,0,29.627556,2.5418637,29.798685,5.7406974L29.806993,6.0520005 35.229999,6.0520005 35.229999,7.9879994 46.833999,7.9879994 46.833999,64.338997 0,64.338997 0,7.9879994 11.604,7.9879994 11.604,6.0520005 17.026006,6.0520005 17.034313,5.7406974C17.205444,2.5418637,19.996965,0,23.416601,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/clock.svg b/icons/clock.svg
new file mode 100644 (file)
index 0000000..54d008e
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 64 64"> \r<path d="M51.380001,32.068995L57.516998,32.068995 57.516998,34.205996 51.380001,34.205996z M46.343998,17.240995L34.391994,32.732965 34.392021,32.733496C34.392021,33.209833,34.271416,33.657843,34.059044,34.048716L34.027981,34.099829 40.27599,45.104986 31.444658,35.482542 31.349895,35.477762C29.958689,35.336584 28.87499,34.162504 28.87499,32.733496 28.87499,31.305424 29.958689,30.131401 31.349895,29.990227L31.631977,29.975996z M31.448,6.0759869L31.330723,6.0774708C17.319036,6.4324751 6.0689697,17.902769 6.0689697,32.000002 6.0689697,32.440477 6.0799561,32.878397 6.1016703,33.31349L6.1380005,33.895815 6.1380005,32.068995 12.276,32.068995 12.276,34.205996 6.1634102,34.205996 6.1987343,34.610064C7.4860158,47.485987,18.194767,57.590624,31.330723,57.923525L31.448,57.925009 31.448,51.861994 33.584999,51.861994 33.584999,57.88236 33.995102,57.856363C47.383911,56.837332 57.930969,45.647802 57.930969,32.000002 57.930969,18.3503 47.383911,7.1633954 33.995102,6.1446152L33.584999,6.1186256 33.584999,12.069994 31.448,12.069994z M32,0C49.671997,-4.802082E-07 64,14.326997 64,32.000002 64,49.670996 49.671997,63.998999 32,63.998999 14.326965,63.998999 0,49.670996 0,32.000002 0,14.326997 14.326965,-4.802082E-07 32,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/closed.svg b/icons/closed.svg
new file mode 100644 (file)
index 0000000..a6c22a2
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 64 57.66"> \r<path d="M50.207851,38.417307L51.236454,38.417307C52.165241,38.417307 52.886784,38.672274 53.401089,39.182205 53.91539,39.692139 54.172543,40.391939 54.172543,41.281609 54.172543,42.223358 53.913219,42.967642 53.394577,43.514463 52.875935,44.061285 52.1609,44.334696 51.249477,44.334696L50.207851,44.334696z M27.461691,38.358719C28.177809,38.358719 28.742023,38.62779 29.154335,39.165932 29.566645,39.704073 29.7728,40.457037 29.7728,41.424826 29.7728,42.353554 29.560135,43.079393 29.134804,43.602345 28.709473,44.125298 28.134407,44.386774 27.409609,44.386774 26.706511,44.386774 26.137957,44.117702 25.703945,43.579561 25.269934,43.04142 25.052927,42.310154 25.052927,41.385765 25.052927,40.474398 25.269934,39.742046 25.703945,39.188715 26.137957,38.635385 26.723871,38.358719 27.461691,38.358719z M48.105064,36.705235L48.105064,46.040257 51.412228,46.040257C52.918247,46.040257 54.123714,45.606272 55.028629,44.738302 55.933544,43.870331 56.386002,42.709419 56.386002,41.255569 56.386002,38.222014 54.728077,36.705236 51.412228,36.705235z M41.008492,36.705235L41.008492,46.040257 46.607239,46.040257 46.607239,44.334696 43.111279,44.334696 43.111279,42.199488 46.164547,42.199488 46.164547,40.493925 43.111279,40.493925 43.111279,38.417307 46.392403,38.417307 46.392403,36.705235z M16.608807,36.705235L16.608807,46.040257 22.168491,46.040257 22.168491,44.334696 18.711592,44.334696 18.711592,36.705235z M36.731747,36.549001C36.236977,36.549002 35.768242,36.602164 35.32555,36.70849 34.882858,36.814817 34.493332,36.980816 34.156975,37.206489 33.820618,37.43216 33.554783,37.719676 33.359478,38.069034 33.164177,38.418392 33.066521,38.836103 33.066521,39.322166 33.066521,39.942764 33.245552,40.472227 33.603611,40.910551 33.96167,41.348877 34.505268,41.719934 35.234406,42.023724 35.520855,42.1409 35.787773,42.255907 36.03516,42.368742 36.282543,42.481579 36.496296,42.598755 36.676411,42.72027 36.856525,42.841785 36.998661,42.974152 37.102825,43.117367 37.206989,43.260582 37.259071,43.423326 37.259071,43.6056 37.259071,43.740135 37.226521,43.864906 37.161419,43.979912 37.096317,44.094917 36.997578,44.194735 36.865204,44.279362 36.73283,44.363989 36.567909,44.430172 36.370434,44.477911 36.172958,44.525648 35.941845,44.549517 35.677097,44.549517 35.225727,44.549517 34.778698,44.470316 34.336006,44.311911 33.893314,44.153507 33.483173,43.915899 33.105583,43.599091L33.105583,45.682219C33.444111,45.855814 33.844486,45.98601 34.306709,46.072805 34.768932,46.159603 35.256107,46.203001 35.768242,46.203001 36.267353,46.203001 36.741512,46.155262 37.190716,46.059786 37.639915,45.96431 38.033779,45.80699 38.372311,45.587828 38.710838,45.368664 38.97884,45.082233 39.176315,44.728537 39.373791,44.37484 39.47253,43.937599 39.47253,43.416817 39.47253,43.039249 39.416107,42.708336 39.303265,42.424074 39.190422,42.139814 39.027668,41.887018 38.815002,41.665686 38.602337,41.444353 38.347355,41.245806 38.050056,41.070042 37.752758,40.894278 37.417484,40.728277 37.044235,40.572042 36.770809,40.459208 36.525593,40.349627 36.308586,40.243299 36.091579,40.136974 35.907127,40.028477 35.755222,39.91781 35.603317,39.807146 35.486134,39.689968 35.403671,39.566282 35.321209,39.442596 35.27998,39.302637 35.27998,39.146402 35.27998,39.003187 35.316872,38.874077 35.390652,38.75907 35.464436,38.644064 35.568596,38.545333 35.70314,38.462875 35.837685,38.380419 36.002609,38.316406 36.197914,38.270837 36.393219,38.225269 36.610226,38.202484 36.84893,38.202484 37.022533,38.202484 37.205906,38.215504 37.39904,38.241543 37.592175,38.267582 37.786396,38.307726 37.981701,38.361974 38.177002,38.416223 38.366886,38.484575 38.551338,38.567032 38.735794,38.649489 38.906143,38.744967 39.062386,38.853462L39.062386,36.907039C38.74556,36.785522 38.399437,36.695471 38.024014,36.636882 37.648594,36.578295 37.217838,36.549002 36.731747,36.549001z M27.520281,36.549001C26.109745,36.549002 24.976976,37.004685 24.121973,37.916054 23.266972,38.827423 22.83947,40.020882 22.83947,41.496431 22.83947,42.893864 23.26046,44.027651 24.102444,44.897791 24.944426,45.767931 26.033792,46.203001 27.370548,46.203001 28.742023,46.203001 29.854179,45.753826 30.70701,44.855478 31.559841,43.957129 31.986258,42.774519 31.986258,41.307648 31.986258,39.879837 31.575033,38.729776 30.752581,37.857466 29.930128,36.985156 28.852695,36.549002 27.520281,36.549001z M12.676769,36.549001C11.205471,36.549002 10.008685,37.013366 9.0864115,37.942093 8.1641369,38.870822 7.7030001,40.08164 7.7030001,41.574549 7.7030001,42.976322 8.1131411,44.098173 8.9334221,44.940104 9.7537031,45.782036 10.879963,46.203001 12.312201,46.203001 13.410249,46.203001 14.299972,46.038086 14.98137,45.708258L14.98137,43.787874C14.299972,44.18714 13.549132,44.386774 12.72885,44.386774 11.869509,44.386774 11.185941,44.118788 10.678147,43.582815 10.170354,43.046844 9.9164581,42.327515 9.9164581,41.424826 9.9164581,40.483076 10.185545,39.736622 10.723719,39.185461 11.261892,38.634299 11.969331,38.358719 12.846034,38.358719 13.644614,38.358719 14.356393,38.545333 14.98137,38.91856L14.98137,36.894019C14.356393,36.664007,13.588193,36.549002,12.676769,36.549001z M0,22.988001L64,22.988001 64,57.655001 0,57.655001z M32.833599,0C36.169609,0 38.874001,2.7045078 38.874001,6.0405617 38.874001,6.5618038 38.807976,7.0676298 38.68383,7.5501318L38.670601,7.5967321 50.309998,18.988 45.942383,18.988 37.001518,10.410238 36.895023,10.511773C35.822327,11.486753 34.397354,12.081001 32.833599,12.081001 31.165545,12.081001 29.655396,11.40488 28.56226,10.311764L28.476191,10.22149 21.020786,17.373837 20.000202,18.988 19.338228,18.988 14.97,18.988 26.923227,7.2903976 26.915726,7.2578945C26.835258,6.8646832 26.793001,6.4575558 26.793001,6.0405617 26.793001,2.7045078 29.49749,0 32.833599,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/cloud_upload.svg b/icons/cloud_upload.svg
new file mode 100644 (file)
index 0000000..7773d03
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 285.3 191.5"> \r<path d="M141.71651408996,0C173.991599539178,-1.666194293648E-06 201.273871878046,26.8531941225519 210.323508718866,63.8502129366389 215.360953787225,62.3308533480158 220.665580252069,61.4491432955256 226.149238088983,61.4491432955256 258.825385549921,61.4491432955256 285.304999807733,90.5562561800471 285.304999807733,126.474766617059 285.304999807733,149.555287246942 274.294135549921,169.793278579949 257.800147512811,181.357762222528 251.157935598749,187.286854629754 242.73245952453,190.863942032098 233.548942068475,190.912983780145 231.097434500116,191.256337051629 228.64537761535,191.500996475457 226.149238088983,191.500996475457 223.697181204217,191.500996475457 221.28975627746,191.256337051629 218.882865408319,190.912983780145L141.71651408996,190.912983780145C143.633643606561,190.912983780145 145.4163737091,190.275929336785 146.843192556757,189.198017959832 149.295249441522,187.384968643426 150.900031546014,184.346836929559 150.900031546014,180.818806534051L150.900031546014,87.3709839632502 178.2269205841,117.409451370477C181.792899588007,121.32988441491 187.633002737421,121.32988441491 191.198981741327,117.409451370477 194.810142019647,113.44057167077 194.810142019647,107.070027237176 191.198981741327,103.101147537469L148.224860647577,55.8628052523127C147.734549978632,55.4213532259455 147.556617239374,55.2257508089533 147.333503225702,55.0295494844904 146.664710501092,54.4905937960139 146.442145803827,54.3434456636896 146.219031790155,54.2453430941096L144.435767629999,53.3636406710139C144.168570974725,53.3145874788752 143.945456961053,53.2164849092951 143.678275564569,53.1674317171564 143.499778250116,53.1183861544123 143.321296194452,53.0693367769709 143.143348196405,53.0202835848322 142.875602224725,53.0202835848322 142.608420828241,52.9712342073908 142.385306814569,52.9712342073908 142.162192800897,52.9221848299494 141.98424480285,52.9221848299494 141.805762747186,52.9221848299494 141.538016775507,52.9221848299494 141.315452078241,52.9221848299494 141.04772136535,52.9712342073908 140.825156668085,52.9712342073908 140.646659353632,53.0202835848322 140.42354533996,53.0202835848322 140.200980642694,53.0693367769709 139.977866629022,53.1183861544123 139.710685232538,53.1674317171564 139.532187918085,53.2164849092951 139.353705862421,53.2655342867365 139.131125906366,53.3636406710139 138.908027151483,53.412686233758 138.64083049621,53.5107888033381 138.417716482538,53.6082886507502 137.659675100702,54.000691299676 137.437110403436,54.0987900545588 137.213996389764,54.2453430941096 136.991431692499,54.3434456636896 136.812949636835,54.4905937960139 136.634452322382,54.6377457430353 135.921576956171,55.2257508089533 135.698462942499,55.4213532259455 135.519980886835,55.5685013582697L92.234038809198,103.101147537469C90.4507746490417,105.109814529656 89.5594095977722,107.658032303094 89.5594095977722,110.255299453973 89.5594095977722,112.852566604852 90.4507746490417,115.400189285516 92.2786631378112,117.409451370477 95.844649771112,121.32988441491 101.640120962518,121.32988441491 105.251273611444,117.409451370477L132.533545950311,87.3709839632502 132.533545950311,180.818806534051C132.533545950311,183.611683731317 133.558768728632,186.159901504754 135.252784231561,187.972966079949 136.902183035272,189.786030655145 139.175757864374,190.912983780145 141.71651408996,190.912983780145L66.5565409454284,190.912983780145C64.1491083892761,191.256337051629 61.6529726776062,191.500996475457 59.1562952789245,191.500996475457 26.4801535400329,191.500996475457 0,163.520832901238 0,128.973942642449 0,94.4276322176447 26.4801535400329,66.4468811800471 59.1562952789245,66.4468811800471 63.6588053497253,66.4468811800471 68.072074392694,67.034886245965 72.3073954376159,68.0643433382502 80.2866511138855,28.9115074923029 108.282332876581,-1.666194293648E-06 141.71651408996,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/contacts_edit.svg b/icons/contacts_edit.svg
new file mode 100644 (file)
index 0000000..11dbea7
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 45.34 32.19"> \r<path d="M20.99,25.396L37.228999,25.396 37.228999,27.335 20.99,27.335z M12.442677,22.035C15.173187,22.74335,17.339796,24.845995,18.138,27.536L2.7069988,27.536C3.4855423,24.920191 5.5559502,22.867039 8.1790409,22.103995 8.3911324,23.450297 9.2623558,24.463223 10.305969,24.463223 11.367172,24.463223 12.250677,23.4191 12.442677,22.035z M27.571,19.76L37.167999,19.76 37.167999,21.699 27.571,21.699z M10.343636,16.111001C11.885382,16.111001 13.135,17.359601 13.135,18.9026 13.135,20.442999 11.885382,21.692999 10.343636,21.692999 8.8024578,21.692999 7.5550003,20.442999 7.5550003,18.9026 7.5550003,17.359601 8.8024578,16.111001 10.343636,16.111001z M31.936987,11.479479C31.996277,11.482768,32.054133,11.503086,32.101723,11.542614L35.629934,14.481772C35.755741,14.588481 35.773942,14.774698 35.667136,14.903709 35.633934,14.942712 35.587031,14.976515 35.536828,14.994717L31.249573,16.554854C31.149967,16.591358 31.03926,16.571756 30.957855,16.50535 30.876451,16.435044 30.836048,16.330835 30.854349,16.226625L31.604994,11.736631C31.612795,11.684627 31.635596,11.636422 31.669498,11.594819 31.735377,11.515812 31.838172,11.473996 31.936987,11.479479z M0,6.5790005L34.555653,6.5790005 33.226866,8.1583858 1.5325146,8.1583858 1.5325146,30.523654 38.326416,30.523654 38.326416,13.435858 40.039998,11.3981 40.039998,32.193001 0,32.193001z M38.175204,3.9814115C38.233225,3.9870876,38.288391,4.0097905,38.333322,4.0478833L41.863462,6.9723706C41.989268,7.077843,42.008073,7.2640066,41.901963,7.3916988L36.750612,13.61448C36.699106,13.674282 36.628202,13.712082 36.548698,13.718583 36.46919,13.726384 36.389885,13.701683 36.329883,13.652181L32.808138,10.717223C32.683931,10.613022,32.66563,10.426919,32.769737,10.299216L37.915289,4.0869443C37.964094,4.0283434 38.036997,3.9879426 38.116505,3.9814722 38.136207,3.9795198 38.155864,3.9795199 38.175204,3.9814115z M42.01798,4.7683716E-05C42.325108,-0.0025401115,42.617217,0.10045075,42.852437,0.29409647L44.775797,1.8865356C45.335244,2.3539267,45.398249,3.2054797,44.914509,3.7874984L42.997049,6.1052022C42.88964,6.2315395,42.701525,6.2522891,42.575113,6.1495113L39.072921,3.2497886C39.012417,3.1990098 38.975814,3.1286912 38.970013,3.0492327 38.963513,2.9685444 38.988315,2.8904159 39.041019,2.827917L40.959079,0.51027799C41.194899,0.22640991 41.523626,0.048007488 41.885556,0.0076639652 41.929922,0.0029416084 41.974104,0.00041723251 42.01798,4.7683716E-05z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/contatcs.svg b/icons/contatcs.svg
new file mode 100644 (file)
index 0000000..f8f1f12
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 769.77 768"> \r<path d="M421.284,381.888C339.661,381.888,268.338,443.52,228.7,535.488L613.911,535.488C574.229,443.52,502.906,381.888,421.284,381.888z M421.327,232.512C379.604,232.512 345.833,262.387 345.833,299.212 345.833,336 379.604,365.913 421.327,365.913 463.008,365.913 496.778,336 496.778,299.212 496.778,262.387 463.008,232.512 421.327,232.512z M72.7557,0L769.768,0 769.768,768 72.7557,768 72.7557,717.964 0,717.964 0,666.662 72.7557,666.662 72.7557,562.752 0,562.752 0,511.45 72.7557,511.45 72.7557,407.539 0,407.539 0,356.237 72.7557,356.237 72.7557,252.364 0,252.364 0,201.062 72.7557,201.062 72.7557,97.1519 0,97.1519 0,45.8496 72.7557,45.8496z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/creditcard.svg b/icons/creditcard.svg
new file mode 100644 (file)
index 0000000..a6d6362
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 64.08 43.34"> \r<path d="M2.2966172E-05,17.916L63.969601,17.916C64.077004,17.916,64.026527,17.922325,63.974438,17.925488L63.969601,17.925701 63.969601,35.316717C63.952702,39.708246,60.335457,43.352856,55.945999,43.337955L7.9285269,43.337955C3.5378512,43.325552,-0.0104141,39.705046,2.2966172E-05,35.316717z M8.0628052,4.0054321E-05L56.073013,4.0054321E-05C60.462288,0.0090732574,64.011772,3.4846697,63.99997,7.8794937L63.99997,8.7075424C63.792973,8.6802053,63.593773,8.712122,63.373776,8.7075424L0.085000037,8.7075424 0.085000037,7.8794937C0.098000198,3.4846697,3.6670085,-0.013690948,8.0628052,4.0054321E-05z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/info_circle.svg b/icons/info_circle.svg
new file mode 100644 (file)
index 0000000..0c87a6d
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 768 768"> \r<path d="M402.198,281.152C385.279,281.152 365.874,287.45 342.941,300.374 321.161,312.758 296.933,333.386 270.976,361.86L261.651,372.265 298.083,400.487 306.113,392.569C334.158,365.281 343.626,357.83 346.795,355.815 310.47,482.709 291.785,559.388 291.785,592.398 291.785,605.536 295.566,616.158 302.944,624.184 310.541,632.32 321.052,636.567 333.329,636.567 345.786,636.567 360.582,631.564 378.583,621.305 395.466,611.622 420.955,590.672 456.452,557.229L466.244,548.048 433.086,515.759 424.123,524.144C392.622,553.772 378.834,563.131 375.702,566.3 376.242,553.088 383.802,514.821 414.943,410.1 439.963,326.546 439.963,317.799 439.963,313.625 439.963,303.758 436.148,295.371 428.874,289.359 422.251,283.925 413.288,281.152 402.198,281.152z M401.478,133.629C372.787,133.629 349.601,156.885 349.601,185.43 349.601,214.159 372.787,237.341 401.478,237.341 430.17,237.341 453.392,214.159 453.392,185.43 453.392,156.885 430.17,133.629 401.478,133.629z M383.983,0C595.665,7E-06 768,172.256 768,384 768,595.711 595.665,768 383.983,768 172.192,768 -4E-06,595.711 0,384 -4E-06,172.256 172.192,7E-06 383.983,0z"/> \r</svg>
\ No newline at end of file
diff --git a/icons/users.svg b/icons/users.svg
new file mode 100644 (file)
index 0000000..b92977c
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?> \r<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" \r      x="0px" y="0px" width="50px" height="50px" viewBox="0 0 54.71 50.33"> \r<path d="M31.239012,27.202658C30.820299,27.202057,30.396229,27.233054,29.96948,27.297629L28.502087,27.519026C27.208891,28.767024 25.535898,29.650521 23.624405,29.939622 21.713013,30.22992 19.85342,29.88102 18.249426,29.067223L16.783232,29.289822C12.229951,29.97732,9.0996828,34.224808,9.7870597,38.776795L9.9498596,39.866593 10.278058,42.022885 10.407058,42.873784C10.543657,43.784581,11.395253,44.410882,12.304049,44.272881L38.676346,40.285893C39.586544,40.149193,40.214039,39.297593,40.077438,38.387498L39.948441,37.537301 39.623043,35.377705 39.456345,34.291207C38.833301,30.167058,35.28656,27.208478,31.239012,27.202658z M22.306194,13.797599C21.940073,13.797179 21.569265,13.824422 21.196114,13.881066 17.215532,14.481264 14.478541,18.194754 15.081339,22.175242 15.683037,26.153731 19.395222,28.895323 23.378307,28.292426 27.356092,27.690827 30.094379,23.978736 29.494183,19.996947 28.946629,16.390809 25.845367,13.801668 22.306194,13.797599z M36.886066,1.2860032C38.604885,1.2882623,40.11401,2.5454123,40.379539,4.2977322L45.923916,40.965588C46.215416,42.899186,44.886021,44.703881,42.948429,44.995476L14.328742,49.322964 11.550253,49.744267 9.6178703,50.037266C7.6815981,50.327462,5.8756957,48.996865,5.5827269,47.063275L0.039781274,10.396676C-0.25050064,8.4604408,1.0788441,6.6564857,3.0149862,6.3654767L4.9486994,6.0737282 7.7248086,5.6518484 36.347053,1.3264306C36.528206,1.2989648,36.70826,1.2857693,36.886066,1.2860032z M41.240993,0.62700492C42.962074,0.62990564,44.468162,1.887576,44.733692,3.6399153L50.276585,40.304265C50.569485,42.24178,49.238785,44.044495,47.30389,44.336896L44.969391,44.690999C46.904091,44.398099,48.234989,42.590783,47.943287,40.659768L42.397594,3.9928182C42.107494,2.0592124,40.301399,0.72716761,38.365002,1.0187941L40.701096,0.66723025C40.882606,0.63983279,41.06295,0.62670487,41.240993,0.62700492z M45.38435,6.4373016E-06C47.103851,0.0032879114,48.610977,1.2606425,48.877689,3.0152532L54.419262,39.677388C54.713566,41.61485,53.381649,43.418114,51.447922,43.709107L49.112091,44.064C51.046917,43.769707,52.377735,41.965043,52.084732,40.031479L46.541557,3.3668066C46.248753,1.4326341,44.442726,0.10063314,42.508999,0.39298528L44.845032,0.040087223C45.026318,0.012747884,45.20647,-0.00033307076,45.38435,6.4373016E-06z"/> \r</svg>
\ No newline at end of file
diff --git a/pointeuse/.hourtrax/auth.clear.passwd b/pointeuse/.hourtrax/auth.clear.passwd
new file mode 100644 (file)
index 0000000..565877f
--- /dev/null
@@ -0,0 +1 @@
+kilian=fb1ia1ka
\ No newline at end of file
diff --git a/pointeuse/.hourtrax/auth.passwd b/pointeuse/.hourtrax/auth.passwd
new file mode 100644 (file)
index 0000000..2f4bd9a
--- /dev/null
@@ -0,0 +1 @@
+kilian=0ecf731e2426a8a469f06e9f4a3bcbed6f8071d9d3e3ef7ef5fd9165021e27ec
\ No newline at end of file
diff --git a/pointeuse/.hourtrax/hourtrax.conf b/pointeuse/.hourtrax/hourtrax.conf
new file mode 100644 (file)
index 0000000..aeeb279
--- /dev/null
@@ -0,0 +1,15 @@
+daemon=0
+datapath=/mnt/c/Users/kilian/Workspace/hourtrax/.hourtrax
+pidfile=hourtrax.pid
+dbfile=hourtrax.sqlite
+pwdfile=auth.passwd
+debug=1
+timeout=30
+port=8080
+#mode=deployment
+mode=development
+potuser=ksaffran@dks.lu
+potpwd=ntHesDUDWeQVs
+potschema=portanova
+poturl=http://app.pot.lan
+name=elch-pointeuse
\ No newline at end of file
diff --git a/pointeuse/.hourtrax/hourtrax.json b/pointeuse/.hourtrax/hourtrax.json
new file mode 100644 (file)
index 0000000..8c7891a
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "type":"fingerprint",
+  "db": "hourtrax.sqlite",
+  "timeout":30
+}
\ No newline at end of file
diff --git a/pointeuse/.hourtrax/hourtrax.sql b/pointeuse/.hourtrax/hourtrax.sql
new file mode 100644 (file)
index 0000000..d175922
--- /dev/null
@@ -0,0 +1,66 @@
+CREATE TABLE badges ( id text, id_staff text, type text, primary key (id) );
+
+
+
+CREATE TABLE staff (
+        id TEXT NOT NULL,
+        staffnumber TEXT,
+        prename TEXT,
+        surname TEXT,
+        pin TEXT,
+        rfid TEXT,
+        isblocked BOOLEAN,
+        isdisabled BOOLEAN,
+        isdeleted BOOLEAN,
+        modified DATETIME DEFAULT (datetime('now','localtime')),
+        created DATETIME DEFAULT (datetime('now','localtime')),
+        PRIMARY KEY (id)
+);
+CREATE TABLE timetracks (
+        id text not null,
+        id_staff TEXT,
+        daydate date,
+        stamp_in DATETIME,
+        stamp_out DATETIME,
+        tracktype TEXT,
+        modified DATETIME DEFAULT (datetime('now','localtime')),
+        created DATETIME DEFAULT (datetime('now','localtime')),
+        primary key (id)
+);
+CREATE TABLE fingerprints (
+        id_staff TEXT,
+        fingerhash TEXT,
+        fingertype integer,
+        modified DATETIME DEFAULT (datetime('now','localtime')),
+        created DATETIME DEFAULT (datetime('now','localtime')), 
+        primary key (id_staff,fingerhash)
+);
+CREATE TABLE staffworktimes (
+        id TEXT not null,
+        id_staff TEXT,
+        daydate date,
+        starttime1 TEXT,
+        endtime1 TEXT,
+        starttime2 TEXT,
+        endtime2 TEXT,
+        modified DATETIME DEFAULT (datetime('now','localtime')),
+    created DATETIME DEFAULT (datetime('now','localtime')),
+    primary key (id)
+);
+CREATE TRIGGER trg_staff_upd UPDATE ON staff
+ BEGIN
+  UPDATE staff SET modified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+CREATE TRIGGER trg_timetracks_upd UPDATE ON timetracks
+ BEGIN
+  UPDATE timetracks SET modified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+CREATE TRIGGER trg_staffworktimes_upd UPDATE ON staffworktimes
+ BEGIN
+  UPDATE staffworktimes SET modified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+ CREATE TRIGGER trg_fingerprints_upd UPDATE ON staff
+ BEGIN
+  --UPDATE staffworktimes SET modified=datetime('now','localtime') WHERE id_staff = NEW.id_staff and fingertype= NEW.fingertype;
+ END;
+ alter table staff add column monstart TEXT;alter table staff add column monend TEXT;alter table staff add column tuestart TEXT;alter table staff add column tueend TEXT;alter table staff add column wedstart TEXT;alter table staff add column wedend TEXT;alter table staff add column thustart TEXT;alter table staff add column thuend TEXT;alter table staff add column fristart TEXT;alter table staff add column friend TEXT;alter table staff add column satstart TEXT;alter table staff add column satend TEXT;alter table staff add column sunstart TEXT;alter table staff add column sunend TEXT;
diff --git a/pointeuse/.hourtrax/hourtrax.sqlite b/pointeuse/.hourtrax/hourtrax.sqlite
new file mode 100644 (file)
index 0000000..4759d31
Binary files /dev/null and b/pointeuse/.hourtrax/hourtrax.sqlite differ
diff --git a/pointeuse/.hourtrax/potsync.conf b/pointeuse/.hourtrax/potsync.conf
new file mode 100644 (file)
index 0000000..7267af7
--- /dev/null
@@ -0,0 +1,6 @@
+USERAGENT=POT Hourtrax
+POTAPIKEY=6b9c80d2-9153-11eb-8558-efa3f9982293
+POTAPIURL=http://app.pot.lan/potapp/api.php
+POTSCHEMA=alicehartmann
+POTLASTSYNCFROMSERVER=
+POTLASTSYNCTOSERVER=
diff --git a/pointeuse/.hourtrax/staff.json b/pointeuse/.hourtrax/staff.json
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/pointeuse/.hourtrax/sync.conf b/pointeuse/.hourtrax/sync.conf
new file mode 100644 (file)
index 0000000..8ecb978
--- /dev/null
@@ -0,0 +1,6 @@
+htxuser="htx"
+htxpwd="Aib5aevo"
+htxurl="https://htx.plandutravail.lu/htx/api.php"
+htxschema="demo"
+htxstation="dhart-pot03"
+HOSTS=(172.16.10.186 172.16.10.170 172.16.10.186)
\ No newline at end of file
diff --git a/pointeuse/dev/.config/lxsession/LXDE-pi/autostart b/pointeuse/dev/.config/lxsession/LXDE-pi/autostart
new file mode 100644 (file)
index 0000000..2c98ce9
--- /dev/null
@@ -0,0 +1,6 @@
+#@lxpanel --profile LXDE-pi
+#@pcmanfm --desktop --profile LXDE-pi
+#@xscreensaver -no-splash
+#@point-rpi
+@/home/dks/bin/startapp.sh
+
diff --git a/pointeuse/dev/DKS-VPN-dks-hourtraxtest.ovpn b/pointeuse/dev/DKS-VPN-dks-hourtraxtest.ovpn
new file mode 100644 (file)
index 0000000..0793f27
--- /dev/null
@@ -0,0 +1,153 @@
+client
+dev tun
+proto udp
+remote vsrv01.dks.lu 1098
+remote arandks.lu 1098
+
+remote-random
+resolv-retry infinite
+nobind
+persist-key
+persist-tun
+mute-replay-warnings
+<ca>
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV
+BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD
+VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X
+8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt
+pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4
+4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H
+vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6
+gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1
+CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ
+f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV
+BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN
+BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h
+wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn
+AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s
+PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V
+8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw
+8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g==
+-----END CERTIFICATE-----
+</ca>
+<cert>
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            1f:72:81:5c:11:93:98:f3:ab:da:e0:8e:19:74:cd:57
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=aran
+        Validity
+            Not Before: Oct 27 08:51:46 2020 GMT
+            Not After : Oct 25 08:51:46 2030 GMT
+        Subject: CN=dks-hourtraxtest
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:a8:62:e0:84:c5:db:87:18:f3:e1:4e:8d:45:e2:
+                    15:d5:36:69:71:df:fa:9b:73:6f:d8:78:6d:f9:7c:
+                    d4:34:06:e4:af:a2:31:41:dc:ec:f0:9f:6e:ce:6c:
+                    33:a5:d0:b0:d2:04:c5:a7:dd:55:aa:55:79:80:2c:
+                    13:5b:89:75:fd:b6:a6:e4:9f:39:8d:40:59:d1:5b:
+                    83:e6:c6:c0:0a:42:89:70:c2:cc:67:ea:61:39:51:
+                    32:36:7c:77:78:4f:99:ec:f0:0e:2f:b7:c7:98:df:
+                    9b:9a:3e:6b:4d:ce:b4:6e:82:21:b5:23:f5:37:12:
+                    2c:62:f2:e1:95:56:af:cb:77:71:ec:e7:86:b6:ed:
+                    95:44:3c:75:c9:7b:33:0a:da:9d:2f:75:9d:9d:5c:
+                    01:f0:8a:99:68:1d:7f:c0:9d:e9:3f:54:50:ce:0e:
+                    15:b9:39:a0:a2:f4:21:ee:ec:50:9a:c2:e2:de:91:
+                    75:77:16:7d:32:c9:32:b8:6b:ae:81:1b:3b:69:bf:
+                    b1:5e:d2:16:10:4b:ad:c3:43:20:96:65:59:ff:a1:
+                    4c:b8:0e:e6:4b:b7:88:17:cf:97:97:a6:c1:67:ff:
+                    a9:82:44:81:06:be:57:75:22:c2:02:d8:55:8d:aa:
+                    85:e5:84:46:7c:a9:67:a0:3a:47:71:04:1a:83:3f:
+                    9a:3d
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                AB:70:9E:30:68:BA:3B:A9:6E:4C:E3:DA:D7:48:7D:3E:F8:77:85:43
+            X509v3 Authority Key Identifier: 
+                keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4
+                DirName:/CN=aran
+                serial:AE:B5:02:1A:71:02:93:94
+
+            X509v3 Extended Key Usage: 
+                TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature
+    Signature Algorithm: sha256WithRSAEncryption
+         6b:ea:b4:0d:1a:2a:4b:fc:80:3f:71:d7:e2:cf:50:23:07:bc:
+         11:36:de:c2:a1:84:de:15:69:46:a1:24:ed:d0:2b:fe:9f:7e:
+         12:46:69:1f:44:78:e7:e7:60:4a:19:82:6c:76:49:4b:76:31:
+         46:7b:d3:6e:6e:b6:a4:93:75:9c:87:af:bf:fa:05:b1:97:d9:
+         c1:a0:6e:68:e3:f4:f2:21:fc:59:48:8e:d3:7e:d5:44:df:e7:
+         49:04:17:6d:93:db:69:7c:90:f4:1a:d5:92:03:cf:53:c1:bf:
+         8f:3b:56:8a:46:9c:03:10:0e:bf:5a:27:2a:06:9d:4e:e5:78:
+         6e:87:00:46:ec:21:4d:a1:bc:fe:e9:c1:9c:f3:b2:95:18:69:
+         e9:61:b8:0a:6c:ee:1d:12:ff:93:b6:3d:b5:ba:ca:52:c7:88:
+         90:50:2d:55:12:84:12:a7:8c:dc:4f:a7:70:51:d0:4d:cb:66:
+         8e:9a:ab:b1:07:88:d8:3f:6d:1c:6b:24:97:4b:80:ee:5d:01:
+         c8:d9:a9:bc:ce:7a:c1:a1:b1:6f:23:28:13:42:e6:0a:2d:ed:
+         dc:62:e8:ad:62:54:e9:23:11:c9:fa:e9:c3:85:fd:39:a9:8b:
+         db:e5:91:99:35:fe:f1:78:b4:4a:a4:ab:67:fe:53:55:00:45:
+         cc:1b:66:ea
+-----BEGIN CERTIFICATE-----
+MIIDRTCCAi2gAwIBAgIQH3KBXBGTmPOr2uCOGXTNVzANBgkqhkiG9w0BAQsFADAP
+MQ0wCwYDVQQDDARhcmFuMB4XDTIwMTAyNzA4NTE0NloXDTMwMTAyNTA4NTE0Nlow
+GzEZMBcGA1UEAwwQZGtzLWhvdXJ0cmF4dGVzdDCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAKhi4ITF24cY8+FOjUXiFdU2aXHf+ptzb9h4bfl81DQG5K+i
+MUHc7PCfbs5sM6XQsNIExafdVapVeYAsE1uJdf22puSfOY1AWdFbg+bGwApCiXDC
+zGfqYTlRMjZ8d3hPmezwDi+3x5jfm5o+a03OtG6CIbUj9TcSLGLy4ZVWr8t3cezn
+hrbtlUQ8dcl7MwranS91nZ1cAfCKmWgdf8Cd6T9UUM4OFbk5oKL0Ie7sUJrC4t6R
+dXcWfTLJMrhrroEbO2m/sV7SFhBLrcNDIJZlWf+hTLgO5ku3iBfPl5emwWf/qYJE
+gQa+V3UiwgLYVY2qheWERnypZ6A6R3EEGoM/mj0CAwEAAaOBkDCBjTAJBgNVHRME
+AjAAMB0GA1UdDgQWBBSrcJ4waLo7qW5M49rXSH0++HeFQzA/BgNVHSMEODA2gBSp
+US+X4xXF1ao3HfqKB/GqOsl/1KETpBEwDzENMAsGA1UEAwwEYXJhboIJAK61Ahpx
+ApOUMBMGA1UdJQQMMAoGCCsGAQUFBwMCMAsGA1UdDwQEAwIHgDANBgkqhkiG9w0B
+AQsFAAOCAQEAa+q0DRoqS/yAP3HX4s9QIwe8ETbewqGE3hVpRqEk7dAr/p9+EkZp
+H0R45+dgShmCbHZJS3YxRnvTbm62pJN1nIevv/oFsZfZwaBuaOP08iH8WUiO037V
+RN/nSQQXbZPbaXyQ9BrVkgPPU8G/jztWikacAxAOv1onKgadTuV4bocARuwhTaG8
+/unBnPOylRhp6WG4CmzuHRL/k7Y9tbrKUseIkFAtVRKEEqeM3E+ncFHQTctmjpqr
+sQeI2D9tHGskl0uA7l0ByNmpvM56waGxbyMoE0LmCi3t3GLorWJU6SMRyfrpw4X9
+OamL2+WRmTX+8Xi0SqSrZ/5TVQBFzBtm6g==
+-----END CERTIFICATE-----
+</cert>
+<key>
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCoYuCExduHGPPh
+To1F4hXVNmlx3/qbc2/YeG35fNQ0BuSvojFB3Ozwn27ObDOl0LDSBMWn3VWqVXmA
+LBNbiXX9tqbknzmNQFnRW4PmxsAKQolwwsxn6mE5UTI2fHd4T5ns8A4vt8eY35ua
+PmtNzrRugiG1I/U3Eixi8uGVVq/Ld3Hs54a27ZVEPHXJezMK2p0vdZ2dXAHwiplo
+HX/Anek/VFDODhW5OaCi9CHu7FCawuLekXV3Fn0yyTK4a66BGztpv7Fe0hYQS63D
+QyCWZVn/oUy4DuZLt4gXz5eXpsFn/6mCRIEGvld1IsIC2FWNqoXlhEZ8qWegOkdx
+BBqDP5o9AgMBAAECggEAaTy6s2BxDiMDMNoGIxnkqUeDaT8hggwIZ9MEcHuaqBVy
+0W3duRsZHl2WQ/6N3ODr0aZX3czP4E/hSsDBLGFh07pW3eXBc003lUfLzOyEUyU4
+frfQRlXOg6MCbdkmVZPyUInLY/lJDnsZ5bGDILLCQ5qi9HHPrKZ4BTNk1w/BeLhf
+Z2CVRMMb3TxDTqozco31dyhz+kBjYK6qVk6mmWnLVLEOTowL3Nblv+titUZ7kqOv
+zbJzPoFV562jQ181hNoF7ANb01K8Kb/Wu3V7ScT9ARrKNC6vUgvjZ61/CwLp+kSM
+oheAU/CEALwHEQqESJ1C9eGuruE0XCmLIRq4CT70xQKBgQDVNstIPpNDZ6mgOK3O
+bcdk+8U042tyTCElpmUMK6yaN4cvdQPy5jjUoSE0pD+4YWGhf5AtlwSDt4pdUY/W
+kgFYBYqjcCa8aL75BLwM6wxR6fRCyBoMThWsX0N9Ep4jqN9J6raiSK+AmANTUucT
+e+r7XIn8sG374gGrxv29Cn7yjwKBgQDKLTHPK+ejV7tmjQYn/RZelvEo6gN59Cnh
+unOgGescM4GVrZoZd+1pV+Zyz0BRY/EbKVojuYQBiax0lKNfwXPvhDmbBNwxLoWL
+7cvUgPOGNlDFqsYyfp2HxYRXt83NZYiSAHGCsZPPyXp1+XpiaCQCPkv+NHXaH+yS
+uO6zf78ccwKBgC7QxzXnt4IXYuFxUIiBBkUgGx8PyGniWWzg6lMPy+hYxPAgq2tM
+LbJSZu4eGnerujoxvkCkZjNdu53d6M1eZbkkDlrwpzC7dyNKbNgRTDU4P4/iTAXj
+p1Kf4Du4OMzvqYebZ9qeRxrfReunymE21lO27/1x59RkvaUwHkrB4Tn1AoGBAK0K
+46/7VyaiZ56No7BEWYoaTU0EhncyOUqfyGlG5cncd9RBozybPhPFDVRE+TrwfKQP
+z7v2A/tA999MfUzvCij+FkQNc92QgPNUU/qNaGH+SUH2Oe9sGa7kqrJdeoOLnMnC
+IWWIUggt3WfuYQarNe7JnUd1ZU2Nt3GZYY03EL7rAoGAfo5Wku2uopyMoXaY22dr
+GsATfARJl8ElzlGZsrDiIc/IgOZ8iW9m09GYhD+rvrQ5JQnMAGp0Kwaywxvbm0iu
+ica5EvlmC+YYHq9ZhVmtrhSDaEkHHcg6uK5/Y1Bde+wSepHFKYuUnNXIXF4K0fDM
+FA8Wa4lSMpexLi/4loLf+gE=
+-----END PRIVATE KEY-----
+</key>
+comp-lzo
+verb 3
+mute 20
+cipher AES-256-CBC
diff --git a/pointeuse/dev/UART-Fignerprint-RaspberryPi.tar.gz b/pointeuse/dev/UART-Fignerprint-RaspberryPi.tar.gz
new file mode 100644 (file)
index 0000000..c99dbd2
Binary files /dev/null and b/pointeuse/dev/UART-Fignerprint-RaspberryPi.tar.gz differ
diff --git a/pointeuse/dev/UART_Fingerprint_Sensor_(C)_User_Manual_en.pdf b/pointeuse/dev/UART_Fingerprint_Sensor_(C)_User_Manual_en.pdf
new file mode 100644 (file)
index 0000000..594a676
Binary files /dev/null and b/pointeuse/dev/UART_Fingerprint_Sensor_(C)_User_Manual_en.pdf differ
diff --git a/pointeuse/dev/db/dumpdb.sh b/pointeuse/dev/db/dumpdb.sh
new file mode 100644 (file)
index 0000000..6d193e6
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+sqlite3 "${CALLDIR}/../../data/hourtrax.sqlite" ".dump" > "${CALLDIR}/hourtrax.sqlite.dump.sql"
+sqlite3 "${CALLDIR}/../../data/hourtrax.sqlite" ".schema" > "${CALLDIR}/hourtrax.sqlite.schema.sql"
\ No newline at end of file
diff --git a/pointeuse/dev/db/hourtrax.backup.sql b/pointeuse/dev/db/hourtrax.backup.sql
new file mode 100644 (file)
index 0000000..7c0800b
--- /dev/null
@@ -0,0 +1,98 @@
+PRAGMA foreign_keys=OFF;
+BEGIN TRANSACTION;
+CREATE TABLE staff (
+        id integer primary key autoincrement not null,
+        prename TEXT,
+        surname TEXT,
+        pin TEXT,
+        blocked BOOLEAN,
+        disabled BOOLEAN,
+        lastmodified DATETIME DEFAULT (datetime('now','localtime')),
+        weekhours TIME,
+        dailyhours TIME,
+        pausehours TIME
+);
+INSERT INTO staff VALUES(1,'Jennie','KENTON',NULL,NULL,NULL,'2019-11-21 16:07:55',NULL,NULL,NULL);
+INSERT INTO staff VALUES(2,'Daniela','Acito',NULL,NULL,NULL,'2019-11-21 16:07:57',NULL,NULL,NULL);
+INSERT INTO staff VALUES(3,'Aphrodite','Lyons',NULL,NULL,NULL,'2019-11-21 16:07:57',NULL,NULL,NULL);
+INSERT INTO staff VALUES(4,'Liberty','Daugherty',NULL,NULL,NULL,'2019-11-21 16:07:57',NULL,NULL,NULL);
+INSERT INTO staff VALUES(5,'Lee','Austin',NULL,NULL,NULL,'2019-11-21 16:07:58',NULL,NULL,NULL);
+INSERT INTO staff VALUES(6,'Casey','Michael',NULL,NULL,NULL,'2019-11-21 16:07:58',NULL,NULL,NULL);
+INSERT INTO staff VALUES(7,'Josephine','Higgins',NULL,NULL,NULL,'2019-11-21 16:07:58',NULL,NULL,NULL);
+INSERT INTO staff VALUES(8,'Prescott','Terrell',NULL,NULL,NULL,'2019-11-21 16:07:58',NULL,NULL,NULL);
+INSERT INTO staff VALUES(9,'Zelda','Mcdonald',NULL,NULL,NULL,'2019-11-21 16:07:58',NULL,NULL,NULL);
+INSERT INTO staff VALUES(10,'Merrill','Blackwell',NULL,NULL,NULL,'2019-11-21 16:07:58',NULL,NULL,NULL);
+INSERT INTO staff VALUES(11,'Caleb','Vance',NULL,NULL,NULL,'2019-11-21 16:07:58',NULL,NULL,NULL);
+INSERT INTO staff VALUES(12,'Walker','Singleton',NULL,NULL,NULL,'2019-11-21 16:07:58',NULL,NULL,NULL);
+INSERT INTO staff VALUES(13,'Rhea','Romero',NULL,NULL,NULL,'2019-11-21 16:07:58',NULL,NULL,NULL);
+INSERT INTO staff VALUES(14,'Chiquita','Simmons',NULL,NULL,NULL,'2019-11-21 16:07:59',NULL,NULL,NULL);
+INSERT INTO staff VALUES(15,'Quinn','Mcpherson',NULL,NULL,NULL,'2019-11-21 16:07:59',NULL,NULL,NULL);
+INSERT INTO staff VALUES(16,'Nomlanga','Ortega',NULL,NULL,NULL,'2019-11-21 16:07:59',NULL,NULL,NULL);
+INSERT INTO staff VALUES(17,'Freya','Mccormick',NULL,NULL,NULL,'2019-11-21 16:07:59',NULL,NULL,NULL);
+INSERT INTO staff VALUES(18,'Kiara','Dickerson',NULL,NULL,NULL,'2019-11-21 16:07:59',NULL,NULL,NULL);
+INSERT INTO staff VALUES(19,'Kendall','Watson',NULL,NULL,NULL,'2019-11-21 16:07:59',NULL,NULL,NULL);
+INSERT INTO staff VALUES(20,'Portia','Knowles',NULL,NULL,NULL,'2019-11-21 16:07:59',NULL,NULL,NULL);
+INSERT INTO staff VALUES(21,'Breanna','Ortega',NULL,NULL,NULL,'2019-11-21 16:07:59',NULL,NULL,NULL);
+INSERT INTO staff VALUES(22,'Xander','Mason',NULL,NULL,NULL,'2019-11-21 16:07:59',NULL,NULL,NULL);
+INSERT INTO staff VALUES(23,'Jaden','Huff',NULL,NULL,NULL,'2019-11-21 16:07:59',NULL,NULL,NULL);
+INSERT INTO staff VALUES(24,'Levi','Harrington',NULL,NULL,NULL,'2019-11-21 16:08:00',NULL,NULL,NULL);
+INSERT INTO staff VALUES(25,'Buffy','Baker',NULL,NULL,NULL,'2019-11-21 16:08:00',NULL,NULL,NULL);
+INSERT INTO staff VALUES(26,'Kiara','Aguilar',NULL,NULL,NULL,'2019-11-21 16:08:00',NULL,NULL,NULL);
+INSERT INTO staff VALUES(27,'Piper','Abbott',NULL,NULL,NULL,'2019-11-21 16:08:00',NULL,NULL,NULL);
+INSERT INTO staff VALUES(28,'Jerome','Fuller',NULL,NULL,NULL,'2019-11-21 16:08:00',NULL,NULL,NULL);
+INSERT INTO staff VALUES(29,'Nasim','Green',NULL,NULL,NULL,'2019-11-21 16:08:00',NULL,NULL,NULL);
+INSERT INTO staff VALUES(30,'Jakeem','Carpenter',NULL,NULL,NULL,'2019-11-21 16:08:00',NULL,NULL,NULL);
+INSERT INTO staff VALUES(31,'Randall','Simpson',NULL,NULL,NULL,'2019-11-21 16:08:00',NULL,NULL,NULL);
+INSERT INTO staff VALUES(32,'Jonas','Stewart',NULL,NULL,NULL,'2019-11-21 16:08:00',NULL,NULL,NULL);
+CREATE TABLE preferences (
+        id INTEGER PRIMARY KEY AUTOINCREMENT,
+        ident TEXT,
+        page TEXT,
+        preferences TEXT,
+        modified DATETIME DEFAULT (datetime('now','localtime'))
+);
+CREATE TABLE hours (
+        id integer primary key autoincrement not null,
+        id_staff integer,
+        stamp_in DATETIME,
+        stamp_out DATETIME,
+        lastmodified DATETIME DEFAULT (datetime('now','localtime'))
+, tracktype TEXT);
+INSERT INTO hours VALUES(1,1,'2019-11-18 08:04:00','2019-11-18 16:02:00','2019-11-21 15:59:26',NULL);
+INSERT INTO hours VALUES(2,1,'2019-11-19 07:58:00','2019-11-19 12:01:00','2019-11-21 16:00:10',NULL);
+INSERT INTO hours VALUES(3,1,'2019-11-19 13:03:00','2019-11-19 16:07:00','2019-11-21 15:59:28',NULL);
+INSERT INTO hours VALUES(4,1,'2019-11-20 09:30:00','2019-11-20 12:30:00','2019-11-21 16:02:33',NULL);
+INSERT INTO hours VALUES(5,1,'2019-11-20 13:30:00','2019-11-20 17:04:00','2019-11-21 16:02:33',NULL);
+INSERT INTO hours VALUES(6,1,'2019-11-21 07:30:00','2019-11-21 11:59:00','2019-11-21 16:03:40',NULL);
+INSERT INTO hours VALUES(7,1,'2019-11-21 07:30:00','2019-11-21 11:59:00','2019-11-21 16:03:42',NULL);
+INSERT INTO hours VALUES(8,1,'2019-11-18 10:01:00','2019-11-18 10:34:00','2019-11-21 16:09:08','pause');
+CREATE TABLE fingerprints (
+        id integer  primary key autoincrement not null,
+        id_staff integer,
+        fingerhash TEXT,
+        fingersensorpos integer,
+        fingertype integer,
+        lastmodified DATETIME DEFAULT (datetime('now','localtime'))
+);
+DELETE FROM sqlite_sequence;
+INSERT INTO sqlite_sequence VALUES('hours',8);
+INSERT INTO sqlite_sequence VALUES('staff',32);
+CREATE VIEW vw_staff as
+SELECT id, prename, surname, pin, blocked, disabled, lastmodified, weekhours, dailyhours, pausehours FROM staff;
+CREATE TRIGGER trg_preferences_upd UPDATE ON preferences
+ BEGIN
+  UPDATE preferences SET lastmodified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+CREATE TRIGGER trg_fingerprints_upd UPDATE ON fingerprints
+ BEGIN
+  UPDATE fingerprints SET lastmodified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+CREATE TRIGGER trg_staff_upd UPDATE ON staff
+ BEGIN
+  UPDATE staff SET lastmodified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+CREATE TRIGGER trg_hours_upd UPDATE ON hours
+ BEGIN
+  UPDATE hours SET lastmodified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+COMMIT;
diff --git a/pointeuse/dev/db/hourtrax.sql b/pointeuse/dev/db/hourtrax.sql
new file mode 100644 (file)
index 0000000..6a6c2af
--- /dev/null
@@ -0,0 +1,61 @@
+CREATE TABLE staff (
+        id TEXT NOT NULL,
+        staffnumber TEXT,
+        prename TEXT,
+        surname TEXT,
+        pin TEXT,
+        rfid TEXT,
+        isblocked BOOLEAN,
+        isdisabled BOOLEAN,
+        isdeleted BOOLEAN,
+        modified DATETIME DEFAULT (datetime('now','localtime')),
+        created DATETIME DEFAULT (datetime('now','localtime')),
+        PRIMARY KEY (id)
+);
+CREATE TABLE timetracks (
+        id text not null,
+        id_staff TEXT,
+        daydate date,
+        stamp_in DATETIME,
+        stamp_out DATETIME,
+        tracktype TEXT,
+        modified DATETIME DEFAULT (datetime('now','localtime')),
+        created DATETIME DEFAULT (datetime('now','localtime')),
+        primary key (id)
+);
+CREATE TABLE fingerprints (
+        id_staff TEXT,
+        fingerhash TEXT,
+        fingertype integer,
+        modified DATETIME DEFAULT (datetime('now','localtime')),
+        created DATETIME DEFAULT (datetime('now','localtime')), 
+        primary key (id_staff,fingerhash)
+);
+CREATE TABLE staffworktimes (
+        id TEXT not null,
+        id_staff TEXT,
+        daydate date,
+        starttime1 TEXT,
+        endtime1 TEXT,
+        starttime2 TEXT,
+        endtime2 TEXT,
+        modified DATETIME DEFAULT (datetime('now','localtime')),
+    created DATETIME DEFAULT (datetime('now','localtime')),
+    primary key (id)
+);
+CREATE TRIGGER trg_staff_upd UPDATE ON staff
+ BEGIN
+  UPDATE staff SET modified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+CREATE TRIGGER trg_timetracks_upd UPDATE ON staff
+ BEGIN
+  UPDATE timetracks SET modified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+CREATE TRIGGER trg_staffworktimes_upd UPDATE ON staff
+ BEGIN
+  UPDATE staffworktimes SET modified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+ CREATE TRIGGER trg_fingerprints_upd UPDATE ON staff
+ BEGIN
+  UPDATE staffworktimes SET modified=datetime('now','localtime') WHERE id_staff = NEW.id_staff and fingertype= NEW.fingertype;
+ END;
diff --git a/pointeuse/dev/db/hourtrax.sqlite b/pointeuse/dev/db/hourtrax.sqlite
new file mode 100644 (file)
index 0000000..9899025
Binary files /dev/null and b/pointeuse/dev/db/hourtrax.sqlite differ
diff --git a/pointeuse/dev/db/hourtrax.sqlite.dump.sql b/pointeuse/dev/db/hourtrax.sqlite.dump.sql
new file mode 100644 (file)
index 0000000..47171bd
--- /dev/null
@@ -0,0 +1,112 @@
+PRAGMA foreign_keys=OFF;
+BEGIN TRANSACTION;
+CREATE TABLE staff (
+       id integer primary key autoincrement not null,
+       prename TEXT,
+       surname TEXT,
+       pin TEXT,
+       blocked BOOLEAN,
+       disabled BOOLEAN,
+       lastmodified DATETIME DEFAULT CURRENT_TIMESTAMP
+, weekhours TIME, dailyhours TIME, pausehours TIME, fingerhash TEXT, fingerpos INTEGER);
+INSERT INTO staff VALUES(1,'Barbara','BORNAN COLON','1234',NULL,NULL,'2019-10-23 08:49:39',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(2,'Amandine','Lammens','1234',NULL,NULL,'2019-10-23 08:49:39',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(3,'Audrey','MAQUINISTA GRACA',NULL,NULL,NULL,'2019-10-23 08:49:39',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(4,'Jennie','KENTON','1234',NULL,NULL,'2019-10-23 08:49:39',NULL,NULL,NULL,'59b11d663488e01c1cee21ed4a2a14658e0b1fe0a20f2928c77c7522134849a5',0);
+INSERT INTO staff VALUES(5,'Daniela','Acito','0000',NULL,NULL,'2019-10-23 08:49:39',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(6,'Aphrodite','Lyons',NULL,NULL,NULL,'2019-10-27 17:57:26',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(7,'Liberty','Daugherty','1234',NULL,NULL,'2019-10-27 17:57:26',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(8,'Lee','Austin','4567',NULL,NULL,'2019-10-27 17:57:26',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(9,'Casey','Michael',NULL,NULL,NULL,'2019-10-27 17:57:26',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(10,'Josephine','Higgins',NULL,NULL,NULL,'2019-10-27 17:57:26',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(11,'Prescott','Terrell',NULL,NULL,NULL,'2019-10-27 17:57:26',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(12,'Zelda','Mcdonald',NULL,NULL,NULL,'2019-10-27 17:57:26',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(13,'Merrill','Blackwell','1234',NULL,NULL,'2019-10-27 17:57:26',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(14,'Caleb','Vance',NULL,NULL,NULL,'2019-10-27 17:57:26',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(15,'Walker','Singleton',NULL,NULL,NULL,'2019-10-27 17:57:26',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(16,'Rhea','Romero',NULL,NULL,NULL,'2019-10-27 17:58:05',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(17,'Chiquita','Simmons',NULL,NULL,NULL,'2019-10-27 17:58:05',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(18,'Quinn','Mcpherson',NULL,NULL,NULL,'2019-10-27 17:58:05',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(19,'Nomlanga','Ortega',NULL,NULL,NULL,'2019-10-27 17:58:05',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(20,'Freya','Mccormick',NULL,NULL,NULL,'2019-10-27 17:58:05',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(21,'Kiara','Dickerson',NULL,NULL,NULL,'2019-10-27 17:58:05',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(22,'Kendall','Watson',NULL,NULL,NULL,'2019-10-27 17:58:05',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(23,'Portia','Knowles',NULL,NULL,NULL,'2019-10-27 17:58:05',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(24,'Breanna','Ortega',NULL,NULL,NULL,'2019-10-27 17:58:05',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(25,'Xander','Mason',NULL,NULL,NULL,'2019-10-27 17:58:05',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(26,'Jaden','Huff',NULL,NULL,NULL,'2019-10-27 18:01:08',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(27,'Levi','Harrington',NULL,NULL,NULL,'2019-10-27 18:01:08',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(28,'Buffy','Baker',NULL,NULL,NULL,'2019-10-27 18:01:08',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(29,'Kiara','Aguilar',NULL,NULL,NULL,'2019-10-27 18:01:08',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(30,'Piper','Abbott',NULL,NULL,NULL,'2019-10-27 18:01:08',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(31,'Jerome','Fuller',NULL,NULL,NULL,'2019-10-27 18:01:08',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(32,'Nasim','Green',NULL,NULL,NULL,'2019-10-27 18:01:08',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(33,'Jakeem','Carpenter',NULL,NULL,NULL,'2019-10-27 18:01:08',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(34,'Randall','Simpson',NULL,NULL,NULL,'2019-10-27 18:01:08',NULL,NULL,NULL,NULL,NULL);
+INSERT INTO staff VALUES(35,'Jonas','Stewart',NULL,NULL,NULL,'2019-10-27 18:01:08',NULL,NULL,NULL,NULL,NULL);
+CREATE TABLE preferences (
+       id INTEGER PRIMARY KEY AUTOINCREMENT,
+       ident TEXT,
+       page TEXT,
+       preferences TEXT,
+       modified DATETIME DEFAULT CURRENT_TIMESTAMP,
+       created DATETIME DEFAULT CURRENT_TIMESTAMP
+);
+CREATE TABLE hours (
+       id integer primary key autoincrement not null,
+       id_staff integer,
+       stamp_in DATETIME,
+       stamp_out DATETIME,
+       lastmodified DATETIME DEFAULT CURRENT_TIMESTAMP
+);
+INSERT INTO hours VALUES(1,1,'2019-11-12 08:00','2019-11-12 15:00','2019-11-13 14:51:09');
+INSERT INTO hours VALUES(2,1,'2019-11-13 08:00:00','2019-11-13 17:00:00','2019-11-13 14:51:09');
+INSERT INTO hours VALUES(3,1,'2019-11-14 08:00','2019-11-15 13:30','2019-11-13 14:51:09');
+INSERT INTO hours VALUES(4,1,'2019-11-15 16:15:17',NULL,'2019-11-13 14:51:09');
+INSERT INTO hours VALUES(5,1,'2019-11-16 08:39:46','2019-11-16 09:11:24','2019-11-13 14:51:09');
+INSERT INTO hours VALUES(6,2,'2018-02-07 08:40:29','2018-02-07 09:11:35','2018-02-07 08:40:29');
+INSERT INTO hours VALUES(7,1,'2018-02-07 09:11:46',NULL,'2018-02-07 09:11:46');
+INSERT INTO hours VALUES(8,1,'2019-11-17 11:54:16','2019-11-17 11:54:42','2019-11-13 14:51:09');
+INSERT INTO hours VALUES(9,1,'2018-02-07 11:55:27','2018-02-07 12:23:19','2018-02-07 11:55:27');
+INSERT INTO hours VALUES(10,1,'2019-10-23 10:06:59','2019-10-23 10:07:11','2019-10-23 10:06:59');
+INSERT INTO hours VALUES(11,1,'2019-10-23 10:07:34',NULL,'2019-10-23 10:07:34');
+INSERT INTO hours VALUES(12,1,'2019-10-23 10:08:28',NULL,'2019-10-23 10:08:28');
+INSERT INTO hours VALUES(13,1,'2019-10-29 08:41:49',NULL,'2019-10-29 08:41:49');
+INSERT INTO hours VALUES(14,4,'2019-10-30 09:32:27','2019-10-30 09:36:38','2019-10-30 09:32:27');
+INSERT INTO hours VALUES(15,4,'2019-10-30 09:40:45','2019-10-30 09:41:59','2019-10-30 09:40:45');
+INSERT INTO hours VALUES(16,4,'2019-10-30 09:42:14','2019-10-30 16:23:41','2019-10-30 09:42:14');
+CREATE TABLE fingerprints (
+       id integer  primary key autoincrement not null,
+       id_staff integer,
+       fingerhash TEXT,
+       fingersensorpos integer,
+       fingertype integer,
+       lastmodified DATETIME DEFAULT CURRENT_TIMESTAMP
+);
+CREATE TABLE preferences2 (
+        id INTEGER PRIMARY KEY AUTOINCREMENT,
+        ident TEXT,
+        page TEXT,
+        preferences TEXT,
+        modified DATETIME DEFAULT (datetime('now','localtime'))
+);
+INSERT INTO preferences2 VALUES(1,'TEST',NULL,NULL,'2019-11-11 11:50:40');
+DELETE FROM sqlite_sequence;
+INSERT INTO sqlite_sequence VALUES('staff',35);
+INSERT INTO sqlite_sequence VALUES('hours',17);
+INSERT INTO sqlite_sequence VALUES('preferences2',1);
+CREATE VIEW vw_staff as
+SELECT id, prename, surname, pin, blocked, disabled, lastmodified, weekhours, dailyhours, pausehours FROM staff;
+CREATE TRIGGER trg_fingerprints_upd UPDATE ON fingerprints
+ BEGIN
+  UPDATE fingerprints SET lastmodified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+CREATE TRIGGER trg_staff_upd UPDATE ON staff
+ BEGIN
+  UPDATE staff SET lastmodified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+CREATE TRIGGER trg_hours_upd UPDATE ON hours
+ BEGIN
+  UPDATE hours SET lastmodified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+COMMIT;
diff --git a/pointeuse/dev/db/hourtrax.sqlite.schema.sql b/pointeuse/dev/db/hourtrax.sqlite.schema.sql
new file mode 100644 (file)
index 0000000..d162221
--- /dev/null
@@ -0,0 +1,53 @@
+CREATE TABLE staff (
+        id integer primary key autoincrement not null,
+        prename TEXT,
+        surname TEXT,
+        pin TEXT,
+        blocked BOOLEAN,
+        disabled BOOLEAN,
+        lastmodified DATETIME DEFAULT (datetime('now','localtime')),
+        weekhours TIME,
+        dailyhours TIME,
+        pausehours TIME
+);
+CREATE TABLE preferences (
+        id INTEGER PRIMARY KEY AUTOINCREMENT,
+        ident TEXT,
+        page TEXT,
+        preferences TEXT,
+        modified DATETIME DEFAULT (datetime('now','localtime'))
+);
+CREATE VIEW vw_staff as
+SELECT id, prename, surname, pin, blocked, disabled, lastmodified, weekhours, dailyhours, pausehours FROM staff;
+
+CREATE TABLE hours (
+        id integer primary key autoincrement not null,
+        id_staff integer,
+        stamp_in DATETIME,
+        stamp_out DATETIME,
+        lastmodified DATETIME DEFAULT (datetime('now','localtime'))
+);
+CREATE TABLE fingerprints (
+        id integer  primary key autoincrement not null,
+        id_staff integer,
+        fingerhash TEXT,
+        fingersensorpos integer,
+        fingertype integer,
+        lastmodified DATETIME DEFAULT (datetime('now','localtime'))
+);
+CREATE TRIGGER trg_preferences_upd UPDATE ON preferences
+ BEGIN
+  UPDATE preferences SET lastmodified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+CREATE TRIGGER trg_fingerprints_upd UPDATE ON fingerprints
+ BEGIN
+  UPDATE fingerprints SET lastmodified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+CREATE TRIGGER trg_staff_upd UPDATE ON staff
+ BEGIN
+  UPDATE staff SET lastmodified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+CREATE TRIGGER trg_hours_upd UPDATE ON hours
+ BEGIN
+  UPDATE hours SET lastmodified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
\ No newline at end of file
diff --git a/pointeuse/dev/db/hourtrax.sqlite.testdata.sql b/pointeuse/dev/db/hourtrax.sqlite.testdata.sql
new file mode 100644 (file)
index 0000000..2db2d84
--- /dev/null
@@ -0,0 +1,32 @@
+INSERT INTO staff (prename, surname) VALUES( 'Jennie', 'KENTON');
+INSERT INTO staff (prename, surname) VALUES( 'Daniela', 'Acito');
+INSERT INTO staff (prename, surname) VALUES( 'Aphrodite', 'Lyons');
+INSERT INTO staff (prename, surname) VALUES( 'Liberty', 'Daugherty');
+INSERT INTO staff (prename, surname) VALUES( 'Lee', 'Austin');
+INSERT INTO staff (prename, surname) VALUES( 'Casey', 'Michael');
+INSERT INTO staff (prename, surname) VALUES( 'Josephine', 'Higgins');
+INSERT INTO staff (prename, surname) VALUES( 'Prescott', 'Terrell');
+INSERT INTO staff (prename, surname) VALUES( 'Zelda', 'Mcdonald');
+INSERT INTO staff (prename, surname) VALUES( 'Merrill', 'Blackwell');
+INSERT INTO staff (prename, surname) VALUES( 'Caleb', 'Vance');
+INSERT INTO staff (prename, surname) VALUES( 'Walker', 'Singleton');
+INSERT INTO staff (prename, surname) VALUES( 'Rhea', 'Romero');
+INSERT INTO staff (prename, surname) VALUES( 'Chiquita', 'Simmons');
+INSERT INTO staff (prename, surname) VALUES( 'Quinn', 'Mcpherson');
+INSERT INTO staff (prename, surname) VALUES( 'Nomlanga', 'Ortega');
+INSERT INTO staff (prename, surname) VALUES( 'Freya', 'Mccormick');
+INSERT INTO staff (prename, surname) VALUES( 'Kiara', 'Dickerson');
+INSERT INTO staff (prename, surname) VALUES( 'Kendall', 'Watson');
+INSERT INTO staff (prename, surname) VALUES( 'Portia', 'Knowles');
+INSERT INTO staff (prename, surname) VALUES( 'Breanna', 'Ortega');
+INSERT INTO staff (prename, surname) VALUES( 'Xander', 'Mason');
+INSERT INTO staff (prename, surname) VALUES( 'Jaden', 'Huff');
+INSERT INTO staff (prename, surname) VALUES( 'Levi', 'Harrington');
+INSERT INTO staff (prename, surname) VALUES( 'Buffy', 'Baker');
+INSERT INTO staff (prename, surname) VALUES( 'Kiara', 'Aguilar');
+INSERT INTO staff (prename, surname) VALUES( 'Piper', 'Abbott');
+INSERT INTO staff (prename, surname) VALUES( 'Jerome', 'Fuller');
+INSERT INTO staff (prename, surname) VALUES( 'Nasim', 'Green');
+INSERT INTO staff (prename, surname) VALUES( 'Jakeem', 'Carpenter');
+INSERT INTO staff (prename, surname) VALUES( 'Randall', 'Simpson');
+INSERT INTO staff (prename, surname) VALUES( 'Jonas', 'Stewart');
diff --git a/pointeuse/dev/db/hourtrax_dev.sql b/pointeuse/dev/db/hourtrax_dev.sql
new file mode 100644 (file)
index 0000000..81bac3f
--- /dev/null
@@ -0,0 +1,52 @@
+PRAGMA foreign_keys=OFF;\r
+BEGIN TRANSACTION;\r
+CREATE TABLE "staff" (\r\r
+       id TEXT primary key not null,\r\r
+       prename TEXT,\r\r
+       surname TEXT,\r\r
+       pin TEXT,\r\r
+       loginattemps integer,\r\r
+       blocked integer,\r\r
+       lastmodified DATETIME DEFAULT CURRENT_TIMESTAMP\r\r
+);\r
+INSERT INTO "staff" VALUES('a69d71b8-2e76-4d28-bf4d-475c4086dcf8','Barbara','BORNAN COLON','1234',NULL,NULL,'2018-01-29 08:13:04');\r
+INSERT INTO "staff" VALUES('fa9c1e71-07c7-4c10-a4bc-3c98bfdab8c3','Amandine','Lammens',NULL,NULL,NULL,'2018-01-28 10:52:45');\r
+INSERT INTO "staff" VALUES('4d982724-0d60-466f-bd75-b9d1b99305f1','Audrey','MAQUINISTA GRACA',NULL,NULL,NULL,'2018-01-28 10:52:45');\r
+INSERT INTO "staff" VALUES('cb791aec-47d4-4b2a-b338-68d5ac6001b7','Jennie','KENTON',NULL,NULL,NULL,'2018-01-28 10:52:45');\r
+INSERT INTO "staff" VALUES('f1a3bbb4-eb7d-485e-a902-cd0024339645','Daniela','Acito ',NULL,NULL,NULL,'2018-01-28 10:52:46');\r
+CREATE TABLE "contract" (\r\r
+       id integer primary key autoincrement not null,\r\r
+       idstaff TEXT NOT NULL,\r\r
+       startdate DATE DEFAULT CURRENT_DATE,\r\r
+       weekhours REAL DEFAULT 40.0,\r\r
+       lastmodified DATETIME DEFAULT CURRENT_TIMESTAMP\r\r
+);\r
+INSERT INTO "contract" VALUES(1,'a69d71b8-2e76-4d28-bf4d-475c4086dcf8','2015-01-27',40.0,'2018-01-28 10:52:46');\r
+INSERT INTO "contract" VALUES(2,'fa9c1e71-07c7-4c10-a4bc-3c98bfdab8c3','2013-04-01',40.0,'2018-01-28 10:52:46');\r
+INSERT INTO "contract" VALUES(3,'4d982724-0d60-466f-bd75-b9d1b99305f1','2015-05-01',40.0,'2018-01-28 10:52:46');\r
+INSERT INTO "contract" VALUES(4,'cb791aec-47d4-4b2a-b338-68d5ac6001b7','2013-11-25',40.0,'2018-01-28 10:52:46');\r
+INSERT INTO "contract" VALUES(5,'f1a3bbb4-eb7d-485e-a902-cd0024339645','2016-03-07',40.0,'2018-01-28 10:52:47');\r
+CREATE TABLE "hours" (\r\r
+       id integer primary key autoincrement not null,\r\r
+       idstaff TEXT,\r\r
+       stamp_in DATETIME,\r\r
+       stamp_out DATETIME,\r\r
+       direction TEXT,\r\r
+       section TEXT,\r\r
+       lastmodified DATETIME DEFAULT CURRENT_TIMESTAMP\r\r
+);\r
+INSERT INTO "hours" VALUES(4,'a69d71b8-2e76-4d28-bf4d-475c4086dcf8','2018-01-01 08:00:00','2018-01-01 17:00:00',NULL,NULL,'2018-01-29 09:24:52');\r
+INSERT INTO "hours" VALUES(14,'a69d71b8-2e76-4d28-bf4d-475c4086dcf8','2018-01-02 08:00:00','2018-01-02 17:00:00',NULL,NULL,'2018-01-29 09:44:10');\r
+INSERT INTO "hours" VALUES(15,'a69d71b8-2e76-4d28-bf4d-475c4086dcf8','2018-01-07 08:00:00','2018-01-07 16:30:00',NULL,NULL,'2018-01-29 09:44:40');\r
+DELETE FROM sqlite_sequence;\r
+INSERT INTO "sqlite_sequence" VALUES('contract',5);\r
+INSERT INTO "sqlite_sequence" VALUES('hours',15);\r
+CREATE TRIGGER trg_staff_upd UPDATE ON staff\r\r
+ BEGIN\r\r
+  UPDATE staff SET lastmodified=CURRENT_TIMESTAMP WHERE id = NEW.id;\r\r
+ END;\r
+CREATE TRIGGER trg_contract_upd UPDATE ON contract\r\r
+ BEGIN\r\r
+  UPDATE contract SET lastmodified=CURRENT_TIMESTAMP WHERE id = NEW.id;\r\r
+ END;\r
+COMMIT;\r
diff --git a/pointeuse/dev/devfingerread.pl b/pointeuse/dev/devfingerread.pl
new file mode 100644 (file)
index 0000000..2cc64ae
--- /dev/null
@@ -0,0 +1,36 @@
+#!C:\Strawberry\perl\bin\perl.exe
+use strict;
+use Getopt::Long;
+use File::Basename;
+my $timeout = 0;
+GetOptions("timeout|t=s" => \$timeout);
+$b=0;
+unlink(dirname($0).'/fpstop.txt');
+my $ret="";
+my $cnt = 0;
+while($b==0){
+  if (-f dirname($0).'/fpstop.txt'){
+    exit(0);
+  }
+  if (-f dirname($0).'/fpread.txt'){
+    open(FF,dirname($0).'/fpread.txt');
+    while (my $l = <FF>){
+      chomp($l);
+      $ret .= $l;
+    }
+    close(FF);
+    unlink(dirname($0).'/fpread.txt');
+    $b=1;
+  }
+  sleep(1);
+  if ($timeout > 0){
+    if ($cnt > $timeout){
+      print "timedout\n";
+      exit(1);
+    }
+    $cnt++;
+  }
+}
+
+print $ret."\n";
+exit(0);
\ No newline at end of file
diff --git a/pointeuse/dev/devfingerunload.pl b/pointeuse/dev/devfingerunload.pl
new file mode 100644 (file)
index 0000000..7fbc6ca
--- /dev/null
@@ -0,0 +1,5 @@
+#!C:\Strawberry\perl\bin\perl.exe
+use strict;
+open(FF,">".dirname($0).'/fpstop.txt');
+close(FF);
+exit(0);
\ No newline at end of file
diff --git a/pointeuse/dev/devfingerwrite.pl b/pointeuse/dev/devfingerwrite.pl
new file mode 100644 (file)
index 0000000..4ed4159
--- /dev/null
@@ -0,0 +1,37 @@
+#!C:\Strawberry\perl\bin\perl.exe
+use strict;
+use Getopt::Long;
+use File::Basename;
+my $timeout = 0;
+GetOptions("timeout|t=s" => \$timeout);
+$b=0;
+unlink(dirname($0).'/fpstop.txt');
+my $ret="";
+my $cnt = 0;
+while($b==0){
+  if (-f dirname($0).'/fpstop.txt'){
+    unlink(dirname($0).'/fpstop.txt');
+    exit(0);
+  }
+  if (-f dirname($0).'/fpwrite.txt'){
+    open(FF,dirname($0).'/fpwrite.txt');
+    while (my $l = <FF>){
+      chomp($l);
+      $ret .= $l;
+    }
+    close(FF);
+    unlink(dirname($0).'/fpwrite.txt');
+    $b=1;
+  }
+  sleep(1);
+  if ($timeout > 0){
+    if ($cnt > $timeout){
+      print "timedout\n";
+      exit(1);
+    }
+    $cnt++;
+  }
+}
+
+print $ret."\n";
+exit(0);
\ No newline at end of file
diff --git a/pointeuse/dev/fpall.py b/pointeuse/dev/fpall.py
new file mode 100644 (file)
index 0000000..a02c510
--- /dev/null
@@ -0,0 +1,358 @@
+#!/usr/bin/env python3.5
+# -*- coding:utf-8 -*-
+
+import serial
+import time
+import threading
+import sys
+import RPi.GPIO as GPIO
+
+
+
+TRUE         =  1
+FALSE        =  0
+
+# Basic response message definition
+ACK_SUCCESS           = 0x00
+ACK_FAIL              = 0x01
+ACK_FULL              = 0x04
+ACK_NO_USER           = 0x05
+ACK_TIMEOUT           = 0x08
+ACK_GO_OUT            = 0x0F     # The center of the fingerprint is out of alignment with sensor
+
+# User information definition
+ACK_ALL_USER          = 0x00
+ACK_GUEST_USER        = 0x01
+ACK_NORMAL_USER       = 0x02
+ACK_MASTER_USER       = 0x03
+
+USER_MAX_CNT          = 1000        # Maximum fingerprint number
+
+# Command definition
+CMD_HEAD              = 0xF5
+CMD_TAIL              = 0xF5
+CMD_ADD_1             = 0x01
+CMD_ADD_2             = 0x02
+CMD_ADD_3             = 0x03
+CMD_MATCH             = 0x0C
+CMD_DEL               = 0x04
+CMD_DEL_ALL           = 0x05
+CMD_USER_CNT          = 0x09
+CMD_COM_LEV           = 0x28
+CMD_LP_MODE           = 0x2C
+CMD_TIMEOUT           = 0x2E
+
+CMD_FINGER_DETECTED   = 0x14
+
+
+
+Finger_WAKE_Pin   = 23
+Finger_RST_Pin    = 24
+
+GPIO.setmode(GPIO.BCM)
+GPIO.setwarnings(False)
+GPIO.setup(Finger_WAKE_Pin, GPIO.IN)  
+GPIO.setup(Finger_RST_Pin, GPIO.OUT) 
+GPIO.setup(Finger_RST_Pin, GPIO.OUT, initial=GPIO.HIGH)
+
+g_rx_buf            = []
+PC_Command_RxBuf    = []
+Finger_SleepFlag    = 0
+
+#rLock = threading.RLock()
+ser = serial.Serial("/dev/ttyS0", 19200)
+
+#***************************************************************************
+# @brief    send a command, and wait for the response of module
+#***************************************************************************/
+def  TxAndRxCmd(command_buf, rx_bytes_need, timeout):
+    global g_rx_buf
+    CheckSum = 0
+    tx_buf = []
+    tx = ""
+       
+    tx_buf.append(CMD_HEAD)         
+    for byte in command_buf:
+        tx_buf.append(byte)  
+        CheckSum ^= byte
+        
+    tx_buf.append(CheckSum)  
+    tx_buf.append(CMD_TAIL)  
+       
+    for i in tx_buf:
+        tx += chr(i)
+               
+    ser.flushInput()
+    ser.write(tx)
+       
+    g_rx_buf = [] 
+    time_before = time.time()
+    time_after = time.time()
+    while time_after - time_before < timeout and len(g_rx_buf) < rx_bytes_need:  # Waiting for response
+        bytes_can_recv = ser.inWaiting()
+        if bytes_can_recv != 0:
+            g_rx_buf += ser.read(bytes_can_recv)    
+        time_after = time.time()
+
+    for i in range(len(g_rx_buf)):
+        g_rx_buf[i] = ord(g_rx_buf[i])
+
+    if len(g_rx_buf) != rx_bytes_need:
+        return ACK_TIMEOUT
+    if g_rx_buf[0] != CMD_HEAD:        
+        return ACK_FAIL
+    if g_rx_buf[rx_bytes_need - 1] != CMD_TAIL:
+        return ACK_FAIL
+    if g_rx_buf[1] != tx_buf[1]:     
+        return ACK_FAIL
+
+    CheckSum = 0
+    for index, byte in enumerate(g_rx_buf):
+        if index == 0:
+            continue
+        if index == 6:
+            if CheckSum != byte:
+                return ACK_FAIL
+        CheckSum ^= byte       
+    return  ACK_SUCCESS;
+
+#***************************************************************************
+# @brief    Get Compare Level
+#***************************************************************************/    
+def  GetCompareLevel():
+    global g_rx_buf
+    command_buf = [CMD_COM_LEV, 0, 0, 1, 0]
+    r = TxAndRxCmd(command_buf, 8, 0.1)
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:
+        return g_rx_buf[3]
+    else:
+        return 0xFF
+               
+#***************************************************************************
+# @brief    Set Compare Level,the default value is 5, 
+#           can be set to 0-9, the bigger, the stricter
+#***************************************************************************/
+def SetCompareLevel(level):
+    global g_rx_buf
+    command_buf = [CMD_COM_LEV, 0, level, 0, 0]
+    r = TxAndRxCmd(command_buf, 8, 0.1)   
+       
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:        
+        return  g_rx_buf[3]
+    else:
+        return 0xFF
+
+#***************************************************************************
+# @brief   Query the number of existing fingerprints
+#***************************************************************************/
+def GetUserCount():
+    global g_rx_buf
+    command_buf = [CMD_USER_CNT, 0, 0, 0, 0]
+    r = TxAndRxCmd(command_buf, 8, 0.1)
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:
+        return g_rx_buf[3]
+    else:
+        return 0xFF
+#***************************************************************************
+# @brief   Get the time that fingerprint collection wait timeout
+#***************************************************************************/        
+def GetTimeOut():
+    global g_rx_buf
+    command_buf = [CMD_TIMEOUT, 0, 0, 1, 0]
+    r = TxAndRxCmd(command_buf, 8, 0.1)
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:
+        return g_rx_buf[3]
+    else:
+        return 0xFF
+
+
+#***************************************************************************
+# @brief    Register fingerprint
+#***************************************************************************/
+def AddUser():
+    global g_rx_buf
+    r = GetUserCount()
+    if r >= USER_MAX_CNT:
+        return ACK_FULL        
+        
+    command_buf = [CMD_ADD_1, 0, r+1, 3, 0]
+    print(g_rx_buf)
+    r = TxAndRxCmd(command_buf, 8, 6)
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:
+        command_buf[0] = CMD_ADD_3
+        r = TxAndRxCmd(command_buf, 8, 6)
+        print(g_rx_buf)
+        if r == ACK_TIMEOUT:
+            return ACK_TIMEOUT
+        if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:
+            return ACK_SUCCESS
+        else:
+            return ACK_FAIL 
+    else:
+        return ACK_FAIL
+
+
+#***************************************************************************
+# @brief    Clear fingerprints
+#***************************************************************************/
+def ClearAllUser():
+    global g_rx_buf
+    command_buf = [CMD_DEL_ALL, 0, 0, 0, 0]
+    r = TxAndRxCmd(command_buf, 8, 5)
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:  
+        return ACK_SUCCESS
+    else:
+        return ACK_FAIL
+
+        
+ #***************************************************************************
+# @brief    Check if user ID is between 1 and 3
+#***************************************************************************/         
+def IsMasterUser(user_id):
+    if user_id == 1 or user_id == 2 or user_id == 3: 
+        return TRUE
+    else: 
+        return FALSE
+
+#***************************************************************************
+# @brief    Fingerprint matching
+#***************************************************************************/        
+def VerifyUser():
+    global g_rx_buf
+    command_buf = [CMD_MATCH, 0, 0, 0, 0]
+    r = TxAndRxCmd(command_buf, 8, 5);
+    print g_rx_uf
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT
+    if r == ACK_SUCCESS and IsMasterUser(g_rx_buf[4]) == TRUE:
+        return ACK_SUCCESS
+    elif g_rx_buf[4] == ACK_NO_USER:
+        return ACK_NO_USER
+    elif g_rx_buf[4] == ACK_TIMEOUT:
+        return ACK_TIMEOUT
+    else:
+        return ACK_GO_OUT   # The center of the fingerprint is out of alignment with sensor
+
+        
+#***************************************************************************
+# @brief    Analysis the command from PC terminal
+#***************************************************************************/       
+def Analysis_PC_Command(command):
+    global Finger_SleepFlag
+    
+    if  command == "CMD1" and Finger_SleepFlag != 1:
+        print ("Number of fingerprints already available:  %d"  % GetUserCount())
+    elif command == "CMD2" and Finger_SleepFlag != 1:
+        print ("Add fingerprint  (Put your finger on sensor until successfully/failed information returned) ")
+        r = AddUser()
+        if r == ACK_SUCCESS:
+            print ("Fingerprint added successfully !")
+        elif r == ACK_FAIL:
+            print ("Failed: Please try to place the center of the fingerprint flat to sensor, or this fingerprint already exists !")
+        elif r == ACK_FULL:
+            print ("Failed: The fingerprint library is full !")           
+    elif command == "CMD3" and Finger_SleepFlag != 1:
+        print ("Waiting Finger......Please try to place the center of the fingerprint flat to sensor !")
+        r = VerifyUser()
+        if r == ACK_SUCCESS:
+            print ("Matching successful !")
+        elif r == ACK_NO_USER:
+            print ("Failed: This fingerprint was not found in the library !")
+        elif r == ACK_TIMEOUT:
+            print ("Failed: Time out !")
+        elif r == ACK_GO_OUT:
+            print ("Failed: Please try to place the center of the fingerprint flat to sensor !")
+    elif command == "CMD4" and Finger_SleepFlag != 1:
+        ClearAllUser()
+        print ("All fingerprints have been cleared !")
+    elif command == "CMD5" and Finger_SleepFlag != 1:
+        GPIO.output(Finger_RST_Pin, GPIO.LOW)
+        Finger_SleepFlag = 1
+        print ("Module has entered sleep mode: you can use the finger Automatic wake-up function, in this mode, only CMD6 is valid, send CMD6 to pull up the RST pin of module, so that the module exits sleep !")
+    elif command == "CMD6": 
+        Finger_SleepFlag = 0
+        GPIO.output(Finger_RST_Pin, GPIO.HIGH)
+        print ("The module is awake. All commands are valid !")
+    else:
+        print ("commands are invalid !")
+        
+#***************************************************************************
+# @brief   If you enter the sleep mode, then open the Automatic wake-up function of the finger,
+#         begin to check if the finger is pressed, and then start the module and match
+#***************************************************************************/
+def Auto_Verify_Finger():
+    while True:    
+        # If you enter the sleep mode, then open the Automatic wake-up function of the finger,
+        # begin to check if the finger is pressed, and then start the module and match
+        if Finger_SleepFlag == 1:     
+            if GPIO.input(Finger_WAKE_Pin) == 1:   # If you press your finger  
+                time.sleep(0.01)
+                if GPIO.input(Finger_WAKE_Pin) == 1: 
+                    GPIO.output(Finger_RST_Pin, GPIO.HIGH)   # Pull up the RST to start the module and start matching the fingers
+                    time.sleep(0.25)      # Wait for module to start
+                    print ("Waiting Finger......Please try to place the center of the fingerprint flat to sensor !")
+                    r = VerifyUser()
+                    if r == ACK_SUCCESS:
+                        print ("Matching successful !")
+                    elif r == ACK_NO_USER:
+                        print ("Failed: This fingerprint was not found in the library !")
+                    elif r == ACK_TIMEOUT:
+                        print ("Failed: Time out !")
+                    elif r == ACK_GO_OUT:
+                        print ("Failed: Please try to place the center of the fingerprint flat to sensor !")
+                            
+                    #After the matching action is completed, drag RST down to sleep
+                    #and continue to wait for your fingers to press
+                    GPIO.output(Finger_RST_Pin, GPIO.LOW)
+        time.sleep(0.2)
+    
+def main():
+   
+    GPIO.output(Finger_RST_Pin, GPIO.LOW)
+    time.sleep(0.25) 
+    GPIO.output(Finger_RST_Pin, GPIO.HIGH)
+    time.sleep(0.25)    # Wait for module to start
+    while SetCompareLevel(5) != 5:                 
+        print ("***ERROR***: Please ensure that the module power supply is 3.3V or 5V, the serial line connection is correct.")
+        time.sleep(1)  
+    print ("***************************** WaveShare Capacitive Fingerprint Reader Test *****************************")
+    print ("Compare Level:  5    (can be set to 0-9, the bigger, the stricter)")
+    print ("Number of fingerprints already available:  %d "  % GetUserCount())
+    print (" send commands to operate the module: ")
+    print ("  CMD1 : Query the number of existing fingerprints")
+    print ("  CMD2 : Registered fingerprint  (Put your finger on the sensor until successfully/failed information returned) ")
+    print ("  CMD3 : Fingerprint matching  (Send the command, put your finger on sensor) ")
+    print ("  CMD4 : Clear fingerprints ")
+    print ("  CMD5 : Switch to sleep mode, you can use the finger Automatic wake-up function (In this state, only CMD6 is valid. When a finger is placed on the sensor,the module is awakened and the finger is matched, without sending commands to match each time. The CMD6 can be used to wake up) ")
+    print ("  CMD6 : Wake up and make all commands valid ")
+    print ("***************************** WaveShare Capacitive Fingerprint Reader Test ***************************** ")
+
+    t = threading.Thread(target=Auto_Verify_Finger)
+    t.setDaemon(True)
+    t.start()
+    
+    while  True:     
+        str = raw_input("Please input command (CMD1-CMD6):")
+        Analysis_PC_Command(str)
+               
+if __name__ == '__main__':
+        try:
+            main()
+        except KeyboardInterrupt:
+            if ser != None:
+                ser.close()               
+            GPIO.cleanup()
+            print("\n\n Test finished ! \n") 
+            sys.exit()
diff --git a/pointeuse/dev/hourtrax.pl b/pointeuse/dev/hourtrax.pl
new file mode 100644 (file)
index 0000000..7799738
--- /dev/null
@@ -0,0 +1,121 @@
+#!/usr/bin/env perl
+use strict;
+#use lib ($ENV{HOME}.'/perl5/lib/perl5');
+use File::Basename;
+use Getopt::Long;
+use Time::HiRes;
+use Data::Dumper;
+use Plack::Builder;
+use Plack::App::File;
+#use Plack::App::WrapCGI;
+use Plack::Middleware::Auth::Basic;
+use Plack::Middleware::DirIndex; 
+use Plack::Request; 
+use Plack::Runner;
+use Getopt::Long;
+use Digest::SHA::PurePerl qw(sha256_hex);
+use Cwd;
+use FindBin qw($RealBin); 
+use lib ($RealBin.'/lib');
+use Module::DB;
+my $cfgfile ="";
+GetOptions("config|c=s" => \$cfgfile);
+if (! -e $cfgfile ){
+  print STDERR "Hourtrax Server no config-file found!\n";
+  exit(1);
+}
+our $cfg = &readconfig();
+print $^O."\n";
+print $RealBin."\n";
+print Dumper($cfg);
+#my $datapath=$ENV{HOME}.'/.hourtrax'; 
+# if ($^O eq "MSWin32"){
+#      $datapath = getcwd().'/data';
+# } elsif ($^O eq "darwin"){
+#      $datapath = getcwd().'/data';
+# } 
+#my $webdir = dirname($RealBin).'/web';
+print "datapath:".$cfg->{datapath}."\n"; 
+my @match =  grep { /par-.*inc$/} @INC;
+
+if (($cfg->{daemon} == 1)){
+       use POSIX qw(setsid);
+       #open STDIN, '/dev/null'   or die "Can't read /dev/null: $!";
+  #  open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!";
+  #  open STDERR, '>/dev/null' or die "Can't write to /dev/null: $!";
+    
+       die "cannot start process $!" unless defined (my $child = fork);
+       exit 0 if $child;
+       setsid() or die "cannot start new session $!";
+       chdir('/');
+       umask(0);
+       system("echo ".$$." > ".$cfg->{datapath}.'/'.$cfg->{pidfile});
+}
+
+my $basedir = dirname($0);
+if (scalar(@match) > 0){
+       $basedir = $match[0];
+}
+
+my $cfgpath = "";
+
+
+
+# my $name = basename($0);
+# $name =~ s/srv\.pl$//;
+# $name =~ s/srv\.exe$//;
+# $name = lc($name);
+
+sub authen_cb {
+      my($username, $password, $env) = @_;
+      my $auth = 0;
+      print "Check AUTH\n";
+      my $pwd = sha256_hex($password);
+      print "$username=$pwd\n";
+      print $cfg->{datapath}.'/'.$cfg->{pwdfile}."\n";
+      if (-e $cfg->{datapath}.'/'.$cfg->{pwdfile}){ 
+        open(AUTH,$cfg->{datapath}.'/'.$cfg->{pwdfile});
+        while (my $l = <AUTH>){
+                chomp($l);
+                if ($l eq $username.'='.$pwd){
+                        $auth = 1;
+                        last;
+                }
+        }
+        close(AUTH);
+      }
+      return $auth;
+ }
+
+sub readconfig(){
+  my $retcfg = ();
+  open(CFG,$cfgfile);
+  while (my $l = <CFG>){
+    chomp($l);
+    $l =~ s/^\s+//;
+    $l =~ s/\s+$//;
+    if (($l eq "") || ($l =~ /^#/) || ($l =~ /^;/)){next;}
+    my ($k,$v) = $l =~ m/(\w+)\s*=\s*(.*)$/;
+    $retcfg->{lc($k)} = $v;
+  }
+  close(CFG);
+  return $retcfg;
+}
+
+my $allapp = builder {
+   enable_if { $_[0]->{REMOTE_ADDR} ne 'localhost' && $_[0]->{REMOTE_ADDR} ne '127.0.0.1' } "Auth::Basic", authenticator => \&authen_cb;
+   enable "Plack::Middleware::DirIndex", dir_index => 'index.html';    
+   mount "/sync" => Module::DB->new({dbfile => $cfg->{datapath}.'/'.$cfg->{dbfile}})->to_app;
+   #mount "/" => Plack::App::File->new(root => $RealBin."/htdocs")->to_app;
+};
+
+
+my @args = ("-p",$cfg->{port},"--error-log",$cfg->{datapath}."/error.log","--access-log",$cfg->{datapath}."/access.log","--timeout",$cfg->{timeout});
+#,"--error-log",$datapath."/error.log","--access-log",$datapath."/access.log");
+my $runner = Plack::Runner->new(server => 'Starlight', env => $cfg->{mode}, ipv6 => '1' );#env => , test ,deployment
+$runner->parse_options(@args);
+$runner->run($allapp);
+
+print "Started\n";
+
+
diff --git a/pointeuse/dev/install.txt b/pointeuse/dev/install.txt
new file mode 100644 (file)
index 0000000..54dc5d3
--- /dev/null
@@ -0,0 +1,7 @@
+#UART disable serial
+cmdline.txt
+===========
+console=serial0,115200 console=tty1 root=PARTUUID=d9b3f436-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
+default:
+--------
+console=serial0,115200 console=tty1 root=PARTUUID=d9b3f436-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash
\ No newline at end of file
diff --git a/pointeuse/dev/lib/DB/PgSQL.pm b/pointeuse/dev/lib/DB/PgSQL.pm
new file mode 100644 (file)
index 0000000..cc5e875
--- /dev/null
@@ -0,0 +1,348 @@
+package DB::PgSQL;
+
+use strict;
+use DBI;
+use File::Basename;
+use DBD::PgPP; 
+use URI::Encode qw(uri_encode uri_decode);
+use Encode;
+use Data::Dumper;
+use Text::Unidecode;
+
+
+sub new {
+    my $class = shift;
+    my $p = shift;
+    my $self = bless {}, $class;
+    $self->{debug} = 1;
+    $self->{dbh} = DBI->connect("DBI:PgPP:dbname=".$p->{dbname},$p->{dbuser},$p->{dbpasswd},{PrintError=>1,RaiseError=>1,AutoCommit=>1})  or return "query Connection Error!".$!;
+    return $self;
+}
+
+sub disconnect(){
+  my $self = shift;
+  return $self->{dbh}->disconnect();
+}
+
+sub securetext(){
+       my $self = shift;
+       my $text = shift;
+       $text =~ s/'/''/g;
+       return $text;
+}
+
+sub value(){
+  my $self = shift;
+  my $text = shift;
+  if ($text eq ""){
+    return 'null';
+  }
+  return "'".$text."'";
+}
+
+sub logerror(){
+  my $self = shift;
+  my $fn = shift;
+  my $stat = shift;
+
+  return ();
+}
+
+sub newuuid(){
+       my $self = shift;
+       my $rx = $self->query("SELECT uuid_in(md5(random()::text || clock_timestamp()::text)::cstring) as id;");
+       return $rx->{id};
+}
+
+sub query_unenc(){
+       my $self = shift;
+    my $stat = shift;
+
+    my $retdata = ();
+    $stat = encode("utf8", $stat);
+    if ($self->{debug} == 1){
+      print STDERR "QUERY_UNENC:\n".$stat."\n===\n";
+    }
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("query_unenc",$stat);
+
+               
+   $sth->execute() or return $self->logerror("query_unenc",$stat);
+   
+   my $data = $sth->fetchrow_hashref();
+   foreach my $k (keys %{$data}){
+      $retdata->{$k} = $data->{$k};#decode("utf-8",$data->{$k});
+   }
+   
+   $sth->finish();
+        
+   return $retdata;
+}
+
+sub query(){
+       my $self = shift;
+    my $stat = shift;
+    my $retdata = ();
+    $stat = encode("utf8", $stat);
+    if ($self->{debug} == 1){
+      print STDERR "QUERY:\n".$stat."\n===\n";
+    }
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("query",$stat);
+
+   $sth->execute() or return $self->logerror("query",$stat);
+   
+   my $data = $sth->fetchrow_hashref();
+   foreach my $k (keys %{$data}){
+      $retdata->{$k} = decode("utf-8",$data->{$k});
+   }
+   
+   $sth->finish();
+        
+   return $retdata;
+}
+
+sub querybykey(){
+    my $self = shift;
+    my $key = shift;
+    my $stat = shift;
+    my $retdata =();
+    if ($self->{debug} == 1){
+      print STDERR "QUERYBYKEY:\n".$stat."\n===\n";
+    }
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("querybykey",$stat);
+   $sth->execute() or return $self->logerror("querybykey",$stat);
+   while(my $data = $sth->fetchrow_hashref())
+   {
+     if (exists $data->{$key}){
+        foreach my $k (keys %{$data}){
+           $retdata->{$data->{$key}}{$k} =decode("utf-8",$data->{$k});
+        }
+     }
+   }
+   if (keys(%{$retdata}) == 0){
+    $retdata =();
+   }
+   $sth->finish();
+   return $retdata;
+}
+
+sub querysorted(){
+    my $self = shift;
+    my $stat = shift;
+    my $retdata = ();
+    if ($stat !~ /sessions/){
+      if ($self->{debug} == 1){
+        print STDERR "QUERYSORTED:\n".$stat."\n===\n";
+      }
+    } 
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("querysorted",$stat);
+   $sth->execute() or return $self->logerror("querysorted",$stat);
+   my $count = 0;
+   while(my $data = $sth->fetchrow_hashref()){
+                       foreach my $k (keys %{$data}){
+        if ($data->{$k} =~ /^{.*}$/){
+          $retdata->{$count}->{$k} = JSON::PP::decode_json($data->{$k});  
+        } else {
+          $retdata->{$count}->{$k} = decode("utf-8",$data->{$k});
+        }
+      }
+     $count++;
+   }
+   $sth->finish();
+   return $retdata;
+}
+
+sub exec(){
+    my $self = shift;
+    my $stat = shift;
+    my $retdata;
+    $stat = encode("UTF-8", $stat);
+    if ($self->{debug} == 1){
+      print STDERR "EXEC:\n".$stat."\n===\n";
+    }
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("exec",$stat);
+   $retdata->{success}  = $self->{dbh}->do($stat) or return $self->logerror("exec",$stat);
+   return $retdata;
+}
+
+sub queryarray(){
+   my $self = shift;
+   my $stat = shift;
+   my @retdata = ();
+  my $res = $self->querysorted($stat);
+  foreach my $r (sort {$a <=> $b} keys(%{$res})){
+    push(@retdata,$res->{$r});
+  }
+  return \@retdata;
+}
+
+
+# sub create_ddl_insert(){
+#      my $self = shift;
+#      my $data = shift;
+#      my $fields = ();
+#      my @ddl = ();
+#      foreach my $f (keys(%{$data})){
+#                      if (($f =~ /\_/) && ($f !~ /^ident_/) && ($f !~ /\_id$/)){
+#                              my $t = substr($f,0,index($f,"_"));
+#                              my $c = substr($f,length($t)+1);
+#                              $fields->{$t}->{$c} = $data->{$f};
+#                      } elsif ($f =~ /^ident_/){
+#         my $f2 = $f; 
+#         $f2 =~ s/^ident_//;
+
+#         my $t = substr($f2,0,index($f2,"_"));
+#                              my $c = substr($f2,length($t)+1);
+#          if ($c ne "id"){
+#            $fields->{$t}->{$c} = $data->{$f};
+#          }
+#       }
+
+#               }
+#      foreach my $tb (keys(%{$fields})){
+#              my @sqlcol = ();
+#              my @sqlval = ();
+#              foreach my $c (keys(%{$fields->{$tb}})){
+#                      my $v = $fields->{$tb}->{$c};
+#                      $v =~ s/'/''/g;
+#                      push (@sqlcol,$c);
+#                      if ($v eq ''){
+#                              $v = 'null';
+#                      } else {
+#                              $v = "'".$v."'";
+#                      }
+#                      push (@sqlval,$v);
+#              }
+#              push(@ddl,"INSERT INTO ".$tb." (".join(",",@sqlcol).") VALUES (".join(",",@sqlval).") returning id;");
+#      }
+#      return @ddl;
+# }
+
+
+# sub create_ddl_update(){
+#      my $self = shift;
+#      my $data = shift;
+#      my $fields = ();
+#      my @ddl = ();
+#      foreach my $f (keys(%{$data})){
+#                      if ($f =~ /^ident_/){
+#                              my $fx = substr($f,6);
+#                              my $t = substr($fx,0,index($fx,"_"));
+#                              my $c = substr($fx,length($t)+1);
+#                              $fields->{$t}->{cond}->{$c} = $data->{$f};
+#                      } elsif ( ($f !~ /^ident/) && ($f =~ /.+\_.+/) ){
+#                              my $t = substr($f,0,index($f,"_"));
+#                              my $c = substr($f,length($t)+1);
+#                              $fields->{$t}->{fields}->{$c} = $data->{$f};
+#                      }
+#               }
+#      foreach my $tb (keys(%{$fields})){
+#              my @sqlupd = ();
+#              my @sqlcond = ();
+#                      foreach my $c (keys(%{$fields->{$tb}->{fields}})){
+                               
+#                              my $v = $fields->{$tb}->{fields}->{$c};
+#                              $v =~ s/'/''/g;
+                               
+#         if ($c =~ /-/){
+#           my @jp = split('-',$c);
+#           if ($v eq ''){
+#                                        $v = 'null';
+#                                } else {
+#                                        $v = '"'.$v.'"';
+#                                }
+#           $c = 'jsonb_set(to_jsonb('.$jp[0].'),\'{"'.$jp[1].'"}\',\''.$v.'\')::json';
+#           push (@sqlupd,$jp[0]."=".$c);  
+#         }else {
+#           if ($v eq ''){
+#                                        $v = 'null';
+#                                } else {
+#                                        $v = "'".$v."'";
+#                                }
+#           push (@sqlupd,$c."=".$v);
+#         }
+                               
+#                      }
+#                      foreach my $c (keys(%{$fields->{$tb}->{cond}})){
+#                              my $v = $fields->{$tb}->{cond}->{$c};
+#                              $v =~ s/'/''/g;
+#                              if ($v eq ''){
+#                                      $v = 'null';
+#                              } else {
+#                                      $v = "'".$v."'";
+#                              }
+#                              push (@sqlcond,$c."=".$v);
+#                      }
+#              push(@ddl,"UPDATE ".$tb." SET ".join(",",@sqlupd)." WHERE ".join(" AND ",@sqlcond).";");
+#      } 
+       
+#      return @ddl; 
+# }
+
+# sub create_cnt_statement(){
+#      my $self = shift;
+#      my $data = shift;
+#      my $fields = ();
+#      my @ddl = ();
+#      foreach my $f (keys(%{$data})){
+#                      if ($f =~ /^ident_/){
+#                              my $fx = substr($f,6);
+#                              my $t = substr($fx,0,index($fx,"_"));
+#                              my $c = substr($fx,length($t)+1);
+#                              $fields->{$t}->{cond}->{$c} = $data->{$f};
+#                      } 
+#               }
+#      foreach my $tb (keys(%{$fields})){
+#              my @sqlcond = ();
+#                      foreach my $c (keys(%{$fields->{$tb}->{cond}})){
+#                              my $v = $fields->{$tb}->{cond}->{$c};
+#                              $v =~ s/'/''/g;
+#                              if ($v eq ''){
+#                                      $v = 'null';
+#                              } else {
+#                                      $v = "'".$v."'";
+#                              }
+#                              push (@sqlcond,$c."=".$v);
+#                      }
+     
+#              push(@ddl,"SELECT count(*) as cnt from ".$tb." WHERE ".join(" AND ",@sqlcond).";");
+#      } 
+#      return @ddl; 
+# }
+
+# sub create_ddl_delete(){
+#      my $self = shift;
+#      my $data = shift;
+#      my $fields = ();
+#      my @ddl = ();
+#      my @refcols = ();
+#      my $refdata = ();
+#      foreach my $f (keys(%{$data})){
+#                      if ($f =~ /^ident_/){
+#                              my ($t,$c) = $f =~ m/ident_(.+)\_(.+)/;
+                               
+#                              $fields->{$t}->{cond}->{$c} = $data->{$f};
+#                              push(@refcols,"'".$c.'_'.$t."'");
+#                              $refdata->{$c.'_'.$t} = $data->{$f};
+#                      } 
+#               }
+#      foreach my $tb (keys(%{$fields})){
+#              my @sqlcond = ();
+#              foreach my $c (keys(%{$fields->{$tb}->{cond}})){
+#                      my $v = $fields->{$tb}->{cond}->{$c};
+#                      $v =~ s/'/''/g;
+#                      push (@sqlcond,$c."='".$v."'");
+#              }
+#              push(@ddl,"DELETE FROM ".$tb." WHERE ".join(" AND ",@sqlcond).";");
+#      } 
+#      return @ddl;
+# }
+
+sub textunidecode(){
+  my $self = shift;
+  my $text = shift;
+  $text = lc(unidecode(decode("utf-8",$text)));
+  $text =~ s/^[a-z0-9]//g;
+  return $text;
+} 
+
+1;
diff --git a/pointeuse/dev/lib/DB/SQLite.pm b/pointeuse/dev/lib/DB/SQLite.pm
new file mode 100644 (file)
index 0000000..a2e544c
--- /dev/null
@@ -0,0 +1,348 @@
+package DB::SQLite;
+
+use strict;
+use DBI;
+use File::Basename;
+use DBD::SQLite;
+use URI::Encode qw(uri_encode uri_decode);
+use Encode;
+use Data::Dumper;
+use Text::Unidecode;
+
+
+sub new {
+    my $class = shift;
+    my $p = shift;
+    my $self = bless {}, $class;
+    $self->{debug} = 1;
+    $self->{dbh} = DBI->connect("DBI:SQLite:dbname=".$p->{dbfile},'','',{PrintError=>1,RaiseError=>1,AutoCommit=>1})  or return "query Connection Error!".$!;
+    return $self;
+}
+
+sub disconnect(){
+  my $self = shift;
+  return $self->{dbh}->disconnect();
+}
+
+sub securetext(){
+       my $self = shift;
+       my $text = shift;
+       $text =~ s/'/''/g;
+       return $text;
+}
+
+sub value(){
+  my $self = shift;
+  my $text = shift;
+  if ($text eq ""){
+    return 'null';
+  }
+  return "'".$text."'";
+}
+
+sub logerror(){
+  my $self = shift;
+  my $fn = shift;
+  my $stat = shift;
+
+  return ();
+}
+
+sub newuuid(){
+       my $self = shift;
+       my $rx = $self->query("SELECT lower(hex( randomblob(4)) || '-' || hex( randomblob(2)) || '-' || hex( randomblob(2)) || '-' || hex( randomblob(2))  ||  '-' || hex(randomblob(6))) as id;");
+       return $rx->{id};
+}
+
+sub query_unenc(){
+       my $self = shift;
+    my $stat = shift;
+
+    my $retdata = ();
+    $stat = encode("utf8", $stat);
+    if ($self->{debug} == 1){
+      print STDERR "QUERY_UNENC:\n".$stat."\n===\n";
+    }
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("query_unenc",$stat);
+
+               
+   $sth->execute() or return $self->logerror("query_unenc",$stat);
+   
+   my $data = $sth->fetchrow_hashref();
+   foreach my $k (keys %{$data}){
+      $retdata->{$k} = $data->{$k};#decode("utf-8",$data->{$k});
+   }
+   
+   $sth->finish();
+        
+   return $retdata;
+}
+
+sub query(){
+       my $self = shift;
+    my $stat = shift;
+    my $retdata = ();
+    $stat = encode("utf8", $stat);
+    if ($self->{debug} == 1){
+      print STDERR "QUERY:\n".$stat."\n===\n";
+    }
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("query",$stat);
+
+   $sth->execute() or return $self->logerror("query",$stat);
+   
+   my $data = $sth->fetchrow_hashref();
+   foreach my $k (keys %{$data}){
+      $retdata->{$k} = decode("utf-8",$data->{$k});
+   }
+   
+   $sth->finish();
+        
+   return $retdata;
+}
+
+sub querybykey(){
+    my $self = shift;
+    my $key = shift;
+    my $stat = shift;
+    my $retdata =();
+    if ($self->{debug} == 1){
+      print STDERR "QUERYBYKEY:\n".$stat."\n===\n";
+    }
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("querybykey",$stat);
+   $sth->execute() or return $self->logerror("querybykey",$stat);
+   while(my $data = $sth->fetchrow_hashref())
+   {
+     if (exists $data->{$key}){
+        foreach my $k (keys %{$data}){
+           $retdata->{$data->{$key}}{$k} =decode("utf-8",$data->{$k});
+        }
+     }
+   }
+   if (keys(%{$retdata}) == 0){
+    $retdata =();
+   }
+   $sth->finish();
+   return $retdata;
+}
+
+sub querysorted(){
+    my $self = shift;
+    my $stat = shift;
+    my $retdata = ();
+    if ($stat !~ /sessions/){
+      if ($self->{debug} == 1){
+        print STDERR "QUERYSORTED:\n".$stat."\n===\n";
+      }
+    } 
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("querysorted",$stat);
+   $sth->execute() or return $self->logerror("querysorted",$stat);
+   my $count = 0;
+   while(my $data = $sth->fetchrow_hashref()){
+                       foreach my $k (keys %{$data}){
+        if ($data->{$k} =~ /^{.*}$/){
+          $retdata->{$count}->{$k} = JSON::PP::decode_json($data->{$k});  
+        } else {
+          $retdata->{$count}->{$k} = decode("utf-8",$data->{$k});
+        }
+      }
+     $count++;
+   }
+   $sth->finish();
+   return $retdata;
+}
+
+sub exec(){
+    my $self = shift;
+    my $stat = shift;
+    my $retdata;
+    $stat = encode("UTF-8", $stat);
+    if ($self->{debug} == 1){
+      print STDERR "EXEC:\n".$stat."\n===\n";
+    }
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("exec",$stat);
+   $retdata->{success}  = $self->{dbh}->do($stat) or return $self->logerror("exec",$stat);
+   return $retdata;
+}
+
+sub queryarray(){
+   my $self = shift;
+   my $stat = shift;
+   my @retdata = ();
+  my $res = $self->querysorted($stat);
+  foreach my $r (sort {$a <=> $b} keys(%{$res})){
+    push(@retdata,$res->{$r});
+  }
+  return \@retdata;
+}
+
+
+sub create_ddl_insert(){
+       my $self = shift;
+       my $data = shift;
+       my $fields = ();
+       my @ddl = ();
+       foreach my $f (keys(%{$data})){
+                       if (($f =~ /\_/) && ($f !~ /^ident_/) && ($f !~ /\_id$/)){
+                               my $t = substr($f,0,index($f,"_"));
+                               my $c = substr($f,length($t)+1);
+                               $fields->{$t}->{$c} = $data->{$f};
+                       } elsif ($f =~ /^ident_/){
+        my $f2 = $f; 
+        $f2 =~ s/^ident_//;
+
+        my $t = substr($f2,0,index($f2,"_"));
+                               my $c = substr($f2,length($t)+1);
+         if ($c ne "id"){
+           $fields->{$t}->{$c} = $data->{$f};
+         }
+      }
+
+                }
+       foreach my $tb (keys(%{$fields})){
+               my @sqlcol = ();
+               my @sqlval = ();
+               foreach my $c (keys(%{$fields->{$tb}})){
+                       my $v = $fields->{$tb}->{$c};
+                       $v =~ s/'/''/g;
+                       push (@sqlcol,$c);
+                       if ($v eq ''){
+                               $v = 'null';
+                       } else {
+                               $v = "'".$v."'";
+                       }
+                       push (@sqlval,$v);
+               }
+               push(@ddl,"INSERT INTO ".$tb." (".join(",",@sqlcol).") VALUES (".join(",",@sqlval).") returning id;");
+       }
+       return @ddl;
+}
+
+
+sub create_ddl_update(){
+       my $self = shift;
+       my $data = shift;
+       my $fields = ();
+       my @ddl = ();
+       foreach my $f (keys(%{$data})){
+                       if ($f =~ /^ident_/){
+                               my $fx = substr($f,6);
+                               my $t = substr($fx,0,index($fx,"_"));
+                               my $c = substr($fx,length($t)+1);
+                               $fields->{$t}->{cond}->{$c} = $data->{$f};
+                       } elsif ( ($f !~ /^ident/) && ($f =~ /.+\_.+/) ){
+                               my $t = substr($f,0,index($f,"_"));
+                               my $c = substr($f,length($t)+1);
+                               $fields->{$t}->{fields}->{$c} = $data->{$f};
+                       }
+                }
+       foreach my $tb (keys(%{$fields})){
+               my @sqlupd = ();
+               my @sqlcond = ();
+                       foreach my $c (keys(%{$fields->{$tb}->{fields}})){
+                               
+                               my $v = $fields->{$tb}->{fields}->{$c};
+                               $v =~ s/'/''/g;
+                               
+        if ($c =~ /-/){
+          my @jp = split('-',$c);
+          if ($v eq ''){
+                                         $v = 'null';
+                                 } else {
+                                         $v = '"'.$v.'"';
+                                 }
+          $c = 'jsonb_set(to_jsonb('.$jp[0].'),\'{"'.$jp[1].'"}\',\''.$v.'\')::json';
+          push (@sqlupd,$jp[0]."=".$c);  
+        }else {
+          if ($v eq ''){
+                                         $v = 'null';
+                                 } else {
+                                         $v = "'".$v."'";
+                                 }
+          push (@sqlupd,$c."=".$v);
+        }
+                               
+                       }
+                       foreach my $c (keys(%{$fields->{$tb}->{cond}})){
+                               my $v = $fields->{$tb}->{cond}->{$c};
+                               $v =~ s/'/''/g;
+                               if ($v eq ''){
+                                       $v = 'null';
+                               } else {
+                                       $v = "'".$v."'";
+                               }
+                               push (@sqlcond,$c."=".$v);
+                       }
+               push(@ddl,"UPDATE ".$tb." SET ".join(",",@sqlupd)." WHERE ".join(" AND ",@sqlcond).";");
+       } 
+       
+       return @ddl; 
+}
+
+sub create_cnt_statement(){
+       my $self = shift;
+       my $data = shift;
+       my $fields = ();
+       my @ddl = ();
+       foreach my $f (keys(%{$data})){
+                       if ($f =~ /^ident_/){
+                               my $fx = substr($f,6);
+                               my $t = substr($fx,0,index($fx,"_"));
+                               my $c = substr($fx,length($t)+1);
+                               $fields->{$t}->{cond}->{$c} = $data->{$f};
+                       } 
+                }
+       foreach my $tb (keys(%{$fields})){
+               my @sqlcond = ();
+                       foreach my $c (keys(%{$fields->{$tb}->{cond}})){
+                               my $v = $fields->{$tb}->{cond}->{$c};
+                               $v =~ s/'/''/g;
+                               if ($v eq ''){
+                                       $v = 'null';
+                               } else {
+                                       $v = "'".$v."'";
+                               }
+                               push (@sqlcond,$c."=".$v);
+                       }
+     
+               push(@ddl,"SELECT count(*) as cnt from ".$tb." WHERE ".join(" AND ",@sqlcond).";");
+       } 
+       return @ddl; 
+}
+
+sub create_ddl_delete(){
+       my $self = shift;
+       my $data = shift;
+       my $fields = ();
+       my @ddl = ();
+       my @refcols = ();
+       my $refdata = ();
+       foreach my $f (keys(%{$data})){
+                       if ($f =~ /^ident_/){
+                               my ($t,$c) = $f =~ m/ident_(.+)\_(.+)/;
+                               
+                               $fields->{$t}->{cond}->{$c} = $data->{$f};
+                               push(@refcols,"'".$c.'_'.$t."'");
+                               $refdata->{$c.'_'.$t} = $data->{$f};
+                       } 
+                }
+       foreach my $tb (keys(%{$fields})){
+               my @sqlcond = ();
+               foreach my $c (keys(%{$fields->{$tb}->{cond}})){
+                       my $v = $fields->{$tb}->{cond}->{$c};
+                       $v =~ s/'/''/g;
+                       push (@sqlcond,$c."='".$v."'");
+               }
+               push(@ddl,"DELETE FROM ".$tb." WHERE ".join(" AND ",@sqlcond).";");
+       } 
+       return @ddl;
+}
+
+sub textunidecode(){
+  my $self = shift;
+  my $text = shift;
+  $text = lc(unidecode(decode("utf-8",$text)));
+  $text =~ s/^[a-z0-9]//g;
+  return $text;
+} 
+
+1;
diff --git a/pointeuse/dev/lib/Module/DB.pm b/pointeuse/dev/lib/Module/DB.pm
new file mode 100644 (file)
index 0000000..2c4df26
--- /dev/null
@@ -0,0 +1,105 @@
+package Module::DB;
+
+use strict;
+use warnings;
+use parent qw(Plack::Component);
+use Plack::Request;
+use File::Basename;
+
+use Encode;
+use JSON::PP;
+use DB::SQLite;
+
+sub call {
+    my($self, $env) = @_;
+    if (($env->{REMOTE_ADDR} =~ "^127\.0\.") && 
+               ($env->{REMOTE_ADDR} =~ "^10\.") && 
+               ($env->{REMOTE_ADDR} =~ "^172\.16\.") && 
+               ($env->{REMOTE_ADDR} =~ "^192\.168\.")) {
+               return [
+       404,
+       [ 'Content-Type' => "text/html",'Cache-Control' =>  'no-store, no-cache, must-revalidate' ], 
+               [ "Sorry no remote access allowed!" ]
+       ];
+       }
+    #$self->_app->($env);
+    return $self->sqlite($env);
+}
+
+sub sqlite {
+       my $self = shift;
+       my $env = shift;
+  my $html->{result} = ();
+  my $ct="application/json";
+  my $status=200;
+  my $req = Plack::Request->new($env);
+  my $res = ();
+  my $db = DB::SQLite->new({dbfile => $self->{dbfile}});
+  my @param = $req->param;
+  my $p = ();
+  my $json = JSON::PP->new();
+  #$json->convert_blessed(1);
+  #  $json->allow_blessed(1);
+  foreach my $pp (@param){
+    $p->{$pp} = $req->param($pp);
+  }
+  if ($req->raw_body =~ /^\{.*\}$/){
+    my $pnew = $json->decode($req->raw_body);
+    $html->{pnew} = $pnew;
+    foreach my $pn (keys(%{$pnew})){
+      $p->{$pn} = $pnew->{$pn};
+    }
+  }
+  $html->{raw_body} = $req->raw_body;
+
+  # if (exists($p->{POSTDATA})){
+  #   my $pjson = JSON::PP::decode_json($p->{POSTDATA});
+  #   foreach my $k (keys(%{$pjson})){
+  #     $p->{$k} = $pjson->{$k};
+  #   }
+  # }
+  $html->{params} = $p;
+  #$html->{params} = $req->;
+  
+  if (exists($p->{get})){
+    
+  } elsif (exists($p->{fn})){
+
+  } elsif (exists($p->{save})){
+    
+  } elsif (exists($p->{sql})){
+    if (exists($p->{type})) {
+               my $q = $p->{sql};
+               my $t = $p->{type};
+               if ($t eq "querybykey"){
+                       $res = $db->querybykey($p->{key},$q);
+               } elsif ($t eq "query"){
+                       $res = $db->query($q);
+               }elsif ($t eq "querysorted"){
+                       $res = $db->querysorted($q);
+               } elsif ($t eq "queryarray"){
+                       $res = $db->queryarray($q);
+               } elsif ($t eq "exec"){
+                       $res = $db->exec($q);
+               }
+               $html->{result}->{sqldata} = $res;
+
+       }
+  } else {
+    
+
+        return [
+         400,
+         [ 'Content-Type' => $ct.'; charset=utf-8','Cache-Control' =>  'no-store, no-cache, must-revalidate', 'Access-Control-Allow-Origin'=> '*' ], 
+         [ $json->encode($html) ]
+       ];
+  }
+  
+       return [
+    200,
+     [ 'Content-Type' => $ct.'; charset=utf-8','Cache-Control' =>  'no-store, no-cache, must-revalidate', 'Access-Control-Allow-Origin'=> '*' ], 
+     [ $json->encode($html) ]
+  ];
+};
+
+1;
\ No newline at end of file
diff --git a/pointeuse/dev/lib/Module/Staff.pm b/pointeuse/dev/lib/Module/Staff.pm
new file mode 100644 (file)
index 0000000..18cab30
--- /dev/null
@@ -0,0 +1,85 @@
+package Module::Staff;
+
+use strict;
+use warnings;
+use parent qw(Plack::Component);
+use Plack::Request;
+use File::Basename;
+
+use Encode;
+use JSON::PP;
+use DB::SQLite;
+use POT::TimeTracker::Staff;
+
+sub call {
+    my($self, $env) = @_;
+    if (($env->{REMOTE_ADDR} =~ "^127\.0\.") && 
+               ($env->{REMOTE_ADDR} =~ "^10\.") && 
+               ($env->{REMOTE_ADDR} =~ "^172\.16\.") && 
+               ($env->{REMOTE_ADDR} =~ "^192\.168\.")) {
+               return [
+       404,
+       [ 'Content-Type' => "text/html",'Cache-Control' =>  'no-store, no-cache, must-revalidate' ], 
+               [ "Sorry no remote access allowed!" ]
+       ];
+       }
+    my $db = DB::SQLite->new({dbfile => $self->{dbfile}});
+    my $json = JSON::PP->new();
+  #$json->convert_blessed(1);
+  #  $json->allow_blessed(1);
+  foreach my $pp (@param){
+    $p->{$pp} = $req->param($pp);
+  }
+  if ($req->raw_body =~ /^\{.*\}$/){
+    my $pnew = $json->decode($req->raw_body);
+    $html->{pnew} = $pnew;
+    foreach my $pn (keys(%{$pnew})){
+      $p->{$pn} = $pnew->{$pn};
+    }
+  }
+    my $st = POT::timetracker::Staff->new({db => $db});
+    if ($env->{PATH_INFO} =~ /^\/set/){
+      if (ref($p->{data}) eq "ARRAY"){
+        foreach my $s (@{$p->{data}}){
+        $html->{result} = $st->setStaff($p->{data}->{$s});
+        }
+      }
+      if (exists($p->{id})){
+        $html->{result} = $st->setStaff($p);
+      }
+    }
+    if ($env->{PATH_INFO} =~ )
+    elsif ($env->{PATH_INFO} =~ /^\/worktimes/){
+      if (ref($p->{data}) eq "ARRAY"){
+        foreach my $s (@{$p->{data}}){
+        $html->{result} = $st->setWorktimes($p->{data}->{$s});
+        }
+      }
+      if (exists($p->{id})){
+        $html->{result} = $st->setWorktimes($p);
+      }
+    }
+    elsif ($env->{PATH_INFO} =~ /^\/cleanfingerprint/){
+      if (ref($p->{data}) eq "ARRAY"){
+        foreach my $s (@{$p->{data}}){
+          $html->{result} = $st->cleanFingerPrint($p->{data}->{$s}->{id});
+        }
+      }
+      if (exists($p->{id})){
+        $html->{result} = $st->cleanFingerPrint($p->{data}->{$s}->{id});
+      }
+    }
+    else {
+      return [
+         400,
+         [ 'Content-Type' => $ct.'; charset=utf-8','Cache-Control' =>  'no-store, no-cache, must-revalidate', 'Access-Control-Allow-Origin'=> '*' ], 
+         [ $json->encode($html) ]
+       ];
+    }
+    return [
+    200,
+     [ 'Content-Type' => $ct.'; charset=utf-8','Cache-Control' =>  'no-store, no-cache, must-revalidate', 'Access-Control-Allow-Origin'=> '*' ], 
+     [ $json->encode($html) ]
+  ];
+
+}
diff --git a/pointeuse/dev/lib/POT/TimeTracker/Staff.pm b/pointeuse/dev/lib/POT/TimeTracker/Staff.pm
new file mode 100644 (file)
index 0000000..3f0f05f
--- /dev/null
@@ -0,0 +1,58 @@
+package POT::Staff;
+
+use strict;
+use Data::Dumper;
+use FindBin qw($RealBin);
+
+sub new {
+    my $class = shift;
+    my $p = shift;
+    my $self = bless {}, $class;
+    $self->{db} = $p->{db};
+    return $self;
+}
+
+sub SetStaff(){
+  my $self = shift;
+  my $data = shift;
+  my $ret = ();
+  my $sql = "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES (".$self->{db}->value($data->{id}).",".$self->{db}->value($data->{prename}).",".$self->{db}->value($data->{surname}).",".(($data->{istimetrackenabled} eq "1")?'null':"'1'").",".$self->{db}->value($data->{isdeleted}).");";
+  $ret->{sql} = $sql;
+  $ret->{result}= $self->{db}->exec($sql);
+  return $ret;
+}
+
+sub SetWorktimes(){
+  my $self = shift;
+  my $data = shift;
+  my $ret = ();
+  my $sql = "REPLACE INTO staffworktimes (id,id_staff,starttime1,endtime1,starttime2,endtime2) VALUES (".$self->{db}->value($data->{id}).",".$self->{db}->value($data->{id_staff}).",".$self->{db}->value($data->{timestart1}).",".$self->{db}->value($data->{timeend1}).",".$self->{db}->value($data->{timestart2}).",".$self->{db}->value($data->{timeend2}).");";
+  $ret->{sql} = $sql;
+  $ret->{result}= $self->{db}->exec($sql);
+  return $ret;
+}
+
+sub CleanFingerPrint(){
+  my $self = shift;
+  my $id_staff = shift;
+  my $sql = "select * from fingerprints where id_staff='".$id_staff."';";
+  my $fps = $self->{db}->querysorted($sql);
+  my $ret = ();
+  foreach my $f (keys(%{$fps})){
+    my $fpsdata = $fps->{$f};
+    $fpsdata =~ s/\s+//g;
+    $fpsdata =~ s/\[//g;
+    $fpsdata =~ s/\]//g;
+    my @fpsa = split(",",$fpsdata); 
+    my $hb = $fpsa[1];
+    my $lb = $fpsa[2];
+    my $cmd = $RealBin."/fp.py delete 30 $hb $lb";
+    $ret->{cmd} .= $cmd."\n";
+
+  }
+  my $delsql = "DELETE FROM fingerprints where id_staff='".$id_staff."';";
+  $ret->{sql} = $delsql;
+  $ret->{result}= $self->{db}->exec($delsql);
+  return $ret;
+}
+1;
\ No newline at end of file
diff --git a/pointeuse/dev/main.py b/pointeuse/dev/main.py
new file mode 100644 (file)
index 0000000..bf9ce76
--- /dev/null
@@ -0,0 +1,357 @@
+#!/usr/bin/env python3.5
+# -*- coding:utf-8 -*-
+
+import serial
+import time
+import threading
+import sys
+import RPi.GPIO as GPIO
+
+
+
+TRUE         =  1
+FALSE        =  0
+
+# Basic response message definition
+ACK_SUCCESS           = 0x00
+ACK_FAIL              = 0x01
+ACK_FULL              = 0x04
+ACK_NO_USER           = 0x05
+ACK_TIMEOUT           = 0x08
+ACK_GO_OUT            = 0x0F     # The center of the fingerprint is out of alignment with sensor
+
+# User information definition
+ACK_ALL_USER          = 0x00
+ACK_GUEST_USER        = 0x01
+ACK_NORMAL_USER       = 0x02
+ACK_MASTER_USER       = 0x03
+
+USER_MAX_CNT          = 1000        # Maximum fingerprint number
+
+# Command definition
+CMD_HEAD              = 0xF5
+CMD_TAIL              = 0xF5
+CMD_ADD_1             = 0x01
+CMD_ADD_2             = 0x02
+CMD_ADD_3             = 0x03
+CMD_MATCH             = 0x0C
+CMD_DEL               = 0x04
+CMD_DEL_ALL           = 0x05
+CMD_USER_CNT          = 0x09
+CMD_COM_LEV           = 0x28
+CMD_LP_MODE           = 0x2C
+CMD_TIMEOUT           = 0x2E
+
+CMD_FINGER_DETECTED   = 0x14
+
+
+
+Finger_WAKE_Pin   = 23
+Finger_RST_Pin    = 24
+
+GPIO.setmode(GPIO.BCM)
+GPIO.setwarnings(False)
+GPIO.setup(Finger_WAKE_Pin, GPIO.IN)  
+GPIO.setup(Finger_RST_Pin, GPIO.OUT) 
+GPIO.setup(Finger_RST_Pin, GPIO.OUT, initial=GPIO.HIGH)
+
+g_rx_buf            = []
+PC_Command_RxBuf    = []
+Finger_SleepFlag    = 0
+
+#rLock = threading.RLock()
+ser = serial.Serial("/dev/ttyS0", 19200)
+
+#***************************************************************************
+# @brief    send a command, and wait for the response of module
+#***************************************************************************/
+def  TxAndRxCmd(command_buf, rx_bytes_need, timeout):
+    global g_rx_buf
+    CheckSum = 0
+    tx_buf = []
+    tx = ""
+       
+    tx_buf.append(CMD_HEAD)         
+    for byte in command_buf:
+        tx_buf.append(byte)  
+        CheckSum ^= byte
+        
+    tx_buf.append(CheckSum)  
+    tx_buf.append(CMD_TAIL)  
+       
+    for i in tx_buf:
+        tx += chr(i)
+               
+    ser.flushInput()
+    ser.write(tx)
+       
+    g_rx_buf = [] 
+    time_before = time.time()
+    time_after = time.time()
+    while time_after - time_before < timeout and len(g_rx_buf) < rx_bytes_need:  # Waiting for response
+        bytes_can_recv = ser.inWaiting()
+        if bytes_can_recv != 0:
+            g_rx_buf += ser.read(bytes_can_recv)    
+        time_after = time.time()
+
+    for i in range(len(g_rx_buf)):
+        g_rx_buf[i] = ord(g_rx_buf[i])
+
+    if len(g_rx_buf) != rx_bytes_need:
+        return ACK_TIMEOUT
+    if g_rx_buf[0] != CMD_HEAD:        
+        return ACK_FAIL
+    if g_rx_buf[rx_bytes_need - 1] != CMD_TAIL:
+        return ACK_FAIL
+    if g_rx_buf[1] != tx_buf[1]:     
+        return ACK_FAIL
+
+    CheckSum = 0
+    for index, byte in enumerate(g_rx_buf):
+        if index == 0:
+            continue
+        if index == 6:
+            if CheckSum != byte:
+                return ACK_FAIL
+        CheckSum ^= byte       
+    return  ACK_SUCCESS;
+
+#***************************************************************************
+# @brief    Get Compare Level
+#***************************************************************************/    
+def  GetCompareLevel():
+    global g_rx_buf
+    command_buf = [CMD_COM_LEV, 0, 0, 1, 0]
+    r = TxAndRxCmd(command_buf, 8, 0.1)
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:
+        return g_rx_buf[3]
+    else:
+        return 0xFF
+               
+#***************************************************************************
+# @brief    Set Compare Level,the default value is 5, 
+#           can be set to 0-9, the bigger, the stricter
+#***************************************************************************/
+def SetCompareLevel(level):
+    global g_rx_buf
+    command_buf = [CMD_COM_LEV, 0, level, 0, 0]
+    r = TxAndRxCmd(command_buf, 8, 0.1)   
+       
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:        
+        return  g_rx_buf[3]
+    else:
+        return 0xFF
+
+#***************************************************************************
+# @brief   Query the number of existing fingerprints
+#***************************************************************************/
+def GetUserCount():
+    global g_rx_buf
+    command_buf = [CMD_USER_CNT, 0, 0, 0, 0]
+    r = TxAndRxCmd(command_buf, 8, 0.1)
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:
+        return g_rx_buf[3]
+    else:
+        return 0xFF
+#***************************************************************************
+# @brief   Get the time that fingerprint collection wait timeout
+#***************************************************************************/        
+def GetTimeOut():
+    global g_rx_buf
+    command_buf = [CMD_TIMEOUT, 0, 0, 1, 0]
+    r = TxAndRxCmd(command_buf, 8, 0.1)
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:
+        return g_rx_buf[3]
+    else:
+        return 0xFF
+
+
+#***************************************************************************
+# @brief    Register fingerprint
+#***************************************************************************/
+def AddUser():
+    global g_rx_buf
+    r = GetUserCount()
+    if r >= USER_MAX_CNT:
+        return ACK_FULL        
+        
+    command_buf = [CMD_ADD_1, 0, r+1, 3, 0]
+    print(g_rx_buf)
+    r = TxAndRxCmd(command_buf, 8, 6)
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:
+        command_buf[0] = CMD_ADD_3
+        r = TxAndRxCmd(command_buf, 8, 6)
+        print(g_rx_buf)
+        if r == ACK_TIMEOUT:
+            return ACK_TIMEOUT
+        if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:
+            return ACK_SUCCESS
+        else:
+            return ACK_FAIL 
+    else:
+        return ACK_FAIL
+
+
+#***************************************************************************
+# @brief    Clear fingerprints
+#***************************************************************************/
+def ClearAllUser():
+    global g_rx_buf
+    command_buf = [CMD_DEL_ALL, 0, 0, 0, 0]
+    r = TxAndRxCmd(command_buf, 8, 5)
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:  
+        return ACK_SUCCESS
+    else:
+        return ACK_FAIL
+
+        
+ #***************************************************************************
+# @brief    Check if user ID is between 1 and 3
+#***************************************************************************/         
+def IsMasterUser(user_id):
+    if user_id == 1 or user_id == 2 or user_id == 3: 
+        return TRUE
+    else: 
+        return FALSE
+
+#***************************************************************************
+# @brief    Fingerprint matching
+#***************************************************************************/        
+def VerifyUser():
+    global g_rx_buf
+    command_buf = [CMD_MATCH, 0, 0, 0, 0]
+    r = TxAndRxCmd(command_buf, 8, 5);
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT
+    if r == ACK_SUCCESS and IsMasterUser(g_rx_buf[4]) == TRUE:
+        return ACK_SUCCESS
+    elif g_rx_buf[4] == ACK_NO_USER:
+        return ACK_NO_USER
+    elif g_rx_buf[4] == ACK_TIMEOUT:
+        return ACK_TIMEOUT
+    else:
+        return ACK_GO_OUT   # The center of the fingerprint is out of alignment with sensor
+
+        
+#***************************************************************************
+# @brief    Analysis the command from PC terminal
+#***************************************************************************/       
+def Analysis_PC_Command(command):
+    global Finger_SleepFlag
+    
+    if  command == "CMD1" and Finger_SleepFlag != 1:
+        print ("Number of fingerprints already available:  %d"  % GetUserCount())
+    elif command == "CMD2" and Finger_SleepFlag != 1:
+        print ("Add fingerprint  (Put your finger on sensor until successfully/failed information returned) ")
+        r = AddUser()
+        if r == ACK_SUCCESS:
+            print ("Fingerprint added successfully !")
+        elif r == ACK_FAIL:
+            print ("Failed: Please try to place the center of the fingerprint flat to sensor, or this fingerprint already exists !")
+        elif r == ACK_FULL:
+            print ("Failed: The fingerprint library is full !")           
+    elif command == "CMD3" and Finger_SleepFlag != 1:
+        print ("Waiting Finger......Please try to place the center of the fingerprint flat to sensor !")
+        r = VerifyUser()
+        if r == ACK_SUCCESS:
+            print ("Matching successful !")
+        elif r == ACK_NO_USER:
+            print ("Failed: This fingerprint was not found in the library !")
+        elif r == ACK_TIMEOUT:
+            print ("Failed: Time out !")
+        elif r == ACK_GO_OUT:
+            print ("Failed: Please try to place the center of the fingerprint flat to sensor !")
+    elif command == "CMD4" and Finger_SleepFlag != 1:
+        ClearAllUser()
+        print ("All fingerprints have been cleared !")
+    elif command == "CMD5" and Finger_SleepFlag != 1:
+        GPIO.output(Finger_RST_Pin, GPIO.LOW)
+        Finger_SleepFlag = 1
+        print ("Module has entered sleep mode: you can use the finger Automatic wake-up function, in this mode, only CMD6 is valid, send CMD6 to pull up the RST pin of module, so that the module exits sleep !")
+    elif command == "CMD6": 
+        Finger_SleepFlag = 0
+        GPIO.output(Finger_RST_Pin, GPIO.HIGH)
+        print ("The module is awake. All commands are valid !")
+    else:
+        print ("commands are invalid !")
+        
+#***************************************************************************
+# @brief   If you enter the sleep mode, then open the Automatic wake-up function of the finger,
+#         begin to check if the finger is pressed, and then start the module and match
+#***************************************************************************/
+def Auto_Verify_Finger():
+    while True:    
+        # If you enter the sleep mode, then open the Automatic wake-up function of the finger,
+        # begin to check if the finger is pressed, and then start the module and match
+        if Finger_SleepFlag == 1:     
+            if GPIO.input(Finger_WAKE_Pin) == 1:   # If you press your finger  
+                time.sleep(0.01)
+                if GPIO.input(Finger_WAKE_Pin) == 1: 
+                    GPIO.output(Finger_RST_Pin, GPIO.HIGH)   # Pull up the RST to start the module and start matching the fingers
+                    time.sleep(0.25)      # Wait for module to start
+                    print ("Waiting Finger......Please try to place the center of the fingerprint flat to sensor !")
+                    r = VerifyUser()
+                    if r == ACK_SUCCESS:
+                        print ("Matching successful !")
+                    elif r == ACK_NO_USER:
+                        print ("Failed: This fingerprint was not found in the library !")
+                    elif r == ACK_TIMEOUT:
+                        print ("Failed: Time out !")
+                    elif r == ACK_GO_OUT:
+                        print ("Failed: Please try to place the center of the fingerprint flat to sensor !")
+                            
+                    #After the matching action is completed, drag RST down to sleep
+                    #and continue to wait for your fingers to press
+                    GPIO.output(Finger_RST_Pin, GPIO.LOW)
+        time.sleep(0.2)
+    
+def main():
+   
+    GPIO.output(Finger_RST_Pin, GPIO.LOW)
+    time.sleep(0.25) 
+    GPIO.output(Finger_RST_Pin, GPIO.HIGH)
+    time.sleep(0.25)    # Wait for module to start
+    while SetCompareLevel(5) != 5:                 
+        print ("***ERROR***: Please ensure that the module power supply is 3.3V or 5V, the serial line connection is correct.")
+        time.sleep(1)  
+    print ("***************************** WaveShare Capacitive Fingerprint Reader Test *****************************")
+    print ("Compare Level:  5    (can be set to 0-9, the bigger, the stricter)")
+    print ("Number of fingerprints already available:  %d "  % GetUserCount())
+    print (" send commands to operate the module: ")
+    print ("  CMD1 : Query the number of existing fingerprints")
+    print ("  CMD2 : Registered fingerprint  (Put your finger on the sensor until successfully/failed information returned) ")
+    print ("  CMD3 : Fingerprint matching  (Send the command, put your finger on sensor) ")
+    print ("  CMD4 : Clear fingerprints ")
+    print ("  CMD5 : Switch to sleep mode, you can use the finger Automatic wake-up function (In this state, only CMD6 is valid. When a finger is placed on the sensor,the module is awakened and the finger is matched, without sending commands to match each time. The CMD6 can be used to wake up) ")
+    print ("  CMD6 : Wake up and make all commands valid ")
+    print ("***************************** WaveShare Capacitive Fingerprint Reader Test ***************************** ")
+
+    t = threading.Thread(target=Auto_Verify_Finger)
+    t.setDaemon(True)
+    t.start()
+    
+    while  True:     
+        str = raw_input("Please input command (CMD1-CMD6):")
+        Analysis_PC_Command(str)
+               
+if __name__ == '__main__':
+        try:
+            main()
+        except KeyboardInterrupt:
+            if ser != None:
+                ser.close()               
+            GPIO.cleanup()
+            print("\n\n Test finished ! \n") 
+            sys.exit()
diff --git a/pointeuse/dev/new_install/fileto_change.txt b/pointeuse/dev/new_install/fileto_change.txt
new file mode 100644 (file)
index 0000000..a21b917
--- /dev/null
@@ -0,0 +1,27 @@
+cd / && tar czvf /home/dks/hourtrax_syssource.tar.gz \
+/etc/ssh/sshd_config \
+/etc/systemd/system/autologin@.service \
+/etc/sudoers \
+/etc/modules \
+/boot/config.txt \
+/var/spool/cron/crontabs/dks \
+/etc/openvpn/DKS-VPN-dks-hourtrax.conf \
+/etc/modprobe.d/raspi-blacklist.conf \
+/usr/share/plymouth/themes/pix/splash.png \
+/etc/lightdm/lightdm.conf \
+/etc/xdg/openbox/menu.xml \
+/etc/xdg/lxsession/LXDE-pi/sshpwd.sh \
+/etc/xdg/lxsession/LXDE-pi/autostart \
+/etc/xdg/lxsession/LXDE/autostart
+cd / && tar czvf /home/dks/hourtrax_source.tar.gz \
+/home/dks/bin \
+/home/dks/tmp \
+/home/dks/share \
+/home/dks/web \
+/home/dks/data \
+/home/dks/splash.png \
+/home/dks/perl5 \
+/home/dks/.config/lxsession/LXDE-pi/autostart \
+/home/dks/.profile
+
+sudo apt-get install cryptsetup openvpn
\ No newline at end of file
diff --git a/pointeuse/dev/new_install/history.txt b/pointeuse/dev/new_install/history.txt
new file mode 100644 (file)
index 0000000..767cb6a
--- /dev/null
@@ -0,0 +1,292 @@
+    1  cd /etc/xdg/autostart/
+    2  ls
+    3  cat pprompt.desktop 
+    4  cat /etc/xdg/lxsession/LXDE-pi/sshpwd.sh 
+    5  vim.tiny /etc/xdg/lxsession/LXDE-pi/sshpwd.sh 
+    6  cat /etc/xdg/lxsession/LXDE-pi/sshpwd.sh 
+    7  ls
+    8  cat lxpolkit.desktop 
+    9  cd ..
+   10  ls
+   11  cd openbox/
+   12  ls
+   13  cat autostart 
+   14  cd LXDE/
+   15  ls
+   16  cat menu.xml 
+   17  cd ..
+   18  cd ..
+   19  ls
+   20  cd autostart/
+   21  ls
+   22  cat lxkeymap.desktop 
+   23  cat /etc/xdg/lxsession/LXDE-pi/autokey.sh
+   24  ps ax
+   25  ps ax
+   26  kill -9 745
+   27  ps ax
+   28  kill -9 744
+   29  ps ax
+   30  ls
+   31  cat lxpolkit.desktop 
+   32  ls
+   33  cd ..
+   34  ls
+   35  cd lxpanel/
+   36  ls
+   37  cat launchtaskbar.cfg 
+   38  ls
+   39  cd default/panels/
+   40  ls
+   41  cat panel 
+   42  cd
+   43  exit
+   44  systemctl daemon-reload
+   45  exit
+   46  systemctl daemon-reload
+   47  systemctl start autologin@tty1
+   48  sudo deluser -remove-home pi
+   49  ps ax
+   50  systemctl stop autologin@tty1
+   51  sudo deluser -remove-home pi
+   52  cd /home/
+   53  ls
+   54  shutdown -r now
+   55  cd /etc/xdg/
+   56  ls
+   57  cd lxsession/
+   58  ls
+   59  cd LXDE-pi/
+   60  ls
+   61  ls -l
+   62  cta autostart
+   63  cat autostart
+   64  vim.tiny  autostart
+   65  cd ..
+   66  cd LXDE
+   67  ls
+   68  cat autostart 
+   69  cd ..
+   70  exit
+   71  cd /etc/xdg/openbox/
+   72  ls
+   73  cat autostart 
+   74  cat lxde-pi-rc.xml 
+   75  cd /etc/lightdm/
+   76  ls
+   77  vim.tiny lightdm.conf
+   78  grep xserver-command lightdm.conf 
+   79  sed /etc/lightdm/lightdm.conf -e 's/#xserver-command=X/xserver-command=X -nocursor/'
+   80  sed /etc/lightdm/lightdm.conf -i -e 's/#xserver-command=X/xserver-command=X -nocursor/'
+   81  exit
+   82  cd /etc/lightdm/
+   83  ls
+   84  cat pi-greeter.conf 
+   85  kill -9 1704
+   86  ls
+   87  cat lightdm.conf 
+   88  cat lightdm.conf cd ..
+   89  cd ..
+   90  ls
+   91  cd X11/
+   92  grep -Rn Xorg
+   93  cd ..
+   94  cd xdg/
+   95  grep -Rn Xorg
+   96  cd ..
+   97  find . -name xsetroot
+   98  find . -name "xinitrc"
+   99  cat X11/xinit/xinitrc 
+  100  cat /etc/X11/Xsession
+  101  ps ax
+  102  cd /usr/sbin/
+  103  sl
+  104  ls
+  105  cat pi-greeter 
+  106  ls
+  107  pi-greeter --help
+  108  ls
+  109  cd /etc/xdg/systemd/
+  110  ls
+  111  ls 
+  112  ls -l
+  113  cat user
+  114  cd user
+  115  ls
+  116  ls
+  117  cd ..
+  118  shutdown -r now
+  119  cd /var/log/
+  120  ls
+  121  ls -ltr
+  122  cat auth.log 
+  123  ls
+  124  cd lightdm/
+  125  ls
+  126  ls -l
+  127  cat lightdm.log
+  128  cat x-0.log
+  129  cd
+  130  cd /etc/lightdm/
+  131  ls
+  132  vim.tiny lightdm.conf 
+  133  shutdown -r now
+  134  cd /etc/lightdm/
+  135  vim.tiny lightdm.conf 
+  136  ps ax
+  137  export DISPLAY="0.0"
+  138  startx
+  139  exit
+  140  ps ax
+  141  apt-cache search chromium
+  142  apt-get install chromium-browser
+  143  chromium-browser -kiosk
+  144  chromium-browser -kiosk "http://www.dks.lu"
+  145  exit
+  146  startlxde-pi
+  147  export DISPLAY=0.0
+  148  startlxde-pi
+  149  export DISPLAY=:.0
+  150  startlxde-pi
+  151  export DISPLAY=:0.0
+  152  startlxde-pi
+  153  cat /usr/share/X11/xorg.conf.d/99-fbturbo.conf
+  154  fdisk /dev/sda
+  155  fdisk -l
+  156  fdisk /dev/sda
+  157  fdisk -l
+  158  fdisk /dev/sda
+  159  fdisk -l
+  160  dd bs=4K if=/dev/random of=/dev/sda1
+  161  dd bs=4K if=/dev/urandom of=/dev/sda1
+  162  fdisk -l
+  163  cryptsetup -yuh sha256 -caes-xts-plain -s 256 luksFormat/dev/sda1
+  164  cryptsetup -yvh sha256 -caes-xts-plain -s 256 luksFormat/dev/sda1
+  165  cryptsetup -yvh sha256 -caes-xts-plain -s 256 luksFormat /dev/sda1
+  166  cryptsetup luksOpen /dev/sda1 2fcc2458-0278-11e8-8829-33f2eb7606e8
+  167  mkfs.ext3 /dev/mapper/2fcc2458-0278-11e8-8829-33f2eb7606e8
+  168  id dks
+  169  mount -o uid=1001,gid=1001 /dev/mapper/2fcc2458-0278-11e8-8829-33f2eb7606e8 /mnt
+  170  mount -t ext3 -o uid=1001,gid=1001 /dev/mapper/2fcc2458-0278-11e8-8829-33f2eb7606e8 /mnt
+  171  mount /dev/mapper/2fcc2458-0278-11e8-8829-33f2eb7606e8 /mnt
+  172  chmod -R dks:dks /mnt
+  173  chown -R dks:dks /mnt
+  174  cryptsetup luksClose /dev/mapper/2fcc2458-0278-11e8-8829-33f2eb7606e8
+  175  ls
+  176  ls
+  177  cd /mnt/
+  178  ls
+  179  mkdir testdata
+  180  ls
+  181  umount /mnt
+  182  cd
+  183  umount /mnt
+  184  cryptsetup luksClose /dev/mapper/2fcc2458-0278-11e8-8829-33f2eb7606e8
+  185  mount /dev/mapper/2fcc2458-0278-11e8-8829-33f2eb7606e8 /mnt
+  186  cryptsetup luksOpen /dev/sda1 secret
+  187  mkfs.ext3 /dev/mapper/secret
+  188  mount /dev/mapper/secret /mnt
+  189  cd /mnt/
+  190  ls
+  191  umount /mnt
+  192  cd
+  193  umount /mnt
+  194  cryptsetup close luksClose /dev/mapper/secret
+  195  cryptsetup luksClose /dev/mapper/secret
+  196  cryptsetup luksOpen /dev/sda1 2fcc2458-0278-11e8-8829-33f2eb7606e8
+  197  mount /dev/mapper/2fcc2458-0278-11e8-8829-33f2eb7606e8 /mnt
+  198  cd /mnt/
+  199  ls
+  200  df -h
+  201  umount /mnt
+  202  cd
+  203  umount /mnt
+  204  mkfs.ext3 /dev/mapper/2fcc2458-0278-11e8-8829-33f2eb7606e8
+  205  mount /dev/mapper/2fcc2458-0278-11e8-8829-33f2eb7606e8 /mnt
+  206  cd /mnt
+  207  ls -al
+  208  cd 
+  209  cryptsetup -v my_disk_mapper
+  210  cryptsetup -v /dev/sda1
+  211  cryptsetup
+  212  cryptsetup -v 2fcc2458-0278-11e8-8829-33f2eb7606e8
+  213  mount /dev/mapper/2fcc2458-0278-11e8-8829-33f2eb7606e8 /mnt
+  214  cd /mnt
+  215  ls
+  216  mkdir testsetup
+  217  cd ..
+  218  umount /mnt
+  219  cryptsetup luksClose /dev/mapper/2fcc2458-0278-11e8-8829-33f2eb7606e8
+  220  cryptsetup luksOpen /dev/sda1 2fcc2458-0278-11e8-8829-33f2eb7606e8
+  221  cryptsetup -v 2fcc2458-0278-11e8-8829-33f2eb7606e8
+  222  cryptsetup --help
+  223  cryptsetup status 2fcc2458-0278-11e8-8829-33f2eb7606e8
+  224  mount /dev/mapper/2fcc2458-0278-11e8-8829-33f2eb7606e8 /mnt
+  225  cd /mnt/
+  226  ls
+  227  cd 
+  228  umount /mnt
+  229  exit
+  230  apt-get search aescrypt
+  231  apt-cache search aescrypt
+  232  apt-cache search aes
+  233  apt-cache search crypt
+  234  fdisk -l
+  235  exit
+  236  apt-get install cryptsetup
+  237  cat /etc/modules
+  238  modprobe dm_crypt
+  239  echo dm_crypt >> /etc/modules
+  240  cat /etc/modules
+  241  uuid 
+  242  uuid 
+  243  cd /etc/xdg/openbox/
+  244  ls
+  245  cat autostart 
+  246  ls
+  247  cat menu.xml 
+  248  vim.tiny  menu.xml 
+  249  cp  menu.xml menu.xml.orig
+  250  vim.tiny  menu.xml 
+  251  cd ..
+  252  ls
+  253  cd ..
+  254  sl
+  255  ls
+  256  cd lightdm/
+  257  ls
+  258  cat lightdm.conf 
+  259  cd 
+  260  cd /home/dks/
+  261  ls
+  262  ls -al
+  263  cd .config/
+  264  ls
+  265  cd openbox/
+  266  ls
+  267  cat lxde-pi-rc.xml 
+  268  ls
+  269  cd ..
+  270  ls
+  271  ls -l
+  272  cd lxsession/LXDE-pi/
+  273  ls
+  274  cat autostart 
+  275  exit
+  276  apt-cache search smbclient
+  277  cd /mnt/
+  278  ls
+  279  ls -l
+  280  mount -t cifs -ouser=kilian,pass=fb1ia1ka,rw //home-backup/mirror /mnt 
+  281  ls
+  282  cd ..
+  283  ls
+  284  cd mnt/
+  285  ls
+  286  cd
+  287  mount
+  288  umount /mnt
+  289  exit
+  290  history
+  291  history
+  292  history > history.txt
diff --git a/pointeuse/dev/new_install/hourtrax.sqlite b/pointeuse/dev/new_install/hourtrax.sqlite
new file mode 100644 (file)
index 0000000..59b7e72
Binary files /dev/null and b/pointeuse/dev/new_install/hourtrax.sqlite differ
diff --git a/pointeuse/dev/new_install/install_steps.txt b/pointeuse/dev/new_install/install_steps.txt
new file mode 100644 (file)
index 0000000..6e03df7
--- /dev/null
@@ -0,0 +1,49 @@
+#flash drive
+#add to boot partition: file "SSH"
+#rpi 3 B year 2015 -> set bootflag with sd-card
+#: echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt
+#add row "lcd_rotate=2" to /boot/config.txt
+#login as pi
+~: sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
+~: sudo sed -i 's/#Port 22/Port 3587/' /etc/ssh/sshd_config
+~: sudo service ssh restart
+~: echo 'echo -e "mai5ia7a\nmai5ia7a" | sudo -S passwd' > tmp.sh && bash tmp.sh && rm tmp.sh
+#login as root (Port 3587)
+~: update-rc.d "ssh" enable
+~: groupadd dks
+~: useradd dks -c DKS -g dks -G adm,sudo -s /bin/bash -d /home/dks
+~: echo 'echo -e "sai4seip\nsai4seip" | passwd dks' > tmp.sh && bash tmp.sh && rm tmp.sh
+echo 'echo -e "sai4seip\nsai4seip" | passwd pi' > tmp.sh && bash tmp.sh && rm tmp.sh
+~: mkdir -p /home/dks
+~: chown dks:dks /home/dks
+~: cp /usr/share/zoneinfo/Europe/Luxembourg /etc/localtime
+~: sed -i 's/XKBLAYOUT="gb"/XKBLAYOUT="de"/' /etc/default/keyboard
+~: sed -i "s/raspberrypi/hourtrax/" /etc/hosts
+~: echo "hourtrax" > /etc/hostname
+~: hostnamectl set-hostname hourtrax
+~: sed -i 's/agetty --autologin pi/agetty --autologin dks/' /etc/systemd/system/autologin@.service
+
+usermod -G adm,sudo,dialout,gpio dks
+sed -i 's/autologin-user=pi/autologin-user=dks/' /etc/lightdm/lightdm.conf
+sed -i 's/#xserver-command=X/xserver-command=X -nocursor' /etc/lightdm/lightdm.conf
+sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
+sysctl -p
+echo "#!/bin/bash" > /etc/xdg/lxsession/LXDE-pi/sshpwd.sh
+êcho "@/home/dks/bin/startapp.sh" > /etc/xdg/lxsession/LXDE-pi/autostart
+
+echo "#bt" >> /etc/modprobe.d/raspi-blacklist.conf
+echo "blacklist btbcm" >> /etc/modprobe.d/raspi-blacklist.conf
+echo "blacklist hci_uart" >> /etc/modprobe.d/raspi-blacklist.conf
+
+echo  '<?xml version="1.0" encoding="UTF-8"?>' > /etc/xdg/openbox/menu.xml
+echo '<openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/ file:///usr/share/openbox/menu.xsd">' >> /etc/xdg/openbox/menu.xml
+echo  '<menu id="root-menu" label="Openbox 3"></menu>' >> /etc/xdg/openbox/menu.xml
+echo  '</openbox_menu>' >> /etc/xdg/openbox/menu.xml
+#set /etc/sudoers s/%sudo   ALL=(ALL:ALL) ALL/%sudo   ALL=(ALL:ALL) NOPASSWD:ALL/
+#after file transfers
+cp /home/dks/splash.png /usr/share/plymouth/themes/pix/splash.png
+
+#fingerprint
+echo "deb http://apt.pm-codeworks.de buster main" | sudo tee -a /etc/apt/sources.list
+wget -O - http://apt.pm-codeworks.de/pm-codeworks.de.gpg | sudo apt-key add -
+sudo apt-get -y install python-fingerprint
\ No newline at end of file
diff --git a/pointeuse/dev/new_install/pi_groups.txt b/pointeuse/dev/new_install/pi_groups.txt
new file mode 100644 (file)
index 0000000..e8fa08e
--- /dev/null
@@ -0,0 +1,2 @@
+uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),105(input),109(netdev),999(spi),998(i2c),997(gpio)
+
diff --git a/pointeuse/dev/potsync.sh b/pointeuse/dev/potsync.sh
new file mode 100644 (file)
index 0000000..bd45a05
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/bash
+CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+ACTION=$1
+HNAME=`hostname`
+CFGPATH=${HOME}/.hourtrax
+source ${CFGPATH}/hourtrax.conf
+UA="POT Hourtrax/${HNAME}/v1.0.0"
+CTIME=`date +%Y%m%d%H%M%S`
+if [[ "${ACTION}" == "login" || ! -e  ${CFGPATH}/potcookie.txt ]]
+then
+  curl -v -silent -A "${UA}" -X POST -d "btnlogin=1&login=${potuser}&password=${potpwd}" ${poturl} 2>&1 | grep "Set-Cookie" | head -n 1 |  awk -F";" '{ print $1 }' | sed -e 's/< Set-Cookie:\s//' > ${CFGPATH}/potcookie.txt
+  #echo "COOKIE:"
+  #cat ${CFGPATH}/potcookie.txt
+  #echo "----"
+fi
+
+
+if [ "${ACTION}" == "getusers" ]
+then
+  COOKIE=`cat ${CFGPATH}/potcookie.txt`
+  curl --cookie "${COOKIE}" -A "${UA}" -X POST -d "get=getusers&schemata=${potschema}" ${poturl}/synctimetrack.cgi > ${CFGPATH}/sync/${potschema}_${CTIME}.json
+  perl ${CALLDIR}/updatedata.pl -c ${CFGPATH}/hourtrax.conf -d ${CFGPATH}/sync/${potschema}_${CTIME}.json  
+fi
+
+if [ "${ACTION}" == "getpotdata" ]
+then
+  COOKIE=`cat ${CFGPATH}/potcookie.txt`
+  curl --cookie "${COOKIE}" -A "${UA}" -X POST -d "get=getpotdata&schemata=${potschema}" ${poturl}/synctimetrack.cgi > ${CFGPATH}/sync/${potschema}_${CTIME}.json
+  perl ${CALLDIR}/updatedata.pl -c ${CFGPATH}/hourtrax.conf -d ${CFGPATH}/sync/${potschema}_${CTIME}.json  
+fi
+#GSmO4BwBEJ4aA
\ No newline at end of file
diff --git a/pointeuse/dev/sourcefiles.local.txt b/pointeuse/dev/sourcefiles.local.txt
new file mode 100644 (file)
index 0000000..df510c4
--- /dev/null
@@ -0,0 +1,408 @@
+./CGI/api/db.cgi|3144
+./CGI/api/fingerprint.cgi|3359
+./CGI/api/fingerunload.cgi|1602
+./CGI/api/index.cgi|4333
+./CGI/api/lib/dksconfig.pm|1022
+./CGI/api/lib/dksdb.pm|11300
+./CGI/api/service.cgi|4844
+./CGI/api/system.cgi|4448
+./CGI/index.cgi|2666
+./CGI/tmpl/app/hourtrax/index.tt|2984
+./CGI/tmpl/app/hourtrax/module/members/index.js|3987
+./CGI/tmpl/app/hourtrax/module/members/index.tt|3416
+./CGI/tmpl/app/hourtrax/module/timetrack/index.js|2017
+./CGI/tmpl/app/hourtrax/module/timetrack/index.tt|401
+./CGI/tmpl/app/hourtrax/module/timetrack/usertimetrack.js|5633
+./CGI/tmpl/app/hourtrax/module/timetrack/usertimetrack.tt|3132
+./CGI/tmpl/app/system/hourtrax/index.js|0
+./CGI/tmpl/app/system/hourtrax/index.tt|0
+./CGI/tmpl/app/system/index.tt|2888
+./CGI/tmpl/app/system/network/index.js|0
+./CGI/tmpl/app/system/network/index.tt|1193
+./CGI/tmpl/app/system/vpn/index.js|0
+./CGI/tmpl/app/system/vpn/index.tt|0
+./CGI/tmpl/app/timeclock/index.js|15742
+./CGI/tmpl/app/timeclock/index.tt|9644
+./CGI/tmpl/block/snackbar.tt|25
+./CGI/tmpl/macro/fields.tt|8091
+./CGI/tmpl/skeleton/app.tt|82
+./CGI/tmpl/skeleton/file.tt|82
+./CGI/tmpl/skeleton/index.tt|1861
+./CGI/tmpl/skeleton/module.tt|3361
+./hourtrax.pl|3252
+./htdocs/css/admin.css|5127
+./htdocs/css/clock.css|6290
+./htdocs/css/clock2.css|72
+./htdocs/css/w3pro.css|26847
+./htdocs/img/dks_1000.png|68554
+./htdocs/img/fingerprint/finger1.svg|4819
+./htdocs/img/fingerprint/finger2.svg|4963
+./htdocs/img/fingerprint/finger3.svg|4796
+./htdocs/img/fingerprint/finger4.svg|4768
+./htdocs/img/fingerprint/finger5.svg|4788
+./htdocs/img/fingerprint/fingerprint-check.svg|5525
+./htdocs/img/fingerprint/fingerprint-crosshair.svg|6148
+./htdocs/img/fingerprint/fingerprint-remove.svg|5587
+./htdocs/img/fingerprint/fingerprint-remove_white.svg|5720
+./htdocs/img/fingerprint/fingerprint-scanning-index.svg|7393
+./htdocs/img/fingerprint/fingerprint-scanning.svg|6064
+./htdocs/img/fingerprint/fingerprint-search.svg|17333
+./htdocs/img/fingerprint/fingerprint-simple.svg|5706
+./htdocs/img/hourtrax.png|23443
+./htdocs/img/hourtrax.svg|10430
+./htdocs/img/icons/address.svg|800
+./htdocs/img/icons/address_white.svg|812
+./htdocs/img/icons/Adobe_Acrobat.svg|3436
+./htdocs/img/icons/Adobe_PDF_Export.svg|2730
+./htdocs/img/icons/Agreement_01.svg|5234
+./htdocs/img/icons/apps.svg|781
+./htdocs/img/icons/apps_white.svg|793
+./htdocs/img/icons/archive.svg|273
+./htdocs/img/icons/archive_white.svg|285
+./htdocs/img/icons/Bill.svg|3185
+./htdocs/img/icons/calendar.svg|954
+./htdocs/img/icons/calendar_white.svg|966
+./htdocs/img/icons/clocktime.svg|1122
+./htdocs/img/icons/clocktime_white.svg|1117
+./htdocs/img/icons/club.svg|823
+./htdocs/img/icons/club_white.svg|835
+./htdocs/img/icons/clubs.svg|1033
+./htdocs/img/icons/clubs_white.svg|1045
+./htdocs/img/icons/code.svg|589
+./htdocs/img/icons/cube.svg|365
+./htdocs/img/icons/cube_white.svg|378
+./htdocs/img/icons/cubelight.svg|1023
+./htdocs/img/icons/cubelight_white.svg|1036
+./htdocs/img/icons/dashboard.svg|1085
+./htdocs/img/icons/dashboard_white.svg|1098
+./htdocs/img/icons/Document_Save.svg|729
+./htdocs/img/icons/download.svg|339
+./htdocs/img/icons/download_white.svg|351
+./htdocs/img/icons/duplicate.svg|430
+./htdocs/img/icons/duplicate_white.svg|442
+./htdocs/img/icons/edit.svg|712
+./htdocs/img/icons/edit_white.svg|725
+./htdocs/img/icons/file/dir.png|6937
+./htdocs/img/icons/file/doc.png|6455
+./htdocs/img/icons/file/docx.png|6455
+./htdocs/img/icons/file/file.png|4540
+./htdocs/img/icons/file/jpg.png|6297
+./htdocs/img/icons/file/pdf.png|8783
+./htdocs/img/icons/file/png.png|6297
+./htdocs/img/icons/file/txt.png|6049
+./htdocs/img/icons/file/xls.png|6065
+./htdocs/img/icons/file/xlsx.png|6065
+./htdocs/img/icons/file.svg|272
+./htdocs/img/icons/file_white.svg|284
+./htdocs/img/icons/folder.svg|404
+./htdocs/img/icons/folder_white.svg|417
+./htdocs/img/icons/globe.svg|1242
+./htdocs/img/icons/globe_white.svg|1254
+./htdocs/img/icons/group.svg|1994
+./htdocs/img/icons/group_white.svg|2006
+./htdocs/img/icons/history.svg|1284
+./htdocs/img/icons/history_white.svg|1296
+./htdocs/img/icons/inbox.svg|413
+./htdocs/img/icons/inbox_white.svg|425
+./htdocs/img/icons/library.svg|968
+./htdocs/img/icons/library_white.svg|980
+./htdocs/img/icons/license.svg|478
+./htdocs/img/icons/license_white.svg|490
+./htdocs/img/icons/list.svg|640
+./htdocs/img/icons/list_white.svg|652
+./htdocs/img/icons/logout.svg|402
+./htdocs/img/icons/logout_white.svg|414
+./htdocs/img/icons/menu.svg|336
+./htdocs/img/icons/menu_white.svg|348
+./htdocs/img/icons/newspaper.svg|812
+./htdocs/img/icons/newspaper_white.svg|824
+./htdocs/img/icons/numberlist.svg|908
+./htdocs/img/icons/numberlist_white.svg|920
+./htdocs/img/icons/package.svg|408
+./htdocs/img/icons/package_white.svg|420
+./htdocs/img/icons/pictures.svg|1420
+./htdocs/img/icons/pictures_white.svg|1436
+./htdocs/img/icons/plus.svg|535
+./htdocs/img/icons/plus_white.svg|547
+./htdocs/img/icons/remove.svg|816
+./htdocs/img/icons/remove_white.svg|828
+./htdocs/img/icons/Save.svg|477
+./htdocs/img/icons/squares.svg|502
+./htdocs/img/icons/squares_white.svg|514
+./htdocs/img/icons/target.svg|780
+./htdocs/img/icons/target_white.svg|792
+./htdocs/img/icons/user.svg|780
+./htdocs/img/icons/user_white.svg|792
+./htdocs/js/admin.js|3246
+./htdocs/js/fieldsave.js|1447
+./htdocs/js/formsave.js|6063
+./htdocs/js/moduleglobal.js|839
+./htdocs/js/request.js|5308
+./htdocs/vendor/choices/base.css|2314
+./htdocs/vendor/choices/base.min.css|1604
+./htdocs/vendor/choices/choices.css|8095
+./htdocs/vendor/choices/choices.js|217424
+./htdocs/vendor/choices/choices.min.css|6735
+./htdocs/vendor/choices/choices.min.js|91604
+./htdocs/vendor/choices/scripts/choices.js|217424
+./htdocs/vendor/choices/scripts/choices.min.js|91604
+./htdocs/vendor/flatpickr/flatpickr.css|18831
+./htdocs/vendor/flatpickr/flatpickr.js|118042
+./htdocs/vendor/flatpickr/flatpickr.min.css|15954
+./htdocs/vendor/flatpickr/flatpickr.min.js|48368
+./htdocs/vendor/flatpickr/ie.css|260
+./htdocs/vendor/flatpickr/index.d.ts|138
+./htdocs/vendor/flatpickr/l10n/de.d.ts|2272
+./htdocs/vendor/flatpickr/l10n/de.js|1757
+./htdocs/vendor/flatpickr/l10n/default.d.ts|104
+./htdocs/vendor/flatpickr/l10n/default.js|2150
+./htdocs/vendor/flatpickr/l10n/fr.d.ts|2272
+./htdocs/vendor/flatpickr/l10n/fr.js|1893
+./htdocs/vendor/flatpickr/l10n/lu.d.ts|2314
+./htdocs/vendor/flatpickr/l10n/lu.js|1802
+./htdocs/vendor/flatpickr/plugins/confirmDate/confirmDate.css|373
+./htdocs/vendor/flatpickr/plugins/confirmDate/confirmDate.d.ts|272
+./htdocs/vendor/flatpickr/plugins/confirmDate/confirmDate.js|4236
+./htdocs/vendor/flatpickr/plugins/labelPlugin/labelPlugin.d.ts|114
+./htdocs/vendor/flatpickr/plugins/labelPlugin/labelPlugin.js|964
+./htdocs/vendor/flatpickr/plugins/minMaxTimePlugin.d.ts|491
+./htdocs/vendor/flatpickr/plugins/minMaxTimePlugin.js|12399
+./htdocs/vendor/flatpickr/plugins/monthSelect/index.d.ts|367
+./htdocs/vendor/flatpickr/plugins/monthSelect/index.js|7757
+./htdocs/vendor/flatpickr/plugins/monthSelect/style.css|1561
+./htdocs/vendor/flatpickr/plugins/monthSelect/tests.spec.d.ts|11
+./htdocs/vendor/flatpickr/plugins/rangePlugin.d.ts|312
+./htdocs/vendor/flatpickr/plugins/rangePlugin.js|6475
+./htdocs/vendor/flatpickr/plugins/scrollPlugin.d.ts|113
+./htdocs/vendor/flatpickr/plugins/scrollPlugin.js|2026
+./htdocs/vendor/flatpickr/plugins/weekSelect/weekSelect.d.ts|218
+./htdocs/vendor/flatpickr/plugins/weekSelect/weekSelect.js|3500
+./htdocs/vendor/flatpickr/themes/airbnb.css|21148
+./htdocs/vendor/flatpickr/themes/confetti.css|19048
+./htdocs/vendor/flatpickr/themes/dark.css|18875
+./htdocs/vendor/flatpickr/themes/light.css|18996
+./htdocs/vendor/flatpickr/themes/material_blue.css|19048
+./htdocs/vendor/flatpickr/themes/material_green.css|19048
+./htdocs/vendor/flatpickr/themes/material_orange.css|19048
+./htdocs/vendor/flatpickr/themes/material_red.css|19048
+./htdocs/vendor/flatpickr/types/globals.d.ts|546
+./htdocs/vendor/flatpickr/types/instance.d.ts|4386
+./htdocs/vendor/flatpickr/types/locale.d.ts|2263
+./htdocs/vendor/flatpickr/types/options.d.ts|4564
+./htdocs/vendor/flatpickr/typings.d.ts|1001
+./htdocs/vendor/flatpickr/utils/dates.d.ts|922
+./htdocs/vendor/flatpickr/utils/dom.d.ts|585
+./htdocs/vendor/flatpickr/utils/formatting.d.ts|834
+./htdocs/vendor/flatpickr/utils/index.d.ts|393
+./htdocs/vendor/flatpickr/utils/polyfills.d.ts|0
+./htdocs/vendor/jspdf/jspdf.min.js|307591
+./htdocs/vendor/jspdf/jspdf.plugin.autotable.js|71296
+./htdocs/vendor/jspdf/jspdf.plugin.autotable.min.js|30274
+./htdocs/vendor/jsxlsx/cpexcel.js|471033
+./htdocs/vendor/jsxlsx/jszip.js|288108
+./htdocs/vendor/jsxlsx/LICENSE|11356
+./htdocs/vendor/jsxlsx/shim.min.js|5651
+./htdocs/vendor/jsxlsx/xlsx.core.min.js|477227
+./htdocs/vendor/jsxlsx/xlsx.core.min.map|717898
+./htdocs/vendor/jsxlsx/xlsx.extendscript.js|992249
+./htdocs/vendor/jsxlsx/xlsx.full.min.js|921331
+./htdocs/vendor/jsxlsx/xlsx.full.min.map|841224
+./htdocs/vendor/jsxlsx/xlsx.js|696439
+./htdocs/vendor/jsxlsx/xlsx.min.js|397226
+./htdocs/vendor/jsxlsx/xlsx.min.map|586186
+./htdocs/vendor/moment/moment-with-locales.min.js|330190
+./htdocs/vendor/moment/moment.min.js|51746
+./htdocs/vendor/tabulator/css/bootstrap/tabulator_bootstrap.css|19703
+./htdocs/vendor/tabulator/css/bootstrap/tabulator_bootstrap.min.css|17088
+./htdocs/vendor/tabulator/css/bootstrap/tabulator_bootstrap.min.css.map|27442
+./htdocs/vendor/tabulator/css/bootstrap/tabulator_bootstrap4.css|25548
+./htdocs/vendor/tabulator/css/bootstrap/tabulator_bootstrap4.min.css|22258
+./htdocs/vendor/tabulator/css/bootstrap/tabulator_bootstrap4.min.css.map|34724
+./htdocs/vendor/tabulator/css/bulma/tabulator_bulma.css|19945
+./htdocs/vendor/tabulator/css/bulma/tabulator_bulma.min.css|17240
+./htdocs/vendor/tabulator/css/bulma/tabulator_bulma.min.css.map|27793
+./htdocs/vendor/tabulator/css/semantic-ui/tabulator_semantic-ui.css|31861
+./htdocs/vendor/tabulator/css/semantic-ui/tabulator_semantic-ui.min.css|23042
+./htdocs/vendor/tabulator/css/semantic-ui/tabulator_semantic-ui.min.css.map|42076
+./htdocs/vendor/tabulator/css/tabulator.css|18678
+./htdocs/vendor/tabulator/css/tabulator.min.css|16153
+./htdocs/vendor/tabulator/css/tabulator.min.css.map|30054
+./htdocs/vendor/tabulator/css/tabulator_midnight.css|18806
+./htdocs/vendor/tabulator/css/tabulator_midnight.min.css|16278
+./htdocs/vendor/tabulator/css/tabulator_midnight.min.css.map|30296
+./htdocs/vendor/tabulator/css/tabulator_modern.css|19468
+./htdocs/vendor/tabulator/css/tabulator_modern.min.css|16838
+./htdocs/vendor/tabulator/css/tabulator_modern.min.css.map|31647
+./htdocs/vendor/tabulator/css/tabulator_simple.css|18618
+./htdocs/vendor/tabulator/css/tabulator_simple.min.css|16106
+./htdocs/vendor/tabulator/css/tabulator_simple.min.css.map|30033
+./htdocs/vendor/tabulator/css/tabulator_site.css|18507
+./htdocs/vendor/tabulator/css/tabulator_site.min.css|16002
+./htdocs/vendor/tabulator/css/tabulator_site.min.css.map|30389
+./htdocs/vendor/tabulator/js/jquery_wrapper.js|1421
+./htdocs/vendor/tabulator/js/jquery_wrapper.min.js|699
+./htdocs/vendor/tabulator/js/modules/accessor.js|2558
+./htdocs/vendor/tabulator/js/modules/accessor.min.js|1455
+./htdocs/vendor/tabulator/js/modules/ajax.js|11994
+./htdocs/vendor/tabulator/js/modules/ajax.min.js|8042
+./htdocs/vendor/tabulator/js/modules/calculation_colums.js|11664
+./htdocs/vendor/tabulator/js/modules/calculation_colums.min.js|7402
+./htdocs/vendor/tabulator/js/modules/clipboard.js|25291
+./htdocs/vendor/tabulator/js/modules/clipboard.min.js|14993
+./htdocs/vendor/tabulator/js/modules/data_tree.js|8748
+./htdocs/vendor/tabulator/js/modules/data_tree.min.js|5983
+./htdocs/vendor/tabulator/js/modules/download.js|20203
+./htdocs/vendor/tabulator/js/modules/download.min.js|9822
+./htdocs/vendor/tabulator/js/modules/edit.js|43160
+./htdocs/vendor/tabulator/js/modules/edit.min.js|22312
+./htdocs/vendor/tabulator/js/modules/filter.js|20848
+./htdocs/vendor/tabulator/js/modules/filter.min.js|11513
+./htdocs/vendor/tabulator/js/modules/format.js|21000
+./htdocs/vendor/tabulator/js/modules/format.min.js|12537
+./htdocs/vendor/tabulator/js/modules/frozen_columns.js|6116
+./htdocs/vendor/tabulator/js/modules/frozen_columns.min.js|3946
+./htdocs/vendor/tabulator/js/modules/frozen_rows.js|2249
+./htdocs/vendor/tabulator/js/modules/frozen_rows.min.js|1645
+./htdocs/vendor/tabulator/js/modules/group_rows.js|25932
+./htdocs/vendor/tabulator/js/modules/group_rows.min.js|17645
+./htdocs/vendor/tabulator/js/modules/history.js|3203
+./htdocs/vendor/tabulator/js/modules/history.min.js|2270
+./htdocs/vendor/tabulator/js/modules/html_table_export.js|10649
+./htdocs/vendor/tabulator/js/modules/html_table_export.min.js|6930
+./htdocs/vendor/tabulator/js/modules/html_table_import.js|5208
+./htdocs/vendor/tabulator/js/modules/html_table_import.min.js|2721
+./htdocs/vendor/tabulator/js/modules/keybindings.js|8003
+./htdocs/vendor/tabulator/js/modules/keybindings.min.js|5002
+./htdocs/vendor/tabulator/js/modules/moveable_columns.js|8666
+./htdocs/vendor/tabulator/js/modules/moveable_columns.min.js|5383
+./htdocs/vendor/tabulator/js/modules/moveable_rows.js|16514
+./htdocs/vendor/tabulator/js/modules/moveable_rows.min.js|11212
+./htdocs/vendor/tabulator/js/modules/mutator.js|2940
+./htdocs/vendor/tabulator/js/modules/mutator.min.js|1722
+./htdocs/vendor/tabulator/js/modules/page.js|16067
+./htdocs/vendor/tabulator/js/modules/page.min.js|10966
+./htdocs/vendor/tabulator/js/modules/persistence.js|4822
+./htdocs/vendor/tabulator/js/modules/persistence.min.js|2767
+./htdocs/vendor/tabulator/js/modules/print.js|3008
+./htdocs/vendor/tabulator/js/modules/print.min.js|2306
+./htdocs/vendor/tabulator/js/modules/reactive_data.js|5286
+./htdocs/vendor/tabulator/js/modules/reactive_data.min.js|3051
+./htdocs/vendor/tabulator/js/modules/resize_columns.js|5035
+./htdocs/vendor/tabulator/js/modules/resize_columns.min.js|3034
+./htdocs/vendor/tabulator/js/modules/resize_rows.js|2885
+./htdocs/vendor/tabulator/js/modules/resize_rows.min.js|1741
+./htdocs/vendor/tabulator/js/modules/resize_table.js|895
+./htdocs/vendor/tabulator/js/modules/resize_table.min.js|669
+./htdocs/vendor/tabulator/js/modules/responsive_layout.js|6313
+./htdocs/vendor/tabulator/js/modules/responsive_layout.min.js|4016
+./htdocs/vendor/tabulator/js/modules/select_row.js|9355
+./htdocs/vendor/tabulator/js/modules/select_row.min.js|5969
+./htdocs/vendor/tabulator/js/modules/sort.js|13879
+./htdocs/vendor/tabulator/js/modules/sort.min.js|7200
+./htdocs/vendor/tabulator/js/modules/validate.js|5230
+./htdocs/vendor/tabulator/js/modules/validate.min.js|2576
+./htdocs/vendor/tabulator/js/tabulator.js|531228
+./htdocs/vendor/tabulator/js/tabulator.min.js|301937
+./htdocs/vendor/tabulator/js/tabulator_core.js|190661
+./htdocs/vendor/tabulator/js/tabulator_core.min.js|117292
+./htdocs/vendor/tinymce/changelog.txt|92798
+./htdocs/vendor/tinymce/js/tinymce/jquery.tinymce.min.js|3561
+./htdocs/vendor/tinymce/js/tinymce/langs/de.js|10334
+./htdocs/vendor/tinymce/js/tinymce/langs/fr_FR.js|10140
+./htdocs/vendor/tinymce/js/tinymce/langs/readme.md|151
+./htdocs/vendor/tinymce/js/tinymce/license.txt|26945
+./htdocs/vendor/tinymce/js/tinymce/plugins/advlist/plugin.min.js|2226
+./htdocs/vendor/tinymce/js/tinymce/plugins/anchor/plugin.min.js|1426
+./htdocs/vendor/tinymce/js/tinymce/plugins/autolink/plugin.min.js|2127
+./htdocs/vendor/tinymce/js/tinymce/plugins/autoresize/plugin.min.js|2074
+./htdocs/vendor/tinymce/js/tinymce/plugins/autosave/plugin.min.js|3083
+./htdocs/vendor/tinymce/js/tinymce/plugins/bbcode/plugin.min.js|2850
+./htdocs/vendor/tinymce/js/tinymce/plugins/charmap/plugin.min.js|8601
+./htdocs/vendor/tinymce/js/tinymce/plugins/code/plugin.min.js|1024
+./htdocs/vendor/tinymce/js/tinymce/plugins/codesample/css/prism.css|2472
+./htdocs/vendor/tinymce/js/tinymce/plugins/codesample/plugin.min.js|19415
+./htdocs/vendor/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js|1349
+./htdocs/vendor/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js|1824
+./htdocs/vendor/tinymce/js/tinymce/plugins/directionality/plugin.min.js|857
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-cool.gif|354
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-cry.gif|329
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-embarassed.gif|331
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif|342
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-frown.gif|340
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-innocent.gif|336
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-kiss.gif|338
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-laughing.gif|343
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-money-mouth.gif|321
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-sealed.gif|323
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-smile.gif|344
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-surprised.gif|338
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-tongue-out.gif|328
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-undecided.gif|337
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-wink.gif|350
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-yell.gif|336
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/plugin.min.js|1071
+./htdocs/vendor/tinymce/js/tinymce/plugins/fullpage/plugin.min.js|7168
+./htdocs/vendor/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js|2161
+./htdocs/vendor/tinymce/js/tinymce/plugins/help/img/logo.png|13208
+./htdocs/vendor/tinymce/js/tinymce/plugins/help/plugin.min.js|9992
+./htdocs/vendor/tinymce/js/tinymce/plugins/hr/plugin.min.js|428
+./htdocs/vendor/tinymce/js/tinymce/plugins/image/plugin.min.js|18255
+./htdocs/vendor/tinymce/js/tinymce/plugins/imagetools/plugin.min.js|36525
+./htdocs/vendor/tinymce/js/tinymce/plugins/importcss/plugin.min.js|3167
+./htdocs/vendor/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js|2633
+./htdocs/vendor/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js|3402
+./htdocs/vendor/tinymce/js/tinymce/plugins/link/plugin.min.js|8919
+./htdocs/vendor/tinymce/js/tinymce/plugins/lists/plugin.min.js|14256
+./htdocs/vendor/tinymce/js/tinymce/plugins/media/plugin.min.js|15064
+./htdocs/vendor/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js|1012
+./htdocs/vendor/tinymce/js/tinymce/plugins/noneditable/plugin.min.js|1540
+./htdocs/vendor/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js|1436
+./htdocs/vendor/tinymce/js/tinymce/plugins/paste/plugin.min.js|21601
+./htdocs/vendor/tinymce/js/tinymce/plugins/preview/plugin.min.js|2044
+./htdocs/vendor/tinymce/js/tinymce/plugins/print/plugin.min.js|366
+./htdocs/vendor/tinymce/js/tinymce/plugins/save/plugin.min.js|1426
+./htdocs/vendor/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js|7358
+./htdocs/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js|10184
+./htdocs/vendor/tinymce/js/tinymce/plugins/tabfocus/plugin.min.js|1631
+./htdocs/vendor/tinymce/js/tinymce/plugins/table/plugin.min.js|135387
+./htdocs/vendor/tinymce/js/tinymce/plugins/template/plugin.min.js|5414
+./htdocs/vendor/tinymce/js/tinymce/plugins/textcolor/plugin.min.js|4924
+./htdocs/vendor/tinymce/js/tinymce/plugins/textpattern/plugin.min.js|4412
+./htdocs/vendor/tinymce/js/tinymce/plugins/toc/plugin.min.js|2941
+./htdocs/vendor/tinymce/js/tinymce/plugins/visualblocks/css/visualblocks.css|5627
+./htdocs/vendor/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js|1691
+./htdocs/vendor/tinymce/js/tinymce/plugins/visualchars/plugin.min.js|6294
+./htdocs/vendor/tinymce/js/tinymce/plugins/wordcount/plugin.min.js|10937
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/content.inline.min.css|3375
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/content.min.css|3781
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/content.mobile.min.css|234
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce-mobile.woff|4624
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce-small.eot|9492
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce-small.svg|24789
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf|9304
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce-small.woff|9380
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce.eot|18808
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce.svg|46119
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce.ttf|18644
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce.woff|18720
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/img/anchor.gif|53
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/img/loader.gif|2608
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/img/object.gif|152
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/img/trans.gif|43
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/skin.min.css|43950
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/skin.mobile.min.css|28006
+./htdocs/vendor/tinymce/js/tinymce/themes/inlite/theme.min.js|137124
+./htdocs/vendor/tinymce/js/tinymce/themes/mobile/theme.min.js|174158
+./htdocs/vendor/tinymce/js/tinymce/themes/modern/theme.min.js|135904
+./htdocs/vendor/tinymce/js/tinymce/tinymce.min.js|350402
+./htdocs/vendor/tinymce/LICENSE.TXT|26945
+./tools/fingerdelete.py|1219
+./tools/fingerenroll.py|2747
+./tools/fingerindex.py|1176
+./tools/fingerledoff.py|583
+./tools/fingerledon.py|582
+./tools/fingersearch.py|1962
+./tools/fpunload.sh|520
+./tools/pyfingerprint2/__init__.py|175
+./tools/pyfingerprint2/pyfingerprint.orig.py|44719
+./tools/pyfingerprint2/pyfingerprint.py|45813
diff --git a/pointeuse/dev/sourcefiles.remote.txt b/pointeuse/dev/sourcefiles.remote.txt
new file mode 100644 (file)
index 0000000..7d1040f
--- /dev/null
@@ -0,0 +1,412 @@
+./CGI/api/db.cgi|3027
+./CGI/api/fingerprint.cgi|4338
+./CGI/api/index.cgi|4333
+./CGI/api/lib/dksconfig.pm|1022
+./CGI/api/lib/dksdb.pm|11300
+./CGI/api/service.cgi|4844
+./CGI/api/system.cgi|4448
+./CGI/index.cgi|2667
+./CGI/tmpl/app/hourtrax/index.tt|2984
+./CGI/tmpl/app/hourtrax/module/members/index.js|3913
+./CGI/tmpl/app/hourtrax/module/members/index.tt|3416
+./CGI/tmpl/app/hourtrax/module/settings/index.js|0
+./CGI/tmpl/app/hourtrax/module/settings/index.tt|1192
+./CGI/tmpl/app/hourtrax/module/timetrack/index.js|2017
+./CGI/tmpl/app/hourtrax/module/timetrack/index.tt|401
+./CGI/tmpl/app/hourtrax/module/timetrack/usertimetrack.js|5633
+./CGI/tmpl/app/hourtrax/module/timetrack/usertimetrack.tt|3132
+./CGI/tmpl/app/system/hourtrax/index.js|0
+./CGI/tmpl/app/system/hourtrax/index.tt|0
+./CGI/tmpl/app/system/index.tt|2888
+./CGI/tmpl/app/system/network/index.js|0
+./CGI/tmpl/app/system/network/index.tt|1193
+./CGI/tmpl/app/system/vpn/index.js|0
+./CGI/tmpl/app/system/vpn/index.tt|0
+./CGI/tmpl/app/timeclock/index.js|14470
+./CGI/tmpl/app/timeclock/index.tt|9073
+./CGI/tmpl/block/snackbar.tt|25
+./CGI/tmpl/macro/fields.tt|8091
+./CGI/tmpl/skeleton/app.tt|82
+./CGI/tmpl/skeleton/file.tt|82
+./CGI/tmpl/skeleton/index.tt|1861
+./CGI/tmpl/skeleton/module.tt|3361
+./hourtrax.pl|3246
+./htdocs/css/admin.css|5127
+./htdocs/css/clock2.css|72
+./htdocs/css/clock.css|6290
+./htdocs/css/w3pro.css|26847
+./htdocs/img/dks_1000.png|68554
+./htdocs/img/fingerprint/finger1.svg|4819
+./htdocs/img/fingerprint/finger2.svg|4963
+./htdocs/img/fingerprint/finger3.svg|4796
+./htdocs/img/fingerprint/finger4.svg|4768
+./htdocs/img/fingerprint/finger5.svg|4788
+./htdocs/img/fingerprint/fingerprint-check.svg|5525
+./htdocs/img/fingerprint/fingerprint-crosshair.svg|6148
+./htdocs/img/fingerprint/fingerprint-remove.svg|5587
+./htdocs/img/fingerprint/fingerprint-remove_white.svg|5720
+./htdocs/img/fingerprint/fingerprint-scanning-index.svg|7393
+./htdocs/img/fingerprint/fingerprint-scanning.svg|6064
+./htdocs/img/fingerprint/fingerprint-search.svg|17333
+./htdocs/img/fingerprint/fingerprint-simple.svg|5706
+./htdocs/img/hourtrax.png|23443
+./htdocs/img/hourtrax.svg|10430
+./htdocs/img/icons/address.svg|800
+./htdocs/img/icons/address_white.svg|812
+./htdocs/img/icons/Adobe_Acrobat.svg|3436
+./htdocs/img/icons/Adobe_PDF_Export.svg|2730
+./htdocs/img/icons/Agreement_01.svg|5234
+./htdocs/img/icons/apps.svg|781
+./htdocs/img/icons/apps_white.svg|793
+./htdocs/img/icons/archive.svg|273
+./htdocs/img/icons/archive_white.svg|285
+./htdocs/img/icons/Bill.svg|3185
+./htdocs/img/icons/calendar.svg|954
+./htdocs/img/icons/calendar_white.svg|966
+./htdocs/img/icons/clocktime.svg|1122
+./htdocs/img/icons/clocktime_white.svg|1117
+./htdocs/img/icons/clubs.svg|1033
+./htdocs/img/icons/club.svg|823
+./htdocs/img/icons/clubs_white.svg|1045
+./htdocs/img/icons/club_white.svg|835
+./htdocs/img/icons/code.svg|589
+./htdocs/img/icons/cubelight.svg|1023
+./htdocs/img/icons/cubelight_white.svg|1036
+./htdocs/img/icons/cube.svg|365
+./htdocs/img/icons/cube_white.svg|378
+./htdocs/img/icons/dashboard.svg|1085
+./htdocs/img/icons/dashboard_white.svg|1098
+./htdocs/img/icons/Document_Save.svg|729
+./htdocs/img/icons/download.svg|339
+./htdocs/img/icons/download_white.svg|351
+./htdocs/img/icons/duplicate.svg|430
+./htdocs/img/icons/duplicate_white.svg|442
+./htdocs/img/icons/edit.svg|712
+./htdocs/img/icons/edit_white.svg|725
+./htdocs/img/icons/file/dir.png|6937
+./htdocs/img/icons/file/doc.png|6455
+./htdocs/img/icons/file/docx.png|6455
+./htdocs/img/icons/file/file.png|4540
+./htdocs/img/icons/file/jpg.png|6297
+./htdocs/img/icons/file/pdf.png|8783
+./htdocs/img/icons/file/png.png|6297
+./htdocs/img/icons/file.svg|272
+./htdocs/img/icons/file/txt.png|6049
+./htdocs/img/icons/file_white.svg|284
+./htdocs/img/icons/file/xls.png|6065
+./htdocs/img/icons/file/xlsx.png|6065
+./htdocs/img/icons/folder.svg|404
+./htdocs/img/icons/folder_white.svg|417
+./htdocs/img/icons/globe.svg|1242
+./htdocs/img/icons/globe_white.svg|1254
+./htdocs/img/icons/group.svg|1994
+./htdocs/img/icons/group_white.svg|2006
+./htdocs/img/icons/history.svg|1284
+./htdocs/img/icons/history_white.svg|1296
+./htdocs/img/icons/inbox.svg|413
+./htdocs/img/icons/inbox_white.svg|425
+./htdocs/img/icons/library.svg|968
+./htdocs/img/icons/library_white.svg|980
+./htdocs/img/icons/license.svg|478
+./htdocs/img/icons/license_white.svg|490
+./htdocs/img/icons/list.svg|640
+./htdocs/img/icons/list_white.svg|652
+./htdocs/img/icons/logout.svg|402
+./htdocs/img/icons/logout_white.svg|414
+./htdocs/img/icons/menu.svg|336
+./htdocs/img/icons/menu_white.svg|348
+./htdocs/img/icons/newspaper.svg|812
+./htdocs/img/icons/newspaper_white.svg|824
+./htdocs/img/icons/numberlist.svg|908
+./htdocs/img/icons/numberlist_white.svg|920
+./htdocs/img/icons/package.svg|408
+./htdocs/img/icons/package_white.svg|420
+./htdocs/img/icons/pictures.svg|1420
+./htdocs/img/icons/pictures_white.svg|1436
+./htdocs/img/icons/plus.svg|535
+./htdocs/img/icons/plus_white.svg|547
+./htdocs/img/icons/remove.svg|816
+./htdocs/img/icons/remove_white.svg|828
+./htdocs/img/icons/Save.svg|477
+./htdocs/img/icons/squares.svg|502
+./htdocs/img/icons/squares_white.svg|514
+./htdocs/img/icons/target.svg|780
+./htdocs/img/icons/target_white.svg|792
+./htdocs/img/icons/user.svg|780
+./htdocs/img/icons/user_white.svg|792
+./htdocs/js/admin_ht.js|12992
+./htdocs/js/admin.js|3246
+./htdocs/js/fieldsave.js|1445
+./htdocs/js/formsave.js|6063
+./htdocs/js/moduleglobal.js|839
+./htdocs/js/request.js|5300
+./htdocs/js/sysconfig.js|5904
+./htdocs/vendor/choices/base.css|2314
+./htdocs/vendor/choices/base.min.css|1604
+./htdocs/vendor/choices/choices.css|8095
+./htdocs/vendor/choices/choices.js|217424
+./htdocs/vendor/choices/choices.min.css|6735
+./htdocs/vendor/choices/choices.min.js|91604
+./htdocs/vendor/choices/scripts/choices.js|217424
+./htdocs/vendor/choices/scripts/choices.min.js|91604
+./htdocs/vendor/flatpickr/flatpickr.css|18831
+./htdocs/vendor/flatpickr/flatpickr.js|118042
+./htdocs/vendor/flatpickr/flatpickr.min.css|15954
+./htdocs/vendor/flatpickr/flatpickr.min.js|48368
+./htdocs/vendor/flatpickr/ie.css|260
+./htdocs/vendor/flatpickr/index.d.ts|138
+./htdocs/vendor/flatpickr/l10n/de.d.ts|2272
+./htdocs/vendor/flatpickr/l10n/default.d.ts|104
+./htdocs/vendor/flatpickr/l10n/default.js|2150
+./htdocs/vendor/flatpickr/l10n/de.js|1757
+./htdocs/vendor/flatpickr/l10n/fr.d.ts|2272
+./htdocs/vendor/flatpickr/l10n/fr.js|1893
+./htdocs/vendor/flatpickr/l10n/lu.d.ts|2314
+./htdocs/vendor/flatpickr/l10n/lu.js|1802
+./htdocs/vendor/flatpickr/plugins/confirmDate/confirmDate.css|373
+./htdocs/vendor/flatpickr/plugins/confirmDate/confirmDate.d.ts|272
+./htdocs/vendor/flatpickr/plugins/confirmDate/confirmDate.js|4236
+./htdocs/vendor/flatpickr/plugins/labelPlugin/labelPlugin.d.ts|114
+./htdocs/vendor/flatpickr/plugins/labelPlugin/labelPlugin.js|964
+./htdocs/vendor/flatpickr/plugins/minMaxTimePlugin.d.ts|491
+./htdocs/vendor/flatpickr/plugins/minMaxTimePlugin.js|12399
+./htdocs/vendor/flatpickr/plugins/monthSelect/index.d.ts|367
+./htdocs/vendor/flatpickr/plugins/monthSelect/index.js|7757
+./htdocs/vendor/flatpickr/plugins/monthSelect/style.css|1561
+./htdocs/vendor/flatpickr/plugins/monthSelect/tests.spec.d.ts|11
+./htdocs/vendor/flatpickr/plugins/rangePlugin.d.ts|312
+./htdocs/vendor/flatpickr/plugins/rangePlugin.js|6475
+./htdocs/vendor/flatpickr/plugins/scrollPlugin.d.ts|113
+./htdocs/vendor/flatpickr/plugins/scrollPlugin.js|2026
+./htdocs/vendor/flatpickr/plugins/weekSelect/weekSelect.d.ts|218
+./htdocs/vendor/flatpickr/plugins/weekSelect/weekSelect.js|3500
+./htdocs/vendor/flatpickr/themes/airbnb.css|21148
+./htdocs/vendor/flatpickr/themes/confetti.css|19048
+./htdocs/vendor/flatpickr/themes/dark.css|18875
+./htdocs/vendor/flatpickr/themes/light.css|18996
+./htdocs/vendor/flatpickr/themes/material_blue.css|19048
+./htdocs/vendor/flatpickr/themes/material_green.css|19048
+./htdocs/vendor/flatpickr/themes/material_orange.css|19048
+./htdocs/vendor/flatpickr/themes/material_red.css|19048
+./htdocs/vendor/flatpickr/types/globals.d.ts|546
+./htdocs/vendor/flatpickr/types/instance.d.ts|4386
+./htdocs/vendor/flatpickr/types/locale.d.ts|2263
+./htdocs/vendor/flatpickr/types/options.d.ts|4564
+./htdocs/vendor/flatpickr/typings.d.ts|1001
+./htdocs/vendor/flatpickr/utils/dates.d.ts|922
+./htdocs/vendor/flatpickr/utils/dom.d.ts|585
+./htdocs/vendor/flatpickr/utils/formatting.d.ts|834
+./htdocs/vendor/flatpickr/utils/index.d.ts|393
+./htdocs/vendor/flatpickr/utils/polyfills.d.ts|0
+./htdocs/vendor/jspdf/jspdf.min.js|307591
+./htdocs/vendor/jspdf/jspdf.plugin.autotable.js|71296
+./htdocs/vendor/jspdf/jspdf.plugin.autotable.min.js|30274
+./htdocs/vendor/jsxlsx/cpexcel.js|471033
+./htdocs/vendor/jsxlsx/jszip.js|288108
+./htdocs/vendor/jsxlsx/LICENSE|11356
+./htdocs/vendor/jsxlsx/shim.min.js|5651
+./htdocs/vendor/jsxlsx/xlsx.core.min.js|477227
+./htdocs/vendor/jsxlsx/xlsx.core.min.map|717898
+./htdocs/vendor/jsxlsx/xlsx.extendscript.js|992249
+./htdocs/vendor/jsxlsx/xlsx.full.min.js|921331
+./htdocs/vendor/jsxlsx/xlsx.full.min.map|841224
+./htdocs/vendor/jsxlsx/xlsx.js|696439
+./htdocs/vendor/jsxlsx/xlsx.min.js|397226
+./htdocs/vendor/jsxlsx/xlsx.min.map|586186
+./htdocs/vendor/moment/moment.min.js|51746
+./htdocs/vendor/moment/moment-with-locales.min.js|330190
+./htdocs/vendor/tabulator/css/bootstrap/tabulator_bootstrap4.css|25548
+./htdocs/vendor/tabulator/css/bootstrap/tabulator_bootstrap4.min.css|22258
+./htdocs/vendor/tabulator/css/bootstrap/tabulator_bootstrap4.min.css.map|34724
+./htdocs/vendor/tabulator/css/bootstrap/tabulator_bootstrap.css|19703
+./htdocs/vendor/tabulator/css/bootstrap/tabulator_bootstrap.min.css|17088
+./htdocs/vendor/tabulator/css/bootstrap/tabulator_bootstrap.min.css.map|27442
+./htdocs/vendor/tabulator/css/bulma/tabulator_bulma.css|19945
+./htdocs/vendor/tabulator/css/bulma/tabulator_bulma.min.css|17240
+./htdocs/vendor/tabulator/css/bulma/tabulator_bulma.min.css.map|27793
+./htdocs/vendor/tabulator/css/semantic-ui/tabulator_semantic-ui.css|31861
+./htdocs/vendor/tabulator/css/semantic-ui/tabulator_semantic-ui.min.css|23042
+./htdocs/vendor/tabulator/css/semantic-ui/tabulator_semantic-ui.min.css.map|42076
+./htdocs/vendor/tabulator/css/tabulator.css|18678
+./htdocs/vendor/tabulator/css/tabulator_midnight.css|18806
+./htdocs/vendor/tabulator/css/tabulator_midnight.min.css|16278
+./htdocs/vendor/tabulator/css/tabulator_midnight.min.css.map|30296
+./htdocs/vendor/tabulator/css/tabulator.min.css|16153
+./htdocs/vendor/tabulator/css/tabulator.min.css.map|30054
+./htdocs/vendor/tabulator/css/tabulator_modern.css|19468
+./htdocs/vendor/tabulator/css/tabulator_modern.min.css|16838
+./htdocs/vendor/tabulator/css/tabulator_modern.min.css.map|31647
+./htdocs/vendor/tabulator/css/tabulator_simple.css|18618
+./htdocs/vendor/tabulator/css/tabulator_simple.min.css|16106
+./htdocs/vendor/tabulator/css/tabulator_simple.min.css.map|30033
+./htdocs/vendor/tabulator/css/tabulator_site.css|18507
+./htdocs/vendor/tabulator/css/tabulator_site.min.css|16002
+./htdocs/vendor/tabulator/css/tabulator_site.min.css.map|30389
+./htdocs/vendor/tabulator/js/jquery_wrapper.js|1421
+./htdocs/vendor/tabulator/js/jquery_wrapper.min.js|699
+./htdocs/vendor/tabulator/js/modules/accessor.js|2558
+./htdocs/vendor/tabulator/js/modules/accessor.min.js|1455
+./htdocs/vendor/tabulator/js/modules/ajax.js|11994
+./htdocs/vendor/tabulator/js/modules/ajax.min.js|8042
+./htdocs/vendor/tabulator/js/modules/calculation_colums.js|11664
+./htdocs/vendor/tabulator/js/modules/calculation_colums.min.js|7402
+./htdocs/vendor/tabulator/js/modules/clipboard.js|25291
+./htdocs/vendor/tabulator/js/modules/clipboard.min.js|14993
+./htdocs/vendor/tabulator/js/modules/data_tree.js|8748
+./htdocs/vendor/tabulator/js/modules/data_tree.min.js|5983
+./htdocs/vendor/tabulator/js/modules/download.js|20203
+./htdocs/vendor/tabulator/js/modules/download.min.js|9822
+./htdocs/vendor/tabulator/js/modules/edit.js|43160
+./htdocs/vendor/tabulator/js/modules/edit.min.js|22312
+./htdocs/vendor/tabulator/js/modules/filter.js|20848
+./htdocs/vendor/tabulator/js/modules/filter.min.js|11513
+./htdocs/vendor/tabulator/js/modules/format.js|21000
+./htdocs/vendor/tabulator/js/modules/format.min.js|12537
+./htdocs/vendor/tabulator/js/modules/frozen_columns.js|6116
+./htdocs/vendor/tabulator/js/modules/frozen_columns.min.js|3946
+./htdocs/vendor/tabulator/js/modules/frozen_rows.js|2249
+./htdocs/vendor/tabulator/js/modules/frozen_rows.min.js|1645
+./htdocs/vendor/tabulator/js/modules/group_rows.js|25932
+./htdocs/vendor/tabulator/js/modules/group_rows.min.js|17645
+./htdocs/vendor/tabulator/js/modules/history.js|3203
+./htdocs/vendor/tabulator/js/modules/history.min.js|2270
+./htdocs/vendor/tabulator/js/modules/html_table_export.js|10649
+./htdocs/vendor/tabulator/js/modules/html_table_export.min.js|6930
+./htdocs/vendor/tabulator/js/modules/html_table_import.js|5208
+./htdocs/vendor/tabulator/js/modules/html_table_import.min.js|2721
+./htdocs/vendor/tabulator/js/modules/keybindings.js|8003
+./htdocs/vendor/tabulator/js/modules/keybindings.min.js|5002
+./htdocs/vendor/tabulator/js/modules/moveable_columns.js|8666
+./htdocs/vendor/tabulator/js/modules/moveable_columns.min.js|5383
+./htdocs/vendor/tabulator/js/modules/moveable_rows.js|16514
+./htdocs/vendor/tabulator/js/modules/moveable_rows.min.js|11212
+./htdocs/vendor/tabulator/js/modules/mutator.js|2940
+./htdocs/vendor/tabulator/js/modules/mutator.min.js|1722
+./htdocs/vendor/tabulator/js/modules/page.js|16067
+./htdocs/vendor/tabulator/js/modules/page.min.js|10966
+./htdocs/vendor/tabulator/js/modules/persistence.js|4822
+./htdocs/vendor/tabulator/js/modules/persistence.min.js|2767
+./htdocs/vendor/tabulator/js/modules/print.js|3008
+./htdocs/vendor/tabulator/js/modules/print.min.js|2306
+./htdocs/vendor/tabulator/js/modules/reactive_data.js|5286
+./htdocs/vendor/tabulator/js/modules/reactive_data.min.js|3051
+./htdocs/vendor/tabulator/js/modules/resize_columns.js|5035
+./htdocs/vendor/tabulator/js/modules/resize_columns.min.js|3034
+./htdocs/vendor/tabulator/js/modules/resize_rows.js|2885
+./htdocs/vendor/tabulator/js/modules/resize_rows.min.js|1741
+./htdocs/vendor/tabulator/js/modules/resize_table.js|895
+./htdocs/vendor/tabulator/js/modules/resize_table.min.js|669
+./htdocs/vendor/tabulator/js/modules/responsive_layout.js|6313
+./htdocs/vendor/tabulator/js/modules/responsive_layout.min.js|4016
+./htdocs/vendor/tabulator/js/modules/select_row.js|9355
+./htdocs/vendor/tabulator/js/modules/select_row.min.js|5969
+./htdocs/vendor/tabulator/js/modules/sort.js|13879
+./htdocs/vendor/tabulator/js/modules/sort.min.js|7200
+./htdocs/vendor/tabulator/js/modules/validate.js|5230
+./htdocs/vendor/tabulator/js/modules/validate.min.js|2576
+./htdocs/vendor/tabulator/js/tabulator_core.js|190661
+./htdocs/vendor/tabulator/js/tabulator_core.min.js|117292
+./htdocs/vendor/tabulator/js/tabulator.js|531228
+./htdocs/vendor/tabulator/js/tabulator.min.js|301937
+./htdocs/vendor/tinymce/changelog.txt|92798
+./htdocs/vendor/tinymce/js/tinymce/jquery.tinymce.min.js|3561
+./htdocs/vendor/tinymce/js/tinymce/langs/de.js|10334
+./htdocs/vendor/tinymce/js/tinymce/langs/fr_FR.js|10140
+./htdocs/vendor/tinymce/js/tinymce/langs/readme.md|151
+./htdocs/vendor/tinymce/js/tinymce/license.txt|26945
+./htdocs/vendor/tinymce/js/tinymce/plugins/advlist/plugin.min.js|2226
+./htdocs/vendor/tinymce/js/tinymce/plugins/anchor/plugin.min.js|1426
+./htdocs/vendor/tinymce/js/tinymce/plugins/autolink/plugin.min.js|2127
+./htdocs/vendor/tinymce/js/tinymce/plugins/autoresize/plugin.min.js|2074
+./htdocs/vendor/tinymce/js/tinymce/plugins/autosave/plugin.min.js|3083
+./htdocs/vendor/tinymce/js/tinymce/plugins/bbcode/plugin.min.js|2850
+./htdocs/vendor/tinymce/js/tinymce/plugins/charmap/plugin.min.js|8601
+./htdocs/vendor/tinymce/js/tinymce/plugins/code/plugin.min.js|1024
+./htdocs/vendor/tinymce/js/tinymce/plugins/codesample/css/prism.css|2472
+./htdocs/vendor/tinymce/js/tinymce/plugins/codesample/plugin.min.js|19415
+./htdocs/vendor/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js|1349
+./htdocs/vendor/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js|1824
+./htdocs/vendor/tinymce/js/tinymce/plugins/directionality/plugin.min.js|857
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-cool.gif|354
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-cry.gif|329
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-embarassed.gif|331
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif|342
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-frown.gif|340
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-innocent.gif|336
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-kiss.gif|338
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-laughing.gif|343
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-money-mouth.gif|321
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-sealed.gif|323
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-smile.gif|344
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-surprised.gif|338
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-tongue-out.gif|328
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-undecided.gif|337
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-wink.gif|350
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/img/smiley-yell.gif|336
+./htdocs/vendor/tinymce/js/tinymce/plugins/emoticons/plugin.min.js|1071
+./htdocs/vendor/tinymce/js/tinymce/plugins/fullpage/plugin.min.js|7168
+./htdocs/vendor/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js|2161
+./htdocs/vendor/tinymce/js/tinymce/plugins/help/img/logo.png|13208
+./htdocs/vendor/tinymce/js/tinymce/plugins/help/plugin.min.js|9992
+./htdocs/vendor/tinymce/js/tinymce/plugins/hr/plugin.min.js|428
+./htdocs/vendor/tinymce/js/tinymce/plugins/image/plugin.min.js|18255
+./htdocs/vendor/tinymce/js/tinymce/plugins/imagetools/plugin.min.js|36525
+./htdocs/vendor/tinymce/js/tinymce/plugins/importcss/plugin.min.js|3167
+./htdocs/vendor/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js|2633
+./htdocs/vendor/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js|3402
+./htdocs/vendor/tinymce/js/tinymce/plugins/link/plugin.min.js|8919
+./htdocs/vendor/tinymce/js/tinymce/plugins/lists/plugin.min.js|14256
+./htdocs/vendor/tinymce/js/tinymce/plugins/media/plugin.min.js|15064
+./htdocs/vendor/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js|1012
+./htdocs/vendor/tinymce/js/tinymce/plugins/noneditable/plugin.min.js|1540
+./htdocs/vendor/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js|1436
+./htdocs/vendor/tinymce/js/tinymce/plugins/paste/plugin.min.js|21601
+./htdocs/vendor/tinymce/js/tinymce/plugins/preview/plugin.min.js|2044
+./htdocs/vendor/tinymce/js/tinymce/plugins/print/plugin.min.js|366
+./htdocs/vendor/tinymce/js/tinymce/plugins/save/plugin.min.js|1426
+./htdocs/vendor/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js|7358
+./htdocs/vendor/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js|10184
+./htdocs/vendor/tinymce/js/tinymce/plugins/tabfocus/plugin.min.js|1631
+./htdocs/vendor/tinymce/js/tinymce/plugins/table/plugin.min.js|135387
+./htdocs/vendor/tinymce/js/tinymce/plugins/template/plugin.min.js|5414
+./htdocs/vendor/tinymce/js/tinymce/plugins/textcolor/plugin.min.js|4924
+./htdocs/vendor/tinymce/js/tinymce/plugins/textpattern/plugin.min.js|4412
+./htdocs/vendor/tinymce/js/tinymce/plugins/toc/plugin.min.js|2941
+./htdocs/vendor/tinymce/js/tinymce/plugins/visualblocks/css/visualblocks.css|5627
+./htdocs/vendor/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js|1691
+./htdocs/vendor/tinymce/js/tinymce/plugins/visualchars/plugin.min.js|6294
+./htdocs/vendor/tinymce/js/tinymce/plugins/wordcount/plugin.min.js|10937
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/content.inline.min.css|3375
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/content.min.css|3781
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/content.mobile.min.css|234
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce.eot|18808
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce-mobile.woff|4624
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce-small.eot|9492
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce-small.svg|24789
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf|9304
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce-small.woff|9380
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce.svg|46119
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce.ttf|18644
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/fonts/tinymce.woff|18720
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/img/anchor.gif|53
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/img/loader.gif|2608
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/img/object.gif|152
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/img/trans.gif|43
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/skin.min.css|43950
+./htdocs/vendor/tinymce/js/tinymce/skins/lightgray/skin.mobile.min.css|28006
+./htdocs/vendor/tinymce/js/tinymce/themes/inlite/theme.min.js|137124
+./htdocs/vendor/tinymce/js/tinymce/themes/mobile/theme.min.js|174158
+./htdocs/vendor/tinymce/js/tinymce/themes/modern/theme.min.js|135904
+./htdocs/vendor/tinymce/js/tinymce/tinymce.min.js|350402
+./htdocs/vendor/tinymce/LICENSE.TXT|26945
+./tools/fingerdelete.py|1219
+./tools/fingerenroll.py|2747
+./tools/fingerindex.py|1176
+./tools/fingerledoff.py|583
+./tools/fingerledon.py|582
+./tools/fingersearch.py|1962
+./tools/pyfingerprint2/__init__.py|175
+./tools/pyfingerprint2/__init__.pyc|297
+./tools/pyfingerprint2/pyfingerprint.orig.py|44719
+./tools/pyfingerprint2/pyfingerprint.py|45813
+./tools/pyfingerprint2/pyfingerprint.pyc|31042
diff --git a/pointeuse/dev/splash.png b/pointeuse/dev/splash.png
new file mode 100644 (file)
index 0000000..118c3f7
Binary files /dev/null and b/pointeuse/dev/splash.png differ
diff --git a/pointeuse/dev/splash.xcf b/pointeuse/dev/splash.xcf
new file mode 100644 (file)
index 0000000..909ac0e
Binary files /dev/null and b/pointeuse/dev/splash.xcf differ
diff --git a/pointeuse/dev/syncdb.pl b/pointeuse/dev/syncdb.pl
new file mode 100644 (file)
index 0000000..1e78afe
--- /dev/null
@@ -0,0 +1,48 @@
+#!/home/dks/perl5/perlbrew/perls/perl-5.28.1/bin/perl
+use strict;
+use FindBin qw($Bin);
+# use lib ('CGI/api/lib/perl5');
+# use lib ('CGI/api/lib');
+use lib ($Bin.'/CGI/api/lib/perl5');
+use lib ($Bin.'/CGI/api/lib');
+# use CGI::Carp qw/fatalsToBrowser/;
+use File::Basename;
+use JSON::PP;
+use Getopt::Long;
+use dksconfig qw/$sitecfg/;
+use dksdb;
+use Encode;
+my $sql = "";
+my @allsql = ();
+my $file = "";
+GetOptions("sql|s=s" => \$sql,"file|f=s" => \$file);
+if ($sql ne ""){
+  @allsql = split(";",$sql);
+}
+elsif ($file ne "" && -e $file){
+  my $strfile = "";
+  open(SQF,$file);
+  while (my $l = <SQF>){
+    $strfile .= $l;
+  }
+  close(SQF);
+  @allsql = split(";",$strfile);
+}
+my $db = dksdb->new();
+my $qall = ();
+my $cnt = 0;
+foreach my $sq (@allsql){
+  my $qres = ();
+  if ($sq eq ""){next;}
+  if (lc($sql) =~ /^\s*select/){
+    $qall->{$cnt} = $db->query($sq.";");
+  } else {
+    $qall->{$cnt} = $db->exec($sq.";");
+  }
+  $cnt++;
+}
+my $json = JSON::PP->new->utf8;
+$json->pretty(1);
+print $json->encode($qall);
+
+
diff --git a/pointeuse/dev/syncdev.sh b/pointeuse/dev/syncdev.sh
new file mode 100644 (file)
index 0000000..413fe1d
--- /dev/null
@@ -0,0 +1,93 @@
+#!/bin/bash
+ACTION=$1
+REMOTEFOLDER="/home/dks/bin/hourtrax"
+SSHUSER="dks"
+SSHPORT="22"
+SSHHOST="hourtrax"
+SYNCOS=`uname`
+CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+cd "../bin/hourtrax"
+echo "SYSTEM: "${SYNCOS}
+if [ "${SYNCOS}" == "Darwin" ]
+then
+  find . -type f -exec stat -f "%N|%z" {} \;  | grep -v ".DS_Store" > ../../dev/sourcefiles.local.txt
+else
+  find . -type f -printf "%p|%s\n" | sort  > ../../dev/sourcefiles.local.txt
+fi
+ssh -p ${SSHPORT} ${SSHUSER}@${SSHHOST} 'cd '${REMOTEFOLDER}' && find . -type f -printf "%p|%s\n" | sort' > ../../dev/sourcefiles.remote.txt
+
+CDATE=`date +"%F"`
+echo "To update:"
+UPDFILES=`diff -y -W 200 ${CALLDIR}/sourcefiles.local.txt ${CALLDIR}/sourcefiles.remote.txt | grep " |" | awk '{ print $1 }' | cut -d"|" -f 1 | grep -v ".htaccess" | grep -v ".git" | grep -v "/data/" | grep -v "/media/"`
+echo ${UPDFILES}
+echo ""
+echo "new files:"
+INSFILES=`diff -y -W 200 ${CALLDIR}/sourcefiles.local.txt ${CALLDIR}/sourcefiles.remote.txt | grep " <" | awk '{ print $1 }' | cut -d"|" -f 1 | grep -v ".htaccess" | grep -v ".git" | grep -v "/data/" | grep -v "/media/"`
+echo ${INSFILES}
+echo ""
+echo "only online or OLD files:"
+diff -y -W 200 ${CALLDIR}/sourcefiles.remote.txt ${CALLDIR}/sourcefiles.local.txt | grep " <" | awk '{ print $1 }'
+echo ""
+echo "----------------------------"
+echo ""
+#cd ${CALLDIR}
+
+# cd ..
+if [ -e ${CALLDIR}/update_${CDATE}.tar.gz ]
+then
+   rm ${CALLDIR}/update_${CDATE}.tar.gz
+fi
+# if [ -e ${CALLDIR}/download_${CDATE}.tar.gz ]
+# then
+#   rm ${CALLDIR}/download_${CDATE}.tar.gz
+# fi
+if [ "${UPDFILES}" != "" ] || [ "${INSFILES}" != "" ]
+then 
+  echo "TAR package:" 
+  tar czvf ${CALLDIR}/update_${CDATE}.tar.gz ${UPDFILES} ${INSFILES}
+  #tar tzvf ${CALLDIR}/update_${CDATE}.tar.gz
+fi
+if [ "${ACTION}" == "upload" ]
+then
+  echo "upload/Install files"
+  if [ -e ${CALLDIR}/update_${CDATE}.tar.gz ]
+  then
+    scp -P ${SSHPORT}  ${CALLDIR}/update_${CDATE}.tar.gz ${SSHUSER}@${SSHHOST}:${REMOTEFOLDER}
+    ssh -p ${SSHPORT} ${SSHUSER}@${SSHHOST} 'cd '${REMOTEFOLDER}' && tar xzvf update_'${CDATE}'.tar.gz && rm update_'${CDATE}'.tar.gz'
+  else
+   echo "NO Files to Install/upload!"
+  fi
+fi
+if [ -e ${CALLDIR}/update_${CDATE}.tar.gz ]
+then
+   rm ${CALLDIR}/update_${CDATE}.tar.gz
+fi
+
+# if [ "${ACTION}" == "remoteclean" ]
+# then
+#  echo "clean remote files"
+# #  if [ -e ${CALLDIR}/update_${CDATE}.tar.gz ]
+# #  then
+# #   scp -P ${SSHPORT}  ${CALLDIR}/update_${CDATE}.tar.gz ${SSHUSER}@${SSHHOST}:${REMOTEFOLDER}
+# #   ssh -p ${SSHPORT} ${SSHUSER}@${SSHHOST} 'cd '${REMOTEFOLDER}' && tar xzvf update_'${CDATE}'.tar.gz && rm update_'${CDATE}'.tar.gz'
+# #  else
+# #   echo "NO Files to Install/upload!"
+# #  fi
+# fi
+
+
+# if [ "${ACTION}" == "download" ]
+# then
+#  echo "download files"
+# #  if [ -e ${CALLDIR}/update_${CDATE}.tar.gz ]
+# #  then
+# #   scp -P ${SSHPORT}  ${CALLDIR}/update_${CDATE}.tar.gz ${SSHUSER}@${SSHHOST}:${REMOTEFOLDER}
+# #   ssh -p ${SSHPORT} ${SSHUSER}@${SSHHOST} 'cd '${REMOTEFOLDER}' && tar xzvf update_'${CDATE}'.tar.gz && rm update_'${CDATE}'.tar.gz'
+# #  else
+# #   echo "NO Files to Install/upload!"
+# #  fi
+# fi
+# if [ -e ${CALLDIR}/update_${CDATE}.tar.gz ]
+# then
+#   rm ${CALLDIR}/update_${CDATE}.tar.gz
+# fi
diff --git a/pointeuse/dev/sys/boot/config.txt b/pointeuse/dev/sys/boot/config.txt
new file mode 100644 (file)
index 0000000..da872e1
--- /dev/null
@@ -0,0 +1,57 @@
+# For more options and information see
+# http://rpf.io/configtxt
+# Some settings may impact device functionality. See link above for details
+
+# uncomment if you get no picture on HDMI for a default "safe" mode
+#hdmi_safe=1
+
+# uncomment this if your display has a black border of unused pixels visible
+# and your display can output without overscan
+#disable_overscan=1
+
+# uncomment the following to adjust overscan. Use positive numbers if console
+# goes off screen, and negative if there is too much border
+#overscan_left=16
+#overscan_right=16
+#overscan_top=16
+#overscan_bottom=16
+
+# uncomment to force a console size. By default it will be display's size minus
+# overscan.
+#framebuffer_width=1280
+#framebuffer_height=720
+
+# uncomment if hdmi display is not detected and composite is being output
+#hdmi_force_hotplug=1
+
+# uncomment to force a specific HDMI mode (this will force VGA)
+#hdmi_group=1
+#hdmi_mode=1
+
+# uncomment to force a HDMI mode rather than DVI. This can make audio work in
+# DMT (computer monitor) modes
+#hdmi_drive=2
+
+# uncomment to increase signal to HDMI, if you have interference, blanking, or
+# no display
+#config_hdmi_boost=4
+
+# uncomment for composite PAL
+#sdtv_mode=2
+
+#uncomment to overclock the arm. 700 MHz is the default.
+#arm_freq=800
+
+# Uncomment some or all of these to enable the optional hardware interfaces
+#dtparam=i2c_arm=on
+#dtparam=i2s=on
+#dtparam=spi=on
+
+# Uncomment this to enable the lirc-rpi module
+#dtoverlay=lirc-rpi
+
+# Additional overlays and parameters are documented /boot/overlays/README
+
+# Enable audio (loads snd_bcm2835)
+dtparam=audio=on
+lcd_rotate=2
diff --git a/pointeuse/dev/sys/etc/lightdm/lightdm.conf b/pointeuse/dev/sys/etc/lightdm/lightdm.conf
new file mode 100644 (file)
index 0000000..9e8aff7
--- /dev/null
@@ -0,0 +1,165 @@
+#
+# General configuration
+#
+# start-default-seat = True to always start one seat if none are defined in the configuration
+# greeter-user = User to run greeter as
+# minimum-display-number = Minimum display number to use for X servers
+# minimum-vt = First VT to run displays on
+# lock-memory = True to prevent memory from being paged to disk
+# user-authority-in-system-dir = True if session authority should be in the system location
+# guest-account-script = Script to be run to setup guest account
+# logind-check-graphical = True to on start seats that are marked as graphical by logind
+# log-directory = Directory to log information to
+# run-directory = Directory to put running state in
+# cache-directory = Directory to cache to
+# sessions-directory = Directory to find sessions
+# remote-sessions-directory = Directory to find remote sessions
+# greeters-directory = Directory to find greeters
+# backup-logs = True to move add a .old suffix to old log files when opening new ones
+#
+[LightDM]
+#start-default-seat=true
+#greeter-user=lightdm
+#minimum-display-number=0
+#minimum-vt=7
+#lock-memory=true
+#user-authority-in-system-dir=false
+#guest-account-script=guest-account
+#logind-check-graphical=false
+#log-directory=/var/log/lightdm
+#run-directory=/var/run/lightdm
+#cache-directory=/var/cache/lightdm
+#sessions-directory=/usr/share/lightdm/sessions:/usr/share/xsessions:/usr/share/wayland-sessions
+#remote-sessions-directory=/usr/share/lightdm/remote-sessions
+#greeters-directory=/usr/share/lightdm/greeters:/usr/share/xgreeters
+#backup-logs=true
+
+#
+# Seat configuration
+#
+# Seat configuration is matched against the seat name glob in the section, for example:
+# [Seat:*] matches all seats and is applied first.
+# [Seat:seat0] matches the seat named "seat0".
+# [Seat:seat-thin-client*] matches all seats that have names that start with "seat-thin-client".
+#
+# type = Seat type (xlocal, xremote, unity)
+# pam-service = PAM service to use for login
+# pam-autologin-service = PAM service to use for autologin
+# pam-greeter-service = PAM service to use for greeters
+# xserver-command = X server command to run (can also contain arguments e.g. X -special-option)
+# xmir-command = Xmir server command to run (can also contain arguments e.g. Xmir -special-option)
+# xserver-config = Config file to pass to X server
+# xserver-layout = Layout to pass to X server
+# xserver-allow-tcp = True if TCP/IP connections are allowed to this X server
+# xserver-share = True if the X server is shared for both greeter and session
+# xserver-hostname = Hostname of X server (only for type=xremote)
+# xserver-display-number = Display number of X server (only for type=xremote)
+# xdmcp-manager = XDMCP manager to connect to (implies xserver-allow-tcp=true)
+# xdmcp-port = XDMCP UDP/IP port to communicate on
+# xdmcp-key = Authentication key to use for XDM-AUTHENTICATION-1 (stored in keys.conf)
+# unity-compositor-command = Unity compositor command to run (can also contain arguments e.g. unity-system-compositor -special-option)
+# unity-compositor-timeout = Number of seconds to wait for compositor to start
+# greeter-session = Session to load for greeter
+# greeter-hide-users = True to hide the user list
+# greeter-allow-guest = True if the greeter should show a guest login option
+# greeter-show-manual-login = True if the greeter should offer a manual login option
+# greeter-show-remote-login = True if the greeter should offer a remote login option
+# user-session = Session to load for users
+# allow-user-switching = True if allowed to switch users
+# allow-guest = True if guest login is allowed
+# guest-session = Session to load for guests (overrides user-session)
+# session-wrapper = Wrapper script to run session with
+# greeter-wrapper = Wrapper script to run greeter with
+# guest-wrapper = Wrapper script to run guest sessions with
+# display-setup-script = Script to run when starting a greeter session (runs as root)
+# display-stopped-script = Script to run after stopping the display server (runs as root)
+# greeter-setup-script = Script to run when starting a greeter (runs as root)
+# session-setup-script = Script to run when starting a user session (runs as root)
+# session-cleanup-script = Script to run when quitting a user session (runs as root)
+# autologin-guest = True to log in as guest by default
+# autologin-user = User to log in with by default (overrides autologin-guest)
+# autologin-user-timeout = Number of seconds to wait before loading default user
+# autologin-session = Session to load for automatic login (overrides user-session)
+# autologin-in-background = True if autologin session should not be immediately activated
+# exit-on-failure = True if the daemon should exit if this seat fails
+#
+[Seat:*]
+#type=xlocal
+#pam-service=lightdm
+#pam-autologin-service=lightdm-autologin
+#pam-greeter-service=lightdm-greeter
+xserver-command=X -nocursor
+#xmir-command=Xmir
+#xserver-config=
+#xserver-layout=
+#xserver-allow-tcp=false
+#xserver-share=true
+#xserver-hostname=
+#xserver-display-number=
+#xdmcp-manager=
+#xdmcp-port=177
+#xdmcp-key=
+#unity-compositor-command=unity-system-compositor
+#unity-compositor-timeout=60
+greeter-session=pi-greeter
+greeter-hide-users=false
+#greeter-allow-guest=true
+#greeter-show-manual-login=false
+#greeter-show-remote-login=true
+#user-session=default
+#allow-user-switching=true
+#allow-guest=true
+#guest-session=
+#session-wrapper=lightdm-session
+#greeter-wrapper=
+#guest-wrapper=
+#display-setup-script=
+#display-stopped-script=
+#greeter-setup-script=
+#session-setup-script=
+#session-cleanup-script=
+#autologin-guest=false
+autologin-user=dks
+#autologin-user-timeout=0
+#autologin-in-background=false
+#autologin-session=
+#exit-on-failure=false
+
+#
+# XDMCP Server configuration
+#
+# enabled = True if XDMCP connections should be allowed
+# port = UDP/IP port to listen for connections on
+# listen-address = Host/address to listen for XDMCP connections (use all addresses if not present)
+# key = Authentication key to use for XDM-AUTHENTICATION-1 or blank to not use authentication (stored in keys.conf)
+# hostname = Hostname to report to XDMCP clients (defaults to system hostname if unset)
+#
+# The authentication key is a 56 bit DES key specified in hex as 0xnnnnnnnnnnnnnn.  Alternatively
+# it can be a word and the first 7 characters are used as the key.
+#
+[XDMCPServer]
+#enabled=false
+#port=177
+#listen-address=
+#key=
+#hostname=
+
+#
+# VNC Server configuration
+#
+# enabled = True if VNC connections should be allowed
+# command = Command to run Xvnc server with
+# port = TCP/IP port to listen for connections on
+# listen-address = Host/address to listen for VNC connections (use all addresses if not present)
+# width = Width of display to use
+# height = Height of display to use
+# depth = Color depth of display to use
+#
+[VNCServer]
+#enabled=false
+#command=Xvnc
+#port=5900
+#listen-address=
+#width=1024
+#height=768
+#depth=8
diff --git a/pointeuse/dev/sys/etc/modprobe.d/raspi-blacklist.conf b/pointeuse/dev/sys/etc/modprobe.d/raspi-blacklist.conf
new file mode 100644 (file)
index 0000000..6ba6d45
--- /dev/null
@@ -0,0 +1,4 @@
+#bt
+blacklist btbcm
+blacklist hci_uart 
+
diff --git a/pointeuse/dev/sys/etc/modules b/pointeuse/dev/sys/etc/modules
new file mode 100644 (file)
index 0000000..77aa6bb
--- /dev/null
@@ -0,0 +1,7 @@
+# /etc/modules: kernel modules to load at boot time.
+#
+# This file contains the names of kernel modules that should be loaded
+# at boot time, one per line. Lines beginning with "#" are ignored.
+
+i2c-dev
+dm_crypt
diff --git a/pointeuse/dev/sys/etc/openvpn/DKS-VPN-dks-hourtrax.conf b/pointeuse/dev/sys/etc/openvpn/DKS-VPN-dks-hourtrax.conf
new file mode 100644 (file)
index 0000000..8cd495f
--- /dev/null
@@ -0,0 +1,153 @@
+client
+dev tun
+proto udp
+remote aran.sysaki.com 1098
+remote aran.dks.lu 1098
+
+remote-random
+resolv-retry infinite
+nobind
+persist-key
+persist-tun
+mute-replay-warnings
+<ca>
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV
+BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD
+VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X
+8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt
+pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4
+4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H
+vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6
+gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1
+CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ
+f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV
+BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN
+BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h
+wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn
+AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s
+PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V
+8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw
+8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g==
+-----END CERTIFICATE-----
+</ca>
+<cert>
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            76:24:55:b4:57:ee:a0:c0:7b:e2:b5:a0:5c:3d:80:3d
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=aran
+        Validity
+            Not Before: Feb  6 07:54:45 2018 GMT
+            Not After : Feb  4 07:54:45 2028 GMT
+        Subject: CN=dks-hourtrax
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:b1:67:a4:6b:28:de:50:03:da:b0:48:19:5d:28:
+                    f4:b7:43:68:2c:6d:41:bc:b8:76:ff:b7:93:2f:93:
+                    f5:d1:fc:90:27:6b:1b:f2:84:0d:5e:dc:be:1f:77:
+                    77:bb:66:34:43:ac:7e:35:13:df:90:54:31:e9:67:
+                    44:76:a7:e1:70:61:10:bc:3d:84:0d:75:8d:2c:b3:
+                    06:d0:5a:c0:20:2f:0b:e2:15:5e:3f:38:61:ed:fa:
+                    d8:8e:03:cd:c9:07:94:25:eb:ab:59:4a:7e:92:10:
+                    5d:1a:ee:de:31:35:14:a4:52:f2:79:5c:11:6e:e8:
+                    ef:6c:57:69:a1:94:74:96:b7:e0:dc:ba:a5:b3:b4:
+                    33:65:79:b6:e7:de:aa:1a:d2:c3:9a:7f:6d:73:35:
+                    82:a4:fb:1e:13:2b:c7:96:5c:d9:d9:23:1b:6a:80:
+                    8d:17:22:69:09:88:85:03:be:6e:4b:11:d2:05:a9:
+                    51:7d:bf:a0:a4:e1:55:cb:27:10:4d:3b:fd:b9:cc:
+                    a5:0c:5a:de:6e:95:5c:e9:4e:53:70:df:8f:06:1b:
+                    56:67:46:91:08:39:f4:bb:74:ae:18:90:39:1b:b1:
+                    51:64:5c:bf:58:fb:18:90:0a:ec:ac:68:98:2d:54:
+                    cc:a1:1c:b4:9d:be:6d:ee:16:8a:ed:9a:56:2a:11:
+                    6e:37
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                FE:5D:3F:2A:41:EE:A5:C2:50:D0:9B:CF:89:EB:25:9C:61:3A:67:FF
+            X509v3 Authority Key Identifier: 
+                keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4
+                DirName:/CN=aran
+                serial:AE:B5:02:1A:71:02:93:94
+
+            X509v3 Extended Key Usage: 
+                TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature
+    Signature Algorithm: sha256WithRSAEncryption
+         49:3d:9c:8e:10:37:3e:ba:6d:ac:2f:6e:65:60:01:ed:01:70:
+         49:b5:16:af:29:3b:68:ca:85:58:9f:88:ff:14:5e:ae:03:0d:
+         65:99:9d:0e:6b:66:98:ad:f1:55:9c:75:f1:c7:fb:e6:61:68:
+         d6:69:03:48:4f:08:18:d5:ae:60:55:18:70:b4:ab:63:05:b5:
+         54:c7:f7:d0:8b:86:4b:34:3f:50:5c:6f:be:c1:5a:1b:22:cc:
+         24:59:76:e0:8c:c6:32:37:76:ab:bc:2d:63:27:be:2e:a6:5b:
+         86:90:1d:a5:4d:a6:9a:17:ed:57:76:f7:c7:65:f0:2b:29:84:
+         a8:f3:35:5c:66:4d:f2:38:4f:79:df:b4:c1:07:66:3f:87:d0:
+         13:fc:5b:3b:ea:da:db:ab:32:2e:72:f3:84:be:0d:e9:7e:c6:
+         16:22:a9:b7:28:f5:cf:89:51:11:51:9d:bb:ac:fc:1e:fb:85:
+         27:31:74:bd:6d:64:1b:d5:d6:d8:31:ff:ee:3f:9c:17:04:6c:
+         a3:3a:64:3b:22:88:78:75:3e:37:9d:b1:8b:a2:e8:7a:6f:0f:
+         af:9b:2c:a7:0a:dc:af:4a:f3:e5:3b:6e:97:c4:cf:2e:0e:64:
+         71:2e:c8:51:32:90:9a:53:95:be:a9:d1:bd:ea:cb:9b:0a:9d:
+         03:5b:04:85
+-----BEGIN CERTIFICATE-----
+MIIDQTCCAimgAwIBAgIQdiRVtFfuoMB74rWgXD2APTANBgkqhkiG9w0BAQsFADAP
+MQ0wCwYDVQQDDARhcmFuMB4XDTE4MDIwNjA3NTQ0NVoXDTI4MDIwNDA3NTQ0NVow
+FzEVMBMGA1UEAwwMZGtzLWhvdXJ0cmF4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAsWekayjeUAPasEgZXSj0t0NoLG1BvLh2/7eTL5P10fyQJ2sb8oQN
+Xty+H3d3u2Y0Q6x+NRPfkFQx6WdEdqfhcGEQvD2EDXWNLLMG0FrAIC8L4hVePzhh
+7frYjgPNyQeUJeurWUp+khBdGu7eMTUUpFLyeVwRbujvbFdpoZR0lrfg3Lqls7Qz
+ZXm2596qGtLDmn9tczWCpPseEyvHllzZ2SMbaoCNFyJpCYiFA75uSxHSBalRfb+g
+pOFVyycQTTv9ucylDFrebpVc6U5TcN+PBhtWZ0aRCDn0u3SuGJA5G7FRZFy/WPsY
+kArsrGiYLVTMoRy0nb5t7haK7ZpWKhFuNwIDAQABo4GQMIGNMAkGA1UdEwQCMAAw
+HQYDVR0OBBYEFP5dPypB7qXCUNCbz4nrJZxhOmf/MD8GA1UdIwQ4MDaAFKlRL5fj
+FcXVqjcd+ooH8ao6yX/UoROkETAPMQ0wCwYDVQQDDARhcmFuggkArrUCGnECk5Qw
+EwYDVR0lBAwwCgYIKwYBBQUHAwIwCwYDVR0PBAQDAgeAMA0GCSqGSIb3DQEBCwUA
+A4IBAQBJPZyOEDc+um2sL25lYAHtAXBJtRavKTtoyoVYn4j/FF6uAw1lmZ0Oa2aY
+rfFVnHXxx/vmYWjWaQNITwgY1a5gVRhwtKtjBbVUx/fQi4ZLND9QXG++wVobIswk
+WXbgjMYyN3arvC1jJ74upluGkB2lTaaaF+1XdvfHZfArKYSo8zVcZk3yOE9537TB
+B2Y/h9AT/Fs76trbqzIucvOEvg3pfsYWIqm3KPXPiVERUZ27rPwe+4UnMXS9bWQb
+1dbYMf/uP5wXBGyjOmQ7Ioh4dT43nbGLouh6bw+vmyynCtyvSvPlO26XxM8uDmRx
+LshRMpCaU5W+qdG96subCp0DWwSF
+-----END CERTIFICATE-----
+</cert>
+<key>
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCxZ6RrKN5QA9qw
+SBldKPS3Q2gsbUG8uHb/t5Mvk/XR/JAnaxvyhA1e3L4fd3e7ZjRDrH41E9+QVDHp
+Z0R2p+FwYRC8PYQNdY0sswbQWsAgLwviFV4/OGHt+tiOA83JB5Ql66tZSn6SEF0a
+7t4xNRSkUvJ5XBFu6O9sV2mhlHSWt+DcuqWztDNlebbn3qoa0sOaf21zNYKk+x4T
+K8eWXNnZIxtqgI0XImkJiIUDvm5LEdIFqVF9v6Ck4VXLJxBNO/25zKUMWt5ulVzp
+TlNw348GG1ZnRpEIOfS7dK4YkDkbsVFkXL9Y+xiQCuysaJgtVMyhHLSdvm3uFort
+mlYqEW43AgMBAAECggEAdIXkwtX3H4tIitzwe/Y4tl65/+RLd0+aKeBD9s4yehhv
+/tQlaSc/OP24iyaHKDm7Pm///ZDuGPiUSAAiQeWG969ptJqbL9P0RFXatePFqd38
+6iSq4M+B0zQeJTluYwptTnL6+w0pEXtaDCS1IJEC2+P3i6rjcHvjNsA7i3vdEFji
+Prze6oZ/UoJIGn97V+qePCmcY1raD5SUeHz/tgB1qY3zq9TdjS953pijJKlXgXVM
+pI/WhovKKYFmnbTVsY9WaMXvJz3MTrCosk9LIDdVOIei7m1GI+vQoGS9I3YhFogs
+8qNweEJLLF6wi3tXrur5ZYTIqBYHtrE88RsnfWDqAQKBgQDfdOVTrzoCGVcNPLTK
+nj7qpEfOgJS/1dSRgcH2MGKqPl+fPbqoCXEWKQicAbuVRWKKzvjHon+IvMn1ymgF
+u31uePVtF0adHJP389d5VeeeO7Tl3t50an+k+cPTpRudmpfpUaH+SE7BpXv8V9B+
+eES92r5zhr2xEuVewBIPoyr8twKBgQDLPc3jdsjZpIYheYsP1yDyuFgi8cau7mqw
+4v/KmcyuOAIHlrZB6V+XkNpL0U0gWOdrH4pgEdTKhtu/lycAKNS4AJkJLqE3dQQx
+c3LAdtlQ9NuHoY/SxP2wcZlFEeQsGUpj4azg/bibGh/RNsy5vi6EW8hfrTwvtvfq
+cruGN66agQKBgEwj7bxdGbv7XHEzPTtJPpD/V0RjBcx0FRFbkHbNt+Dgjf6Zrw9w
+4Cq34qod4QgU82Xu7lA/64rxITPyOw2w/CV3a9E3PCVuxnCXktVSUzDUkWg+T7iF
+TWcuf+6O9OD3+0lSOouFoehT9fJfDbj6TBoQ/hIpWFuM38EwWzce1xfzAoGAN9b1
+OGesa0+uoofYUzPSE53eaUtwQSO0IIFdsfZrq/orZJZd4OITp3re3zHUNOz4OBBk
+XlzH0BUZTxxiVMLjHuLbKRCsrqXxzvxfLM36iymbHzqeX1RMNywe5kEyJYOVUrfw
+XaiYDdUxpLOfr/C2qxrkhJT+EkX8+2cmaovl5wECgYEAmO7l3iVoEET9HrxuvinL
+OC600K0iIpNNAIWSywGa4V04WBXrGNMx3SAkxEdQblrSIE1dPxsJnq+clvSyqeo5
+PLi7mSs/XpE7HffjYMhtyzv+UKUCfvbRsjIDH2/Ka6WZZalBw4I0aKcWYvvqACly
+FX4rIxtOEaNSC9J07tCgN1A=
+-----END PRIVATE KEY-----
+</key>
+comp-lzo
+verb 3
+mute 20
+cipher AES-256-CBC
diff --git a/pointeuse/dev/sys/etc/ssh/sshd_config b/pointeuse/dev/sys/etc/ssh/sshd_config
new file mode 100644 (file)
index 0000000..1a565b6
--- /dev/null
@@ -0,0 +1,123 @@
+#      $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
+
+# This is the sshd server system-wide configuration file.  See
+# sshd_config(5) for more information.
+
+# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
+
+# The strategy used for options in the default sshd_config shipped with
+# OpenSSH is to specify options with their default value where
+# possible, but leave them commented.  Uncommented options override the
+# default value.
+
+Port 3587
+#AddressFamily any
+#ListenAddress 0.0.0.0
+#ListenAddress ::
+
+#HostKey /etc/ssh/ssh_host_rsa_key
+#HostKey /etc/ssh/ssh_host_ecdsa_key
+#HostKey /etc/ssh/ssh_host_ed25519_key
+
+# Ciphers and keying
+#RekeyLimit default none
+
+# Logging
+#SyslogFacility AUTH
+#LogLevel INFO
+
+# Authentication:
+
+#LoginGraceTime 2m
+#PermitRootLogin prohibit-password
+#StrictModes yes
+#MaxAuthTries 6
+#MaxSessions 10
+
+#PubkeyAuthentication yes
+
+# Expect .ssh/authorized_keys2 to be disregarded by default in future.
+#AuthorizedKeysFile    .ssh/authorized_keys .ssh/authorized_keys2
+
+#AuthorizedPrincipalsFile none
+
+#AuthorizedKeysCommand none
+#AuthorizedKeysCommandUser nobody
+
+# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
+#HostbasedAuthentication no
+# Change to yes if you don't trust ~/.ssh/known_hosts for
+# HostbasedAuthentication
+#IgnoreUserKnownHosts no
+# Don't read the user's ~/.rhosts and ~/.shosts files
+#IgnoreRhosts yes
+
+# To disable tunneled clear text passwords, change to no here!
+#PasswordAuthentication yes
+#PermitEmptyPasswords no
+
+# Change to yes to enable challenge-response passwords (beware issues with
+# some PAM modules and threads)
+ChallengeResponseAuthentication no
+
+# Kerberos options
+#KerberosAuthentication no
+#KerberosOrLocalPasswd yes
+#KerberosTicketCleanup yes
+#KerberosGetAFSToken no
+
+# GSSAPI options
+#GSSAPIAuthentication no
+#GSSAPICleanupCredentials yes
+#GSSAPIStrictAcceptorCheck yes
+#GSSAPIKeyExchange no
+
+# Set this to 'yes' to enable PAM authentication, account processing,
+# and session processing. If this is enabled, PAM authentication will
+# be allowed through the ChallengeResponseAuthentication and
+# PasswordAuthentication.  Depending on your PAM configuration,
+# PAM authentication via ChallengeResponseAuthentication may bypass
+# the setting of "PermitRootLogin without-password".
+# If you just want the PAM account and session checks to run without
+# PAM authentication, then enable this but set PasswordAuthentication
+# and ChallengeResponseAuthentication to 'no'.
+UsePAM yes
+
+#AllowAgentForwarding yes
+#AllowTcpForwarding yes
+#GatewayPorts no
+X11Forwarding yes
+#X11DisplayOffset 10
+#X11UseLocalhost yes
+#PermitTTY yes
+PrintMotd no
+#PrintLastLog yes
+#TCPKeepAlive yes
+#UseLogin no
+#UsePrivilegeSeparation sandbox
+#PermitUserEnvironment no
+#Compression delayed
+#ClientAliveInterval 0
+#ClientAliveCountMax 3
+#UseDNS no
+#PidFile /var/run/sshd.pid
+#MaxStartups 10:30:100
+#PermitTunnel no
+#ChrootDirectory none
+#VersionAddendum none
+
+# no default banner path
+#Banner none
+
+# Allow client to pass locale environment variables
+AcceptEnv LANG LC_*
+
+# override default of no subsystems
+Subsystem      sftp    /usr/lib/openssh/sftp-server
+
+# Example of overriding settings on a per-user basis
+#Match User anoncvs
+#      X11Forwarding no
+#      AllowTcpForwarding no
+#      PermitTTY no
+#      ForceCommand cvs server
diff --git a/pointeuse/dev/sys/etc/sudoers b/pointeuse/dev/sys/etc/sudoers
new file mode 100644 (file)
index 0000000..6b5b7e4
--- /dev/null
@@ -0,0 +1,27 @@
+#
+# This file MUST be edited with the 'visudo' command as root.
+#
+# Please consider adding local content in /etc/sudoers.d/ instead of
+# directly modifying this file.
+#
+# See the man page for details on how to write a sudoers file.
+#
+Defaults       env_reset
+Defaults       mail_badpass
+Defaults       secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+
+# Host alias specification
+
+# User alias specification
+
+# Cmnd alias specification
+
+# User privilege specification
+root   ALL=(ALL:ALL) ALL
+
+# Allow members of group sudo to execute any command
+%sudo  ALL=(ALL:ALL) NOPASSWD:ALL
+
+# See sudoers(5) for more information on "#include" directives:
+
+#includedir /etc/sudoers.d
diff --git a/pointeuse/dev/sys/etc/systemd/system/autologin@.service b/pointeuse/dev/sys/etc/systemd/system/autologin@.service
new file mode 100644 (file)
index 0000000..79276af
--- /dev/null
@@ -0,0 +1,47 @@
+#  This file is part of systemd.
+#
+#  systemd 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.
+
+[Unit]
+Description=Getty on %I
+Documentation=man:agetty(8) man:systemd-getty-generator(8)
+Documentation=http://0pointer.de/blog/projects/serial-console.html
+After=systemd-user-sessions.service plymouth-quit-wait.service
+After=rc-local.service
+
+# If additional gettys are spawned during boot then we should make
+# sure that this is synchronized before getty.target, even though
+# getty.target didn't actually pull it in.
+Before=getty.target
+IgnoreOnIsolate=yes
+
+# On systems without virtual consoles, don't start any getty. Note
+# that serial gettys are covered by serial-getty@.service, not this
+# unit.
+ConditionPathExists=/dev/tty0
+
+[Service]
+# the VT is cleared by TTYVTDisallocate
+ExecStart=-/sbin/agetty --autologin dks --noclear %I $TERM
+Type=idle
+Restart=always
+RestartSec=0
+UtmpIdentifier=%I
+TTYPath=/dev/%I
+TTYReset=yes
+TTYVHangup=yes
+TTYVTDisallocate=yes
+KillMode=process
+IgnoreSIGPIPE=no
+SendSIGHUP=yes
+
+# Unset locale for the console getty since the console has problems
+# displaying some internationalized messages.
+Environment=LANG= LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION=
+
+[Install]
+WantedBy=getty.target
+DefaultInstance=tty1
diff --git a/pointeuse/dev/sys/etc/xdg/lxsession/LXDE-pi/autostart b/pointeuse/dev/sys/etc/xdg/lxsession/LXDE-pi/autostart
new file mode 100644 (file)
index 0000000..ebef229
--- /dev/null
@@ -0,0 +1,6 @@
+#@lxpanel --profile LXDE-pi
+#@pcmanfm --desktop --profile LXDE-pi
+#@xscreensaver -no-splash
+#@point-rpi
+@/home/dks/bin/mountdrives.pl -m
+
diff --git a/pointeuse/dev/sys/etc/xdg/lxsession/LXDE-pi/sshpwd.sh b/pointeuse/dev/sys/etc/xdg/lxsession/LXDE-pi/sshpwd.sh
new file mode 100644 (file)
index 0000000..cd4e4f1
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+#export TEXTDOMAIN=pprompt
+
+#. gettext.sh
+
+#if [ -e /run/sshwarn ] ; then
+#      zenity --warning --no-wrap --text="$(gettext "SSH is enabled and the default password for the 'pi' user has not been changed.\nThis is a security risk - please login as the 'pi' user and run Raspberry Pi Configuration to set a new password.")"
+#fi
+
+
diff --git a/pointeuse/dev/sys/etc/xdg/lxsession/LXDE/autostart b/pointeuse/dev/sys/etc/xdg/lxsession/LXDE/autostart
new file mode 100644 (file)
index 0000000..0575b76
--- /dev/null
@@ -0,0 +1,11 @@
+
+#@lxpanel --profile LXDE
+#@pcmanfm --desktop --profile LXDE
+#screen saver and screen blank
+@xset s off
+@xset -dpms
+@xset s noblank
+#@xscreensaver -no-splash
+
+@xmodmap -e "pointer = 1 10 9 8 7 6 5 4 3 2"
+
diff --git a/pointeuse/dev/sys/etc/xdg/openbox/menu.xml b/pointeuse/dev/sys/etc/xdg/openbox/menu.xml
new file mode 100644 (file)
index 0000000..9f2f01f
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<openbox_menu xmlns="http://openbox.org/"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://openbox.org/
+                file:///usr/share/openbox/menu.xsd">
+
+<menu id="root-menu" label="Openbox 3">
+</menu>
+
+</openbox_menu>
diff --git a/pointeuse/dev/sys/usr/share/plymouth/themes/pix/splash.png b/pointeuse/dev/sys/usr/share/plymouth/themes/pix/splash.png
new file mode 100644 (file)
index 0000000..c392eae
Binary files /dev/null and b/pointeuse/dev/sys/usr/share/plymouth/themes/pix/splash.png differ
diff --git a/pointeuse/dev/sys/var/spool/cron/crontabs/dks b/pointeuse/dev/sys/var/spool/cron/crontabs/dks
new file mode 100644 (file)
index 0000000..4d78dc9
--- /dev/null
@@ -0,0 +1,28 @@
+# Edit this file to introduce tasks to be run by cron.
+# 
+# Each task to run has to be defined through a single line
+# indicating with different fields when the task will be run
+# and what command to run for the task
+# 
+# To define the time you can provide concrete values for
+# minute (m), hour (h), day of month (dom), month (mon),
+# and day of week (dow) or use '*' in these fields (for 'any').# 
+# Notice that tasks will be started based on the cron's system
+# daemon's notion of time and timezones.
+# 
+# Output of the crontab jobs (including errors) is sent through
+# email to the user the crontab file belongs to (unless redirected).
+# 
+# For example, you can run a backup of all your user accounts
+# at 5 a.m every week with:
+# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
+# 
+# For more information see the manual pages of crontab(5) and cron(8)
+# 
+# m h  dom mon dow   command
+HOME=/home/dks
+PATH=/home/dks/bin:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin
+MAILTO=
+SHELL=/bin/bash
+0 1 * * * /home/dks/bin/syncdb.pl
+
diff --git a/pointeuse/dev/tmp.sql b/pointeuse/dev/tmp.sql
new file mode 100644 (file)
index 0000000..25a5ad8
--- /dev/null
@@ -0,0 +1,37 @@
+INSERT INTO staff VALUES(11,'Jon','Morais',NULL,NULL,NULL,'2019-11-15 11:18:32',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(12,'Loic','Leparree',NULL,NULL,1,'2020-01-03 12:06:20',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(13,'Kevin','Trevisan',NULL,NULL,1,'2019-12-19 08:35:05',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(14,'Aguinaldo','Furtodo Jardim',NULL,NULL,1,'2020-02-06 12:58:05',NULL,NULL,NULL);
+INSERT INTO staff VALUES(15,'Humberto','Lima Texeira Neves',NULL,NULL,NULL,'2019-11-15 12:15:59',NULL,NULL,NULL);
+INSERT INTO staff VALUES(16,'Francelino','Medina',NULL,NULL,NULL,'2019-11-15 12:16:19',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(17,'Joselin','Salazar Acosta',NULL,NULL,1,'2020-01-03 12:06:30',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(18,'Carmelina','Santos',NULL,NULL,1,'2020-01-03 12:06:38',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(19,'Augustin','Soko Belinga',NULL,NULL,1,'2020-01-03 12:06:46',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(20,'Mathieu','Dubernet',NULL,NULL,1,'2020-05-29 08:37:54',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(21,'Svenja','Oberweis',NULL,NULL,1,'2019-12-19 08:33:57',NULL,NULL,NULL);
+INSERT INTO staff VALUES(22,'Marianne','Lambion',NULL,NULL,NULL,'2019-11-15 12:21:48',NULL,NULL,NULL);
+INSERT INTO staff VALUES(23,'EMRE','Pinarci',NULL,NULL,NULL,'2019-11-19 10:27:33',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(24,'Antonio','Palermo',NULL,NULL,1,'2020-01-03 12:06:56',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(25,'Fanny','Malaise',NULL,NULL,1,'2020-02-06 12:58:19',NULL,NULL,NULL);
+INSERT INTO staff VALUES(27,'Florian','Goffaux',NULL,NULL,NULL,'2019-12-20 14:43:50',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(28,'Hannibal','Verdier',NULL,NULL,1,'2020-07-22 12:26:25',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(29,'Pascal','Toulouse',NULL,NULL,1,'2020-07-22 12:26:34',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(30,'Kiran','Kiranjit',NULL,NULL,1,'2020-05-29 08:38:13',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(31,'Pascal','Toulouse',NULL,NULL,1,'2020-02-06 12:58:54',NULL,NULL,NULL);
+INSERT INTO staff VALUES(32,'Emel','Gokdag',NULL,NULL,NULL,'2020-07-03 09:41:44',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(33,'Fanny','Bourgogne',NULL,NULL,1,'2020-07-22 12:26:43',NULL,NULL,NULL);
+INSERT INTO staff VALUES(34,'Roni','Da Costa Lima',NULL,NULL,NULL,'2020-05-29 08:39:21',NULL,NULL,NULL);
+INSERT INTO staff VALUES(35,'Crisanto','Da Cruz Monteiro ',NULL,NULL,NULL,'2020-05-29 08:39:44',NULL,NULL,NULL);
+INSERT INTO staff VALUES(36,'Romain','Serrier',NULL,NULL,NULL,'2020-05-29 08:40:12',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(37,'Imed Eddine','annule Alaya',NULL,NULL,1,'2020-06-03 10:35:54',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(38,'Imed Eddine','Alaya',NULL,NULL,1,'2020-07-22 12:26:53',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(39,'Daniele','Laterza',NULL,NULL,1,'2020-07-03 09:41:32',NULL,NULL,NULL);
+INSERT INTO staff VALUES(40,'Daniele','Laterza',NULL,NULL,NULL,'2020-06-17 08:42:14',NULL,NULL,NULL);
+INSERT INTO staff VALUES(41,'Julie','Christophe',NULL,NULL,NULL,'2020-06-17 08:42:31',NULL,NULL,NULL);
+INSERT INTO staff VALUES(42,'Valentin','Perrot',NULL,NULL,NULL,'2020-07-09 07:23:33',NULL,NULL,NULL);
+--INSERT INTO staff VALUES(43,'Kevin','Wafflart',NULL,NULL,NULL,'2020-08-25 14:57:54',NULL,NULL,NULL);
+INSERT INTO staff VALUES(44,'Kelven','Frances Santos',NULL,NULL,NULL,'2020-07-22 12:27:40',NULL,NULL,NULL);
+INSERT INTO staff VALUES(45,'Ly Lï','OGE',NULL,NULL,NULL,'2020-08-07 14:07:15',NULL,NULL,NULL);
+INSERT INTO staff VALUES(46,'Kevin 2','Wafflart',NULL,NULL,NULL,'2020-08-25 14:58:35',NULL,NULL,NULL);
+INSERT INTO staff VALUES(47,'Glenn','Kaufmann',NULL,NULL,NULL,'2020-09-01 15:03:17',NULL,NULL,NULL);
+INSERT INTO staff VALUES(48,'Angélique','Vacossin',NULL,NULL,NULL,'2020-10-06 08:14:20',NULL,NULL,NULL);
diff --git a/pointeuse/dev/tools/fingerdelete.py b/pointeuse/dev/tools/fingerdelete.py
new file mode 100644 (file)
index 0000000..420a753
--- /dev/null
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+PyFingerprint
+Copyright (C) 2015 Bastian Raschke <bastian.raschke@posteo.de>
+All rights reserved.
+
+"""
+import sys
+from pyfingerprint2.pyfingerprint import PyFingerprint
+if len(sys.argv) == 1:
+  print ('Error: No position!');
+  exit(1)
+
+## Deletes a finger from sensor
+##
+
+
+## Tries to initialize the sensor
+try:
+    f = PyFingerprint('/dev/ttyUSB0', 57600, 0xFFFFFFFF, 0x00000000)
+
+    if ( f.verifyPassword() == False ):
+        raise ValueError('The given fingerprint sensor password is wrong!')
+
+except Exception as e:
+    print('The fingerprint sensor could not be initialized!')
+    print('Exception message: ' + str(e))
+    exit(1)
+
+## Gets some sensor information
+#print('Currently used templates: ' + str(f.getTemplateCount()) +'/'+ str(f.getStorageCapacity()))
+
+## Tries to delete the template of the finger
+try:
+    allpos = sys.argv[1].split(',')
+    for i in range(len(allpos)):
+      positionNumber = int(allpos[i])
+      if ( f.deleteTemplate(positionNumber) == True ):
+        True
+        print('Template ' + str(positionNumber) +' deleted!')
+
+except Exception as e:
+    print('Operation failed!')
+    print('Exception message: ' + str(e))
+    exit(1)
diff --git a/pointeuse/dev/tools/fingerenroll.py b/pointeuse/dev/tools/fingerenroll.py
new file mode 100644 (file)
index 0000000..a56eb0a
--- /dev/null
@@ -0,0 +1,90 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+PyFingerprint
+Copyright (C) 2015 Bastian Raschke <bastian.raschke@posteo.de>
+All rights reserved.
+
+"""
+import hashlib
+import time
+from pyfingerprint2.pyfingerprint import PyFingerprint
+
+
+## Enrolls new finger
+##
+
+## Tries to initialize the sensor
+try:
+    f = PyFingerprint('/dev/ttyUSB0', 57600, 0xFFFFFFFF, 0x00000000)
+
+    if ( f.verifyPassword() == False ):
+        raise ValueError('The given fingerprint sensor password is wrong!')
+
+except Exception as e:
+    print('The fingerprint sensor could not be initialized!')
+    print('Exception message: ' + str(e))
+    exit(1)
+
+## Gets some sensor information
+#print('Currently used templates: ' + str(f.getTemplateCount()) +'/'+ str(f.getStorageCapacity()))
+
+## Tries to enroll new finger
+try:
+    #print('Waiting for finger...')
+
+    ## Wait that finger is read
+    while ( f.readImage() == False ):
+        pass
+
+    ## Converts read image to characteristics and stores it in charbuffer 1
+    f.convertImage(0x01)
+
+    ## Checks if finger is already enrolled
+    result = f.searchTemplate()
+    positionNumber = result[0]
+
+    if ( positionNumber >= 0 ):
+        characterics = str(f.downloadCharacteristics(0x01)).encode('utf-8')
+
+        ## Hashes characteristics of template
+        #print('SHA-2 hash of template: ' + hashlib.sha256(characterics).hexdigest())
+        print('POS:' + str(positionNumber) + ';HASH:' + hashlib.sha256(characterics).hexdigest())
+        #print('Template already exists at position #' + str(positionNumber))
+        exit(0)
+
+    # print('Remove finger...')
+    # time.sleep(2)
+
+    # print('Waiting for same finger again...')
+
+    # ## Wait that finger is read again
+    # while ( f.readImage() == False ):
+    #     pass
+
+    # ## Converts read image to characteristics and stores it in charbuffer 2
+    # f.convertImage(0x02)
+
+    # ## Compares the charbuffers
+    # if ( f.compareCharacteristics() == 0 ):
+    #     raise Exception('Fingers do not match')
+
+    ## Creates a template
+    f.createTemplate()
+
+    ## Saves template at new position number
+    positionNumber = f.storeTemplate()
+    f.loadTemplate(positionNumber, 0x01)
+    ## Downloads the characteristics of template loaded in charbuffer 1
+    characterics = str(f.downloadCharacteristics(0x01)).encode('utf-8')
+    ## Hashes characteristics of template
+    #print('SHA-2 hash of template: ' + hashlib.sha256(characterics).hexdigest())
+    print('POS:' + str(positionNumber) + ';HASH:' + hashlib.sha256(characterics).hexdigest())
+    #print('Finger enrolled successfully!')
+    #print('New template position #' + str(positionNumber))
+
+except Exception as e:
+    print('Operation failed!')
+    print('Exception message: ' + str(e))
+    exit(1)
diff --git a/pointeuse/dev/tools/fingerindex.py b/pointeuse/dev/tools/fingerindex.py
new file mode 100644 (file)
index 0000000..997af54
--- /dev/null
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+PyFingerprint
+Copyright (C) 2015 Bastian Raschke <bastian.raschke@posteo.de>
+All rights reserved.
+
+"""
+
+from pyfingerprint2.pyfingerprint import PyFingerprint
+
+
+## Shows the template index table
+##
+
+## Tries to initialize the sensor
+try:
+    f = PyFingerprint('/dev/ttyUSB0', 57600, 0xFFFFFFFF, 0x00000000)
+
+    if ( f.verifyPassword() == False ):
+        raise ValueError('The given fingerprint sensor password is wrong!')
+
+except Exception as e:
+    print('The fingerprint sensor could not be initialized!')
+    print('Exception message: ' + str(e))
+    exit(1)
+
+## Gets some sensor information
+print('Currently used templates: ' + str(f.getTemplateCount()) +'/'+ str(f.getStorageCapacity()))
+
+## Tries to show a template index table page
+try:
+    page = input('Please enter the index page (0, 1, 2, 3) you want to see: ')
+    page = int(page)
+
+    tableIndex = f.getTemplateIndex(page)
+
+    for i in range(0, len(tableIndex)):
+        print('Template at position #' + str(i) + ' is used: ' + str(tableIndex[i]))
+
+except Exception as e:
+    print('Operation failed!')
+    print('Exception message: ' + str(e))
+    exit(1)
+
diff --git a/pointeuse/dev/tools/fingerledoff.py b/pointeuse/dev/tools/fingerledoff.py
new file mode 100644 (file)
index 0000000..1eec425
--- /dev/null
@@ -0,0 +1,27 @@
+"""
+PyFingerprint
+Copyright (C) 2015 Bastian Raschke <bastian.raschke@posteo.de>
+All rights reserved.
+
+"""
+
+import time
+from pyfingerprint2.pyfingerprint import PyFingerprint
+
+
+## Enrolls new finger
+##
+
+## Tries to initialize the sensor
+try:
+    f = PyFingerprint('/dev/ttyUSB0', 57600, 0xFFFFFFFF, 0x00000000)
+
+    if ( f.verifyPassword() == False ):
+        raise ValueError('The given fingerprint sensor password is wrong!')
+
+except Exception as e:
+    print('The fingerprint sensor could not be initialized!')
+    print('Exception message: ' + str(e))
+    exit(1)
+
+f.setLEDoff()
diff --git a/pointeuse/dev/tools/fingerledon.py b/pointeuse/dev/tools/fingerledon.py
new file mode 100644 (file)
index 0000000..8a08f7f
--- /dev/null
@@ -0,0 +1,27 @@
+"""
+PyFingerprint
+Copyright (C) 2015 Bastian Raschke <bastian.raschke@posteo.de>
+All rights reserved.
+
+"""
+
+import time
+from pyfingerprint2.pyfingerprint import PyFingerprint
+
+
+## Enrolls new finger
+##
+
+## Tries to initialize the sensor
+try:
+    f = PyFingerprint('/dev/ttyUSB0', 57600, 0xFFFFFFFF, 0x00000000)
+
+    if ( f.verifyPassword() == False ):
+        raise ValueError('The given fingerprint sensor password is wrong!')
+
+except Exception as e:
+    print('The fingerprint sensor could not be initialized!')
+    print('Exception message: ' + str(e))
+    exit(1)
+
+f.setLEDon()
diff --git a/pointeuse/dev/tools/fingersearch.py b/pointeuse/dev/tools/fingersearch.py
new file mode 100644 (file)
index 0000000..f8c73ab
--- /dev/null
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+PyFingerprint
+Copyright (C) 2015 Bastian Raschke <bastian.raschke@posteo.de>
+All rights reserved.
+
+"""
+
+import hashlib
+from pyfingerprint2.pyfingerprint import PyFingerprint
+
+
+## Search for a finger
+##
+
+## Tries to initialize the sensor
+try:
+    f = PyFingerprint('/dev/ttyUSB0', 57600, 0xFFFFFFFF, 0x00000000)
+
+    if ( f.verifyPassword() == False ):
+        raise ValueError('The given fingerprint sensor password is wrong!')
+
+except Exception as e:
+    print('The fingerprint sensor could not be initialized!')
+    print('Exception message: ' + str(e))
+    exit(1)
+
+## Gets some sensor information
+#print('Currently used templates: ' + str(f.getTemplateCount()) +'/'+ str(f.getStorageCapacity()))
+
+## Tries to search the finger and calculate hash
+try:
+    #print('Waiting for finger...')
+
+    ## Wait that finger is read
+    while ( f.readImage() == False ):
+        pass
+
+    ## Converts read image to characteristics and stores it in charbuffer 1
+    f.convertImage(0x01)
+
+    ## Searchs template
+    result = f.searchTemplate()
+
+    positionNumber = result[0]
+    accuracyScore = result[1]
+
+    if ( positionNumber == -1 ):
+        print('No match found!')
+        exit(0)
+    else:
+        #print('Found template at position #' + str(positionNumber))
+        #print('The accuracy score is: ' + str(accuracyScore))
+        ## Loads the found template to charbuffer 1
+        f.loadTemplate(positionNumber, 0x01)
+
+        ## Downloads the characteristics of template loaded in charbuffer 1
+        characterics = str(f.downloadCharacteristics(0x01)).encode('utf-8')
+
+        ## Hashes characteristics of template
+        #print('SHA-2 hash of template: ' + hashlib.sha256(characterics).hexdigest())
+        print('POS:' + str(positionNumber) + ';HASH:' + hashlib.sha256(characterics).hexdigest())
+
+except Exception as e:
+    print('Operation failed!')
+    print('Exception message: ' + str(e))
+    exit(1)
diff --git a/pointeuse/dev/tools/fpunload.sh b/pointeuse/dev/tools/fpunload.sh
new file mode 100644 (file)
index 0000000..fed21ab
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/bash
+CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+echo ${CALLDIR}
+CGISCR=`ps ax | grep fingerprint | grep -v "grep" | awk '{ print $1 }' | xargs`
+echo "CGI PID:"${CGISCR}
+if [ "${CGISCR}" != "" ]
+then
+        echo "KILL PID:"${CGISCR}
+        sudo kill -15 ${CGISCR}
+fi
+
+FPSCR=`ps ax | grep finger | grep -v "grep" | awk '{ print $1 }' | xargs`
+echo "FS PID:"${FPSCR}
+if [ "${FPSCR}" != "" ]
+then
+        echo "FS PID:"${FPSCR}
+        sudo kill -15 ${FPSCR}
+fi
+python ${CALLDIR}"/fingerledoff.py"
diff --git a/pointeuse/dev/tools/pyfingerprint2/__init__.py b/pointeuse/dev/tools/pyfingerprint2/__init__.py
new file mode 100644 (file)
index 0000000..4882220
--- /dev/null
@@ -0,0 +1,11 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+PyFingerprint
+Copyright (C) 2015 Bastian Raschke <bastian.raschke@posteo.de>
+All rights reserved.
+
+"""
+
+__version__ = '1.5'
diff --git a/pointeuse/dev/tools/pyfingerprint2/pyfingerprint.orig.py b/pointeuse/dev/tools/pyfingerprint2/pyfingerprint.orig.py
new file mode 100644 (file)
index 0000000..af2f663
--- /dev/null
@@ -0,0 +1,1326 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+PyFingerprint
+Copyright (C) 2015 Bastian Raschke <bastian.raschke@posteo.de>
+All rights reserved.
+
+"""
+
+import os
+import serial
+from PIL import Image
+import struct
+
+
+## Baotou start byte
+FINGERPRINT_STARTCODE = 0xEF01
+
+## Packet identification
+##
+
+FINGERPRINT_COMMANDPACKET = 0x01
+
+FINGERPRINT_ACKPACKET = 0x07
+FINGERPRINT_DATAPACKET = 0x02
+FINGERPRINT_ENDDATAPACKET = 0x08
+
+## Instruction codes
+##
+
+FINGERPRINT_VERIFYPASSWORD = 0x13
+FINGERPRINT_SETPASSWORD = 0x12
+FINGERPRINT_SETADDRESS = 0x15
+FINGERPRINT_SETSYSTEMPARAMETER = 0x0E
+FINGERPRINT_GETSYSTEMPARAMETERS = 0x0F
+FINGERPRINT_TEMPLATEINDEX = 0x1F
+FINGERPRINT_TEMPLATECOUNT = 0x1D
+
+FINGERPRINT_READIMAGE = 0x01
+
+## Note: The documentation mean upload to host computer.
+FINGERPRINT_DOWNLOADIMAGE = 0x0A
+
+FINGERPRINT_CONVERTIMAGE = 0x02
+
+FINGERPRINT_CREATETEMPLATE = 0x05
+FINGERPRINT_STORETEMPLATE = 0x06
+FINGERPRINT_SEARCHTEMPLATE = 0x04
+FINGERPRINT_LOADTEMPLATE = 0x07
+FINGERPRINT_DELETETEMPLATE = 0x0C
+
+FINGERPRINT_CLEARDATABASE = 0x0D
+FINGERPRINT_GENERATERANDOMNUMBER = 0x14
+FINGERPRINT_COMPARECHARACTERISTICS = 0x03
+
+## Note: The documentation mean download from host computer.
+FINGERPRINT_UPLOADCHARACTERISTICS = 0x09
+
+## Note: The documentation mean upload to host computer.
+FINGERPRINT_DOWNLOADCHARACTERISTICS = 0x08
+
+## Packet reply confirmations
+##
+
+FINGERPRINT_OK = 0x00
+FINGERPRINT_ERROR_COMMUNICATION = 0x01
+
+FINGERPRINT_ERROR_WRONGPASSWORD = 0x13
+
+FINGERPRINT_ERROR_INVALIDREGISTER = 0x1A
+
+FINGERPRINT_ERROR_NOFINGER = 0x02
+FINGERPRINT_ERROR_READIMAGE = 0x03
+
+FINGERPRINT_ERROR_MESSYIMAGE = 0x06
+FINGERPRINT_ERROR_FEWFEATUREPOINTS = 0x07
+FINGERPRINT_ERROR_INVALIDIMAGE = 0x15
+
+FINGERPRINT_ERROR_CHARACTERISTICSMISMATCH = 0x0A
+
+FINGERPRINT_ERROR_INVALIDPOSITION = 0x0B
+FINGERPRINT_ERROR_FLASH = 0x18
+
+FINGERPRINT_ERROR_NOTEMPLATEFOUND = 0x09
+
+FINGERPRINT_ERROR_LOADTEMPLATE = 0x0C
+
+FINGERPRINT_ERROR_DELETETEMPLATE = 0x10
+
+FINGERPRINT_ERROR_CLEARDATABASE = 0x11
+
+FINGERPRINT_ERROR_NOTMATCHING = 0x08
+
+FINGERPRINT_ERROR_DOWNLOADIMAGE = 0x0F
+FINGERPRINT_ERROR_DOWNLOADCHARACTERISTICS = 0x0D
+
+## Unknown error codes
+##
+
+FINGERPRINT_ADDRCODE = 0x20
+FINGERPRINT_PASSVERIFY = 0x21
+
+FINGERPRINT_PACKETRESPONSEFAIL = 0x0E
+
+FINGERPRINT_ERROR_TIMEOUT = 0xFF
+FINGERPRINT_ERROR_BADPACKET = 0xFE
+
+
+class PyFingerprint(object):
+    """
+    A python written library for the ZhianTec ZFM-20 fingerprint sensor.
+
+    @attribute integer(4 bytes) __address
+    Address to connect to sensor.
+
+    @attribute integer(4 bytes) __password
+    Password to connect to sensor.
+
+    @attribute Serial __serial
+    UART serial connection via PySerial.
+    """
+    __address = None
+    __password = None
+    __serial = None
+
+    def __init__(self, port = '/dev/ttyUSB0', baudRate = 57600, address = 0xFFFFFFFF, password = 0x00000000):
+        """
+        Constructor
+
+        @param string port
+        @param integer baudRate
+        @param integer(4 bytes) address
+        @param integer(4 bytes) password
+        """
+
+        if ( os.path.exists(port) == False ):
+            raise ValueError('The fingerprint sensor port "' + port + '" was not found!')
+
+        if ( baudRate < 9600 or baudRate > 115200 or baudRate % 9600 != 0 ):
+            raise ValueError('The given baudrate is invalid!')
+
+        if ( address < 0x00000000 or address > 0xFFFFFFFF ):
+            raise ValueError('The given address is invalid!')
+
+        if ( password < 0x00000000 or password > 0xFFFFFFFF ):
+            raise ValueError('The given password is invalid!')
+
+        self.__address = address
+        self.__password = password
+
+        ## Initialize PySerial connection
+        self.__serial = serial.Serial(port = port, baudrate = baudRate, bytesize = serial.EIGHTBITS, timeout = 2)
+
+        if ( self.__serial.isOpen() == True ):
+            self.__serial.close()
+
+        self.__serial.open()
+
+    def __del__(self):
+        """
+        Destructor
+
+        """
+
+        ## Close connection if still established
+        if ( self.__serial is not None and self.__serial.isOpen() == True ):
+            self.__serial.close()
+
+    def __rightShift(self, n, x):
+        """
+        Shift a byte.
+
+        @param integer n
+        @param integer x
+        @return integer
+        """
+
+        return (n >> x & 0xFF)
+
+    def __leftShift(self, n, x):
+        """
+        Shift a byte.
+
+        @param integer n
+        @param integer x
+        @return integer
+        """
+
+        return (n << x)
+
+    def __bitAtPosition(self, n, p):
+        """
+        Get the bit of n at position p.
+
+        @param integer n
+        @param integer p
+        @return integer
+        """
+
+        ## A bitshift 2 ^ p
+        twoP = 1 << p
+
+        ## Binary AND composition (on both positions must be a 1)
+        ## This can only happen at position p
+        result = n & twoP
+        return int(result > 0)
+
+    def __byteToString(self, byte):
+        """
+        Converts a byte to string.
+
+        @param byte byte
+        @return string
+        """
+
+        return struct.pack('@B', byte)
+
+    def __stringToByte(self, string):
+        """
+        Convert one "string" byte (like '0xFF') to real integer byte (0xFF).
+
+        @param string string
+        @return byte
+        """
+
+        return struct.unpack('@B', string)[0]
+
+    def __writePacket(self, packetType, packetPayload):
+        """
+        Send a packet to fingerprint sensor.
+
+        @param integer(1 byte) packetType
+        @param tuple packetPayload
+
+        @return void
+        """
+
+        ## Write header (one byte at once)
+        self.__serial.write(self.__byteToString(self.__rightShift(FINGERPRINT_STARTCODE, 8)))
+        self.__serial.write(self.__byteToString(self.__rightShift(FINGERPRINT_STARTCODE, 0)))
+
+        self.__serial.write(self.__byteToString(self.__rightShift(self.__address, 24)))
+        self.__serial.write(self.__byteToString(self.__rightShift(self.__address, 16)))
+        self.__serial.write(self.__byteToString(self.__rightShift(self.__address, 8)))
+        self.__serial.write(self.__byteToString(self.__rightShift(self.__address, 0)))
+
+        self.__serial.write(self.__byteToString(packetType))
+
+        ## The packet length = package payload (n bytes) + checksum (2 bytes)
+        packetLength = len(packetPayload) + 2
+
+        self.__serial.write(self.__byteToString(self.__rightShift(packetLength, 8)))
+        self.__serial.write(self.__byteToString(self.__rightShift(packetLength, 0)))
+
+        ## The packet checksum = packet type (1 byte) + packet length (2 bytes) + payload (n bytes)
+        packetChecksum = packetType + self.__rightShift(packetLength, 8) + self.__rightShift(packetLength, 0)
+
+        ## Write payload
+        for i in range(0, len(packetPayload)):
+            self.__serial.write(self.__byteToString(packetPayload[i]))
+            packetChecksum += packetPayload[i]
+
+        ## Write checksum (2 bytes)
+        self.__serial.write(self.__byteToString(self.__rightShift(packetChecksum, 8)))
+        self.__serial.write(self.__byteToString(self.__rightShift(packetChecksum, 0)))
+
+    def __readPacket(self):
+        """
+        Receive a packet from fingerprint sensor.
+
+        Return a tuple that contain the following information:
+        0: integer(1 byte) The packet type.
+        1: integer(n bytes) The packet payload.
+
+        @return tuple
+        """
+
+        receivedPacketData = []
+        i = 0
+
+        while ( True ):
+
+            ## Read one byte
+            receivedFragment = self.__serial.read()
+
+            if ( len(receivedFragment) != 0 ):
+                receivedFragment = self.__stringToByte(receivedFragment)
+                ## print 'Received packet fragment = ' + hex(receivedFragment)
+
+            ## Insert byte if packet seems valid
+            receivedPacketData.insert(i, receivedFragment)
+            i += 1
+
+            ## Packet could be complete (the minimal packet size is 12 bytes)
+            if ( i >= 12 ):
+
+                ## Check the packet header
+                if ( receivedPacketData[0] != self.__rightShift(FINGERPRINT_STARTCODE, 8) or receivedPacketData[1] != self.__rightShift(FINGERPRINT_STARTCODE, 0) ):
+                    raise Exception('The received packet do not begin with a valid header!')
+
+                ## Calculate packet payload length (combine the 2 length bytes)
+                packetPayloadLength = self.__leftShift(receivedPacketData[7], 8)
+                packetPayloadLength = packetPayloadLength | self.__leftShift(receivedPacketData[8], 0)
+
+                ## Check if the packet is still fully received
+                ## Condition: index counter < packet payload length + packet frame
+                if ( i < packetPayloadLength + 9 ):
+                    continue
+
+                ## At this point the packet should be fully received
+
+                packetType = receivedPacketData[6]
+
+                ## Calculate checksum:
+                ## checksum = packet type (1 byte) + packet length (2 bytes) + packet payload (n bytes)
+                packetChecksum = packetType + receivedPacketData[7] + receivedPacketData[8]
+
+                packetPayload = []
+
+                ## Collect package payload (ignore the last 2 checksum bytes)
+                for j in range(9, 9 + packetPayloadLength - 2):
+                    packetPayload.append(receivedPacketData[j])
+                    packetChecksum += receivedPacketData[j]
+
+                ## Calculate full checksum of the 2 separate checksum bytes
+                receivedChecksum = self.__leftShift(receivedPacketData[i - 2], 8)
+                receivedChecksum = receivedChecksum | self.__leftShift(receivedPacketData[i - 1], 0)
+
+                if ( receivedChecksum != packetChecksum ):
+                    raise Exception('The received packet is corrupted (the checksum is wrong)!')
+
+                return (packetType, packetPayload)
+
+    def verifyPassword(self):
+        """
+        Verify password of the fingerprint sensor.
+
+        @return boolean
+        """
+
+        packetPayload = (
+            FINGERPRINT_VERIFYPASSWORD,
+            self.__rightShift(self.__password, 24),
+            self.__rightShift(self.__password, 16),
+            self.__rightShift(self.__password, 8),
+            self.__rightShift(self.__password, 0),
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Sensor password is correct
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ADDRCODE ):
+            raise Exception('The address is wrong')
+
+        ## DEBUG: Sensor password is wrong
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_WRONGPASSWORD ):
+            return False
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def setPassword(self, newPassword):
+        """
+        Set the password of the sensor.
+
+        @param integer(4 bytes) newPassword
+        @return boolean
+        """
+
+        ## Validate the password (maximum 4 bytes)
+        if ( newPassword < 0x00000000 or newPassword > 0xFFFFFFFF ):
+            raise ValueError('The given password is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_SETPASSWORD,
+            self.__rightShift(newPassword, 24),
+            self.__rightShift(newPassword, 16),
+            self.__rightShift(newPassword, 8),
+            self.__rightShift(newPassword, 0),
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Password set was successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            self.__password = newPassword
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def setAddress(self, newAddress):
+        """
+        Set the module address of the sensor.
+
+        @param integer(4 bytes) newAddress
+        @return boolean
+        """
+
+        ## Validate the address (maximum 4 bytes)
+        if ( newAddress < 0x00000000 or newAddress > 0xFFFFFFFF ):
+            raise ValueError('The given address is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_SETADDRESS,
+            self.__rightShift(newAddress, 24),
+            self.__rightShift(newAddress, 16),
+            self.__rightShift(newAddress, 8),
+            self.__rightShift(newAddress, 0),
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Address set was successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            self.__address = newAddress
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def setSystemParameter(self, parameterNumber, parameterValue):
+        """
+        Set a system parameter of the sensor.
+
+        @param integer(1 byte) parameterNumber
+        @param integer(1 byte) parameterValue
+        @return boolean
+        """
+
+        ## Validate the baudrate parameter
+        if ( parameterNumber == 4 ):
+
+            if ( parameterValue < 1 or parameterValue > 12 ):
+                raise ValueError('The given baudrate parameter is invalid!')
+
+        ## Validate the security level parameter
+        elif ( parameterNumber == 5 ):
+
+            if ( parameterValue < 1 or parameterValue > 5 ):
+                raise ValueError('The given security level parameter is invalid!')
+
+        ## Validate the package length parameter
+        elif ( parameterNumber == 6 ):
+
+            if ( parameterValue < 0 or parameterValue > 3 ):
+                raise ValueError('The given package length parameter is invalid!')
+
+        ## The parameter number is not valid
+        else:
+            raise ValueError('The given parameter number is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_SETSYSTEMPARAMETER,
+            parameterNumber,
+            parameterValue,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Parameter set was successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_INVALIDREGISTER ):
+            raise Exception('Invalid register number')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def getSystemParameters(self):
+        """
+        Get all available system information of the sensor.
+
+        Return a tuple that contain the following information:
+        0: integer(2 bytes) The status register.
+        1: integer(2 bytes) The system id.
+        2: integer(2 bytes) The storage capacity.
+        3: integer(2 bytes) The security level.
+        4: integer(4 bytes) The sensor address.
+        5: integer(2 bytes) The packet length.
+        6: integer(2 bytes) The baudrate.
+
+        @return tuple
+        """
+
+        packetPayload = (
+            FINGERPRINT_GETSYSTEMPARAMETERS,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Read successfully
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+
+            statusRegister     = self.__leftShift(receivedPacketPayload[1], 8) | self.__leftShift(receivedPacketPayload[2], 0)
+            systemID           = self.__leftShift(receivedPacketPayload[3], 8) | self.__leftShift(receivedPacketPayload[4], 0)
+            storageCapacity    = self.__leftShift(receivedPacketPayload[5], 8) | self.__leftShift(receivedPacketPayload[6], 0)
+            securityLevel      = self.__leftShift(receivedPacketPayload[7], 8) | self.__leftShift(receivedPacketPayload[8], 0)
+            deviceAddress      = ((receivedPacketPayload[9] << 8 | receivedPacketPayload[10]) << 8 | receivedPacketPayload[11]) << 8 | receivedPacketPayload[12] ## TODO
+            packetLength       = self.__leftShift(receivedPacketPayload[13], 8) | self.__leftShift(receivedPacketPayload[14], 0)
+            baudRate           = self.__leftShift(receivedPacketPayload[15], 8) | self.__leftShift(receivedPacketPayload[16], 0)
+
+            return (statusRegister, systemID, storageCapacity, securityLevel, deviceAddress, packetLength, baudRate)
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def getTemplateIndex(self, page):
+        """
+        Get a list of the template positions with usage indicator.
+
+        @param integer(1 byte) page
+        @return list
+        """
+
+        if ( page < 0 or page > 3 ):
+            raise ValueError('The given index page is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_TEMPLATEINDEX,
+            page,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Read index table successfully
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+
+            templateIndex = []
+
+            ## Contain the table page bytes (skip the first status byte)
+            pageElements = receivedPacketPayload[1:]
+
+            for pageElement in pageElements:
+                ## Test every bit (bit = template position is used indicator) of a table page element
+                for p in range(0, 7 + 1):
+                    positionIsUsed = (self.__bitAtPosition(pageElement, p) == 1)
+                    templateIndex.append(positionIsUsed)
+
+            return templateIndex
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def getTemplateCount(self):
+        """
+        Get the number of stored templates.
+
+        @return integer(2 bytes)
+        """
+
+        packetPayload = (
+            FINGERPRINT_TEMPLATECOUNT,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Read successfully
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            templateCount = self.__leftShift(receivedPacketPayload[1], 8)
+            templateCount = templateCount | self.__leftShift(receivedPacketPayload[2], 0)
+            return templateCount
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def readImage(self):
+        """
+        Read the image of a finger and stores it in ImageBuffer.
+
+        @return boolean
+        """
+
+        packetPayload = (
+            FINGERPRINT_READIMAGE,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Image read successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        ## DEBUG: No finger found
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_NOFINGER ):
+            return False
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_READIMAGE ):
+            raise Exception('Could not read image')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    ## TODO:
+    ## Implementation of uploadImage()
+
+    def downloadImage(self, imageDestination):
+        """
+        Download the image of a finger to host computer.
+
+        @param string imageDestination
+        @return void
+        """
+
+        destinationDirectory = os.path.dirname(imageDestination)
+
+        if ( os.access(destinationDirectory, os.W_OK) == False ):
+            raise ValueError('The given destination directory "' + destinationDirectory + '" is not writable!')
+
+        packetPayload = (
+            FINGERPRINT_DOWNLOADIMAGE,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+
+        ## Get first reply packet
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: The sensor will sent follow-up packets
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            pass
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_DOWNLOADIMAGE ):
+            raise Exception('Could not download image')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+        ## Initialize image library
+        resultImage = Image.new('L', (256, 288), 'white')
+        pixels = resultImage.load()
+
+        ## Y coordinate of current pixel
+        line = 0
+
+        ## Get follow-up data packets until the last data packet is received
+        while ( receivedPacketType != FINGERPRINT_ENDDATAPACKET ):
+
+            receivedPacket = self.__readPacket()
+
+            receivedPacketType = receivedPacket[0]
+            receivedPacketPayload = receivedPacket[1]
+
+            if ( receivedPacketType != FINGERPRINT_DATAPACKET and receivedPacketType != FINGERPRINT_ENDDATAPACKET ):
+                raise Exception('The received packet is no data packet!')
+
+            ## X coordinate of current pixel
+            x = 0
+
+            for i in range(0, len(receivedPacketPayload)):
+
+                ## Thanks to Danylo Esterman <soundcracker@gmail.com> for the "multiple with 17" improvement:
+
+                ## Draw left 4 Bits one byte of package
+                pixels[x, line] = (receivedPacketPayload[i] >> 4) * 17
+                x = x + 1
+
+                ## Draw right 4 Bits one byte of package
+                pixels[x, line] = (receivedPacketPayload[i] & 0b00001111) * 17
+                x = x + 1
+
+            line = line + 1
+
+        resultImage.save(imageDestination)
+
+    def convertImage(self, charBufferNumber = 0x01):
+        """
+        Convert the image in ImageBuffer to finger characteristics and store in CharBuffer1 or CharBuffer2.
+
+        @param integer(1 byte) charBufferNumber
+        @return boolean
+        """
+
+        if ( charBufferNumber != 0x01 and charBufferNumber != 0x02 ):
+            raise ValueError('The given charbuffer number is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_CONVERTIMAGE,
+            charBufferNumber,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Image converted
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_MESSYIMAGE ):
+            raise Exception('The image is too messy')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_FEWFEATUREPOINTS ):
+            raise Exception('The image contains too few feature points')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_INVALIDIMAGE ):
+            raise Exception('The image is invalid')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def createTemplate(self):
+        """
+        Combine the characteristics which are stored in CharBuffer1 and CharBuffer2 to a template.
+        The created template will be stored again in CharBuffer1 and CharBuffer2 as the same.
+
+        @return boolean
+        """
+
+        packetPayload = (
+            FINGERPRINT_CREATETEMPLATE,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Template created successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        ## DEBUG: The characteristics not matching
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_CHARACTERISTICSMISMATCH ):
+            return False
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def storeTemplate(self, positionNumber = -1, charBufferNumber = 0x01):
+        """
+        Save a template from the specified CharBuffer to the given position number.
+
+        @param integer(2 bytes) positionNumber
+        @param integer(1 byte) charBufferNumber
+        @return integer
+        """
+
+        ## Find a free index
+        if ( positionNumber == -1 ):
+            for page in range(0, 4):
+                ## Free index found?
+                if ( positionNumber >= 0 ):
+                    break
+
+                templateIndex = self.getTemplateIndex(page)
+
+                for i in range(0, len(templateIndex)):
+                    ## Index not used?
+                    if ( templateIndex[i] == False ):
+                        positionNumber = (len(templateIndex) * page) + i
+                        break
+
+        if ( positionNumber < 0x0000 or positionNumber >= self.getStorageCapacity() ):
+            raise ValueError('The given position number is invalid!')
+
+        if ( charBufferNumber != 0x01 and charBufferNumber != 0x02 ):
+            raise ValueError('The given charbuffer number is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_STORETEMPLATE,
+            charBufferNumber,
+            self.__rightShift(positionNumber, 8),
+            self.__rightShift(positionNumber, 0),
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Template stored successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return positionNumber
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_INVALIDPOSITION ):
+            raise Exception('Could not store template in that position')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_FLASH ):
+            raise Exception('Error writing to flash')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def searchTemplate(self):
+        """
+        Search the finger characteristics in CharBuffer in database.
+
+        Return a tuple that contain the following information:
+        0: integer(2 bytes) The position number of found template.
+        1: integer(2 bytes) The accuracy score of found template.
+
+        @return tuple
+        """
+
+        ## CharBuffer1 and CharBuffer2 are the same in this case
+        charBufferNumber = 0x01
+
+        ## Begin search at index 0
+        positionStart = 0x0000
+        templatesCount = self.getStorageCapacity()
+
+        packetPayload = (
+            FINGERPRINT_SEARCHTEMPLATE,
+            charBufferNumber,
+            self.__rightShift(positionStart, 8),
+            self.__rightShift(positionStart, 0),
+            self.__rightShift(templatesCount, 8),
+            self.__rightShift(templatesCount, 0),
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Found template
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+
+            positionNumber = self.__leftShift(receivedPacketPayload[1], 8)
+            positionNumber = positionNumber | self.__leftShift(receivedPacketPayload[2], 0)
+
+            accuracyScore = self.__leftShift(receivedPacketPayload[3], 8)
+            accuracyScore = accuracyScore | self.__leftShift(receivedPacketPayload[4], 0)
+
+            return (positionNumber, accuracyScore)
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        ## DEBUG: Did not found a matching template
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_NOTEMPLATEFOUND ):
+            return (-1, -1)
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def loadTemplate(self, positionNumber, charBufferNumber = 0x01):
+        """
+        Load an existing template specified by position number to specified CharBuffer.
+
+        @param integer(2 bytes) positionNumber
+        @param integer(1 byte) charBufferNumber
+        @return boolean
+        """
+
+        if ( positionNumber < 0x0000 or positionNumber >= self.getStorageCapacity() ):
+            raise ValueError('The given position number is invalid!')
+
+        if ( charBufferNumber != 0x01 and charBufferNumber != 0x02 ):
+            raise ValueError('The given charbuffer number is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_LOADTEMPLATE,
+            charBufferNumber,
+            self.__rightShift(positionNumber, 8),
+            self.__rightShift(positionNumber, 0),
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Template loaded successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_LOADTEMPLATE ):
+            raise Exception('The template could not be read')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_INVALIDPOSITION ):
+            raise Exception('Could not load template from that position')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def deleteTemplate(self, positionNumber, count = 1):
+        """
+        Delete templates from fingerprint database. Per default one.
+
+        @param integer(2 bytes) positionNumber
+        @param integer(2 bytes) count
+        @return boolean
+        """
+
+        capacity = self.getStorageCapacity()
+
+        if ( positionNumber < 0x0000 or positionNumber >= capacity ):
+            raise ValueError('The given position number is invalid!')
+
+        if ( count < 0x0000 or count > capacity - positionNumber ):
+            raise ValueError('The given count is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_DELETETEMPLATE,
+            self.__rightShift(positionNumber, 8),
+            self.__rightShift(positionNumber, 0),
+            self.__rightShift(count, 8),
+            self.__rightShift(count, 0),
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Template deleted successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_INVALIDPOSITION ):
+            raise Exception('Invalid position')
+
+        ## DEBUG: Could not delete template
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_DELETETEMPLATE ):
+            return False
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def clearDatabase(self):
+        """
+        Clear the complete template database.
+
+        @return boolean
+        """
+
+        packetPayload = (
+            FINGERPRINT_CLEARDATABASE,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Database cleared successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        ## DEBUG: Could not clear database
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_CLEARDATABASE ):
+            return False
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def compareCharacteristics(self):
+        """
+        Compare the finger characteristics of CharBuffer1 with CharBuffer2 and return the accuracy score.
+
+        @return integer(2 bytes)
+        """
+
+        packetPayload = (
+            FINGERPRINT_COMPARECHARACTERISTICS,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Comparison successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            accuracyScore = self.__leftShift(receivedPacketPayload[1], 8)
+            accuracyScore = accuracyScore | self.__leftShift(receivedPacketPayload[2], 0)
+            return accuracyScore
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        ## DEBUG: The characteristics do not matching
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_NOTMATCHING ):
+            return 0
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def uploadCharacteristics(self, charBufferNumber = 0x01, characteristicsData = [0]):
+        """
+        Upload finger characteristics to CharBuffer1 or CharBuffer2.
+
+        @author: David Gilson <davgilson@live.fr>
+
+        @param integer(1 byte) charBufferNumber
+        @param integer(list) characteristicsData
+
+        @return boolean
+        Return true if everything is right.
+        """
+
+        if ( charBufferNumber != 0x01 and charBufferNumber != 0x02 ):
+            raise ValueError('The given charbuffer number is invalid!')
+
+        if ( characteristicsData == [0] ):
+            raise ValueError('The characteristics data is required!')
+
+        maxPacketSize = self.getMaxPacketSize()
+
+        ## Upload command
+
+        packetPayload = (
+            FINGERPRINT_UPLOADCHARACTERISTICS,
+            charBufferNumber
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+
+        ## Get first reply packet
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: The sensor will sent follow-up packets
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            pass
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_PACKETRESPONSEFAIL ):
+            raise Exception('Could not upload characteristics')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+        ## Upload data packets
+        packetNbr = len(characteristicsData) / maxPacketSize
+
+        if ( packetNbr <= 1 ):
+            self.__writePacket(FINGERPRINT_ENDDATAPACKET, characteristicsData)
+        else:
+            i = 1
+            while ( i < packetNbr ):
+                lfrom = (i-1) * maxPacketSize
+                lto = lfrom + maxPacketSize
+                self.__writePacket(FINGERPRINT_DATAPACKET, characteristicsData[lfrom:lto])
+                i += 1
+
+            lfrom = (i-1) * maxPacketSize
+            lto = lfrom + maxPacketSize
+            self.__writePacket(FINGERPRINT_ENDDATAPACKET, characteristicsData[lfrom:lto])
+
+        ## Verify uploaded characteristics
+        characterics = self.downloadCharacteristics(charBufferNumber)
+        return (characterics == characteristicsData)
+
+    def getMaxPacketSize(self):
+        """
+        Get the maximum allowed size of packet by sensor.
+
+        @author: David Gilson <davgilson@live.fr>
+
+        @return int
+        Return the max size. Default 32 bytes.
+        """
+
+        packetMaxSizeType = self.getSystemParameters()[5]
+
+        if (packetMaxSizeType == 1):
+            return 64
+        elif (packetMaxSizeType == 2):
+            return 128
+        elif (packetMaxSizeType == 3):
+            return 256
+        else:
+            return 32
+
+    def getStorageCapacity(self):
+        """
+        Get the sensor storage capacity.
+
+        @return int
+        The storage capacity.
+        """
+
+        return self.getSystemParameters()[2]
+
+    def generateRandomNumber(self):
+        """
+        Generate a random 32-bit decimal number.
+
+        @author: Philipp Meisberger <team@pm-codeworks.de>
+
+        @return int
+        The generated random number
+        """
+        packetPayload = (
+            FINGERPRINT_GENERATERANDOMNUMBER,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            pass
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+        number = 0
+        number = number | self.__leftShift(receivedPacketPayload[1], 24)
+        number = number | self.__leftShift(receivedPacketPayload[2], 16)
+        number = number | self.__leftShift(receivedPacketPayload[3], 8)
+        number = number | self.__leftShift(receivedPacketPayload[4], 0)
+        return number
+
+    def downloadCharacteristics(self, charBufferNumber = 0x01):
+        """
+        Download the finger characteristics of CharBuffer1 or CharBuffer2.
+
+        @param integer(1 byte) charBufferNumber
+
+        @return list
+        Return a list that contains 512 integer(1 byte) elements of the characteristic.
+        """
+
+        if ( charBufferNumber != 0x01 and charBufferNumber != 0x02 ):
+            raise ValueError('The given charbuffer number is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_DOWNLOADCHARACTERISTICS,
+            charBufferNumber,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+
+        ## Get first reply packet
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: The sensor will sent follow-up packets
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            pass
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_DOWNLOADCHARACTERISTICS ):
+            raise Exception('Could not download characteristics')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+        completePayload = []
+
+        ## Get follow-up data packets until the last data packet is received
+        while ( receivedPacketType != FINGERPRINT_ENDDATAPACKET ):
+
+            receivedPacket = self.__readPacket()
+
+            receivedPacketType = receivedPacket[0]
+            receivedPacketPayload = receivedPacket[1]
+
+            if ( receivedPacketType != FINGERPRINT_DATAPACKET and receivedPacketType != FINGERPRINT_ENDDATAPACKET ):
+                raise Exception('The received packet is no data packet!')
+
+            for i in range(0, len(receivedPacketPayload)):
+                completePayload.append(receivedPacketPayload[i])
+
+        return completePayload
diff --git a/pointeuse/dev/tools/pyfingerprint2/pyfingerprint.py b/pointeuse/dev/tools/pyfingerprint2/pyfingerprint.py
new file mode 100644 (file)
index 0000000..f5e8d19
--- /dev/null
@@ -0,0 +1,1358 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+PyFingerprint
+Copyright (C) 2015 Bastian Raschke <bastian.raschke@posteo.de>
+All rights reserved.
+
+"""
+
+import os
+import serial
+from PIL import Image
+import struct
+
+
+## Baotou start byte
+FINGERPRINT_STARTCODE = 0xEF01
+
+## Packet identification
+##
+
+FINGERPRINT_COMMANDPACKET = 0x01
+
+FINGERPRINT_ACKPACKET = 0x07
+FINGERPRINT_DATAPACKET = 0x02
+FINGERPRINT_ENDDATAPACKET = 0x08
+
+## Instruction codes
+##
+
+FINGERPRINT_VERIFYPASSWORD = 0x13
+FINGERPRINT_SETPASSWORD = 0x12
+FINGERPRINT_SETADDRESS = 0x15
+FINGERPRINT_SETSYSTEMPARAMETER = 0x0E
+FINGERPRINT_GETSYSTEMPARAMETERS = 0x0F
+FINGERPRINT_TEMPLATEINDEX = 0x1F
+FINGERPRINT_TEMPLATECOUNT = 0x1D
+
+FINGERPRINT_READIMAGE = 0x01
+
+## Note: The documentation mean upload to host computer.
+FINGERPRINT_DOWNLOADIMAGE = 0x0A
+
+FINGERPRINT_CONVERTIMAGE = 0x02
+
+FINGERPRINT_CREATETEMPLATE = 0x05
+FINGERPRINT_STORETEMPLATE = 0x06
+FINGERPRINT_SEARCHTEMPLATE = 0x04
+FINGERPRINT_LOADTEMPLATE = 0x07
+FINGERPRINT_DELETETEMPLATE = 0x0C
+
+FINGERPRINT_CLEARDATABASE = 0x0D
+FINGERPRINT_GENERATERANDOMNUMBER = 0x14
+FINGERPRINT_COMPARECHARACTERISTICS = 0x03
+
+## Note: The documentation mean download from host computer.
+FINGERPRINT_UPLOADCHARACTERISTICS = 0x09
+
+## Note: The documentation mean upload to host computer.
+FINGERPRINT_DOWNLOADCHARACTERISTICS = 0x08
+## LED 
+FINGERPRINT_LEDON = 0x50
+FINGERPRINT_LEDOFF = 0x51
+## Packet reply confirmations
+##
+
+FINGERPRINT_OK = 0x00
+FINGERPRINT_ERROR_COMMUNICATION = 0x01
+
+FINGERPRINT_ERROR_WRONGPASSWORD = 0x13
+
+FINGERPRINT_ERROR_INVALIDREGISTER = 0x1A
+
+FINGERPRINT_ERROR_NOFINGER = 0x02
+FINGERPRINT_ERROR_READIMAGE = 0x03
+
+FINGERPRINT_ERROR_MESSYIMAGE = 0x06
+FINGERPRINT_ERROR_FEWFEATUREPOINTS = 0x07
+FINGERPRINT_ERROR_INVALIDIMAGE = 0x15
+
+FINGERPRINT_ERROR_CHARACTERISTICSMISMATCH = 0x0A
+
+FINGERPRINT_ERROR_INVALIDPOSITION = 0x0B
+FINGERPRINT_ERROR_FLASH = 0x18
+
+FINGERPRINT_ERROR_NOTEMPLATEFOUND = 0x09
+
+FINGERPRINT_ERROR_LOADTEMPLATE = 0x0C
+
+FINGERPRINT_ERROR_DELETETEMPLATE = 0x10
+
+FINGERPRINT_ERROR_CLEARDATABASE = 0x11
+
+FINGERPRINT_ERROR_NOTMATCHING = 0x08
+
+FINGERPRINT_ERROR_DOWNLOADIMAGE = 0x0F
+FINGERPRINT_ERROR_DOWNLOADCHARACTERISTICS = 0x0D
+
+## Unknown error codes
+##
+
+FINGERPRINT_ADDRCODE = 0x20
+FINGERPRINT_PASSVERIFY = 0x21
+
+FINGERPRINT_PACKETRESPONSEFAIL = 0x0E
+
+FINGERPRINT_ERROR_TIMEOUT = 0xFF
+FINGERPRINT_ERROR_BADPACKET = 0xFE
+
+
+class PyFingerprint(object):
+    """
+    A python written library for the ZhianTec ZFM-20 fingerprint sensor.
+
+    @attribute integer(4 bytes) __address
+    Address to connect to sensor.
+
+    @attribute integer(4 bytes) __password
+    Password to connect to sensor.
+
+    @attribute Serial __serial
+    UART serial connection via PySerial.
+    """
+    __address = None
+    __password = None
+    __serial = None
+
+    def __init__(self, port = '/dev/ttyUSB0', baudRate = 57600, address = 0xFFFFFFFF, password = 0x00000000):
+        """
+        Constructor
+
+        @param string port
+        @param integer baudRate
+        @param integer(4 bytes) address
+        @param integer(4 bytes) password
+        """
+
+        if ( os.path.exists(port) == False ):
+            raise ValueError('The fingerprint sensor port "' + port + '" was not found!')
+
+        if ( baudRate < 9600 or baudRate > 115200 or baudRate % 9600 != 0 ):
+            raise ValueError('The given baudrate is invalid!')
+
+        if ( address < 0x00000000 or address > 0xFFFFFFFF ):
+            raise ValueError('The given address is invalid!')
+
+        if ( password < 0x00000000 or password > 0xFFFFFFFF ):
+            raise ValueError('The given password is invalid!')
+
+        self.__address = address
+        self.__password = password
+
+        ## Initialize PySerial connection
+        self.__serial = serial.Serial(port = port, baudrate = baudRate, bytesize = serial.EIGHTBITS, timeout = 2)
+
+        if ( self.__serial.isOpen() == True ):
+            self.__serial.close()
+
+        self.__serial.open()
+
+    def __del__(self):
+        """
+        Destructor
+
+        """
+
+        ## Close connection if still established
+        if ( self.__serial is not None and self.__serial.isOpen() == True ):
+            self.__serial.close()
+
+    def __rightShift(self, n, x):
+        """
+        Shift a byte.
+
+        @param integer n
+        @param integer x
+        @return integer
+        """
+
+        return (n >> x & 0xFF)
+
+    def __leftShift(self, n, x):
+        """
+        Shift a byte.
+
+        @param integer n
+        @param integer x
+        @return integer
+        """
+
+        return (n << x)
+
+    def __bitAtPosition(self, n, p):
+        """
+        Get the bit of n at position p.
+
+        @param integer n
+        @param integer p
+        @return integer
+        """
+
+        ## A bitshift 2 ^ p
+        twoP = 1 << p
+
+        ## Binary AND composition (on both positions must be a 1)
+        ## This can only happen at position p
+        result = n & twoP
+        return int(result > 0)
+
+    def __byteToString(self, byte):
+        """
+        Converts a byte to string.
+
+        @param byte byte
+        @return string
+        """
+
+        return struct.pack('@B', byte)
+
+    def __stringToByte(self, string):
+        """
+        Convert one "string" byte (like '0xFF') to real integer byte (0xFF).
+
+        @param string string
+        @return byte
+        """
+
+        return struct.unpack('@B', string)[0]
+
+    def __writePacket(self, packetType, packetPayload):
+        """
+        Send a packet to fingerprint sensor.
+
+        @param integer(1 byte) packetType
+        @param tuple packetPayload
+
+        @return void
+        """
+
+        ## Write header (one byte at once)
+        self.__serial.write(self.__byteToString(self.__rightShift(FINGERPRINT_STARTCODE, 8)))
+        self.__serial.write(self.__byteToString(self.__rightShift(FINGERPRINT_STARTCODE, 0)))
+
+        self.__serial.write(self.__byteToString(self.__rightShift(self.__address, 24)))
+        self.__serial.write(self.__byteToString(self.__rightShift(self.__address, 16)))
+        self.__serial.write(self.__byteToString(self.__rightShift(self.__address, 8)))
+        self.__serial.write(self.__byteToString(self.__rightShift(self.__address, 0)))
+
+        self.__serial.write(self.__byteToString(packetType))
+
+        ## The packet length = package payload (n bytes) + checksum (2 bytes)
+        packetLength = len(packetPayload) + 2
+
+        self.__serial.write(self.__byteToString(self.__rightShift(packetLength, 8)))
+        self.__serial.write(self.__byteToString(self.__rightShift(packetLength, 0)))
+
+        ## The packet checksum = packet type (1 byte) + packet length (2 bytes) + payload (n bytes)
+        packetChecksum = packetType + self.__rightShift(packetLength, 8) + self.__rightShift(packetLength, 0)
+
+        ## Write payload
+        for i in range(0, len(packetPayload)):
+            self.__serial.write(self.__byteToString(packetPayload[i]))
+            packetChecksum += packetPayload[i]
+
+        ## Write checksum (2 bytes)
+        self.__serial.write(self.__byteToString(self.__rightShift(packetChecksum, 8)))
+        self.__serial.write(self.__byteToString(self.__rightShift(packetChecksum, 0)))
+
+    def __readPacket(self):
+        """
+        Receive a packet from fingerprint sensor.
+
+        Return a tuple that contain the following information:
+        0: integer(1 byte) The packet type.
+        1: integer(n bytes) The packet payload.
+
+        @return tuple
+        """
+
+        receivedPacketData = []
+        i = 0
+
+        while ( True ):
+
+            ## Read one byte
+            receivedFragment = self.__serial.read()
+
+            if ( len(receivedFragment) != 0 ):
+                receivedFragment = self.__stringToByte(receivedFragment)
+                ## print 'Received packet fragment = ' + hex(receivedFragment)
+
+            ## Insert byte if packet seems valid
+            receivedPacketData.insert(i, receivedFragment)
+            i += 1
+
+            ## Packet could be complete (the minimal packet size is 12 bytes)
+            if ( i >= 12 ):
+
+                ## Check the packet header
+                if ( receivedPacketData[0] != self.__rightShift(FINGERPRINT_STARTCODE, 8) or receivedPacketData[1] != self.__rightShift(FINGERPRINT_STARTCODE, 0) ):
+                    raise Exception('The received packet do not begin with a valid header!')
+
+                ## Calculate packet payload length (combine the 2 length bytes)
+                packetPayloadLength = self.__leftShift(receivedPacketData[7], 8)
+                packetPayloadLength = packetPayloadLength | self.__leftShift(receivedPacketData[8], 0)
+
+                ## Check if the packet is still fully received
+                ## Condition: index counter < packet payload length + packet frame
+                if ( i < packetPayloadLength + 9 ):
+                    continue
+
+                ## At this point the packet should be fully received
+
+                packetType = receivedPacketData[6]
+
+                ## Calculate checksum:
+                ## checksum = packet type (1 byte) + packet length (2 bytes) + packet payload (n bytes)
+                packetChecksum = packetType + receivedPacketData[7] + receivedPacketData[8]
+
+                packetPayload = []
+
+                ## Collect package payload (ignore the last 2 checksum bytes)
+                for j in range(9, 9 + packetPayloadLength - 2):
+                    packetPayload.append(receivedPacketData[j])
+                    packetChecksum += receivedPacketData[j]
+
+                ## Calculate full checksum of the 2 separate checksum bytes
+                receivedChecksum = self.__leftShift(receivedPacketData[i - 2], 8)
+                receivedChecksum = receivedChecksum | self.__leftShift(receivedPacketData[i - 1], 0)
+
+                if ( receivedChecksum != packetChecksum ):
+                    raise Exception('The received packet is corrupted (the checksum is wrong)!')
+
+                return (packetType, packetPayload)
+
+    def verifyPassword(self):
+        """
+        Verify password of the fingerprint sensor.
+
+        @return boolean
+        """
+
+        packetPayload = (
+            FINGERPRINT_VERIFYPASSWORD,
+            self.__rightShift(self.__password, 24),
+            self.__rightShift(self.__password, 16),
+            self.__rightShift(self.__password, 8),
+            self.__rightShift(self.__password, 0),
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Sensor password is correct
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ADDRCODE ):
+            raise Exception('The address is wrong')
+
+        ## DEBUG: Sensor password is wrong
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_WRONGPASSWORD ):
+            return False
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def setPassword(self, newPassword):
+        """
+        Set the password of the sensor.
+
+        @param integer(4 bytes) newPassword
+        @return boolean
+        """
+
+        ## Validate the password (maximum 4 bytes)
+        if ( newPassword < 0x00000000 or newPassword > 0xFFFFFFFF ):
+            raise ValueError('The given password is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_SETPASSWORD,
+            self.__rightShift(newPassword, 24),
+            self.__rightShift(newPassword, 16),
+            self.__rightShift(newPassword, 8),
+            self.__rightShift(newPassword, 0),
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Password set was successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            self.__password = newPassword
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def setAddress(self, newAddress):
+        """
+        Set the module address of the sensor.
+
+        @param integer(4 bytes) newAddress
+        @return boolean
+        """
+
+        ## Validate the address (maximum 4 bytes)
+        if ( newAddress < 0x00000000 or newAddress > 0xFFFFFFFF ):
+            raise ValueError('The given address is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_SETADDRESS,
+            self.__rightShift(newAddress, 24),
+            self.__rightShift(newAddress, 16),
+            self.__rightShift(newAddress, 8),
+            self.__rightShift(newAddress, 0),
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Address set was successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            self.__address = newAddress
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def setSystemParameter(self, parameterNumber, parameterValue):
+        """
+        Set a system parameter of the sensor.
+
+        @param integer(1 byte) parameterNumber
+        @param integer(1 byte) parameterValue
+        @return boolean
+        """
+
+        ## Validate the baudrate parameter
+        if ( parameterNumber == 4 ):
+
+            if ( parameterValue < 1 or parameterValue > 12 ):
+                raise ValueError('The given baudrate parameter is invalid!')
+
+        ## Validate the security level parameter
+        elif ( parameterNumber == 5 ):
+
+            if ( parameterValue < 1 or parameterValue > 5 ):
+                raise ValueError('The given security level parameter is invalid!')
+
+        ## Validate the package length parameter
+        elif ( parameterNumber == 6 ):
+
+            if ( parameterValue < 0 or parameterValue > 3 ):
+                raise ValueError('The given package length parameter is invalid!')
+
+        ## The parameter number is not valid
+        else:
+            raise ValueError('The given parameter number is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_SETSYSTEMPARAMETER,
+            parameterNumber,
+            parameterValue,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Parameter set was successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_INVALIDREGISTER ):
+            raise Exception('Invalid register number')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+    
+      
+    def getSystemParameters(self):
+        """
+        Get all available system information of the sensor.
+
+        Return a tuple that contain the following information:
+        0: integer(2 bytes) The status register.
+        1: integer(2 bytes) The system id.
+        2: integer(2 bytes) The storage capacity.
+        3: integer(2 bytes) The security level.
+        4: integer(4 bytes) The sensor address.
+        5: integer(2 bytes) The packet length.
+        6: integer(2 bytes) The baudrate.
+
+        @return tuple
+        """
+
+        packetPayload = (
+            FINGERPRINT_GETSYSTEMPARAMETERS,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Read successfully
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+
+            statusRegister     = self.__leftShift(receivedPacketPayload[1], 8) | self.__leftShift(receivedPacketPayload[2], 0)
+            systemID           = self.__leftShift(receivedPacketPayload[3], 8) | self.__leftShift(receivedPacketPayload[4], 0)
+            storageCapacity    = self.__leftShift(receivedPacketPayload[5], 8) | self.__leftShift(receivedPacketPayload[6], 0)
+            securityLevel      = self.__leftShift(receivedPacketPayload[7], 8) | self.__leftShift(receivedPacketPayload[8], 0)
+            deviceAddress      = ((receivedPacketPayload[9] << 8 | receivedPacketPayload[10]) << 8 | receivedPacketPayload[11]) << 8 | receivedPacketPayload[12] ## TODO
+            packetLength       = self.__leftShift(receivedPacketPayload[13], 8) | self.__leftShift(receivedPacketPayload[14], 0)
+            baudRate           = self.__leftShift(receivedPacketPayload[15], 8) | self.__leftShift(receivedPacketPayload[16], 0)
+
+            return (statusRegister, systemID, storageCapacity, securityLevel, deviceAddress, packetLength, baudRate)
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def getTemplateIndex(self, page):
+        """
+        Get a list of the template positions with usage indicator.
+
+        @param integer(1 byte) page
+        @return list
+        """
+
+        if ( page < 0 or page > 3 ):
+            raise ValueError('The given index page is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_TEMPLATEINDEX,
+            page,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Read index table successfully
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+
+            templateIndex = []
+
+            ## Contain the table page bytes (skip the first status byte)
+            pageElements = receivedPacketPayload[1:]
+
+            for pageElement in pageElements:
+                ## Test every bit (bit = template position is used indicator) of a table page element
+                for p in range(0, 7 + 1):
+                    positionIsUsed = (self.__bitAtPosition(pageElement, p) == 1)
+                    templateIndex.append(positionIsUsed)
+
+            return templateIndex
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def getTemplateCount(self):
+        """
+        Get the number of stored templates.
+
+        @return integer(2 bytes)
+        """
+
+        packetPayload = (
+            FINGERPRINT_TEMPLATECOUNT,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Read successfully
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            templateCount = self.__leftShift(receivedPacketPayload[1], 8)
+            templateCount = templateCount | self.__leftShift(receivedPacketPayload[2], 0)
+            return templateCount
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def readImage(self):
+        """
+        Read the image of a finger and stores it in ImageBuffer.
+
+        @return boolean
+        """
+
+        packetPayload = (
+            FINGERPRINT_READIMAGE,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Image read successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        ## DEBUG: No finger found
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_NOFINGER ):
+            return False
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_READIMAGE ):
+            raise Exception('Could not read image')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    ## TODO:
+    ## Implementation of uploadImage()
+    def setLEDoff(self):
+        packetPayload = (
+            FINGERPRINT_LEDOFF,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+
+        ## Get first reply packet
+        receivedPacket = self.__readPacket()
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+    def setLEDon(self):
+        packetPayload = (
+            FINGERPRINT_LEDON,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+
+        ## Get first reply packet
+        receivedPacket = self.__readPacket()
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+    def downloadImage(self, imageDestination):
+        """
+        Download the image of a finger to host computer.
+
+        @param string imageDestination
+        @return void
+        """
+
+        destinationDirectory = os.path.dirname(imageDestination)
+
+        if ( os.access(destinationDirectory, os.W_OK) == False ):
+            raise ValueError('The given destination directory "' + destinationDirectory + '" is not writable!')
+
+        packetPayload = (
+            FINGERPRINT_DOWNLOADIMAGE,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+
+        ## Get first reply packet
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: The sensor will sent follow-up packets
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            pass
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_DOWNLOADIMAGE ):
+            raise Exception('Could not download image')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+        ## Initialize image library
+        resultImage = Image.new('L', (256, 288), 'white')
+        pixels = resultImage.load()
+
+        ## Y coordinate of current pixel
+        line = 0
+
+        ## Get follow-up data packets until the last data packet is received
+        while ( receivedPacketType != FINGERPRINT_ENDDATAPACKET ):
+
+            receivedPacket = self.__readPacket()
+
+            receivedPacketType = receivedPacket[0]
+            receivedPacketPayload = receivedPacket[1]
+
+            if ( receivedPacketType != FINGERPRINT_DATAPACKET and receivedPacketType != FINGERPRINT_ENDDATAPACKET ):
+                raise Exception('The received packet is no data packet!')
+
+            ## X coordinate of current pixel
+            x = 0
+
+            for i in range(0, len(receivedPacketPayload)):
+
+                ## Thanks to Danylo Esterman <soundcracker@gmail.com> for the "multiple with 17" improvement:
+
+                ## Draw left 4 Bits one byte of package
+                pixels[x, line] = (receivedPacketPayload[i] >> 4) * 17
+                x = x + 1
+
+                ## Draw right 4 Bits one byte of package
+                pixels[x, line] = (receivedPacketPayload[i] & 0b00001111) * 17
+                x = x + 1
+
+            line = line + 1
+
+        resultImage.save(imageDestination)
+
+    def convertImage(self, charBufferNumber = 0x01):
+        """
+        Convert the image in ImageBuffer to finger characteristics and store in CharBuffer1 or CharBuffer2.
+
+        @param integer(1 byte) charBufferNumber
+        @return boolean
+        """
+
+        if ( charBufferNumber != 0x01 and charBufferNumber != 0x02 ):
+            raise ValueError('The given charbuffer number is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_CONVERTIMAGE,
+            charBufferNumber,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Image converted
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_MESSYIMAGE ):
+            raise Exception('The image is too messy')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_FEWFEATUREPOINTS ):
+            raise Exception('The image contains too few feature points')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_INVALIDIMAGE ):
+            raise Exception('The image is invalid')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def createTemplate(self):
+        """
+        Combine the characteristics which are stored in CharBuffer1 and CharBuffer2 to a template.
+        The created template will be stored again in CharBuffer1 and CharBuffer2 as the same.
+
+        @return boolean
+        """
+
+        packetPayload = (
+            FINGERPRINT_CREATETEMPLATE,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Template created successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        ## DEBUG: The characteristics not matching
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_CHARACTERISTICSMISMATCH ):
+            return False
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def storeTemplate(self, positionNumber = -1, charBufferNumber = 0x01):
+        """
+        Save a template from the specified CharBuffer to the given position number.
+
+        @param integer(2 bytes) positionNumber
+        @param integer(1 byte) charBufferNumber
+        @return integer
+        """
+
+        ## Find a free index
+        if ( positionNumber == -1 ):
+            for page in range(0, 4):
+                ## Free index found?
+                if ( positionNumber >= 0 ):
+                    break
+
+                templateIndex = self.getTemplateIndex(page)
+
+                for i in range(0, len(templateIndex)):
+                    ## Index not used?
+                    if ( templateIndex[i] == False ):
+                        positionNumber = (len(templateIndex) * page) + i
+                        break
+
+        if ( positionNumber < 0x0000 or positionNumber >= self.getStorageCapacity() ):
+            raise ValueError('The given position number is invalid!')
+
+        if ( charBufferNumber != 0x01 and charBufferNumber != 0x02 ):
+            raise ValueError('The given charbuffer number is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_STORETEMPLATE,
+            charBufferNumber,
+            self.__rightShift(positionNumber, 8),
+            self.__rightShift(positionNumber, 0),
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Template stored successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return positionNumber
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_INVALIDPOSITION ):
+            raise Exception('Could not store template in that position')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_FLASH ):
+            raise Exception('Error writing to flash')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def searchTemplate(self):
+        """
+        Search the finger characteristics in CharBuffer in database.
+
+        Return a tuple that contain the following information:
+        0: integer(2 bytes) The position number of found template.
+        1: integer(2 bytes) The accuracy score of found template.
+
+        @return tuple
+        """
+
+        ## CharBuffer1 and CharBuffer2 are the same in this case
+        charBufferNumber = 0x01
+
+        ## Begin search at index 0
+        positionStart = 0x0000
+        templatesCount = self.getStorageCapacity()
+
+        packetPayload = (
+            FINGERPRINT_SEARCHTEMPLATE,
+            charBufferNumber,
+            self.__rightShift(positionStart, 8),
+            self.__rightShift(positionStart, 0),
+            self.__rightShift(templatesCount, 8),
+            self.__rightShift(templatesCount, 0),
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Found template
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+
+            positionNumber = self.__leftShift(receivedPacketPayload[1], 8)
+            positionNumber = positionNumber | self.__leftShift(receivedPacketPayload[2], 0)
+
+            accuracyScore = self.__leftShift(receivedPacketPayload[3], 8)
+            accuracyScore = accuracyScore | self.__leftShift(receivedPacketPayload[4], 0)
+
+            return (positionNumber, accuracyScore)
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        ## DEBUG: Did not found a matching template
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_NOTEMPLATEFOUND ):
+            return (-1, -1)
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def loadTemplate(self, positionNumber, charBufferNumber = 0x01):
+        """
+        Load an existing template specified by position number to specified CharBuffer.
+
+        @param integer(2 bytes) positionNumber
+        @param integer(1 byte) charBufferNumber
+        @return boolean
+        """
+
+        if ( positionNumber < 0x0000 or positionNumber >= self.getStorageCapacity() ):
+            raise ValueError('The given position number is invalid!')
+
+        if ( charBufferNumber != 0x01 and charBufferNumber != 0x02 ):
+            raise ValueError('The given charbuffer number is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_LOADTEMPLATE,
+            charBufferNumber,
+            self.__rightShift(positionNumber, 8),
+            self.__rightShift(positionNumber, 0),
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Template loaded successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_LOADTEMPLATE ):
+            raise Exception('The template could not be read')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_INVALIDPOSITION ):
+            raise Exception('Could not load template from that position')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def deleteTemplate(self, positionNumber, count = 1):
+        """
+        Delete templates from fingerprint database. Per default one.
+
+        @param integer(2 bytes) positionNumber
+        @param integer(2 bytes) count
+        @return boolean
+        """
+
+        capacity = self.getStorageCapacity()
+
+        if ( positionNumber < 0x0000 or positionNumber >= capacity ):
+            raise ValueError('The given position number is invalid!')
+
+        if ( count < 0x0000 or count > capacity - positionNumber ):
+            raise ValueError('The given count is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_DELETETEMPLATE,
+            self.__rightShift(positionNumber, 8),
+            self.__rightShift(positionNumber, 0),
+            self.__rightShift(count, 8),
+            self.__rightShift(count, 0),
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Template deleted successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_INVALIDPOSITION ):
+            raise Exception('Invalid position')
+
+        ## DEBUG: Could not delete template
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_DELETETEMPLATE ):
+            return False
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def clearDatabase(self):
+        """
+        Clear the complete template database.
+
+        @return boolean
+        """
+
+        packetPayload = (
+            FINGERPRINT_CLEARDATABASE,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Database cleared successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            return True
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        ## DEBUG: Could not clear database
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_CLEARDATABASE ):
+            return False
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def compareCharacteristics(self):
+        """
+        Compare the finger characteristics of CharBuffer1 with CharBuffer2 and return the accuracy score.
+
+        @return integer(2 bytes)
+        """
+
+        packetPayload = (
+            FINGERPRINT_COMPARECHARACTERISTICS,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: Comparison successful
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            accuracyScore = self.__leftShift(receivedPacketPayload[1], 8)
+            accuracyScore = accuracyScore | self.__leftShift(receivedPacketPayload[2], 0)
+            return accuracyScore
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        ## DEBUG: The characteristics do not matching
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_NOTMATCHING ):
+            return 0
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+    def uploadCharacteristics(self, charBufferNumber = 0x01, characteristicsData = [0]):
+        """
+        Upload finger characteristics to CharBuffer1 or CharBuffer2.
+
+        @author: David Gilson <davgilson@live.fr>
+
+        @param integer(1 byte) charBufferNumber
+        @param integer(list) characteristicsData
+
+        @return boolean
+        Return true if everything is right.
+        """
+
+        if ( charBufferNumber != 0x01 and charBufferNumber != 0x02 ):
+            raise ValueError('The given charbuffer number is invalid!')
+
+        if ( characteristicsData == [0] ):
+            raise ValueError('The characteristics data is required!')
+
+        maxPacketSize = self.getMaxPacketSize()
+
+        ## Upload command
+
+        packetPayload = (
+            FINGERPRINT_UPLOADCHARACTERISTICS,
+            charBufferNumber
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+
+        ## Get first reply packet
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: The sensor will sent follow-up packets
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            pass
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_PACKETRESPONSEFAIL ):
+            raise Exception('Could not upload characteristics')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+        ## Upload data packets
+        packetNbr = len(characteristicsData) / maxPacketSize
+
+        if ( packetNbr <= 1 ):
+            self.__writePacket(FINGERPRINT_ENDDATAPACKET, characteristicsData)
+        else:
+            i = 1
+            while ( i < packetNbr ):
+                lfrom = (i-1) * maxPacketSize
+                lto = lfrom + maxPacketSize
+                self.__writePacket(FINGERPRINT_DATAPACKET, characteristicsData[lfrom:lto])
+                i += 1
+
+            lfrom = (i-1) * maxPacketSize
+            lto = lfrom + maxPacketSize
+            self.__writePacket(FINGERPRINT_ENDDATAPACKET, characteristicsData[lfrom:lto])
+
+        ## Verify uploaded characteristics
+        characterics = self.downloadCharacteristics(charBufferNumber)
+        return (characterics == characteristicsData)
+
+    def getMaxPacketSize(self):
+        """
+        Get the maximum allowed size of packet by sensor.
+
+        @author: David Gilson <davgilson@live.fr>
+
+        @return int
+        Return the max size. Default 32 bytes.
+        """
+
+        packetMaxSizeType = self.getSystemParameters()[5]
+
+        if (packetMaxSizeType == 1):
+            return 64
+        elif (packetMaxSizeType == 2):
+            return 128
+        elif (packetMaxSizeType == 3):
+            return 256
+        else:
+            return 32
+
+    def getStorageCapacity(self):
+        """
+        Get the sensor storage capacity.
+
+        @return int
+        The storage capacity.
+        """
+
+        return self.getSystemParameters()[2]
+
+    def generateRandomNumber(self):
+        """
+        Generate a random 32-bit decimal number.
+
+        @author: Philipp Meisberger <team@pm-codeworks.de>
+
+        @return int
+        The generated random number
+        """
+        packetPayload = (
+            FINGERPRINT_GENERATERANDOMNUMBER,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            pass
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+        number = 0
+        number = number | self.__leftShift(receivedPacketPayload[1], 24)
+        number = number | self.__leftShift(receivedPacketPayload[2], 16)
+        number = number | self.__leftShift(receivedPacketPayload[3], 8)
+        number = number | self.__leftShift(receivedPacketPayload[4], 0)
+        return number
+
+    def downloadCharacteristics(self, charBufferNumber = 0x01):
+        """
+        Download the finger characteristics of CharBuffer1 or CharBuffer2.
+
+        @param integer(1 byte) charBufferNumber
+
+        @return list
+        Return a list that contains 512 integer(1 byte) elements of the characteristic.
+        """
+
+        if ( charBufferNumber != 0x01 and charBufferNumber != 0x02 ):
+            raise ValueError('The given charbuffer number is invalid!')
+
+        packetPayload = (
+            FINGERPRINT_DOWNLOADCHARACTERISTICS,
+            charBufferNumber,
+        )
+
+        self.__writePacket(FINGERPRINT_COMMANDPACKET, packetPayload)
+
+        ## Get first reply packet
+        receivedPacket = self.__readPacket()
+
+        receivedPacketType = receivedPacket[0]
+        receivedPacketPayload = receivedPacket[1]
+
+        if ( receivedPacketType != FINGERPRINT_ACKPACKET ):
+            raise Exception('The received packet is no ack packet!')
+
+        ## DEBUG: The sensor will sent follow-up packets
+        if ( receivedPacketPayload[0] == FINGERPRINT_OK ):
+            pass
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_COMMUNICATION ):
+            raise Exception('Communication error')
+
+        elif ( receivedPacketPayload[0] == FINGERPRINT_ERROR_DOWNLOADCHARACTERISTICS ):
+            raise Exception('Could not download characteristics')
+
+        else:
+            raise Exception('Unknown error '+ hex(receivedPacketPayload[0]))
+
+        completePayload = []
+
+        ## Get follow-up data packets until the last data packet is received
+        while ( receivedPacketType != FINGERPRINT_ENDDATAPACKET ):
+
+            receivedPacket = self.__readPacket()
+
+            receivedPacketType = receivedPacket[0]
+            receivedPacketPayload = receivedPacket[1]
+
+            if ( receivedPacketType != FINGERPRINT_DATAPACKET and receivedPacketType != FINGERPRINT_ENDDATAPACKET ):
+                raise Exception('The received packet is no data packet!')
+
+            for i in range(0, len(receivedPacketPayload)):
+                completePayload.append(receivedPacketPayload[i])
+
+        return completePayload
diff --git a/pointeuse/dev/updatedata.pl b/pointeuse/dev/updatedata.pl
new file mode 100644 (file)
index 0000000..abc7402
--- /dev/null
@@ -0,0 +1,75 @@
+#!/usr/bin/env perl
+use strict;
+use Getopt::Long;
+use Data::Dumper;
+use File::Basename;
+use FindBin qw($RealBin);
+use JSON::PP;
+use lib (dirname($RealBin).'/lib');
+use DB::SQLite;
+my $cfgfile = "";
+my $datafile ="";
+GetOptions("cfg|c=s" => \$cfgfile, "data|d=s" => \$datafile);
+
+if (! -e $cfgfile){
+  print "no configfile!\n";
+  exit(1);
+}
+if (! -e $datafile){
+  print "no datafile!\n";
+  exit(1);
+}
+my $cfg = &readconfig();
+if (! -e $cfg->{datapath}.'/'.$cfg->{dbfile}){
+  print "no database ".$cfg->{datapath}.'/'.$cfg->{dbfile}." found!\n";
+  exit(1);
+}
+
+my $jdata = &readdatafile();
+my $db = DB::SQLite->new({dbfile => $cfg->{datapath}.'/'.$cfg->{dbfile}});
+my @k = keys(%{$jdata->{result}});
+foreach my $fn (keys(%{$jdata->{result}})){
+  foreach my $j (keys(%{$jdata->{$fn}->{data}})){
+    my $data = $jdata->{result}->{$fn}->{$j};
+    #print Dumper($user);
+    if ($fn eq "getusers"){
+      my $sql = "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES (".$db->value($data->{id}).",".$db->value($data->{prename}).",".$db->value($data->{surname}).",".(($data->{istimetrackenabled} eq "1")?'null':"'1'").",".$db->value($data->{isdeleted}).");";
+      print $sql."\n";
+      $db->exec($sql);
+    } elsif ($fn eq "getpotdata"){
+      my $sql = "REPLACE INTO staffworktimes (id,id_staff,starttime1,endtime1,starttime2,endtime2) VALUES (".$db->value($data->{id}).",".$db->value($data->{id_staff}).",".$db->value($data->{timestart1}).",".$db->value($data->{timeend1}).",".$db->value($data->{timestart2}).",".$db->value($data->{timeend2}).");";
+      print $sql."\n";
+      $db->exec($sql);
+    }
+    
+  }
+}
+
+#unlink($datafile);
+
+
+sub readconfig(){
+  my $retcfg = ();
+  open(CFG,$cfgfile);
+  while (my $l = <CFG>){
+    chomp($l);
+    $l =~ s/^\s+//;
+    $l =~ s/\s+$//;
+    if (($l eq "") || ($l =~ /^#/) || ($l =~ /^;/)){next;}
+    my ($k,$v) = $l =~ m/(\w+)\s*=\s*(.*)$/;
+    $retcfg->{lc($k)} = $v;
+  }
+  close(CFG);
+  return $retcfg;
+}
+
+sub readdatafile(){
+  my $strdata = "";
+  open(CFG,$datafile);
+  while (my $l = <CFG>){
+    chomp($l);
+    $strdata .= $l;
+  }
+  close(CFG);
+  return JSON::PP::decode_json($strdata);
+}
\ No newline at end of file
diff --git a/pointeuse/install/.hourtrax/hourtrax.json b/pointeuse/install/.hourtrax/hourtrax.json
new file mode 100644 (file)
index 0000000..35a0710
--- /dev/null
@@ -0,0 +1,8 @@
+{
+  "type":"fingerprint",
+  "db": "hourtrax.sqlite",
+  "timeout":30,
+  "flextime":-1,
+  "binpath":"",
+  "pincode":"12345678"
+}
\ No newline at end of file
diff --git a/pointeuse/install/.hourtrax/hourtrax.sqlite b/pointeuse/install/.hourtrax/hourtrax.sqlite
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/pointeuse/install/.hourtrax/ht.sql b/pointeuse/install/.hourtrax/ht.sql
new file mode 100644 (file)
index 0000000..61ef17a
--- /dev/null
@@ -0,0 +1,71 @@
+CREATE TABLE staff (
+        id TEXT NOT NULL,
+        staffnumber TEXT,
+        prename TEXT,
+        surname TEXT,
+        pin TEXT,
+        rfid TEXT,
+        isblocked BOOLEAN,
+        isdisabled BOOLEAN,
+        isdeleted BOOLEAN,
+        fixtime integer,
+        lang text,
+        timetrackers text,
+        restriction text,
+        modified DATETIME DEFAULT (datetime('now','localtime')),
+        created DATETIME DEFAULT (datetime('now','localtime')),
+        PRIMARY KEY (id)
+);
+CREATE TABLE timetracks (
+        id text not null,
+        id_staff TEXT,
+        daydate date,
+        stamp_in DATETIME,
+        stamp_out DATETIME,
+        tracktype TEXT,
+        modified DATETIME DEFAULT (datetime('now','localtime')),
+        created DATETIME DEFAULT (datetime('now','localtime')),
+        primary key (id)
+);
+CREATE TABLE fingerprints (
+        id_staff TEXT,
+        fingerhash TEXT,
+        fingertype integer,
+        modified DATETIME DEFAULT (datetime('now','localtime')),
+        created DATETIME DEFAULT (datetime('now','localtime')), 
+        primary key (id_staff,fingerhash)
+);
+CREATE TABLE badges (
+       id text,
+       id_staff text,
+       type text,
+       primary key (id)
+);
+CREATE TABLE staffworktimes (
+        id TEXT not null,
+        id_staff TEXT,
+        daydate date,
+        starttime1 TEXT,
+        endtime1 TEXT,
+        starttime2 TEXT,
+        endtime2 TEXT,
+        modified DATETIME DEFAULT (datetime('now','localtime')),
+    created DATETIME DEFAULT (datetime('now','localtime')),
+    primary key (id)
+);
+CREATE TRIGGER trg_staff_upd UPDATE ON staff
+ BEGIN
+  UPDATE staff SET modified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+CREATE TRIGGER trg_timetracks_upd UPDATE ON staff
+ BEGIN
+  UPDATE timetracks SET modified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+CREATE TRIGGER trg_staffworktimes_upd UPDATE ON staff
+ BEGIN
+  UPDATE staffworktimes SET modified=datetime('now','localtime') WHERE id = NEW.id;
+ END;
+ CREATE TRIGGER trg_fingerprints_upd UPDATE ON staff
+ BEGIN
+  UPDATE staffworktimes SET modified=datetime('now','localtime') WHERE id_staff = NEW.id_staff and fingertype= NEW.fingertype;
+ END;
diff --git a/pointeuse/install/.hourtrax/sync.conf b/pointeuse/install/.hourtrax/sync.conf
new file mode 100644 (file)
index 0000000..397be2c
--- /dev/null
@@ -0,0 +1,7 @@
+#HOSTS=(172.16.10.198 172.16.10.194 172.16.10.202)
+HOSTS=
+SYNCSERVER="172.16.10.190"
+SCHEMA="demo50"
+RUSER="pot"
+RPWD=
+RPORT="3587"
diff --git a/pointeuse/install/bin/clearfingerprint.sh b/pointeuse/install/bin/clearfingerprint.sh
new file mode 100644 (file)
index 0000000..ffdcd77
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/bash
+CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+if [[ $# -eq 0 ]]
+then 
+  echo "No args!"
+  exit 0
+fi
+IDSTAFF=$1
+db=${HOME}"/.hourtrax/hourtrax.sqlite" 
+HASHDATA=(`sqlite3 $db "select fingerhash from fingerprints where id_staff='"${IDSTAFF}"';"`)
+#echo ${HASHDATA}
+sqlite3 $db "delete from fingerprints where id_staff='"${IDSTAFF}"';"
+for h in "${!HASHDATA[@]}"
+  do
+    #echo ${HASHDATA[$h]}
+    TEST=(`echo "${HASHDATA[$h]}" | tr -d [] | awk -F"," '{ print $1" "$2}'`)
+    #echo "${CALLDIR}/fp.py deleteuser 30 ${TEST[0]} ${TEST[1]}"
+    ${CALLDIR}/fp.py deleteuser 30 ${TEST[0]} ${TEST[1]}
+done
\ No newline at end of file
diff --git a/pointeuse/install/bin/electron/electron-v9.3.2-linux-armv7l.zip b/pointeuse/install/bin/electron/electron-v9.3.2-linux-armv7l.zip
new file mode 100644 (file)
index 0000000..e99f79f
Binary files /dev/null and b/pointeuse/install/bin/electron/electron-v9.3.2-linux-armv7l.zip differ
diff --git a/pointeuse/install/bin/electron/resources/app/css/fonts/appicons.svg b/pointeuse/install/bin/electron/resources/app/css/fonts/appicons.svg
new file mode 100644 (file)
index 0000000..b8fcc20
--- /dev/null
@@ -0,0 +1,106 @@
+<?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="appicons" 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="reboot" d="M565.855 960c114.155 0 219.698-33.218 307.364-89.379l81.368 89.379 50.056-259.353-281.34 5.376 83.466 91.634c-69.529 42.098-152.123 66.915-240.914 66.914-245.17 0.001-444.635-186.87-444.635-416.556 0-229.689 199.465-416.606 444.635-416.606 129.37 0 245.574 52.323 326.884 135.123l66.507-73.391c-99.399-96.774-238.764-157.158-393.392-157.158-301.84 0-546.493 229.255-546.493 512.032 0 282.728 244.653 511.984 546.493 511.984z" />
+<glyph unicode="&#xe901;" glyph-name="shutdown" d="M644.697 854.432c194.318-57.255 336.24-236.789 336.24-449.633 0-258.974-209.969-468.942-468.985-468.942-259.011 0-468.986 209.968-468.986 468.942 0 203.029 129.242 375.366 309.709 440.632v-115.148c-120.302-59.13-203.505-182.587-203.505-325.484 0-200.026 162.748-362.736 362.781-362.736s362.786 162.71 362.786 362.736c0 153.211-95.551 284.234-230.041 337.304zM445.606 960h112.77v-438.020h-112.77z" />
+<glyph unicode="&#xe902;" 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="&#xe903;" 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="&#xe904;" 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="&#xe905;" 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="&#xe906;" 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="&#xe907;" 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="&#xe908;" 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="&#xe909;" 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="&#xe90a;" 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="&#xe90b;" 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="&#xe90c;" 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="&#xe90d;" 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="&#xe90e;" 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="&#xe90f;" 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="&#xe910;" 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="&#xe911;" 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="&#xe912;" 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="&#xe913;" 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="&#xe914;" 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="&#xe915;" 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="&#xe916;" 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="&#xe917;" 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="&#xe918;" 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="&#xe919;" 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="&#xe91a;" 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="&#xe91b;" 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="&#xe91c;" 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="&#xe91d;" glyph-name="expand" d="M139.462 308.298h744.932l-372.468-372.442zM511.926 960l372.468-372.442h-744.932z" />
+<glyph unicode="&#xe91e;" 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="&#xe91f;" 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="&#xe920;" 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="&#xe921;" 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="&#xe922;" 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="&#xe923;" 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="&#xe924;" 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="&#xe925;" 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="&#xe926;" 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="&#xe927;" 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="&#xe928;" 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="&#xe929;" 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="&#xe92a;" 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="&#xe92b;" 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="&#xe92c;" 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="&#xe92d;" 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="&#xe92e;" 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="&#xe92f;" 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="&#xe930;" 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="&#xe931;" 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="&#xe932;" 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="&#xe933;" 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="&#xe934;" 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="&#xe935;" 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="&#xe936;" 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="&#xe937;" 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="&#xe938;" glyph-name="rotate_screen" d="M703.36 852.693c139.307-66.133 239.36-201.6 254.507-362.027h64c-21.76 262.827-241.493 469.333-509.867 469.333-9.6 0-18.773-0.853-28.373-1.493l162.773-162.773 56.96 56.96zM436.48 885.547c-24.96 24.96-65.493 24.96-90.453 0l-271.573-271.573c-24.96-24.96-24.96-65.493 0-90.453l512.853-512.853c24.96-24.96 65.493-24.96 90.453 0l271.573 271.573c24.96 24.96 24.96 65.493 0 90.453l-512.853 512.853zM632.747 55.893l-513.067 512.853 271.573 271.573 512.853-512.853-271.36-271.573zM320.64 43.307c-139.307 66.133-239.36 201.6-254.507 362.027h-64c21.76-262.827 241.493-469.333 509.867-469.333 9.6 0 18.773 0.853 28.373 1.493l-162.773 162.773-56.96-56.96z" />
+<glyph unicode="&#xe939;" glyph-name="hwbagde" d="M659.116-20.509c-1.256 6.694-1.805 12.517-1.221 12.941s11.258 3.46 23.719 6.747c94.666 24.971 170.122 105.043 188.605 200.145l4.050 20.841 12.284-1.893c6.756-1.041 12.835-2.355 13.509-2.92s-1.351-12.605-4.499-26.755c-19.001-85.407-73.321-155.467-150.705-194.375-23.093-11.611-68.304-26.901-79.544-26.901-2.153 0-4.943 5.477-6.198 12.17zM649.307 42.322c-4.295 16.037-2.698 18.665 13.874 22.823 58.928 14.786 113.977 65.969 132.103 122.829 3.667 11.503 7.591 25.096 8.719 30.206 2.097 9.494 10.088 11.806 22.534 6.52 4.833-2.052 4.931-4.63 0.927-24.257-15.892-77.9-85.566-146.79-165.534-163.67-9.072-1.915-10.832-1.141-12.624 5.549zM639.118 110.098c-4.253 15.868-2.527 18.341 18.028 25.836 27.232 9.929 55.541 35.988 68.227 62.803 5.279 11.158 9.599 23.709 9.601 27.89 0.002 6.658 1.738 7.602 13.976 7.602h13.974l-2.099-15.316c-5.367-39.159-38.448-82.147-77.682-100.947-33.42-16.014-41.456-17.45-44.024-7.868zM416.818 159.747c-54.639 10.020-103.195 34.155-141.825 70.495-54.131 50.922-82.791 109.768-89.154 183.051-1.789 20.609-0.606 32.277 6.341 62.504 12.088 52.596 39.697 131.913 74.091 212.851 83.904 197.447 84.352 198.308 115.643 222.049 26.162 19.85 45.348 25.766 81.086 25.002 26.075-0.557 33.559-2.126 52.528-11.015 25.339-11.873 43.434-26.652 56.952-46.515 19.795-29.087 132.542-306.776 151.024-371.965 10.713-37.784 12.465-48.879 12.544-79.397 0.116-45.101-6.591-72.997-28.027-116.561-35.53-72.207-99.105-124.252-177.516-145.321-23.496-6.313-90.785-9.378-113.688-5.179zM529.286 234.964c34.148 12.583 52.967 24.936 80.743 52.998 29.15 29.45 46.68 61.314 55.378 100.658 24.096 108.999-44.096 218.486-153.418 246.32-32.863 8.367-77.647 7.425-108.379-2.28-13.791-4.355-25.835-8-26.764-8.099-6.676-0.714-45.968-28.364-60.162-42.336-32.417-31.91-49.527-63.23-59.82-109.503-22.081-99.269 42.741-208.697 141.942-239.618 25.885-8.068 31.031-8.609 70.95-7.456 29.137 0.842 41.995 2.853 59.529 9.314zM414.938 252.737c-93.059 26.148-151.912 117.315-136.131 210.877 5.697 33.776 25.92 73.253 50.236 98.067 19.114 19.506 51.307 40.721 61.881 40.781 3.097 0.019 6.138 1.425 6.757 3.128 1.492 4.104 49.34 13.812 67.711 13.738 36.591-0.146 90.109-21.865 119.917-48.666 103.059-92.659 71.096-261.738-58.926-311.703-28.684-11.023-83.476-14.083-111.445-6.224zM520.716 810.078c6.411 8.781 6.053 21.919-0.804 29.496-4.603 5.086-10.802 6.178-35.061 6.178-22.074 0-30.526-1.272-33.676-5.068-2.313-2.787-7.634-5.068-11.825-5.068s-9.512 2.281-11.825 5.068c-9.598 11.565-30.451 1.341-30.356-14.883 0.125-21.091 9.305-24.188 68.644-23.155 45.135 0.786 50.589 1.524 54.902 7.431z" />
+<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;" glyph-name="untitled" 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;" glyph-name="untitled1" 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="&#xe971;" glyph-name="untitled2" 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" />
+</font></defs></svg>
\ No newline at end of file
diff --git a/pointeuse/install/bin/electron/resources/app/css/fonts/appicons.ttf b/pointeuse/install/bin/electron/resources/app/css/fonts/appicons.ttf
new file mode 100644 (file)
index 0000000..6d6ee67
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/css/fonts/appicons.ttf differ
diff --git a/pointeuse/install/bin/electron/resources/app/css/fonts/appicons.woff b/pointeuse/install/bin/electron/resources/app/css/fonts/appicons.woff
new file mode 100644 (file)
index 0000000..1f5af25
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/css/fonts/appicons.woff differ
diff --git a/pointeuse/install/bin/electron/resources/app/css/icons.css b/pointeuse/install/bin/electron/resources/app/css/icons.css
new file mode 100644 (file)
index 0000000..ea428d7
--- /dev/null
@@ -0,0 +1,314 @@
+@font-face {
+  font-family: 'appicons';
+  src:
+    url('fonts/appicons.ttf?1lkxku') format('truetype'),
+    url('fonts/appicons.woff?1lkxku') format('woff'),
+    url('fonts/appicons.svg?1lkxku#appicons') 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: 'appicons' !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-hwbagde:before {
+  content: "\e939";
+}
+.icon-rotate_screen:before {
+  content: "\e938";
+}
+.icon-reboot:before {
+  content: "\e900";
+}
+.icon-shutdown:before {
+  content: "\e901";
+}
+.icon-pause:before {
+  content: "\e902";
+}
+.icon-calendar:before {
+  content: "\e903";
+}
+.icon-clocktime:before {
+  content: "\e904";
+}
+.icon-cube:before {
+  content: "\e905";
+}
+.icon-cubelight:before {
+  content: "\e906";
+}
+.icon-dashboard:before {
+  content: "\e907";
+}
+.icon-history:before {
+  content: "\e908";
+}
+.icon-shop:before {
+  content: "\e909";
+}
+.icon-template:before {
+  content: "\e90a";
+}
+.icon-remove:before {
+  content: "\e90b";
+}
+.icon-access:before {
+  content: "\e90c";
+}
+.icon-address:before {
+  content: "\e90d";
+}
+.icon-apps:before {
+  content: "\e90e";
+}
+.icon-archive:before {
+  content: "\e90f";
+}
+.icon-calendar1:before {
+  content: "\e910";
+}
+.icon-code:before {
+  content: "\e911";
+}
+.icon-coin:before {
+  content: "\e912";
+}
+.icon-cube1:before {
+  content: "\e913";
+}
+.icon-cubelight1:before {
+  content: "\e914";
+}
+.icon-dashboard1:before {
+  content: "\e915";
+}
+.icon-datarefresh:before {
+  content: "\e916";
+}
+.icon-documentsave:before {
+  content: "\e917";
+}
+.icon-documents:before {
+  content: "\e918";
+}
+.icon-download:before {
+  content: "\e919";
+}
+.icon-duplicate1:before {
+  content: "\e91a";
+}
+.icon-edit:before {
+  content: "\e91b";
+}
+.icon-excel:before {
+  content: "\e91c";
+}
+.icon-expand:before {
+  content: "\e91d";
+}
+.icon-file:before {
+  content: "\e91e";
+}
+.icon-Floppy:before {
+  content: "\e91f";
+}
+.icon-folder:before {
+  content: "\e920";
+}
+.icon-folder_add:before {
+  content: "\e921";
+}
+.icon-folder_delete:before {
+  content: "\e922";
+}
+.icon-folder_find:before {
+  content: "\e923";
+}
+.icon-globe:before {
+  content: "\e924";
+}
+.icon-group:before {
+  content: "\e925";
+}
+.icon-home:before {
+  content: "\e926";
+}
+.icon-inbox:before {
+  content: "\e927";
+}
+.icon-library:before {
+  content: "\e928";
+}
+.icon-license:before {
+  content: "\e929";
+}
+.icon-list:before {
+  content: "\e92a";
+}
+.icon-log:before {
+  content: "\e92b";
+}
+.icon-logout:before {
+  content: "\e92c";
+}
+.icon-menu:before {
+  content: "\e92d";
+}
+.icon-newspaper:before {
+  content: "\e92e";
+}
+.icon-numberlist:before {
+  content: "\e92f";
+}
+.icon-package:before {
+  content: "\e930";
+}
+.icon-dataset:before {
+  content: "\e931";
+}
+.icon-check:before {
+  content: "\e932";
+}
+.icon-pay:before {
+  content: "\e933";
+}
+.icon-pdf:before {
+  content: "\e934";
+}
+.icon-pdfexport:before {
+  content: "\e935";
+}
+.icon-pictures:before {
+  content: "\e936";
+}
+.icon-plus:before {
+  content: "\e937";
+}
+.icon-staff:before {
+  content: "\e943";
+}
+.icon-back:before {
+  content: "\e944";
+}
+.icon-next:before {
+  content: "\e945";
+}
+.icon-sendemail:before {
+  content: "\e946";
+}
+.icon-exit:before {
+  content: "\e947";
+}
+.icon-key:before {
+  content: "\e948";
+}
+.icon-duplicate:before {
+  content: "\e949";
+}
+.icon-paste:before {
+  content: "\e94a";
+}
+.icon-copy:before {
+  content: "\e94b";
+}
+.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-untitled:before {
+  content: "\e951";
+}
+.icon-untitled1:before {
+  content: "\e952";
+}
+.icon-projects:before {
+  content: "\e953";
+}
+.icon-usertime:before {
+  content: "\e954";
+}
+.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-rename:before {
+  content: "\e95d";
+}
+.icon-fingerprint-scanning:before {
+  content: "\e95e";
+}
+.icon-untitled2:before {
+  content: "\e971";
+}
+.icon-fingerprint-search:before {
+  content: "\e972";
+}
+.icon-fingerprint-simple:before {
+  content: "\e973";
+}
+.icon-settings:before {
+  content: "\e974";
+}
+.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";
+}
+.icon-entry:before {
+  content: "\e97a";
+}
diff --git a/pointeuse/install/bin/electron/resources/app/css/theme.css b/pointeuse/install/bin/electron/resources/app/css/theme.css
new file mode 100644 (file)
index 0000000..3b34ae9
--- /dev/null
@@ -0,0 +1,992 @@
+/* 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-left2{position:absolute;top:50%;left:125px;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;
+}
+
+#timer {
+       /* border: 1px solid red; */
+       display: block;
+       position: absolute; 
+       width: 60px; 
+       height: 60px; 
+       top: 0px; 
+       left: calc(50vw - 30px);
+       z-index: 50;
+       display: none;
+}
+
+@-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
+{
+       font-size: 14px;
+       padding: 10px 10px;
+       margin: 10px 10px;
+  border: 0.5px solid #aaaaaa;
+       background-color: #c6c6c6;
+       color: #000;
+       border-radius: 3px;
+}
+/*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.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);
+
+}
+
+
+
+
+::-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;
+}
+
+
+
+
+
+
+
+/* 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);
+ }
+
+
+: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/pointeuse/install/bin/electron/resources/app/img/POT-logo.png b/pointeuse/install/bin/electron/resources/app/img/POT-logo.png
new file mode 100644 (file)
index 0000000..e2c8028
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/POT-logo.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/Thumbs.db b/pointeuse/install/bin/electron/resources/app/img/Thumbs.db
new file mode 100644 (file)
index 0000000..ef7a0ce
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/Thumbs.db differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/dks_1000.png b/pointeuse/install/bin/electron/resources/app/img/dks_1000.png
new file mode 100644 (file)
index 0000000..87b44eb
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/dks_1000.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/Thumbs.db b/pointeuse/install/bin/electron/resources/app/img/favicon/Thumbs.db
new file mode 100644 (file)
index 0000000..bf6568b
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/Thumbs.db differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-144x144.png b/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-144x144.png
new file mode 100644 (file)
index 0000000..6aa79d8
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-144x144.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-192x192.png b/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-192x192.png
new file mode 100644 (file)
index 0000000..f58a3e6
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-192x192.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-36x36.png b/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-36x36.png
new file mode 100644 (file)
index 0000000..f52eed7
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-36x36.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-48x48.png b/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-48x48.png
new file mode 100644 (file)
index 0000000..d5beba1
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-48x48.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-72x72.png b/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-72x72.png
new file mode 100644 (file)
index 0000000..7c7f324
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-72x72.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-96x96.png b/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-96x96.png
new file mode 100644 (file)
index 0000000..38484ee
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/android-icon-96x96.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-114x114.png b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-114x114.png
new file mode 100644 (file)
index 0000000..3d448dd
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-114x114.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-120x120.png b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-120x120.png
new file mode 100644 (file)
index 0000000..99a1a39
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-120x120.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-144x144.png b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-144x144.png
new file mode 100644 (file)
index 0000000..6aa79d8
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-144x144.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-152x152.png b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-152x152.png
new file mode 100644 (file)
index 0000000..3ee4143
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-152x152.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-180x180.png b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-180x180.png
new file mode 100644 (file)
index 0000000..7541cce
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-180x180.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-57x57.png b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-57x57.png
new file mode 100644 (file)
index 0000000..58d5700
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-57x57.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-60x60.png b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-60x60.png
new file mode 100644 (file)
index 0000000..31a3f78
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-60x60.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-72x72.png b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-72x72.png
new file mode 100644 (file)
index 0000000..7c7f324
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-72x72.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-76x76.png b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-76x76.png
new file mode 100644 (file)
index 0000000..bd28884
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-76x76.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-precomposed.png b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-precomposed.png
new file mode 100644 (file)
index 0000000..cd3635a
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon-precomposed.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon.png b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon.png
new file mode 100644 (file)
index 0000000..cd3635a
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/apple-icon.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/browserconfig.xml b/pointeuse/install/bin/electron/resources/app/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/pointeuse/install/bin/electron/resources/app/img/favicon/favicon-16x16.png b/pointeuse/install/bin/electron/resources/app/img/favicon/favicon-16x16.png
new file mode 100644 (file)
index 0000000..09adf92
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/favicon-16x16.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/favicon-32x32.png b/pointeuse/install/bin/electron/resources/app/img/favicon/favicon-32x32.png
new file mode 100644 (file)
index 0000000..3281e25
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/favicon-32x32.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/favicon-96x96.png b/pointeuse/install/bin/electron/resources/app/img/favicon/favicon-96x96.png
new file mode 100644 (file)
index 0000000..38484ee
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/favicon-96x96.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/favicon.ico b/pointeuse/install/bin/electron/resources/app/img/favicon/favicon.ico
new file mode 100644 (file)
index 0000000..bbf93a1
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/favicon.ico differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/manifest.json b/pointeuse/install/bin/electron/resources/app/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/pointeuse/install/bin/electron/resources/app/img/favicon/ms-icon-144x144.png b/pointeuse/install/bin/electron/resources/app/img/favicon/ms-icon-144x144.png
new file mode 100644 (file)
index 0000000..6aa79d8
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/ms-icon-144x144.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/ms-icon-150x150.png b/pointeuse/install/bin/electron/resources/app/img/favicon/ms-icon-150x150.png
new file mode 100644 (file)
index 0000000..b08e562
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/ms-icon-150x150.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/ms-icon-310x310.png b/pointeuse/install/bin/electron/resources/app/img/favicon/ms-icon-310x310.png
new file mode 100644 (file)
index 0000000..12046d8
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/ms-icon-310x310.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/favicon/ms-icon-70x70.png b/pointeuse/install/bin/electron/resources/app/img/favicon/ms-icon-70x70.png
new file mode 100644 (file)
index 0000000..5135560
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/favicon/ms-icon-70x70.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/fingerprint/finger1.svg b/pointeuse/install/bin/electron/resources/app/img/fingerprint/finger1.svg
new file mode 100644 (file)
index 0000000..a787ffa
--- /dev/null
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="336.419px" height="336.419px" viewBox="0 0 336.419 336.419" style="enable-background:new 0 0 336.419 336.419;"
+        xml:space="preserve">
+<g>
+       <g>
+               <path d="M310.059,77.375c-2.275-1.054-4.688-1.622-6.943-1.622c-3.265,0-5.985,1.15-7.687,3.203
+                       c-10.058,12.245-19.267,36.062-26.683,55.199c-3.411,8.848-7.99,20.689-11.084,26.247c-1.69-16.281,5.616-75.019,8.429-97.639
+                       l0.048-0.365c1.954-15.713,2.262-18.471,2.163-19.698c-0.757-8.747-3.812-14.669-9.086-17.592
+                       c-5.332-2.964-12.576-2.327-20.615,1.802c-4.035,2.074-5.664,10.061-11.539,46.375l-0.024,0.164
+                       c-3.233,19.944-10.67,65.892-16.386,73.222c-5.088-11.182-8.843-72.945-10.465-99.679c-1.126-18.719-1.803-29.465-2.525-32.759
+                       C196.132,7.356,188.09,1.03,179.75,0.13c-6.937-0.826-12.902,2.327-16.055,8.309c-5.501,5.344-5.019,24.379-2.512,69.552
+                       c1.191,21.5,3.651,65.905-0.176,70.606c-6.896-1.252-16.904-29.658-29.737-84.46c-3.598-15.345-4.728-19.972-6.016-22.046
+                       c-2.337-7.089-11.543-13.071-20.168-13.071c-0.739,0-1.458,0.048-2.168,0.137c-4.56,0.575-15.104,4.016-14.253,23.344
+                       c4.192,27.017,9.416,46.986,14.467,66.383l0.101,0.381c3.027,11.613,5.891,22.592,8.414,34.721
+                       c5.944,28.644,1.651,45.857,1.602,46.055c-0.389,1.773-1.017,2.834-1.874,3.155c-0.313,0.113-0.698,0.186-1.129,0.186
+                       c-2.519,0-6.16-1.938-8.025-3.155c-3.836-8.809-23.033-50.832-42.604-57.849l-0.708-0.265l-0.729,0.021
+                       c-7.373,0.187-12.944,2.587-16.579,7.146c-5.744,7.208-4.259,17.003-3.869,18.964l0.241,0.719
+                       c0.144,0.308,14.104,30.744,15.632,44.549c1.325,11.854,11.492,25.29,19.667,36.098l0.335,0.444
+                       c2.667,3.535,4.965,6.595,6.753,9.394c23.899,28.815,63.098,54.396,63.423,54.611c4.824,4.127,7.399,7.963,7.476,11.129
+                       c0.049,2.066-1.101,3.217-1.14,3.265l-0.95,0.869l0.08,0.089h-0.385v7.009h113.93v-2.361l5.839-19.698
+                       c18.35-58.648,18.951-109.707,18.924-110.057c0.188-1.861,5.432-19.684,9.654-34.07l0.113-0.37
+                       c8.401-28.678,18.873-64.354,21.357-78.032C319.733,85.965,316.353,80.284,310.059,77.375z M310.856,90.415
+                       c-2.413,13.306-13.316,50.448-21.27,77.574c-6.892,23.467-9.726,33.283-9.958,35.924c0,0.489-0.212,49.354-18.606,108.133
+                       l-5.146,17.364h-97.364c0.397-1.19,0.681-2.566,0.669-4.168c-0.024-5.63-3.595-11.525-10.688-17.556
+                       c-0.392-0.253-39.279-25.872-61.717-52.879c-1.795-2.868-4.531-6.489-7.181-9.979c-7.183-9.5-17.031-22.535-18.1-32.186
+                       c-1.602-14.396-14.452-42.935-16.091-46.51c-0.204-1.444-0.876-7.814,2.411-11.915c1.986-2.484,5.277-3.869,9.78-4.115
+                       c17.539,7.31,37.574,53.824,37.772,54.296l0.428,0.993l0.859,0.657c1.201,0.875,7.5,5.263,13.604,5.263
+                       c1.398,0,2.715-0.219,3.891-0.667c2.435-0.914,5.602-3.176,6.812-8.74c0.204-0.753,4.808-18.908-1.548-49.527
+                       c-2.531-12.25-5.46-23.447-8.547-35.315l-0.053-0.173c-4.983-19.074-10.145-38.799-14.258-65.158
+                       c-0.383-8.831,2.248-14.046,7.376-14.7c5.852-0.828,13.246,3.983,14.062,7.775l1.027,2.929c1.086,3.54,3.136,12.338,4.507,18.219
+                       c11.63,49.579,22.526,90.624,37.919,90.624c1.253,0,3.092-0.364,4.749-2.127c6.33-6.673,5.33-33.511,2.913-76.937
+                       c-1.174-21.033-2.659-59.306-0.298-63.071l0.953-1.966c1.451-3.123,5.055-4.524,7.915-4.524c0.418,0,0.818,0.022,1.205,0.07
+                       c4.887,0.525,10.249,4.38,11.026,7.934c0.608,2.729,1.399,15.84,2.333,31.007l0.027,0.51c5.257,86.76,8.74,107.943,17.687,107.943
+                       c10.163,0,15.133-20.192,24.934-80.857l0.048-0.253c2.402-14.857,6.02-37.206,7.632-40.491c5.253-2.628,10.026-3.273,12.795-1.752
+                       c3.518,1.944,4.675,7.166,5.017,11.156c0.011,1.083-1.077,9.781-2.118,18.206c-9.503,76.369-10.869,102.571-5.619,107.825
+                       c1.393,1.38,3.357,1.979,5.116,1.574c5.359-1.129,8.901-9.185,18.415-33.83c7.193-18.591,16.125-41.708,25.396-52.982
+                       c0.075-0.08,0.517-0.308,1.485-0.308c1.136,0,2.433,0.308,3.668,0.876C309.032,85.657,311.339,87.751,310.856,90.415z"/>
+               <g>
+                       <path d="M51.312,189.649c-0.109-0.64-0.15-1.267-0.187-1.903c-11.43-1.102-21.666-8.818-25.259-20.457
+                               c-4.772-15.468,3.932-31.929,19.397-36.701c15.464-4.769,31.923,3.929,36.697,19.397c2.091,6.791,1.525,13.75-1.023,19.839
+                               c2.183,1.007,4.137,2.595,5.592,4.593c3.887-7.977,4.941-17.354,2.12-26.501c-5.912-19.15-26.303-29.937-45.457-24.029
+                               c-19.159,5.916-29.937,26.312-24.028,45.468c4.678,15.154,18.425,25.017,33.448,25.564
+                               C52.083,193.181,51.617,191.429,51.312,189.649z"/>
+               </g>
+       </g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/fingerprint/finger2.svg b/pointeuse/install/bin/electron/resources/app/img/fingerprint/finger2.svg
new file mode 100644 (file)
index 0000000..6453559
--- /dev/null
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="753.658px" height="753.658px" viewBox="0 0 753.658 753.658" style="enable-background:new 0 0 753.658 753.658;"
+        xml:space="preserve">
+<g>
+       <g>
+               <path d="M672.523,173.331c-5.098-2.369-10.503-3.627-15.553-3.627c-7.321,0-13.401,2.561-17.22,7.177
+                       c-22.538,27.429-43.16,80.78-59.783,123.657c-7.634,19.815-17.893,46.34-24.822,58.799c-3.782-36.49,12.58-168.076,18.875-218.733
+                       l0.104-0.826c4.393-35.199,5.077-41.37,4.845-44.111c-1.687-19.61-8.539-32.877-20.346-39.417
+                       c-11.941-6.639-28.164-5.214-46.182,4.037c-9.044,4.661-12.695,22.546-25.852,103.898l-0.044,0.361
+                       c-7.262,44.687-23.912,147.612-36.716,164.04c-11.405-25.056-19.801-163.413-23.436-223.302
+                       c-2.529-41.95-4.056-66.022-5.667-73.394c-3.435-15.411-21.443-29.589-40.12-31.597c-15.545-1.859-28.907,5.212-35.971,18.621
+                       c-12.325,11.964-11.243,54.607-5.632,155.809c2.673,48.151,8.173,147.631-0.399,158.161
+                       c-15.438-2.799-37.872-66.441-66.615-189.21c-8.065-34.38-10.583-44.725-13.483-49.388c-5.228-15.879-25.85-29.274-45.17-29.274
+                       c-1.655,0-3.266,0.108-4.861,0.301c-10.211,1.294-33.843,8.995-31.933,52.307c9.399,60.506,21.101,105.247,32.412,148.702
+                       l0.23,0.861c6.775,26.008,13.187,50.602,18.841,77.776c13.321,64.165,3.699,102.74,3.586,103.186
+                       c-0.87,3.979-2.268,6.339-4.2,7.068c-0.689,0.245-1.561,0.396-2.527,0.396c-5.646,0-13.803-4.323-17.969-7.045
+                       c-8.606-19.74-51.609-113.891-95.447-129.61l-1.591-0.587l-1.625,0.038c-16.525,0.418-29.01,5.811-37.151,16.016
+                       c-12.864,16.142-9.538,38.083-8.668,42.495l0.537,1.595c0.323,0.689,31.597,68.868,35.021,99.817
+                       c2.974,26.541,25.74,56.652,44.062,80.85l0.755,0.994c5.965,7.914,11.117,14.768,15.118,21.039
+                       c53.543,64.571,141.356,121.878,142.094,122.338c10.794,9.254,16.57,17.85,16.747,24.955c0.106,4.628-2.468,7.205-2.561,7.297
+                       l-2.128,1.948l0.18,0.208h-0.855v15.701h255.229v-5.29l13.08-44.13c41.107-131.391,42.454-245.768,42.395-246.541
+                       c0.412-4.188,12.158-44.098,21.62-76.337l0.26-0.817c18.819-64.249,42.271-144.171,47.837-174.828
+                       C694.187,192.566,686.613,179.854,672.523,173.331z M674.31,202.537c-5.414,29.807-29.831,113.013-47.656,173.782
+                       c-15.425,52.589-21.784,74.579-22.293,80.481c0,1.103-0.481,110.581-41.697,242.233l-11.529,38.916H333.026
+                       c0.886-2.669,1.515-5.743,1.499-9.346c-0.062-12.604-8.062-25.804-23.951-39.328c-0.874-0.569-87.993-57.952-138.254-118.452
+                       c-4.017-6.42-10.15-14.539-16.085-22.357c-16.098-21.295-38.159-50.489-40.555-72.109c-3.587-32.26-32.366-96.166-36.047-104.181
+                       c-0.449-3.244-1.962-17.522,5.402-26.708c4.458-5.559,11.822-8.666,21.911-9.219c39.297,16.376,84.176,120.587,84.617,121.646
+                       l0.952,2.208l1.932,1.486c2.683,1.964,16.789,11.794,30.467,11.794c3.138,0,6.083-0.509,8.72-1.519
+                       c5.458-2.04,12.545-7.113,15.252-19.564c0.463-1.688,10.778-42.358-3.462-110.948c-5.672-27.457-12.238-52.542-19.146-79.115
+                       l-0.128-0.402c-11.161-42.728-22.722-86.917-31.934-145.967c-0.855-19.776,5.034-31.46,16.525-32.935
+                       c13.11-1.837,29.669,8.935,31.499,17.422l2.298,6.562c2.443,7.944,7.027,27.641,10.105,40.815
+                       c26.046,111.074,50.461,203.032,84.939,203.032c2.803,0,6.931-0.824,10.638-4.773c14.186-14.956,11.94-75.065,6.532-172.355
+                       c-2.637-47.117-5.965-132.866-0.675-141.284l2.144-4.42c3.25-6.995,11.312-10.135,17.723-10.135c0.936,0,1.841,0.066,2.703,0.167
+                       c10.95,1.176,22.957,9.82,24.696,17.781c1.366,6.1,3.146,35.47,5.229,69.447l0.061,1.142
+                       c11.777,194.362,19.58,241.816,39.621,241.816c22.771,0,33.902-45.234,55.855-181.122l0.116-0.575
+                       c5.366-33.288,13.477-83.349,17.08-90.7c11.777-5.907,22.478-7.354,28.665-3.945c7.891,4.358,10.475,16.058,11.248,24.996
+                       c0.017,2.427-2.416,21.927-4.753,40.786c-21.283,171.091-24.349,229.784-12.591,241.55c3.122,3.102,7.514,4.443,11.457,3.526
+                       c12.019-2.509,19.945-20.574,41.261-75.777c16.113-41.639,36.123-93.445,56.881-118.682c0.177-0.197,1.158-0.706,3.331-0.706
+                       c2.544,0,5.458,0.706,8.215,1.962C670.207,191.876,675.376,196.567,674.31,202.537z"/>
+               <g>
+                       <path d="M216.394,16.412c-44.913,0-81.447,36.542-81.447,81.463c0,40.038,29.07,73.352,67.19,80.11
+                               c-1.869-5.596-2.913-11.163-3.653-16.909c-27.567-7.827-47.838-33.167-47.838-63.201c0-36.263,29.5-65.762,65.748-65.762
+                               c36.261,0,65.746,29.499,65.746,65.762c0,19.53-8.65,37.037-22.231,49.079c0.627,1.238,1.238,2.48,1.717,3.823
+                               c1.429,4.09,2.44,8.233,3.142,12.427c20.025-14.846,33.073-38.548,33.073-65.329C297.84,52.953,261.295,16.412,216.394,16.412z"
+                               />
+               </g>
+       </g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/fingerprint/finger3.svg b/pointeuse/install/bin/electron/resources/app/img/fingerprint/finger3.svg
new file mode 100644 (file)
index 0000000..71aa557
--- /dev/null
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="357.499px" height="357.499px" viewBox="0 0 357.499 357.499" style="enable-background:new 0 0 357.499 357.499;"
+        xml:space="preserve">
+<g>
+       <g>
+               <path d="M310.74,98.45c-2.269-1.058-4.688-1.619-6.937-1.619c-3.265,0-5.989,1.143-7.693,3.203
+                       c-10.054,12.245-19.267,36.059-26.679,55.2c-3.409,8.844-7.991,20.685-11.085,26.246c-1.69-16.288,5.619-75.026,8.43-97.64
+                       l0.051-0.368c1.951-15.713,2.262-18.468,2.159-19.691c-0.76-8.754-3.812-14.676-9.089-17.595
+                       c-5.328-2.963-12.573-2.327-20.608,1.802c-4.038,2.081-5.667,10.064-11.54,46.379l-0.027,0.161
+                       c-3.23,19.948-10.67,65.892-16.385,73.226c-5.086-11.185-8.843-72.945-10.465-99.679c-1.13-18.726-1.801-29.472-2.525-32.762
+                       c-1.53-6.878-9.568-13.208-17.917-14.104c-6.938-0.83-12.901,2.327-16.057,8.312c-5.501,5.34-5.017,24.376-2.512,69.55
+                       c1.191,21.495,3.655,65.9-0.171,70.601c-6.901-1.249-16.906-29.658-29.739-84.46c-3.598-15.347-4.729-19.965-6.016-22.046
+                       c-2.341-7.089-11.546-13.067-20.17-13.067c-0.741,0-1.458,0.048-2.169,0.133c-4.56,0.579-15.1,4.016-14.248,23.35
+                       c4.187,27.009,9.413,46.981,14.462,66.378l0.101,0.385c3.032,11.61,5.895,22.588,8.418,34.718
+                       c5.939,28.642,1.649,45.862,1.6,46.061c-0.389,1.775-1.02,2.83-1.874,3.155c-0.316,0.109-0.698,0.178-1.129,0.178
+                       c-2.519,0-6.16-1.931-8.029-3.146c-3.833-8.812-23.029-50.839-42.604-57.856l-0.705-0.262l-0.732,0.017
+                       c-7.373,0.187-12.941,2.594-16.575,7.149c-5.744,7.205-4.257,16.998-3.872,18.969l0.245,0.712
+                       c0.144,0.309,14.106,30.741,15.632,44.557c1.323,11.848,11.492,25.29,19.664,36.09l0.335,0.445
+                       c2.671,3.531,4.971,6.591,6.757,9.391c23.899,28.824,63.098,54.405,63.421,54.61c4.825,4.131,7.397,7.967,7.474,11.14
+                       c0.05,2.066-1.1,3.217-1.134,3.258l-0.95,0.869l0.081,0.092h-0.397v7.009h113.934v-2.361l5.839-19.697
+                       c18.346-58.652,18.948-109.708,18.921-110.054c0.195-1.868,5.435-19.685,9.657-34.074l0.109-0.366
+                       c8.405-28.68,18.877-64.355,21.361-78.041C320.421,107.036,317.04,101.362,310.74,98.45z M311.544,111.486
+                       c-2.416,13.306-13.319,50.448-21.272,77.574c-6.893,23.476-9.723,33.291-9.959,35.926c0,0.493-0.212,49.361-18.603,108.13
+                       l-5.15,17.371h-97.367c0.397-1.191,0.685-2.563,0.671-4.172c-0.022-5.626-3.593-11.519-10.686-17.556
+                       c-0.395-0.253-39.279-25.868-61.72-52.876c-1.795-2.864-4.531-6.488-7.18-9.979c-7.181-9.507-17.029-22.538-18.096-32.189
+                       c-1.602-14.4-14.456-42.927-16.093-46.507c-0.207-1.447-0.876-7.819,2.411-11.919c1.983-2.481,5.279-3.869,9.781-4.115
+                       c17.535,7.31,37.57,53.828,37.767,54.301l0.429,0.985l0.855,0.664c1.207,0.876,7.503,5.264,13.608,5.264
+                       c1.395,0,2.715-0.226,3.886-0.678c2.435-0.91,5.607-3.176,6.815-8.733c0.2-0.753,4.805-18.907-1.552-49.525
+                       c-2.527-12.257-5.457-23.454-8.547-35.315l-0.049-0.18c-4.983-19.074-10.145-38.799-14.262-65.158
+                       c-0.382-8.827,2.253-14.042,7.376-14.702c5.852-0.819,13.249,3.989,14.065,7.777l1.028,2.929
+                       c1.082,3.547,3.135,12.338,4.502,18.219c11.635,49.582,22.526,90.631,37.924,90.631c1.251,0,3.087-0.368,4.748-2.13
+                       c6.324-6.677,5.327-33.508,2.909-76.938c-1.17-21.032-2.657-59.309-0.294-63.067l0.95-1.973c1.449-3.123,5.056-4.524,7.919-4.524
+                       c0.417,0,0.812,0.029,1.206,0.073c4.88,0.525,10.246,4.384,11.02,7.938c0.612,2.723,1.403,15.833,2.334,31l0.03,0.51
+                       c5.257,86.76,8.74,107.943,17.687,107.943c10.16,0,15.129-20.192,24.934-80.85l0.048-0.256
+                       c2.402-14.859,6.016-37.206,7.632-40.488c5.249-2.637,10.026-3.282,12.799-1.761c3.518,1.945,4.674,7.167,5.01,11.158
+                       c0.014,1.083-1.074,9.788-2.115,18.206c-9.507,76.373-10.872,102.571-5.626,107.823c1.396,1.387,3.36,1.985,5.12,1.574
+                       c5.358-1.118,8.897-9.185,18.411-33.824c7.196-18.587,16.128-41.713,25.399-52.979c0.074-0.087,0.52-0.314,1.484-0.314
+                       c1.137,0,2.437,0.314,3.672,0.876C309.713,106.728,312.023,108.822,311.544,111.486z"/>
+               <g>
+                       <path d="M182.504,0.259c-19.905-2.38-38.035,11.887-40.416,31.792c-2.117,17.749,9.007,34.054,25.543,39.069
+                               c-0.525-2.584-0.696-5.103-0.725-7.693c-11.798-4.926-19.445-17.234-17.857-30.546c1.923-16.071,16.563-27.583,32.626-25.663
+                               c16.074,1.922,27.586,16.555,25.67,32.625c-1.04,8.667-5.794,15.963-12.457,20.581c0.213,0.585,0.418,1.167,0.555,1.788
+                               c0.418,1.886,0.65,3.778,0.739,5.672c9.657-5.515,16.7-15.338,18.117-27.206C216.675,20.77,202.418,2.64,182.504,0.259z"/>
+               </g>
+       </g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/fingerprint/finger4.svg b/pointeuse/install/bin/electron/resources/app/img/fingerprint/finger4.svg
new file mode 100644 (file)
index 0000000..2ebb62e
--- /dev/null
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="336.421px" height="336.421px" viewBox="0 0 336.421 336.421" style="enable-background:new 0 0 336.421 336.421;"
+        xml:space="preserve">
+<g>
+       <g>
+               <path d="M300.203,77.372c-2.272-1.057-4.691-1.618-6.94-1.618c-3.265,0-5.988,1.143-7.692,3.203
+                       c-10.055,12.244-19.267,36.059-26.676,55.199c-3.412,8.845-7.994,20.686-11.088,26.246c-1.69-16.288,5.619-75.025,8.429-97.639
+                       l0.051-0.368c1.951-15.713,2.263-18.468,2.163-19.691c-0.763-8.754-3.815-14.676-9.093-17.595
+                       c-5.328-2.964-12.572-2.327-20.607,1.802c-4.035,2.081-5.668,10.064-11.54,46.379l-0.027,0.161
+                       c-3.23,19.948-10.67,65.892-16.386,73.226c-5.085-11.185-8.843-72.945-10.465-99.679c-1.129-18.726-1.8-29.472-2.525-32.762
+                       c-1.529-6.879-9.568-13.208-17.911-14.104c-6.938-0.83-12.903,2.327-16.057,8.312c-5.503,5.34-5.019,24.376-2.514,69.55
+                       c1.193,21.495,3.655,65.9-0.171,70.601c-6.901-1.249-16.906-29.658-29.737-84.46c-3.6-15.347-4.731-19.965-6.018-22.046
+                       c-2.341-7.089-11.546-13.067-20.17-13.067c-0.739,0-1.458,0.048-2.169,0.134c-4.558,0.578-15.1,4.016-14.248,23.349
+                       c4.187,27.009,9.413,46.981,14.462,66.378l0.103,0.385c3.031,11.609,5.893,22.588,8.417,34.718
+                       c5.939,28.642,1.649,45.862,1.602,46.061c-0.39,1.776-1.02,2.83-1.875,3.155c-0.314,0.109-0.696,0.178-1.127,0.178
+                       c-2.521,0-6.162-1.93-8.028-3.145c-3.834-8.812-23.031-50.84-42.606-57.857l-0.705-0.262l-0.732,0.018
+                       c-7.373,0.187-12.941,2.594-16.575,7.148c-5.742,7.206-4.257,17-3.872,18.969l0.247,0.713c0.144,0.308,14.104,30.74,15.632,44.556
+                       c1.321,11.848,11.49,25.29,19.662,36.091l0.337,0.444c2.669,3.532,4.969,6.591,6.755,9.391c23.9,28.825,63.1,54.405,63.421,54.61
+                       c4.825,4.131,7.397,7.967,7.474,11.14c0.05,2.067-1.1,3.217-1.134,3.258l-0.95,0.869l0.081,0.093h-0.389v7.008h113.918v-2.361
+                       l5.839-19.697c18.346-58.652,18.951-109.708,18.921-110.054c0.195-1.868,5.438-19.684,9.661-34.074l0.105-0.366
+                       c8.405-28.679,18.88-64.355,21.364-78.041C309.877,85.958,306.5,80.285,300.203,77.372z M301,90.409
+                       c-2.416,13.305-13.319,50.448-21.272,77.573c-6.893,23.477-9.723,33.291-9.959,35.926c0,0.493-0.212,49.361-18.603,108.13
+                       l-5.15,17.371h-97.362c0.396-1.19,0.683-2.562,0.669-4.172c-0.021-5.626-3.592-11.519-10.684-17.556
+                       c-0.397-0.253-39.28-25.868-61.722-52.875c-1.793-2.864-4.531-6.489-7.18-9.979c-7.181-9.507-17.027-22.538-18.096-32.188
+                       c-1.602-14.4-14.456-42.928-16.091-46.506c-0.207-1.447-0.876-7.821,2.411-11.921c1.983-2.481,5.277-3.869,9.78-4.115
+                       c17.535,7.31,37.569,53.829,37.766,54.301l0.431,0.986l0.854,0.664c1.207,0.875,7.503,5.263,13.608,5.263
+                       c1.395,0,2.715-0.226,3.886-0.678c2.435-0.91,5.607-3.176,6.815-8.733c0.2-0.753,4.805-18.907-1.552-49.525
+                       c-2.526-12.256-5.457-23.454-8.547-35.315l-0.05-0.18C95.97,97.806,90.808,78.081,86.691,51.722
+                       c-0.382-8.828,2.253-14.043,7.376-14.702c5.852-0.82,13.25,3.989,14.066,7.777l1.027,2.929c1.083,3.547,3.136,12.339,4.503,18.22
+                       c11.634,49.582,22.525,90.631,37.923,90.631c1.25,0,3.087-0.368,4.748-2.13c6.326-6.677,5.327-33.508,2.909-76.937
+                       c-1.17-21.033-2.657-59.31-0.294-63.067l0.95-1.973c1.451-3.123,5.056-4.524,7.918-4.524c0.418,0,0.813,0.029,1.207,0.074
+                       c4.883,0.525,10.245,4.384,11.022,7.938c0.609,2.722,1.399,15.833,2.334,31l0.027,0.51c5.256,86.761,8.74,107.944,17.686,107.944
+                       c10.164,0,15.133-20.192,24.934-80.85l0.048-0.257c2.406-14.859,6.017-37.206,7.632-40.488c5.25-2.637,10.027-3.282,12.799-1.76
+                       c3.518,1.945,4.675,7.167,5.01,11.158c0.014,1.083-1.074,9.788-2.114,18.206c-9.507,76.373-10.872,102.573-5.626,107.824
+                       c1.396,1.386,3.36,1.984,5.119,1.574c5.359-1.119,8.897-9.184,18.411-33.825c7.197-18.587,16.129-41.713,25.399-52.979
+                       c0.075-0.087,0.521-0.315,1.488-0.315c1.133,0,2.434,0.315,3.669,0.876C299.176,85.65,301.479,87.745,301,90.409z"/>
+               <g>
+                       <path d="M245.691,4.16c-19.677-3.815-38.79,9.091-42.619,28.771c-3.401,17.547,6.502,34.617,22.634,40.821
+                               c-0.342-2.613-0.328-5.14-0.164-7.719c-11.416-5.775-18.138-18.604-15.592-31.763c3.091-15.893,18.528-26.308,34.414-23.223
+                               c15.885,3.08,26.303,18.512,23.216,34.405c-1.663,8.561-6.937,15.496-13.915,19.618c0.164,0.599,0.329,1.194,0.425,1.82
+                               c0.28,1.915,0.366,3.821,0.321,5.717c10.034-4.798,17.768-14.084,20.047-25.817C278.277,27.104,265.375,7.984,245.691,4.16z"/>
+               </g>
+       </g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/fingerprint/finger5.svg b/pointeuse/install/bin/electron/resources/app/img/fingerprint/finger5.svg
new file mode 100644 (file)
index 0000000..5aa5729
--- /dev/null
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="336.425px" height="336.425px" viewBox="0 0 336.425 336.425" style="enable-background:new 0 0 336.425 336.425;"
+        xml:space="preserve">
+<g>
+       <g>
+               <path d="M289.997,77.372c-2.272-1.057-4.691-1.618-6.94-1.618c-3.265,0-5.988,1.143-7.692,3.203
+                       c-10.055,12.244-19.268,36.059-26.676,55.199c-3.412,8.845-7.994,20.686-11.088,26.248c-1.69-16.288,5.619-75.027,8.429-97.641
+                       l0.051-0.368c1.951-15.713,2.263-18.468,2.163-19.691c-0.763-8.754-3.815-14.676-9.093-17.595
+                       c-5.328-2.964-12.573-2.326-20.608,1.802c-4.034,2.082-5.667,10.064-11.539,46.379l-0.027,0.162
+                       c-3.23,19.946-10.671,65.891-16.386,73.226c-5.085-11.187-8.843-72.946-10.465-99.681c-1.129-18.726-1.8-29.47-2.525-32.762
+                       c-1.53-6.879-9.568-13.206-17.912-14.104c-6.938-0.83-12.903,2.327-16.057,8.312c-5.503,5.34-5.019,24.376-2.514,69.55
+                       c1.192,21.495,3.655,65.9-0.171,70.601c-6.9-1.247-16.905-29.656-29.737-84.46c-3.6-15.345-4.731-19.965-6.018-22.046
+                       c-2.341-7.089-11.546-13.067-20.17-13.067c-0.739,0-1.458,0.05-2.169,0.134c-4.559,0.578-15.101,4.016-14.249,23.349
+                       c4.188,27.011,9.413,46.981,14.462,66.378l0.103,0.385c3.03,11.609,5.893,22.588,8.417,34.718
+                       c5.939,28.642,1.649,45.862,1.602,46.063c-0.39,1.773-1.02,2.827-1.875,3.152c-0.315,0.109-0.696,0.178-1.127,0.178
+                       c-2.521,0-6.162-1.93-8.029-3.145c-3.834-8.809-23.031-50.84-42.605-57.855l-0.705-0.264l-0.732,0.018
+                       c-7.373,0.187-12.941,2.594-16.575,7.148c-5.742,7.206-4.257,17-3.872,18.969l0.246,0.713c0.144,0.308,14.104,30.74,15.633,44.556
+                       c1.321,11.848,11.49,25.29,19.662,36.091l0.337,0.444c2.669,3.532,4.969,6.591,6.755,9.391
+                       c23.9,28.825,63.099,54.405,63.421,54.61c4.825,4.131,7.397,7.967,7.474,11.14c0.05,2.067-1.1,3.217-1.134,3.258l-0.95,0.869
+                       l0.08,0.096h-0.388v7.009H242.72v-2.365l5.838-19.694c18.347-58.655,18.952-109.711,18.922-110.057
+                       c0.194-1.868,5.438-19.684,9.66-34.074l0.106-0.366c8.405-28.679,18.88-64.355,21.364-78.041
+                       C299.671,85.962,296.294,80.285,289.997,77.372z M290.794,90.409c-2.416,13.305-13.318,50.448-21.271,77.573
+                       c-6.893,23.477-9.723,33.291-9.959,35.926c0,0.493-0.212,49.361-18.603,108.134l-5.15,17.371h-97.362
+                       c0.396-1.194,0.683-2.566,0.669-4.176c-0.021-5.626-3.591-11.519-10.684-17.556c-0.397-0.253-39.28-25.864-61.722-52.872
+                       c-1.793-2.867-4.531-6.492-7.18-9.982c-7.182-9.507-17.027-22.538-18.097-32.188c-1.602-14.4-14.455-42.928-16.091-46.506
+                       c-0.207-1.447-0.876-7.821,2.411-11.921c1.983-2.481,5.277-3.869,9.781-4.113c17.535,7.31,37.568,53.827,37.765,54.299
+                       l0.431,0.986l0.854,0.664c1.206,0.875,7.503,5.263,13.608,5.263c1.395,0,2.715-0.226,3.886-0.678
+                       c2.435-0.91,5.607-3.176,6.815-8.733c0.2-0.753,4.805-18.907-1.552-49.523c-2.525-12.258-5.457-23.456-8.547-35.317l-0.049-0.18
+                       c-4.983-19.073-10.145-38.798-14.262-65.158c-0.381-8.828,2.253-14.041,7.376-14.7c5.852-0.821,13.251,3.987,14.067,7.775
+                       l1.027,2.929c1.083,3.547,3.136,12.339,4.503,18.22c11.634,49.582,22.524,90.631,37.922,90.631c1.251,0,3.087-0.368,4.749-2.13
+                       c6.326-6.675,5.327-33.508,2.909-76.937c-1.17-21.033-2.657-59.31-0.294-63.067l0.949-1.973c1.451-3.121,5.057-4.524,7.919-4.524
+                       c0.417,0,0.813,0.029,1.207,0.074c4.881,0.525,10.246,4.384,11.021,7.938c0.609,2.722,1.401,15.833,2.336,31l0.027,0.512
+                       c5.256,86.759,8.74,107.942,17.686,107.942c10.164,0,15.133-20.191,24.934-80.85l0.048-0.257
+                       c2.406-14.857,6.017-37.204,7.632-40.488c5.249-2.637,10.026-3.28,12.799-1.76c3.518,1.945,4.675,7.167,5.01,11.158
+                       c0.014,1.083-1.074,9.789-2.114,18.206c-9.508,76.373-10.873,102.574-5.627,107.827c1.396,1.383,3.361,1.981,5.12,1.571
+                       c5.358-1.119,8.897-9.182,18.411-33.825c7.196-18.587,16.129-41.713,25.399-52.979c0.075-0.087,0.52-0.315,1.488-0.315
+                       c1.133,0,2.434,0.315,3.669,0.876C288.971,85.654,291.273,87.745,290.794,90.409z"/>
+               <g>
+                       <path d="M300.582,60.104c-17.501-9.767-39.69-3.473-49.471,14.031c-8.703,15.609-4.617,34.917,8.761,45.851
+                               c0.503-2.593,1.293-4.99,2.262-7.391c-9.041-9.048-11.434-23.332-4.894-35.043c7.892-14.133,25.803-19.207,39.937-11.318
+                               c14.123,7.885,19.209,25.794,11.317,39.935c-4.251,7.614-11.431,12.556-19.343,14.294c-0.027,0.62-0.064,1.239-0.171,1.86
+                               c-0.332,1.903-0.835,3.739-1.472,5.53c11.03-1.43,21.27-7.833,27.101-18.276C324.386,92.07,318.097,69.878,300.582,60.104z"/>
+               </g>
+       </g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-check.svg b/pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-check.svg
new file mode 100644 (file)
index 0000000..3634d28
--- /dev/null
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="317.765px" height="317.765px" viewBox="0 0 317.765 317.765" style="enable-background:new 0 0 317.765 317.765;"
+        xml:space="preserve">
+<g>
+       <g>
+               <path d="M45.472,89.304c2.127,0.465,4.1,0.435,10.171-4.227c2.689-2.067,6.671-5.554,10.354-10.418l1.608-2.134
+                       c13.772-18.317,46.016-61.202,92.584-58.875c38.405,2.803,65.626,31.804,78.726,83.879c0.445,1.77,0.719,2.856,1.013,3.689
+                       c2.002,8.516,5.355,19.126,10.194,22.617c1.201,0.869,2.588,1.283,3.967,1.283c2.102,0,4.172-0.979,5.499-2.814
+                       c2.118-2.93,1.554-6.985-1.225-9.23c-1.335-1.731-3.856-8.981-5.353-15.461c-0.086-0.385-0.212-0.762-0.362-1.121
+                       c-0.124-0.443-0.37-1.406-0.589-2.272c-2.077-8.252-7.591-30.178-20.964-50.799C213.827,16.796,190.279,2.229,161.09,0.124
+                       c-0.05-0.005-0.094-0.005-0.144-0.009C107.148-2.627,71.838,44.33,56.764,64.382l-1.588,2.104
+                       c-4.127,5.457-8.999,8.853-10.677,9.837c-0.575,0.221-1.121,0.525-1.629,0.916c-2.11,1.602-3.14,4.324-2.573,6.906
+                       C40.868,86.718,42.894,88.736,45.472,89.304z"/>
+               <path d="M215.295,115.305c5.12-12.783,5.243-25.991,0.343-36.234c-4.374-9.135-12.525-15.759-23.572-19.14
+                       c-16.214-4.962-35.871,4.043-53.873,24.674c-0.231,0.251-25.865,27.213-52.785,43.694c-0.2,0.12-19.903,11.943-40.478,17.547
+                       c-3.614,0.984-5.751,4.709-4.762,8.323c0.987,3.614,4.709,5.746,8.323,4.76c22.388-6.097,43.062-18.499,43.968-19.044
+                       c29.198-17.879,55.678-46.061,55.904-46.321c10.935-12.523,27.109-24.533,39.733-20.668c7.423,2.274,12.58,6.322,15.308,12.031
+                       c3.268,6.831,3.012,16.063-0.695,25.339c-6.916,17.263-28.424,38.109-60.573,58.697c-16.124,10.335-56.724,35.683-85.395,47.94
+                       c-3.443,1.472-5.039,5.455-3.568,8.901c1.097,2.57,3.599,4.113,6.233,4.113c0.89,0,1.795-0.175,2.665-0.548
+                       c29.607-12.658,70.969-38.472,87.375-48.98C173.866,164.75,205.104,140.768,215.295,115.305z"/>
+               <path d="M106.094,64.687c-3.075,3.391-5.838,7.029-8.811,10.506c-3.893,4.555-8.158,8.809-12.602,12.821
+                       c-4.572,4.128-8.266,7.082-13.66,10.177c-5.722,3.284-11.546,6.602-17.472,9.486c-2.04,0.994-3.792,1.639-6.083,2.331
+                       c-3.54,1.061-5.73,4.712-4.738,8.34c0.963,3.498,4.803,5.799,8.343,4.738c6.935-2.086,13.214-5.653,19.474-9.209
+                       c5.291-3.008,10.54-5.713,15.401-9.409c9.464-7.202,17.616-15.612,25.112-24.811c3.037-3.725,6.283-7.275,9.671-10.681
+                       c1.854-1.862,3.765-3.657,5.722-5.409c1.013-0.911,2.046-1.8,3.095-2.68c0.525-0.445,1.068-0.883,1.602-1.321
+                       c0.144-0.116,1.191-0.943,1.465-1.16c4.724-3.621,9.751-6.834,15.044-9.553c4.996-2.568,10.018-4.37,16.106-5.635
+                       c2.012-0.421,2.457-0.467,3.963-0.621c3.675-0.382,6.786-2.796,6.786-6.781c0-3.408-3.098-7.163-6.786-6.779
+                       C143.211,31.567,122.255,46.888,106.094,64.687z"/>
+               <path d="M53.326,194.516c14.736-5.055,90.365-33.298,132.72-92.663c2.173-3.049,1.465-7.283-1.581-9.456
+                       c-3.046-2.175-7.282-1.468-9.459,1.581c-39.95,55.995-112.036,82.89-126.083,87.711c-0.301,0.103-0.486,0.171-0.546,0.198
+                       c-3.504,1.324-5.27,5.239-3.942,8.744c1.026,2.71,3.605,4.38,6.346,4.38c0.767,0,1.545-0.133,2.313-0.41L53.326,194.516z"/>
+               <path d="M141.726,223.128c1.572-7.275,4.173-14.164,7.667-20.509c-8.152,4.559-18.619,11.365-31.792,20.048
+                       c-16.926,11.162-36.119,23.808-44.462,26.056c-3.619,0.972-5.765,4.695-4.789,8.31c0.819,3.028,3.552,5.023,6.541,5.023
+                       c0.589,0,1.177-0.075,1.766-0.236c10.465-2.816,28.896-14.965,48.408-27.825C130.398,230.476,136.175,226.674,141.726,223.128z"/>
+               <path d="M140.569,248.402c-9.212,5.886-21.135,14.359-36.166,25.334c-3.619,2.639-6.741,4.921-8.911,6.454
+                       c-3.06,2.159-3.783,6.393-1.629,9.448c1.328,1.872,3.424,2.868,5.544,2.868c1.357,0,2.722-0.4,3.906-1.242
+                       c2.253-1.591,5.422-3.901,9.084-6.574c6.771-4.941,19.97-14.578,31.272-22.106C142.198,258.025,141.158,253.282,140.569,248.402z"
+                       />
+               <path d="M153.279,282.168c-11.834,4.031-28.315,20.591-31.709,24.102c-2.608,2.69-2.541,6.981,0.15,9.586
+                       c1.321,1.276,3.017,1.909,4.716,1.909c1.772,0,3.547-0.688,4.875-2.063c9.083-9.38,21.982-20.036,26.988-20.902
+                       c2.298-0.394,5.155,0.575,8.396,2.303C161.595,292.732,157.077,287.719,153.279,282.168z"/>
+               <path d="M257.62,161.848c-5.653-2.389-11.56-4.897-16.316-8.858c-5.236-4.355-7.669-10.079-8.761-16.683
+                       c-1.424-8.614-14.489-4.948-13.079,3.605c1.926,11.663,8.274,19.763,16.84,25.814c6.981,1.906,13.565,4.773,19.603,8.47
+                       c1.649-0.346,3.128-1.314,4.157-3.066C261.741,168.248,261.029,163.286,257.62,161.848z"/>
+               <path d="M198.533,160.681c-2.464,0.675-4.702,3.146-5.04,5.797c4.021-1.256,8.199-2.176,12.477-2.754
+                       C204.358,161.277,201.723,159.802,198.533,160.681z"/>
+               <path d="M212.133,169.801c-36.233,0-65.705,29.476-65.705,65.706s29.472,65.705,65.705,65.705
+                       c36.228,0,65.706-29.475,65.706-65.705S248.36,169.801,212.133,169.801z M212.133,287.195c-28.499,0-51.688-23.188-51.688-51.688
+                       c0-28.5,23.189-51.688,51.688-51.688c28.5,0,51.688,23.188,51.688,51.688C263.821,264.006,240.633,287.195,212.133,287.195z"/>
+               <polygon points="204.228,247.717 186.491,231.414 177.005,241.739 205.515,267.928 247.874,217.711 237.166,208.67                 "/>
+       </g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-crosshair.svg b/pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-crosshair.svg
new file mode 100644 (file)
index 0000000..ea82751
--- /dev/null
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="352.968px" height="352.969px" viewBox="0 0 352.968 352.969" style="enable-background:new 0 0 352.968 352.969;"
+        xml:space="preserve">
+<g>
+       <g>
+               <path d="M68.922,87.914c-2.11,1.602-3.14,4.324-2.573,6.906c0.575,2.584,2.594,4.601,5.183,5.169
+                       c2.127,0.467,4.1,0.435,10.164-4.226c2.698-2.067,6.678-5.554,10.354-10.417l1.608-2.135
+                       c13.772-18.315,46.016-61.202,92.583-58.875c38.403,2.803,65.634,31.806,78.724,83.879c0.444,1.769,0.719,2.855,1.02,3.689
+                       c1.999,8.516,5.359,19.126,10.191,22.617c1.204,0.869,2.587,1.283,3.963,1.283c2.111,0,4.182-0.979,5.503-2.815
+                       c2.121-2.929,1.554-6.984-1.219-9.229c-1.342-1.731-3.86-8.981-5.352-15.461c-0.09-0.385-0.213-0.76-0.37-1.121
+                       c-0.123-0.441-0.366-1.406-0.582-2.271c-2.08-8.254-7.59-30.18-20.96-50.799c-17.279-26.626-40.823-41.192-70.015-43.299
+                       c-0.048-0.003-0.092-0.003-0.144-0.008C133.204,8.051,97.895,55.008,82.823,75.06l-1.588,2.106
+                       c-4.127,5.455-8.999,8.852-10.684,9.835C69.983,87.222,69.438,87.528,68.922,87.914z"/>
+               <path d="M241.351,125.994c5.113-12.784,5.236-25.992,0.336-36.234c-4.374-9.136-12.525-15.759-23.565-19.14
+                       c-16.214-4.962-35.871,4.043-53.88,24.674c-0.231,0.251-25.865,27.214-52.778,43.694c-0.199,0.12-19.91,11.943-40.484,17.547
+                       c-3.614,0.984-5.744,4.709-4.755,8.323c0.977,3.612,4.709,5.748,8.322,4.758c22.381-6.095,43.056-18.495,43.961-19.042
+                       c29.198-17.879,55.687-46.061,55.911-46.319c10.93-12.525,27.109-24.534,39.727-20.668c7.423,2.274,12.58,6.321,15.308,12.029
+                       c3.274,6.831,3.019,16.063-0.695,25.339c-6.909,17.263-28.417,38.109-60.573,58.697c-16.127,10.331-56.721,35.68-85.388,47.938
+                       c-3.45,1.472-5.042,5.455-3.575,8.897c1.101,2.573,3.605,4.113,6.233,4.113c0.89,0,1.795-0.171,2.664-0.544
+                       c29.607-12.658,70.969-38.475,87.382-48.981C199.916,175.44,231.161,151.453,241.351,125.994z"/>
+               <path d="M132.15,75.371c-3.082,3.393-5.838,7.029-8.817,10.506c-3.893,4.555-8.152,8.81-12.602,12.821
+                       c-4.565,4.129-8.267,7.084-13.66,10.178c-5.715,3.283-11.546,6.602-17.472,9.486c-2.04,0.996-3.785,1.639-6.076,2.33
+                       c-3.54,1.061-5.737,4.712-4.738,8.34c0.956,3.498,4.796,5.801,8.336,4.738c6.935-2.086,13.222-5.652,19.481-9.209
+                       c5.284-3.006,10.533-5.713,15.395-9.409c9.471-7.202,17.623-15.612,25.119-24.811c3.03-3.725,6.276-7.275,9.664-10.68
+                       c1.853-1.862,3.771-3.655,5.722-5.407c1.02-0.912,2.055-1.802,3.096-2.681c0.532-0.445,1.067-0.883,1.608-1.321
+                       c0.144-0.117,1.198-0.946,1.465-1.164c4.724-3.617,9.751-6.83,15.043-9.549c4.997-2.568,10.011-4.37,16.1-5.634
+                       c2.019-0.421,2.457-0.466,3.97-0.621c3.675-0.382,6.782-2.796,6.782-6.779c0-3.411-3.101-7.163-6.782-6.781
+                       C169.267,42.251,148.304,57.576,132.15,75.371z"/>
+               <path d="M79.382,205.204c14.729-5.054,90.365-33.297,132.71-92.663c2.176-3.049,1.471-7.282-1.582-9.454
+                       c-3.045-2.176-7.282-1.47-9.448,1.579c-39.95,55.995-112.043,82.89-126.084,87.715c-0.303,0.1-0.481,0.164-0.548,0.191
+                       c-3.504,1.328-5.263,5.243-3.942,8.747c1.027,2.71,3.605,4.381,6.347,4.381c0.768,0,1.552-0.138,2.313-0.411L79.382,205.204z"/>
+               <path d="M263.889,245.569c-9.396-3.132-20.902-11.321-32.018-19.24c-16.111-11.471-30.012-21.381-41.346-19.427
+                       c-8.515,1.472-23.389,10.975-46.872,26.456c-16.933,11.163-36.119,23.809-44.466,26.057c-3.612,0.972-5.758,4.695-4.783,8.309
+                       c0.813,3.029,3.552,5.024,6.542,5.024c0.582,0,1.177-0.075,1.766-0.236c10.458-2.816,28.89-14.965,48.405-27.825
+                       c15.762-10.391,35.38-23.322,41.714-24.414c5.76-0.985,19.849,9.041,31.173,17.11c11.933,8.494,24.276,17.286,35.594,21.061
+                       c3.556,1.188,7.392-0.739,8.576-4.285C269.358,250.593,267.435,246.753,263.889,245.569z"/>
+               <path d="M246.909,278.784c-5.462-1.978-14.346-7.464-22.942-12.771c-18.15-11.214-29.684-18.021-37.965-16.59
+                       c-8.388,1.447-25.99,13.418-55.552,34.994c-3.619,2.636-6.742,4.922-8.904,6.455c-3.06,2.155-3.792,6.393-1.629,9.444
+                       c1.321,1.876,3.417,2.875,5.544,2.875c1.348,0,2.715-0.404,3.908-1.246c2.252-1.591,5.414-3.901,9.076-6.577
+                       c11.764-8.586,43.013-31.401,49.792-32.572c4.229-0.287,19.489,9.124,28.603,14.75c9.6,5.934,18.668,11.539,25.461,13.989
+                       c3.521,1.276,7.405-0.547,8.682-4.072C252.254,283.945,250.434,280.058,246.909,278.784z"/>
+               <path d="M224.008,312.496c-3.806-2.487-7.311-4.986-10.698-7.402c-11.122-7.939-20.731-14.801-31.265-12.97
+                       c-11.87,2.047-30.759,21.046-34.427,24.831c-2.601,2.69-2.534,6.981,0.158,9.586c1.314,1.276,3.017,1.913,4.716,1.913
+                       c1.774,0,3.54-0.691,4.875-2.067c9.076-9.38,21.976-20.037,26.986-20.902c4.948-0.849,12.429,4.476,21.091,10.649
+                       c3.329,2.382,7.107,5.078,11.156,7.721c3.138,2.046,7.347,1.163,9.387-1.972C228.026,318.745,227.142,314.543,224.008,312.496z"/>
+               <path d="M283.676,172.531c-5.653-2.387-11.56-4.895-16.316-8.856c-5.243-4.354-7.68-10.078-8.768-16.683
+                       c-1.417-8.614-14.482-4.949-13.072,3.605c2.895,17.592,15.844,27.11,31.312,33.647c3.404,1.437,7.234,1.061,9.273-2.434
+                       C287.797,178.933,287.085,173.972,283.676,172.531z"/>
+               <path d="M270.515,207.911c-5.093-1.567-8.952-3.559-14.346-6.741c-9.87-5.831-18.87-14.284-23.243-25.071
+                       c-1.39-3.42-4.463-5.804-8.344-4.735c-3.251,0.894-6.125,4.909-4.736,8.342c8.083,19.924,26.632,34.984,47.062,41.278
+                       C275.292,223.567,278.844,210.479,270.515,207.911z"/>
+               <polygon points="10.617,10.679 76.504,10.679 76.504,0.166 0.104,0.166 0.104,76.565 10.617,76.565                "/>
+               <polygon points="276.565,0.166 276.565,10.679 342.456,10.679 342.456,76.565 352.968,76.565 352.968,0.166                "/>
+               <polygon points="10.513,276.402 0,276.402 0,352.803 76.396,352.803 76.396,342.29 10.513,342.29          "/>
+               <polygon points="342.346,342.29 276.456,342.29 276.456,352.803 352.859,352.803 352.859,276.402 342.346,276.402          "/>
+       </g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-remove.svg b/pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-remove.svg
new file mode 100644 (file)
index 0000000..a28f7fd
--- /dev/null
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="317.769px" height="317.769px" viewBox="0 0 317.769 317.769" style="enable-background:new 0 0 317.769 317.769;"
+        xml:space="preserve">
+<g>
+       <g>
+               <path d="M45.479,89.304c2.126,0.465,4.1,0.435,10.162-4.227c2.698-2.068,6.68-5.554,10.355-10.418l1.609-2.134
+                       c13.772-18.317,46.014-61.202,92.583-58.876c38.409,2.804,65.633,31.805,78.732,83.878c0.445,1.77,0.708,2.856,1.013,3.691
+                       c1.995,8.515,5.355,19.126,10.194,22.617c1.201,0.868,2.588,1.282,3.967,1.282c2.102,0,4.172-0.977,5.499-2.813
+                       c2.118-2.93,1.547-6.985-1.225-9.231c-1.342-1.73-3.856-8.981-5.353-15.461c-0.086-0.385-0.212-0.76-0.362-1.121
+                       c-0.13-0.441-0.37-1.405-0.589-2.271c-2.077-8.252-7.591-30.178-20.964-50.799C213.832,16.795,190.273,2.229,161.09,0.122
+                       c-0.043-0.003-0.089-0.003-0.144-0.007C107.155-2.629,71.838,44.33,56.767,64.38l-1.588,2.106
+                       c-4.129,5.457-8.999,8.852-10.684,9.837c-0.568,0.221-1.116,0.525-1.631,0.914c-2.11,1.602-3.136,4.326-2.565,6.908
+                       C40.874,86.72,42.894,88.739,45.479,89.304z"/>
+               <path d="M215.3,115.309c5.12-12.784,5.243-25.991,0.336-36.234c-4.367-9.137-12.519-15.759-23.565-19.142
+                       c-16.214-4.962-35.869,4.045-53.878,24.674c-0.224,0.253-25.858,27.215-52.778,43.696c-0.2,0.118-19.905,11.941-40.484,17.545
+                       c-3.607,0.985-5.744,4.71-4.757,8.323c0.989,3.616,4.71,5.748,8.323,4.758c22.389-6.093,43.058-18.495,43.962-19.042
+                       c29.205-17.874,55.686-46.056,55.91-46.315c10.93-12.525,27.109-24.534,39.733-20.668c7.423,2.274,12.573,6.323,15.301,12.031
+                       c3.274,6.829,3.019,16.063-0.694,25.339c-6.91,17.261-28.418,38.109-60.566,58.697c-16.127,10.331-56.728,35.679-85.396,47.934
+                       c-3.441,1.476-5.042,5.459-3.575,8.901c1.101,2.573,3.607,4.117,6.242,4.117c0.883,0,1.793-0.179,2.663-0.548
+                       c29.602-12.658,70.969-38.476,87.376-48.984C173.864,164.753,205.109,140.77,215.3,115.309z"/>
+               <path d="M106.099,64.685c-3.073,3.393-5.838,7.031-8.816,10.506c-3.894,4.557-8.151,8.81-12.595,12.823
+                       c-4.574,4.127-8.266,7.082-13.666,10.176c-5.715,3.284-11.546,6.603-17.472,9.486c-2.033,0.996-3.785,1.641-6.078,2.331
+                       c-3.539,1.063-5.735,4.714-4.738,8.34c0.965,3.498,4.805,5.801,8.345,4.738c6.935-2.084,13.215-5.652,19.472-9.209
+                       c5.286-3.006,10.542-5.711,15.401-9.409c9.466-7.2,17.617-15.61,25.112-24.809c3.032-3.727,6.283-7.275,9.673-10.683
+                       c1.846-1.86,3.763-3.655,5.715-5.407c1.02-0.911,2.053-1.802,3.103-2.681c0.525-0.445,1.067-0.883,1.602-1.321
+                       c0.135-0.114,1.19-0.942,1.464-1.16c4.716-3.619,9.745-6.832,15.044-9.551c4.997-2.57,10.011-4.37,16.098-5.637
+                       c2.019-0.419,2.457-0.465,3.97-0.619c3.675-0.382,6.786-2.796,6.786-6.781c0-3.41-3.098-7.163-6.786-6.781
+                       C143.217,31.57,122.251,46.891,106.099,64.685z"/>
+               <path d="M53.329,194.52c14.728-5.055,90.364-33.298,132.715-92.664c2.17-3.049,1.468-7.282-1.577-9.455
+                       c-3.053-2.177-7.289-1.468-9.459,1.581c-39.949,55.995-112.035,82.89-126.081,87.712c-0.301,0.103-0.486,0.167-0.553,0.198
+                       c-3.498,1.324-5.263,5.239-3.936,8.743c1.026,2.711,3.599,4.381,6.339,4.381c0.773,0,1.552-0.134,2.312-0.411L53.329,194.52z"/>
+               <path d="M141.73,223.132c1.567-7.275,4.175-14.164,7.667-20.509c-8.15,4.558-18.619,11.365-31.791,20.047
+                       c-16.933,11.159-36.119,23.808-44.466,26.053c-3.614,0.976-5.758,4.698-4.784,8.312c0.814,3.028,3.554,5.023,6.543,5.023
+                       c0.582,0,1.177-0.075,1.766-0.235c10.458-2.816,28.89-14.966,48.405-27.826C130.401,230.473,136.173,226.671,141.73,223.132z"/>
+               <path d="M140.576,248.405c-9.214,5.887-21.142,14.359-36.172,25.335c-3.612,2.638-6.742,4.917-8.904,6.454
+                       c-3.06,2.159-3.785,6.393-1.629,9.448c1.321,1.868,3.417,2.868,5.543,2.868c1.355,0,2.716-0.4,3.907-1.243
+                       c2.253-1.591,5.416-3.9,9.084-6.573c6.771-4.941,19.97-14.579,31.271-22.107C142.205,258.028,141.164,253.285,140.576,248.405z"/>
+               <path d="M153.285,282.168c-11.84,4.034-28.314,20.591-31.718,24.105c-2.6,2.689-2.533,6.981,0.157,9.585
+                       c1.314,1.277,3.018,1.91,4.717,1.91c1.773,0,3.547-0.688,4.875-2.063c9.083-9.381,21.982-20.037,26.986-20.903
+                       c2.292-0.393,5.148,0.575,8.393,2.304C161.602,292.736,157.084,287.719,153.285,282.168z"/>
+               <path d="M257.625,161.845c-5.653-2.386-11.56-4.896-16.316-8.855c-5.236-4.356-7.673-10.079-8.761-16.685
+                       c-1.424-8.613-14.489-4.946-13.079,3.607c1.926,11.661,8.274,19.763,16.84,25.814c6.971,1.906,13.565,4.773,19.603,8.47
+                       c1.643-0.346,3.121-1.314,4.147-3.066C261.746,168.251,261.034,163.289,257.625,161.845z"/>
+               <path d="M198.531,160.678c-2.457,0.678-4.702,3.148-5.041,5.8c4.025-1.256,8.196-2.176,12.475-2.754
+                       C204.355,161.281,201.728,159.798,198.531,160.678z"/>
+               <path d="M212.131,169.805c-36.227,0-65.704,29.475-65.704,65.705s29.477,65.706,65.704,65.706
+                       c36.234,0,65.706-29.476,65.706-65.706S248.361,169.805,212.131,169.805z M212.131,287.199c-28.499,0-51.687-23.188-51.687-51.688
+                       s23.188-51.688,51.687-51.688c28.5,0,51.688,23.188,51.688,51.688S240.627,287.199,212.131,287.199z"/>
+               <polygon points="229.495,207.822 212.774,225.555 196.061,207.822 185.096,216.103 203.388,235.51 185.096,254.914 
+                       196.061,263.199 212.774,245.465 229.495,263.199 240.46,254.914 222.165,235.51 240.46,216.103            "/>
+       </g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-remove_white.svg b/pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-remove_white.svg
new file mode 100644 (file)
index 0000000..6b7bcf1
--- /dev/null
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="317.769px" height="317.769px" viewBox="0 0 317.769 317.769" style="enable-background:new 0 0 317.769 317.769;"
+        xml:space="preserve">
+<g>
+       <g>
+               <path fill="#fff" d="M45.479,89.304c2.126,0.465,4.1,0.435,10.162-4.227c2.698-2.068,6.68-5.554,10.355-10.418l1.609-2.134
+                       c13.772-18.317,46.014-61.202,92.583-58.876c38.409,2.804,65.633,31.805,78.732,83.878c0.445,1.77,0.708,2.856,1.013,3.691
+                       c1.995,8.515,5.355,19.126,10.194,22.617c1.201,0.868,2.588,1.282,3.967,1.282c2.102,0,4.172-0.977,5.499-2.813
+                       c2.118-2.93,1.547-6.985-1.225-9.231c-1.342-1.73-3.856-8.981-5.353-15.461c-0.086-0.385-0.212-0.76-0.362-1.121
+                       c-0.13-0.441-0.37-1.405-0.589-2.271c-2.077-8.252-7.591-30.178-20.964-50.799C213.832,16.795,190.273,2.229,161.09,0.122
+                       c-0.043-0.003-0.089-0.003-0.144-0.007C107.155-2.629,71.838,44.33,56.767,64.38l-1.588,2.106
+                       c-4.129,5.457-8.999,8.852-10.684,9.837c-0.568,0.221-1.116,0.525-1.631,0.914c-2.11,1.602-3.136,4.326-2.565,6.908
+                       C40.874,86.72,42.894,88.739,45.479,89.304z"/>
+               <path fill="#fff" d="M215.3,115.309c5.12-12.784,5.243-25.991,0.336-36.234c-4.367-9.137-12.519-15.759-23.565-19.142
+                       c-16.214-4.962-35.869,4.045-53.878,24.674c-0.224,0.253-25.858,27.215-52.778,43.696c-0.2,0.118-19.905,11.941-40.484,17.545
+                       c-3.607,0.985-5.744,4.71-4.757,8.323c0.989,3.616,4.71,5.748,8.323,4.758c22.389-6.093,43.058-18.495,43.962-19.042
+                       c29.205-17.874,55.686-46.056,55.91-46.315c10.93-12.525,27.109-24.534,39.733-20.668c7.423,2.274,12.573,6.323,15.301,12.031
+                       c3.274,6.829,3.019,16.063-0.694,25.339c-6.91,17.261-28.418,38.109-60.566,58.697c-16.127,10.331-56.728,35.679-85.396,47.934
+                       c-3.441,1.476-5.042,5.459-3.575,8.901c1.101,2.573,3.607,4.117,6.242,4.117c0.883,0,1.793-0.179,2.663-0.548
+                       c29.602-12.658,70.969-38.476,87.376-48.984C173.864,164.753,205.109,140.77,215.3,115.309z"/>
+               <path fill="#fff" d="M106.099,64.685c-3.073,3.393-5.838,7.031-8.816,10.506c-3.894,4.557-8.151,8.81-12.595,12.823
+                       c-4.574,4.127-8.266,7.082-13.666,10.176c-5.715,3.284-11.546,6.603-17.472,9.486c-2.033,0.996-3.785,1.641-6.078,2.331
+                       c-3.539,1.063-5.735,4.714-4.738,8.34c0.965,3.498,4.805,5.801,8.345,4.738c6.935-2.084,13.215-5.652,19.472-9.209
+                       c5.286-3.006,10.542-5.711,15.401-9.409c9.466-7.2,17.617-15.61,25.112-24.809c3.032-3.727,6.283-7.275,9.673-10.683
+                       c1.846-1.86,3.763-3.655,5.715-5.407c1.02-0.911,2.053-1.802,3.103-2.681c0.525-0.445,1.067-0.883,1.602-1.321
+                       c0.135-0.114,1.19-0.942,1.464-1.16c4.716-3.619,9.745-6.832,15.044-9.551c4.997-2.57,10.011-4.37,16.098-5.637
+                       c2.019-0.419,2.457-0.465,3.97-0.619c3.675-0.382,6.786-2.796,6.786-6.781c0-3.41-3.098-7.163-6.786-6.781
+                       C143.217,31.57,122.251,46.891,106.099,64.685z"/>
+               <path fill="#fff" d="M53.329,194.52c14.728-5.055,90.364-33.298,132.715-92.664c2.17-3.049,1.468-7.282-1.577-9.455
+                       c-3.053-2.177-7.289-1.468-9.459,1.581c-39.949,55.995-112.035,82.89-126.081,87.712c-0.301,0.103-0.486,0.167-0.553,0.198
+                       c-3.498,1.324-5.263,5.239-3.936,8.743c1.026,2.711,3.599,4.381,6.339,4.381c0.773,0,1.552-0.134,2.312-0.411L53.329,194.52z"/>
+               <path fill="#fff" d="M141.73,223.132c1.567-7.275,4.175-14.164,7.667-20.509c-8.15,4.558-18.619,11.365-31.791,20.047
+                       c-16.933,11.159-36.119,23.808-44.466,26.053c-3.614,0.976-5.758,4.698-4.784,8.312c0.814,3.028,3.554,5.023,6.543,5.023
+                       c0.582,0,1.177-0.075,1.766-0.235c10.458-2.816,28.89-14.966,48.405-27.826C130.401,230.473,136.173,226.671,141.73,223.132z"/>
+               <path fill="#fff" d="M140.576,248.405c-9.214,5.887-21.142,14.359-36.172,25.335c-3.612,2.638-6.742,4.917-8.904,6.454
+                       c-3.06,2.159-3.785,6.393-1.629,9.448c1.321,1.868,3.417,2.868,5.543,2.868c1.355,0,2.716-0.4,3.907-1.243
+                       c2.253-1.591,5.416-3.9,9.084-6.573c6.771-4.941,19.97-14.579,31.271-22.107C142.205,258.028,141.164,253.285,140.576,248.405z"/>
+               <path fill="#fff" d="M153.285,282.168c-11.84,4.034-28.314,20.591-31.718,24.105c-2.6,2.689-2.533,6.981,0.157,9.585
+                       c1.314,1.277,3.018,1.91,4.717,1.91c1.773,0,3.547-0.688,4.875-2.063c9.083-9.381,21.982-20.037,26.986-20.903
+                       c2.292-0.393,5.148,0.575,8.393,2.304C161.602,292.736,157.084,287.719,153.285,282.168z"/>
+               <path fill="#fff" d="M257.625,161.845c-5.653-2.386-11.56-4.896-16.316-8.855c-5.236-4.356-7.673-10.079-8.761-16.685
+                       c-1.424-8.613-14.489-4.946-13.079,3.607c1.926,11.661,8.274,19.763,16.84,25.814c6.971,1.906,13.565,4.773,19.603,8.47
+                       c1.643-0.346,3.121-1.314,4.147-3.066C261.746,168.251,261.034,163.289,257.625,161.845z"/>
+               <path fill="#fff" d="M198.531,160.678c-2.457,0.678-4.702,3.148-5.041,5.8c4.025-1.256,8.196-2.176,12.475-2.754
+                       C204.355,161.281,201.728,159.798,198.531,160.678z"/>
+               <path fill="#fff" d="M212.131,169.805c-36.227,0-65.704,29.475-65.704,65.705s29.477,65.706,65.704,65.706
+                       c36.234,0,65.706-29.476,65.706-65.706S248.361,169.805,212.131,169.805z M212.131,287.199c-28.499,0-51.687-23.188-51.687-51.688
+                       s23.188-51.688,51.687-51.688c28.5,0,51.688,23.188,51.688,51.688S240.627,287.199,212.131,287.199z"/>
+               <polygon  fill="#fff" points="229.495,207.822 212.774,225.555 196.061,207.822 185.096,216.103 203.388,235.51 185.096,254.914 
+                       196.061,263.199 212.774,245.465 229.495,263.199 240.46,254.914 222.165,235.51 240.46,216.103            "/>
+       </g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-scanning-index.svg b/pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-scanning-index.svg
new file mode 100644 (file)
index 0000000..2137569
--- /dev/null
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="322.053px" height="322.053px" viewBox="0 0 322.053 322.053" style="enable-background:new 0 0 322.053 322.053;"
+        xml:space="preserve">
+<g>
+       <g>
+               <g>
+                       <path d="M98.214,48.391c0.542,0.117,1.044,0.11,2.585-1.076c0.688-0.525,1.701-1.415,2.637-2.652l0.405-0.542
+                               c3.508-4.661,11.712-15.578,23.567-14.98c9.773,0.71,16.702,8.093,20.033,21.347c0.116,0.449,0.187,0.726,0.26,0.939
+                               c0.511,2.165,1.363,4.866,2.592,5.758c0.31,0.221,0.659,0.325,1.01,0.325c0.537,0,1.066-0.248,1.398-0.715
+                               c0.541-0.746,0.397-1.776-0.308-2.348c-0.344-0.445-0.98-2.284-1.364-3.936c-0.027-0.098-0.055-0.191-0.094-0.287
+                               c-0.03-0.108-0.094-0.358-0.15-0.575c-0.525-2.101-1.93-7.681-5.33-12.927c-4.397-6.777-10.39-10.484-17.819-11.024
+                               c-0.01,0-0.024,0-0.04,0c-13.687-0.7-22.675,11.252-26.51,16.354l-0.402,0.534c-1.052,1.388-2.288,2.255-2.719,2.505
+                               c-0.144,0.056-0.28,0.137-0.411,0.231c-0.539,0.407-0.802,1.1-0.659,1.759S97.555,48.247,98.214,48.391z"/>
+                       <path d="M141.52,45.792c-1.114-2.327-3.188-4.018-5.999-4.875c-4.132-1.261-9.125,1.026-13.712,6.276
+                               c-0.06,0.07-6.581,6.932-13.432,11.122c-0.053,0.032-5.066,3.039-10.302,4.464c-0.917,0.25-1.458,1.203-1.213,2.117
+                               c0.253,0.922,1.203,1.464,2.122,1.213c5.694-1.549,10.958-4.711,11.185-4.846c7.43-4.553,14.171-11.726,14.231-11.786
+                               c2.782-3.189,6.899-6.246,10.113-5.264c1.889,0.582,3.2,1.608,3.895,3.063c0.83,1.739,0.767,4.089-0.18,6.448
+                               c-1.054,2.638-3.477,5.604-6.992,8.687c0.421,0.511,0.803,1.059,1.126,1.668c0.238,0.465,0.396,0.95,0.589,1.431
+                               c3.704-3.155,6.988-6.764,8.48-10.5C142.736,51.755,142.764,48.395,141.52,45.792z"/>
+                       <path d="M113.643,42.128c-0.787,0.862-1.488,1.788-2.245,2.671c-0.993,1.16-2.076,2.247-3.207,3.267
+                               c-1.164,1.05-2.106,1.8-3.48,2.585c-1.451,0.838-2.936,1.682-4.447,2.414c-0.515,0.253-0.959,0.417-1.545,0.592
+                               c-0.9,0.27-1.461,1.203-1.203,2.124c0.239,0.891,1.22,1.477,2.116,1.206c1.764-0.529,3.366-1.438,4.959-2.344
+                               c1.343-0.768,2.681-1.455,3.915-2.394c2.411-1.833,4.484-3.977,6.393-6.317c0.773-0.948,1.6-1.848,2.458-2.717
+                               c0.474-0.472,0.96-0.931,1.455-1.377c0.26-0.231,0.525-0.458,0.792-0.683c0.133-0.113,0.27-0.224,0.407-0.335
+                               c0.038-0.029,0.304-0.239,0.375-0.299c1.198-0.92,2.478-1.733,3.826-2.428c1.273-0.655,2.547-1.11,4.096-1.434
+                               c0.515-0.108,0.628-0.115,1.009-0.158c0.939-0.094,1.729-0.711,1.729-1.723c0-0.869-0.792-1.826-1.729-1.725
+                               C123.088,33.698,117.751,37.598,113.643,42.128z"/>
+                       <path d="M127.044,59.342c2.505-2.315,4.889-4.878,6.938-7.755c0.555-0.778,0.375-1.853-0.4-2.411
+                               c-0.773-0.558-1.853-0.372-2.406,0.404c-2.342,3.285-5.128,6.146-8.058,8.665C124.472,58.456,125.807,58.806,127.044,59.342z"/>
+                       <path d="M148.049,64.598c-1.333-1.107-1.953-2.562-2.233-4.244c-0.361-2.193-3.683-1.257-3.327,0.919
+                               c0.354,2.134,1.294,3.799,2.601,5.14h6.086C150.07,65.923,148.977,65.37,148.049,64.598z"/>
+               </g>
+               <path d="M114.468,66.2H93.406v1.127h20.276C113.91,66.932,114.17,66.551,114.468,66.2z"/>
+               <path d="M134.39,66.2c0.368,0.331,0.666,0.739,0.98,1.127h26.114V66.2H134.39z"/>
+               <rect x="164.578" y="65.654" width="6.242" height="2.225"/>
+               <rect x="83.271" y="65.654" width="6.246" height="2.225"/>
+               <g>
+                       <path style="opacity:0.4;enable-background:new    ;" d="M111.295,75.388c-3.498,1.987-7.152,3.929-10.267,5.26
+                               c-0.876,0.371-1.283,1.391-0.912,2.267c0.281,0.652,0.922,1.044,1.588,1.044c0.224,0,0.458-0.044,0.676-0.14
+                               c2.615-1.114,5.587-2.642,8.53-4.264C110.98,78.153,111.117,76.769,111.295,75.388z"/>
+                       <path style="opacity:0.4;enable-background:new    ;" d="M113.251,67.327h-4.156c-4.755,2.447-8.613,3.867-10.061,4.36
+                               c-0.074,0.025-0.122,0.046-0.137,0.049c-0.893,0.34-1.341,1.334-1.004,2.225c0.262,0.691,0.92,1.116,1.615,1.116
+                               c0.198,0,0.395-0.033,0.588-0.103l0.063-0.024c1.696-0.582,6.591-2.397,12.422-5.594C112.789,68.678,113,68.001,113.251,67.327z"
+                               />
+                       <path style="opacity:0.4;enable-background:new    ;" d="M147.12,85.226c-2.394-0.799-5.32-2.885-8.151-4.896
+                               c-0.719-0.515-1.401-0.986-2.091-1.465c-0.297,1.107-0.845,2.154-1.685,3.023c0.605,0.417,1.205,0.842,1.779,1.248
+                               c3.034,2.163,6.174,4.397,9.055,5.357c0.907,0.307,1.882-0.188,2.183-1.091C148.511,86.5,148.02,85.523,147.12,85.226z"/>
+                       <path style="opacity:0.4;enable-background:new    ;" d="M152.828,67.327h-6.511c1.205,0.919,2.601,1.662,4.093,2.29
+                               c0.869,0.365,1.839,0.267,2.361-0.625C153.046,68.53,153.069,67.854,152.828,67.327z"/>
+                       <path style="opacity:0.4;enable-background:new    ;" d="M148.802,75.64c-1.293-0.395-2.278-0.903-3.648-1.713
+                               c-2.512-1.485-4.805-3.638-5.916-6.38c-0.031-0.075-0.07-0.144-0.104-0.219h-3.148c-0.171,0.359-0.225,0.758-0.074,1.133
+                               c2.062,5.072,6.781,8.905,11.978,10.506C150.022,79.625,150.922,76.292,148.802,75.64z"/>
+               </g>
+       </g>
+       <g>
+               <polygon points="149.521,120.506 177.35,120.506 177.35,92.675 173.517,92.675 173.517,116.671 149.521,116.671            "/>
+               <polygon points="102.494,116.671 78.499,116.671 78.499,92.675 74.665,92.675 74.665,120.506 102.494,120.506              "/>
+               <polygon points="78.499,3.831 102.494,3.831 102.494,0 74.665,0 74.665,27.825 78.499,27.825              "/>
+               <polygon points="173.517,27.829 177.35,27.829 177.35,0 149.521,0 149.521,3.831 173.517,3.831            "/>
+       </g>
+       <path d="M246.231,211.503c0.779-8.938-1.362-16.502-6.358-22.497c-7.375-8.812-18.699-11.561-23.531-12.354
+               c-3.08-7.717-7.775-12.799-13.973-15.119c-2.43-0.906-5.064-1.372-7.844-1.372c-4.65,0-8.846,1.283-11.669,2.42
+               c-3.728-6.757-8.696-10.956-14.787-12.488c-1.678-0.424-3.448-0.64-5.26-0.64c-5.805,0-11.116,2.186-14.726,4.148
+               c-1.254-8.36-2.898-28.229-4.11-42.851l-0.007-0.165c-2.699-32.719-3.554-41.477-5.005-44.024
+               c-1.843-6.343-9.767-15.636-17.666-15.074c-5.217,0.318-11.798,4.611-13.476,23.264c0,65.688-1.845,114.256-2.254,124.139
+               c-5.831,2.649-11.158,8.665-11.747,9.35c-18.762,20.714-9.868,35.939-9.483,36.569c14.339,25.098,43.965,74.527,44.235,74.979
+               l0.578,0.955l0.288-0.175v0.448h94.73l3.498,1.037l4.896-16.741C252.233,267.743,246.901,217.058,246.231,211.503z M90.27,241.386
+               c-0.274-0.479-6.542-11.779,8.697-28.616c1.627-1.903,6.744-7.067,10.823-8.138l2.421-0.657l0.104-2.499
+               c0.029-0.39,2.358-51.18,2.337-126.405c0.919-10.121,3.621-16.531,7.038-16.738l0.154-0.003c4.236,0,9.825,6.71,10.66,10.604
+               l0.49,2.292l0.284,0.05c1.039,5.823,2.594,24.665,3.855,39.875c4.128,49.977,4.625,50.129,7.888,51.101l1.679,0.493l1.384-1.061
+               c0.736-0.548,7.394-5.375,14.726-5.375c1.25,0,2.467,0.152,3.582,0.438c4.854,1.217,8.803,5.179,11.759,11.76l1.547,3.474
+               l3.289-1.909c0.222-0.12,5.564-3.039,11.529-3.039c1.957,0,3.788,0.308,5.448,0.934c4.709,1.76,8.284,6.105,10.643,12.923
+               l0.732,2.101l2.211,0.206c0.13,0.01,13.678,1.389,21.046,10.218c3.84,4.586,5.451,10.548,4.784,17.728l-0.023,0.499l0.037,0.216
+               c0.257,2.187,6.095,53.995-13.154,90.896l-3.341,11.263H133.11C126.816,303.491,102.692,263.116,90.27,241.386z"/>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-scanning.svg b/pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-scanning.svg
new file mode 100644 (file)
index 0000000..db82b5e
--- /dev/null
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="335.075px" height="335.074px" viewBox="0 0 335.075 335.074" style="enable-background:new 0 0 335.075 335.074;"
+        xml:space="preserve">
+<g>
+       <g>
+               <path d="M101.22,40.756c-1.083,1.429-2.36,2.318-2.801,2.575c-0.147,0.06-0.291,0.14-0.428,0.238
+                       c-0.553,0.421-0.823,1.133-0.672,1.812c0.147,0.676,0.679,1.205,1.357,1.355c0.556,0.123,1.075,0.109,2.663-1.107
+                       c0.705-0.539,1.749-1.458,2.712-2.729l0.421-0.558c3.605-4.801,12.055-16.031,24.256-15.422
+                       c10.061,0.732,17.193,8.33,20.624,21.976c0.115,0.462,0.188,0.75,0.262,0.963c0.527,2.236,1.407,5.015,2.678,5.925
+                       c0.315,0.229,0.676,0.337,1.037,0.337c0.551,0,1.097-0.255,1.44-0.736c0.555-0.771,0.408-1.829-0.321-2.417
+                       c-0.351-0.455-1.006-2.351-1.403-4.048c-0.021-0.101-0.055-0.199-0.091-0.294c-0.03-0.115-0.097-0.368-0.154-0.595
+                       c-0.542-2.161-1.986-7.905-5.494-13.312c-4.524-6.974-10.692-10.79-18.338-11.341c-0.015,0-0.025,0-0.039-0.003
+                       c-14.094-0.717-23.346,11.585-27.295,16.838L101.22,40.756z"/>
+               <path d="M114.56,40.286c-0.806,0.886-1.531,1.839-2.308,2.751c-1.023,1.194-2.135,2.31-3.302,3.36
+                       c-1.194,1.08-2.165,1.854-3.578,2.666c-1.499,0.859-3.027,1.729-4.579,2.484c-0.538,0.26-0.993,0.432-1.595,0.611
+                       c-0.929,0.281-1.504,1.237-1.241,2.187c0.248,0.917,1.254,1.518,2.184,1.24c1.819-0.547,3.461-1.483,5.102-2.414
+                       c1.384-0.789,2.76-1.497,4.033-2.464c2.481-1.889,4.615-4.09,6.577-6.497c0.796-0.974,1.648-1.906,2.534-2.799
+                       c0.483-0.491,0.984-0.955,1.499-1.417c0.267-0.238,0.537-0.472,0.81-0.7c0.137-0.116,0.277-0.232,0.421-0.351
+                       c0.036-0.029,0.298-0.231,0.375-0.298c1.241-0.95,2.558-1.795,3.949-2.51c1.311-0.669,2.625-1.141,4.22-1.475
+                       c0.529-0.111,0.645-0.118,1.04-0.164c0.96-0.098,1.778-0.732,1.778-1.778c0-0.89-0.806-1.874-1.778-1.776
+                       C124.284,31.609,118.79,35.621,114.56,40.286z"/>
+               <path d="M154.895,68.173c0.438-0.753,0.251-2.053-0.638-2.428c-1.482-0.632-3.032-1.287-4.279-2.324
+                       c-1.373-1.138-2.011-2.639-2.295-4.37c-0.371-2.257-3.795-1.297-3.427,0.946c0.76,4.604,4.153,7.104,8.207,8.817
+                       C153.357,69.186,154.354,69.088,154.895,68.173z"/>
+               <path d="M257.06,217.561c0.828-9.5-1.451-17.542-6.762-23.914c-7.844-9.366-19.88-12.289-25.017-13.135
+                       c-3.271-8.202-8.261-13.609-14.852-16.072c-2.581-0.963-5.387-1.458-8.337-1.458c-4.948,0-9.411,1.364-12.408,2.572
+                       c-3.96-7.18-9.247-11.642-15.715-13.271c-1.786-0.452-3.667-0.683-5.596-0.683c-6.17,0-11.812,2.32-15.652,4.408
+                       c-1.332-8.886-3.08-30.007-4.367-45.545l-0.01-0.178c-1.338-16.243-2.25-26.881-2.993-33.939c1.431,0.863,2.933,1.605,4.511,2.089
+                       c2.197,0.676,3.129-2.751,0.946-3.424c-1.336-0.411-2.348-0.936-3.758-1.766c-0.784-0.464-1.528-1.006-2.238-1.595
+                       c-0.611-4.745-1.143-7.044-1.781-8.166c-0.49-1.679-1.381-3.554-2.565-5.407c1.129-1.475,2.082-2.986,2.702-4.531
+                       c1.338-3.347,1.374-6.81,0.087-9.493c-1.145-2.397-3.284-4.129-6.177-5.012c-4.243-1.301-9.396,1.056-14.113,6.462
+                       c-0.027,0.031-1.485,1.545-3.689,3.575c-0.97,0.612-1.932,1.429-2.846,2.505c-2.183,1.839-4.71,3.788-7.296,5.368
+                       c-0.053,0.033-5.214,3.133-10.604,4.598c-0.949,0.26-1.507,1.237-1.247,2.183c0.258,0.946,1.233,1.508,2.183,1.244
+                       c5.862-1.595,11.28-4.846,11.518-4.989c0.512-0.312,1.006-0.659,1.504-0.993c-0.679,1.995-1.276,4.307-1.745,7.001
+                       c-5.256,2.786-9.598,4.41-11.165,4.942c-0.077,0.027-0.126,0.049-0.144,0.056c-0.917,0.348-1.381,1.371-1.03,2.288
+                       c0.271,0.708,0.946,1.146,1.662,1.146c0.204,0,0.405-0.036,0.605-0.106l0.063-0.023c1.408-0.484,4.948-1.787,9.406-3.992
+                       c-0.074,0.625-0.15,1.224-0.21,1.882c0,1.287,0,2.555-0.003,3.832c-2.878,1.583-5.761,3.063-8.299,4.144
+                       c-0.903,0.383-1.321,1.431-0.939,2.334c0.291,0.671,0.946,1.076,1.637,1.076c0.231,0,0.469-0.046,0.696-0.144
+                       c2.13-0.91,4.504-2.117,6.897-3.392c-0.14,65.824-1.969,114.001-2.383,124.106c-6.199,2.82-11.858,9.213-12.486,9.938
+                       c-19.939,22.024-10.489,38.208-10.079,38.875c15.244,26.687,46.733,79.22,47.024,79.702l0.617,1.021l0.301-0.182v0.476h100.703
+                       l3.716,1.099l5.202-17.795C263.446,277.339,257.779,223.46,257.06,217.561z M136.037,42.438c1.949,0.595,3.299,1.656,4.013,3.15
+                       c0.859,1.79,0.795,4.204-0.178,6.641c-0.368,0.914-0.912,1.87-1.608,2.859c-3.267-3.908-7.713-7.182-12.289-7.601
+                       C128.827,44.344,132.86,41.466,136.037,42.438z M235.812,314.551l-3.556,11.979h-95.44c-6.694-11.184-32.334-54.104-45.542-77.211
+                       c-0.291-0.503-6.959-12.519,9.245-30.416c1.731-2.02,7.169-7.512,11.505-8.655l2.575-0.688l0.111-2.659
+                       c0.029-0.414,2.506-54.404,2.481-134.375c0.979-10.752,3.855-17.571,7.479-17.789l0.168-0.007c4.503,0,10.442,7.135,11.329,11.272
+                       l0.518,2.44l0.306,0.048c1.101,6.192,2.753,26.224,4.097,42.392c4.387,53.125,4.916,53.283,8.384,54.323l1.785,0.519l1.468-1.125
+                       c0.786-0.585,7.861-5.711,15.653-5.711c1.333,0,2.625,0.158,3.819,0.458c5.153,1.294,9.355,5.508,12.494,12.507l1.652,3.695
+                       l3.494-2.032c0.233-0.123,5.917-3.23,12.252-3.23c2.084,0,4.027,0.328,5.79,0.985c5.01,1.872,8.812,6.495,11.317,13.74
+                       l0.773,2.241l2.354,0.212c0.138,0.014,14.545,1.476,22.375,10.862c4.079,4.883,5.79,11.211,5.085,18.842l-0.021,0.531l0.034,0.229
+                       C250.065,220.25,256.277,275.323,235.812,314.551z"/>
+               <polygon points="151.628,120.506 179.462,120.506 179.462,92.676 175.629,92.676 175.629,116.672 151.628,116.672          "/>
+               <polygon points="104.608,116.672 80.607,116.672 80.607,92.676 76.781,92.676 76.781,120.506 104.608,120.506              "/>
+               <polygon points="80.607,3.831 104.608,3.831 104.608,0 76.781,0 76.781,27.826 80.607,27.826              "/>
+               <polygon points="175.629,27.829 179.462,27.829 179.462,0 151.628,0 151.628,3.831 175.629,3.831          "/>
+       </g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-search.svg b/pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-search.svg
new file mode 100644 (file)
index 0000000..77b2cb6
--- /dev/null
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="311.324px" height="311.324px" viewBox="0 0 311.324 311.324" style="enable-background:new 0 0 311.324 311.324;"
+        xml:space="preserve">
+<g>
+       <g>
+               <path d="M21.174,87.5c2.089,0.458,4.02,0.424,9.967-4.143c2.635-2.026,6.535-5.443,10.142-10.205l1.576-2.096
+                       c13.492-17.944,45.077-59.955,90.703-57.677c37.623,2.745,64.299,31.157,77.125,82.173c0.435,1.732,0.701,2.8,0.996,3.614
+                       c0.023,0.107,0.062,0.222,0.082,0.335c3.634,6.386,6.498,13.258,8.483,20.501c0.458,0.494,0.928,0.963,1.42,1.321
+                       c1.174,0.849,2.536,1.257,3.885,1.257c2.053,0,4.093-0.956,5.386-2.758c2.074-2.866,1.52-6.836-1.197-9.04
+                       c-1.311-1.697-3.778-8.796-5.243-15.146c-0.089-0.375-0.205-0.739-0.362-1.097c-0.116-0.438-0.359-1.384-0.571-2.231
+                       c-2.033-8.084-7.437-29.562-20.537-49.765c-16.919-26.082-39.991-40.356-68.586-42.416c-0.046-0.007-0.087-0.007-0.137-0.014
+                       C81.603-2.578,47.008,43.429,32.241,63.074l-1.552,2.06c-4.045,5.344-8.824,8.673-10.472,9.637
+                       c-0.553,0.221-1.094,0.519-1.591,0.898c-2.067,1.565-3.077,4.236-2.522,6.769C16.666,84.969,18.648,86.945,21.174,87.5z"/>
+               <path d="M179.456,66.596c-4.015-3.435-8.929-6.11-14.668-7.87c-2.094-0.638-4.25-1.026-6.452-1.199
+                       C165.822,59.65,172.909,62.716,179.456,66.596z"/>
+               <path d="M24.136,155.71c7.253-1.976,14.308-4.625,20.552-7.31c-0.083-1.602-0.131-3.21-0.131-4.832
+                       c0-3.354,0.202-6.667,0.563-9.924c-6.969,3.273-15.643,6.844-24.477,9.253c-3.539,0.958-5.625,4.613-4.661,8.152
+                       C16.941,154.589,20.592,156.681,24.136,155.71z"/>
+               <path d="M62.613,197.38c-10.553,5.783-21.11,11.16-30.396,15.126c-3.376,1.444-4.941,5.343-3.498,8.717
+                       c1.075,2.528,3.532,4.031,6.107,4.031c0.873,0,1.759-0.171,2.611-0.527c10.457-4.473,22.414-10.633,34.184-17.151
+                       C68.371,204.406,65.354,201.008,62.613,197.38z"/>
+               <path d="M80.569,63.379c-3.014,3.326-5.719,6.894-8.634,10.295c-3.817,4.46-7.987,8.63-12.339,12.559
+                       c-4.483,4.045-8.105,6.938-13.387,9.974c-5.602,3.21-11.315,6.469-17.118,9.292c-1.999,0.972-3.718,1.608-5.961,2.279
+                       c-3.461,1.041-5.614,4.618-4.632,8.17c0.939,3.431,4.702,5.681,8.168,4.641c6.792-2.046,12.948-5.537,19.077-9.021
+                       c2.074-1.184,4.135-2.318,6.173-3.489c9.806-22.593,28.673-40.37,51.991-48.725c0.399-0.335,0.803-0.662,1.205-1
+                       c0.137-0.107,1.17-0.924,1.431-1.134c4.625-3.541,9.556-6.694,14.743-9.356c4.896-2.521,9.811-4.28,15.772-5.523
+                       c1.977-0.409,2.408-0.452,3.886-0.603c3.599-0.375,6.645-2.745,6.645-6.644c0-3.34-3.036-7.016-6.645-6.641
+                       C116.93,30.94,96.395,45.957,80.569,63.379z"/>
+               <path d="M28.871,190.577c4.016-1.379,12.657-4.518,23.928-9.582c-1.852-3.997-3.417-8.158-4.665-12.45
+                       c-11.11,5.017-19.657,8.121-23.577,9.473c-0.297,0.1-0.48,0.164-0.541,0.185c-3.431,1.308-5.161,5.141-3.862,8.566
+                       c1.006,2.658,3.533,4.287,6.215,4.287c0.753,0,1.519-0.123,2.264-0.39L28.871,190.577z"/>
+               <path d="M173.107,223.909c6.612,4.694,13.312,9.349,19.862,13.059l-15.372-15.399C176.123,222.393,174.617,223.17,173.107,223.909
+                       z"/>
+               <path d="M102.3,227.181c-4.861-1.845-9.522-4.107-13.937-6.735c-15.665,10.314-32.478,21.19-40.082,23.236
+                       c-3.547,0.958-5.647,4.606-4.694,8.146c0.799,2.97,3.48,4.921,6.41,4.921c0.572,0,1.157-0.075,1.732-0.233
+                       c10.246-2.765,28.305-14.667,47.422-27.261C100.187,228.576,101.237,227.878,102.3,227.181z"/>
+               <path d="M192.997,262.665c-5.349-1.938-14.058-7.316-22.477-12.516c-17.78-10.988-29.082-17.651-37.19-16.258
+                       c-8.215,1.423-25.466,13.147-54.419,34.29c-3.545,2.587-6.605,4.818-8.729,6.323c-2.992,2.119-3.708,6.263-1.595,9.258
+                       c1.297,1.83,3.351,2.812,5.431,2.812c1.328,0,2.664-0.396,3.831-1.218c2.208-1.561,5.308-3.83,8.898-6.44
+                       c11.521-8.419,42.135-30.766,48.779-31.916c4.141-0.28,19.087,8.939,28.016,14.449c9.411,5.811,18.298,11.307,24.944,13.709
+                       c3.445,1.249,7.258-0.541,8.507-3.99C198.24,267.716,196.45,263.914,192.997,262.665z"/>
+               <path d="M170.562,295.688c-3.733-2.434-7.159-4.887-10.482-7.252c-10.892-7.785-20.312-14.506-30.633-12.703
+                       c-11.62,2.006-30.129,20.615-33.721,24.322c-2.554,2.635-2.484,6.844,0.151,9.4c1.289,1.238,2.957,1.868,4.618,1.868
+                       c1.735,0,3.468-0.678,4.769-2.025c8.897-9.186,21.537-19.634,26.443-20.481c4.851-0.832,12.181,4.387,20.658,10.434
+                       c3.27,2.334,6.971,4.976,10.936,7.562c3.073,2.002,7.193,1.141,9.195-1.933C174.494,301.808,173.632,297.697,170.562,295.688z"/>
+               <path d="M231.394,167.655c1.66-2.816,0.959-7.673-2.381-9.086c-2.136-0.903-4.299-1.853-6.428-2.859
+                       c-0.615,4.475-1.584,8.879-2.867,13.191c0.855,0.39,1.718,0.766,2.594,1.136C225.645,171.454,229.389,171.084,231.394,167.655z"/>
+               <path d="M216.124,193.232c-2.118-0.653-4.014-1.403-5.903-2.266l10.314,10.335C221.302,198.144,220.107,194.465,216.124,193.232z"
+                       />
+               <path d="M291.09,279.022l-89.794-89.951c-0.137-0.144-0.305-0.229-0.448-0.363c9.75-13.545,15.561-30.094,15.561-48.014
+                       c0-45.453-36.977-82.424-82.426-82.424c-45.452,0-82.421,36.971-82.421,82.424c0,45.448,36.973,82.42,82.424,82.42
+                       c16.519,0,31.888-4.924,44.8-13.325c0.273,0.321,0.503,0.678,0.804,0.985l89.788,89.955c5.992,5.995,15.711,5.988,21.71,0
+                       C297.075,294.733,297.075,285.012,291.09,279.022z M200.067,138.894c-0.596,0.931-1.438,1.472-2.557,1.472
+                       c-2.189,0-3.613-2.277-3.613-6.29c0-4.202,1.536-6.427,3.641-6.427c0.521,0,0.966,0.128,1.373,0.335
+                       C199.595,131.531,199.968,135.179,200.067,138.894z M169.99,90.4c0,3.936-1.174,6.429-3.635,6.429
+                       c-2.189,0-3.613-2.272-3.613-6.285c0-4.201,1.536-6.434,3.641-6.434C168.871,84.11,169.99,86.602,169.99,90.4z M80.047,106.685
+                       c2.491,0,3.612,2.493,3.612,6.292c0,3.942-1.181,6.434-3.641,6.434c-2.187,0-3.608-2.277-3.608-6.29
+                       C76.41,108.914,77.944,106.685,80.047,106.685z M68.622,150.541c0.628-0.854,1.434-1.314,2.367-1.314
+                       c2.495,0,3.612,2.491,3.612,6.283c0,3.72-1.061,6.119-3.248,6.379C70.116,158.244,69.211,154.446,68.622,150.541z M84.251,184.205
+                       c-1.746-1.992-3.409-4.059-4.906-6.249c0.07-4.011,1.564-6.153,3.624-6.153c2.488,0,3.609,2.491,3.609,6.29
+                       C86.579,181.241,85.815,183.438,84.251,184.205z M105.691,200.419c-2.397-1.136-4.718-2.402-6.942-3.812
+                       c0.508-2.519,1.776-3.846,3.395-3.846c2.493,0,3.614,2.491,3.614,6.289C105.758,199.536,105.73,199.981,105.691,200.419z
+                        M112.549,199.194c0-4.203,1.535-6.434,3.641-6.434c2.488,0,3.608,2.491,3.608,6.289c0,2.772-0.599,4.802-1.803,5.78
+                       c-1.55-0.387-3.092-0.79-4.598-1.286C112.86,202.486,112.549,201.028,112.549,199.194z M154.681,199.194
+                       c0-4.203,1.535-6.434,3.638-6.434c2.496,0,3.611,2.491,3.611,6.289c0,0.582-0.068,1.082-0.119,1.595
+                       c-2.081,0.969-4.208,1.831-6.395,2.584C154.962,202.205,154.681,200.878,154.681,199.194z M164.306,199.443
+                       c0.004-0.171,0.034-0.314,0.034-0.492c0-4.914-2.132-7.813-5.881-7.813c-3.61,0-6.188,2.852-6.188,8.021
+                       c0.021,1.969,0.417,3.549,1.05,4.799c-2.375,0.731-4.813,1.293-7.294,1.752v-14.312h-2.052l-3.882,1.81l0.467,1.585l3.09-1.44
+                       h0.056v12.717c-3.179,0.465-6.41,0.794-9.717,0.794c-0.674,0-1.333-0.079-2.002-0.103v-15.359h-2.05l-3.886,1.811l0.469,1.584
+                       l3.092-1.44h0.055v13.292c-3.213-0.216-6.381-0.596-9.454-1.246c1.294-1.375,2.007-3.531,2.007-6.447
+                       c0-4.914-2.137-7.812-5.883-7.812c-3.614,0-6.186,2.851-6.186,8.021c0.014,1.26,0.168,2.379,0.445,3.347
+                       c-0.89-0.335-1.793-0.637-2.662-1.013c0.144-0.78,0.238-1.608,0.238-2.546c0-4.914-2.137-7.813-5.884-7.813
+                       c-2.575,0-4.604,1.482-5.564,4.183c-4.114-2.813-7.853-6.112-11.229-9.761c2.254-1.081,3.498-3.675,3.498-7.569
+                       c0-4.911-2.134-7.81-5.883-7.81c-2.712,0-4.84,1.608-5.73,4.6c-2.161-3.572-3.987-7.357-5.448-11.331
+                       c3.244-0.51,5.08-3.299,5.08-8.03c0-4.913-2.134-7.811-5.883-7.811c-1.056,0-2.002,0.267-2.842,0.739
+                       c-0.291-2.519-0.481-5.063-0.481-7.661c0-4.006,0.417-7.898,1.097-11.704l1.602-0.753h0.057v13.483h2.327v-15.426h-2.057
+                       l-1.588,0.743c1.043-4.948,2.688-9.664,4.769-14.132c-0.003,0.068-0.014,0.122-0.014,0.199c0.057,5.099,2.411,7.927,5.888,7.927
+                       c3.934,0,6.181-2.895,6.181-8.145c0-4.912-2.13-7.811-5.883-7.811c-0.765,0-1.473,0.157-2.127,0.41
+                       c4.596-7.275,10.551-13.579,17.528-18.575v11.279h2.322V85.287c10.392-6.791,22.768-10.771,36.078-10.771
+                       c11.456,0,22.234,2.929,31.639,8.076c-3.132,0.447-5.288,3.203-5.288,7.927c0.055,5.106,2.406,7.928,5.883,7.928
+                       c3.939,0,6.185-2.896,6.185-8.138c0-1.472-0.216-2.743-0.586-3.833c7.443,5.214,13.736,11.928,18.511,19.683l-2.115,0.979
+                       l0.469,1.586l2.495-1.164c0.212,0.366,0.448,0.705,0.653,1.069v12.128h2.324v-7.453c1.861,4.072,3.326,8.352,4.336,12.812
+                       c-0.268-0.036-0.527-0.081-0.814-0.081c-3.61,0-6.185,2.847-6.185,8.02c0.055,5.099,2.406,7.927,5.883,7.927
+                       c1.041,0,1.961-0.221,2.752-0.609c-0.038,3.578-0.4,7.079-0.986,10.506v-4.006h-2.05l-3.884,1.809l0.469,1.586l3.09-1.451h0.052
+                       v11.533c-1.078,3.269-2.409,6.413-3.966,9.432c-1.89,0.944-3.176,3.005-3.484,6.022c-1.893,2.896-4.024,5.609-6.338,8.159v-14.517
+                       h-2.05l-3.884,1.807l0.465,1.588l3.094-1.451h0.055v13.483h1.499C177.063,191.351,171.03,195.953,164.306,199.443z"/>
+               <path d="M110.041,98.444c3.938,0,6.184-2.895,6.184-8.138c0-4.912-2.13-7.811-5.883-7.811c-3.61,0-6.186,2.853-6.186,8.022
+                       C104.213,95.625,106.564,98.444,110.041,98.444z M110.205,84.11c2.491,0,3.612,2.491,3.612,6.29c0,3.936-1.18,6.429-3.641,6.429
+                       c-2.185,0-3.608-2.272-3.608-6.285C106.564,86.343,108.099,84.11,110.205,84.11z"/>
+               <polygon points="123.62,84.706 123.671,84.706 123.671,98.184 125.995,98.184 125.995,82.758 123.941,82.758 120.059,84.563 
+                       120.524,86.149          "/>
+               <polygon points="137.665,84.706 137.717,84.706 137.717,98.184 140.044,98.184 140.044,82.758 137.986,82.758 134.104,84.563 
+                       134.571,86.149          "/>
+               <path d="M152.474,82.495c-3.614,0-6.186,2.853-6.186,8.022c0.057,5.105,2.408,7.927,5.885,7.927c3.938,0,6.184-2.895,6.184-8.138
+                       C158.356,85.394,156.216,82.495,152.474,82.495z M152.31,96.829c-2.19,0-3.614-2.272-3.614-6.285c0-4.201,1.535-6.434,3.638-6.434
+                       c2.491,0,3.609,2.491,3.609,6.29C155.942,94.335,154.769,96.829,152.31,96.829z"/>
+               <polygon points="93.465,107.281 93.517,107.281 93.517,120.754 95.844,120.754 95.844,105.336 93.791,105.336 89.908,107.138 
+                       90.37,108.724           "/>
+               <polygon points="107.563,107.281 107.563,120.754 109.89,120.754 109.89,105.336 107.835,105.336 103.946,107.138 
+                       104.413,108.724 107.51,107.281          "/>
+               <path d="M128.199,112.877c0-4.913-2.134-7.812-5.883-7.812c-3.61,0-6.186,2.853-6.186,8.028c0.057,5.1,2.411,7.928,5.884,7.928
+                       C125.96,121.025,128.199,118.126,128.199,112.877z M118.542,113.12c0-4.203,1.535-6.435,3.638-6.435
+                       c2.491,0,3.609,2.493,3.609,6.292c0,3.942-1.174,6.434-3.638,6.434C119.968,119.41,118.542,117.129,118.542,113.12z"/>
+               <polygon points="135.598,107.281 135.646,107.281 135.646,120.754 137.973,120.754 137.973,105.336 135.922,105.336 
+                       132.037,107.138 132.502,108.724                 "/>
+               <path d="M150.104,121.025c3.939,0,6.186-2.895,6.186-8.145c0-4.912-2.134-7.811-5.883-7.811c-3.614,0-6.186,2.852-6.186,8.028
+                       C144.278,118.196,146.629,121.025,150.104,121.025z M150.27,106.685c2.488,0,3.609,2.493,3.609,6.292
+                       c0,3.942-1.178,6.434-3.638,6.434c-2.19,0-3.612-2.277-3.612-6.29C146.629,108.914,148.164,106.685,150.27,106.685z"/>
+               <polygon points="163.738,107.281 163.738,120.754 166.062,120.754 166.062,105.336 164.012,105.336 160.128,107.138 
+                       160.59,108.724 163.68,107.281           "/>
+               <path d="M178.196,121.025c3.939,0,6.181-2.895,6.181-8.145c0-4.912-2.129-7.811-5.883-7.811c-3.61,0-6.184,2.852-6.184,8.028
+                       C172.365,118.196,174.72,121.025,178.196,121.025z M178.357,106.685c2.491,0,3.61,2.493,3.61,6.292
+                       c0,3.942-1.178,6.434-3.638,6.434c-2.187,0-3.61-2.277-3.61-6.29C174.72,108.914,176.253,106.685,178.357,106.685z"/>
+               <path d="M85.321,126.033c-3.612,0-6.186,2.847-6.186,8.02c0.057,5.099,2.408,7.927,5.884,7.927c3.939,0,6.186-2.895,6.186-8.138
+                       C91.205,128.927,89.063,126.033,85.321,126.033z M85.153,140.365c-2.19,0-3.61-2.277-3.61-6.29c0-4.202,1.535-6.427,3.638-6.427
+                       c2.491,0,3.614,2.491,3.614,6.283C88.794,137.874,87.615,140.365,85.153,140.365z"/>
+               <path d="M99.365,126.033c-3.612,0-6.184,2.847-6.184,8.02c0.055,5.099,2.407,7.927,5.882,7.927c3.939,0,6.186-2.895,6.186-8.138
+                       C105.25,128.927,103.109,126.033,99.365,126.033z M99.201,140.365c-2.194,0-3.612-2.277-3.612-6.29
+                       c0-4.202,1.535-6.427,3.641-6.427c2.488,0,3.609,2.491,3.609,6.283C102.839,137.874,101.662,140.365,99.201,140.365z"/>
+               <polygon points="109.079,128.093 109.55,129.688 112.64,128.237 112.696,128.237 112.696,141.721 115.02,141.721 115.02,126.292 
+                       112.97,126.292          "/>
+               <polygon points="129.061,141.721 129.061,126.292 127.011,126.292 123.129,128.093 123.594,129.688 126.686,128.237 
+                       126.737,128.237 126.737,141.721                 "/>
+               <path d="M141.494,126.033c-3.608,0-6.187,2.847-6.187,8.02c0.055,5.099,2.411,7.927,5.886,7.927c3.939,0,6.183-2.895,6.183-8.138
+                       C147.375,128.927,145.245,126.033,141.494,126.033z M141.326,140.365c-2.187,0-3.609-2.277-3.609-6.29
+                       c0-4.202,1.535-6.427,3.638-6.427c2.495,0,3.612,2.491,3.612,6.283C144.967,137.874,143.793,140.365,141.326,140.365z"/>
+               <polygon points="151.216,128.093 151.682,129.688 154.772,128.237 154.828,128.237 154.828,141.721 157.155,141.721 
+                       157.155,126.292 155.103,126.292                 "/>
+               <path d="M169.583,126.033c-3.61,0-6.188,2.847-6.188,8.02c0.062,5.099,2.413,7.927,5.89,7.927c3.938,0,6.181-2.895,6.181-8.138
+                       C175.466,128.927,173.33,126.033,169.583,126.033z M169.422,140.365c-2.19,0-3.613-2.277-3.613-6.29
+                       c0-4.202,1.536-6.427,3.638-6.427c2.491,0,3.613,2.491,3.613,6.283C173.06,137.874,171.883,140.365,169.422,140.365z"/>
+               <polygon points="179.302,128.093 179.771,129.688 182.864,128.237 182.916,128.237 182.916,141.721 185.243,141.721 
+                       185.243,126.292 183.189,126.292                 "/>
+               <polygon points="80.85,149.679 81.312,151.267 84.405,149.815 84.458,149.815 84.458,163.302 86.786,163.302 86.786,147.875 
+                       84.735,147.875          "/>
+               <polygon points="100.83,163.302 100.83,147.875 98.78,147.875 94.891,149.679 95.356,151.267 98.452,149.815 98.505,149.815 
+                       98.505,163.302          "/>
+               <polygon points="108.932,149.679 109.402,151.267 112.493,149.815 112.549,149.815 112.549,163.302 114.873,163.302 
+                       114.873,147.875 112.823,147.875                 "/>
+               <path d="M127.302,147.612c-3.609,0-6.186,2.849-6.186,8.021c0.056,5.099,2.411,7.929,5.884,7.929c3.939,0,6.186-2.896,6.186-8.14
+                       C133.187,150.51,131.055,147.612,127.302,147.612z M127.141,161.943c-2.187,0-3.61-2.275-3.61-6.29
+                       c0-4.194,1.535-6.427,3.638-6.427c2.492,0,3.614,2.491,3.614,6.283C130.782,159.452,129.602,161.943,127.141,161.943z"/>
+               <polygon points="142.96,163.302 142.96,147.875 140.905,147.875 137.023,149.679 137.49,151.267 140.583,149.815 140.637,149.815 
+                       140.637,163.302                 "/>
+               <polygon points="151.069,149.679 151.534,151.267 154.625,149.815 154.681,149.815 154.681,163.302 157.008,163.302 
+                       157.008,147.875 154.951,147.875                 "/>
+               <path d="M169.439,147.612c-3.614,0-6.185,2.849-6.185,8.021c0.055,5.099,2.406,7.929,5.883,7.929c3.939,0,6.185-2.896,6.185-8.14
+                       C175.322,150.51,173.18,147.612,169.439,147.612z M169.274,161.943c-2.189,0-3.613-2.275-3.613-6.29
+                       c0-4.194,1.536-6.427,3.638-6.427c2.491,0,3.61,2.491,3.61,6.283C172.909,159.452,171.735,161.943,169.274,161.943z"/>
+               <path d="M177.3,155.637c0.055,5.099,2.406,7.929,5.883,7.929c3.938,0,6.184-2.895,6.184-8.139c0-4.913-2.135-7.811-5.883-7.811
+                       C179.866,147.612,177.3,150.46,177.3,155.637z M186.954,155.51c0,3.942-1.174,6.434-3.635,6.434c-2.19,0-3.613-2.275-3.613-6.29
+                       c0-4.194,1.536-6.427,3.641-6.427C185.835,149.227,186.954,151.718,186.954,155.51z"/>
+               <path d="M97.148,170.188c-3.605,0-6.186,2.848-6.186,8.021c0.056,5.1,2.411,7.926,5.888,7.926c3.936,0,6.182-2.896,6.182-8.138
+                       C103.032,173.083,100.896,170.188,97.148,170.188z M96.983,184.52c-2.187,0-3.61-2.269-3.61-6.29c0-4.195,1.535-6.427,3.638-6.427
+                       c2.491,0,3.614,2.491,3.614,6.29C100.625,182.028,99.442,184.52,96.983,184.52z"/>
+               <polygon points="106.868,172.255 107.335,173.843 110.429,172.392 110.482,172.392 110.482,185.871 112.809,185.871 
+                       112.809,170.448 110.754,170.448                 "/>
+               <polygon points="120.911,172.255 121.376,173.843 124.474,172.392 124.523,172.392 124.523,185.871 126.854,185.871 
+                       126.854,170.448 124.801,170.448                 "/>
+               <path d="M139.28,170.188c-3.609,0-6.186,2.848-6.186,8.021c0.056,5.1,2.411,7.926,5.884,7.926c3.942,0,6.186-2.896,6.186-8.138
+                       C145.164,173.083,143.029,170.188,139.28,170.188z M139.119,184.52c-2.187,0-3.61-2.269-3.61-6.29
+                       c0-4.195,1.537-6.427,3.638-6.427c2.491,0,3.61,2.491,3.61,6.29C142.757,182.028,141.583,184.52,139.119,184.52z"/>
+               <polygon points="149,172.255 149.467,173.843 152.558,172.392 152.611,172.392 152.611,185.871 154.938,185.871 154.938,170.448 
+                       152.888,170.448                 "/>
+               <path d="M167.372,170.188c-3.613,0-6.188,2.848-6.188,8.021c0.059,5.1,2.409,7.926,5.887,7.926c3.938,0,6.184-2.896,6.184-8.138
+                       C173.255,173.083,171.116,170.188,167.372,170.188z M167.208,184.52c-2.19,0-3.614-2.269-3.614-6.29
+                       c0-4.195,1.533-6.427,3.642-6.427c2.488,0,3.607,2.491,3.607,6.29C170.843,182.028,169.665,184.52,167.208,184.52z"/>
+       </g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-simple.svg b/pointeuse/install/bin/electron/resources/app/img/fingerprint/fingerprint-simple.svg
new file mode 100644 (file)
index 0000000..174630b
--- /dev/null
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        width="311.314px" height="311.314px" viewBox="0 0 311.314 311.314" style="enable-background:new 0 0 311.314 311.314;"
+        xml:space="preserve">
+<g>
+       <g>
+               <path d="M52.836,87.493c2.084,0.452,4.019,0.419,9.962-4.143c2.638-2.029,6.54-5.441,10.142-10.208l1.578-2.091
+                       c13.492-17.946,45.078-59.96,90.702-57.674c37.624,2.743,64.292,31.155,77.122,82.167c0.438,1.735,0.701,2.796,0.996,3.618
+                       c1.957,8.339,5.249,18.732,9.985,22.156c1.171,0.849,2.536,1.254,3.885,1.254c2.057,0,4.093-0.953,5.39-2.753
+                       c2.074-2.872,1.52-6.844-1.198-9.045c-1.311-1.697-3.774-8.796-5.242-15.146c-0.086-0.378-0.209-0.743-0.359-1.097
+                       c-0.123-0.435-0.359-1.381-0.575-2.228c-2.032-8.088-7.437-29.565-20.533-49.765C217.77,16.454,194.695,2.181,166.102,0.12
+                       c-0.044-0.007-0.092-0.007-0.14-0.007C113.261-2.578,78.667,43.426,63.898,63.067l-1.552,2.063
+                       c-4.043,5.346-8.821,8.674-10.467,9.637c-0.555,0.222-1.094,0.52-1.595,0.898c-2.067,1.566-3.077,4.237-2.521,6.768
+                       C48.322,84.959,50.302,86.939,52.836,87.493z"/>
+               <path d="M219.208,112.966c5.01-12.525,5.137-25.462,0.328-35.494c-4.277-8.954-12.265-15.438-23.085-18.752
+                       c-15.887-4.861-35.143,3.959-52.784,24.172c-0.224,0.248-25.336,26.661-51.705,42.808c-0.193,0.116-19.498,11.693-39.658,17.189
+                       c-3.541,0.96-5.628,4.615-4.665,8.149c0.96,3.54,4.611,5.632,8.153,4.663c21.928-5.967,42.185-18.115,43.071-18.647
+                       c28.606-17.518,54.553-45.121,54.77-45.381c10.713-12.268,26.561-24.032,38.922-20.247c7.278,2.228,12.326,6.192,14.999,11.784
+                       c3.203,6.69,2.953,15.742-0.685,24.828c-6.766,16.913-27.843,37.329-59.345,57.503c-15.793,10.115-55.564,34.957-83.658,46.962
+                       c-3.375,1.444-4.938,5.339-3.498,8.717c1.08,2.525,3.532,4.034,6.112,4.034c0.873,0,1.759-0.171,2.611-0.534
+                       c29.001-12.408,69.524-37.694,85.599-47.988C178.614,161.41,209.222,137.912,219.208,112.966z"/>
+               <path d="M112.222,63.372c-3.013,3.323-5.718,6.891-8.634,10.292c-3.816,4.461-7.986,8.629-12.342,12.56
+                       c-4.478,4.045-8.102,6.935-13.382,9.974c-5.604,3.21-11.315,6.461-17.119,9.29c-1.997,0.976-3.715,1.605-5.96,2.281
+                       c-3.463,1.042-5.614,4.617-4.637,8.172c0.939,3.427,4.704,5.684,8.172,4.644c6.791-2.047,12.948-5.544,19.077-9.028
+                       c5.183-2.943,10.325-5.595,15.083-9.216c9.279-7.053,17.261-15.289,24.604-24.306c2.976-3.651,6.153-7.126,9.476-10.466
+                       c1.812-1.823,3.686-3.578,5.602-5.299c0.996-0.893,2.009-1.763,3.035-2.628c0.519-0.435,1.044-0.866,1.574-1.295
+                       c0.135-0.113,1.167-0.925,1.429-1.136c4.627-3.544,9.557-6.694,14.743-9.356c4.899-2.521,9.813-4.279,15.775-5.523
+                       c1.975-0.411,2.405-0.455,3.884-0.605c3.6-0.371,6.646-2.741,6.646-6.641c0-3.344-3.035-7.019-6.646-6.645
+                       C148.586,30.93,128.048,45.943,112.222,63.372z"/>
+               <path d="M60.527,190.57c14.432-4.952,88.526-32.62,130.02-90.781c2.133-2.986,1.438-7.13-1.546-9.266
+                       c-2.991-2.13-7.139-1.436-9.271,1.55c-39.136,54.862-109.758,81.205-123.52,85.937c-0.294,0.096-0.476,0.161-0.539,0.182
+                       c-3.431,1.308-5.159,5.137-3.858,8.565c1.006,2.659,3.532,4.288,6.216,4.288c0.75,0,1.518-0.127,2.264-0.394L60.527,190.57z"/>
+               <path d="M241.284,230.113c-9.205-3.069-20.475-11.091-31.367-18.849c-15.78-11.246-29.399-20.947-40.501-19.038
+                       c-8.344,1.444-22.917,10.76-45.922,25.916c-16.582,10.934-35.383,23.325-43.559,25.526c-3.542,0.961-5.642,4.603-4.688,8.141
+                       c0.799,2.971,3.48,4.922,6.413,4.922c0.572,0,1.152-0.076,1.727-0.229c10.251-2.766,28.308-14.668,47.424-27.265
+                       c15.439-10.178,34.657-22.846,40.864-23.917c5.641-0.966,19.445,8.856,30.536,16.758c11.69,8.326,23.777,16.937,34.872,20.64
+                       c3.483,1.156,7.244-0.726,8.404-4.203C246.646,235.038,244.764,231.273,241.284,230.113z"/>
+               <path d="M224.652,262.655c-5.355-1.934-14.058-7.313-22.477-12.512c-17.781-10.988-29.081-17.655-37.191-16.259
+                       c-8.214,1.424-25.467,13.145-54.418,34.29c-3.547,2.587-6.606,4.818-8.73,6.32c-2.993,2.122-3.708,6.263-1.595,9.261
+                       c1.3,1.831,3.35,2.81,5.433,2.81c1.325,0,2.663-0.396,3.826-1.215c2.207-1.561,5.306-3.829,8.897-6.44
+                       c11.522-8.415,42.137-30.766,48.78-31.912c4.144-0.284,19.089,8.936,28.017,14.452c9.411,5.811,18.295,11.3,24.948,13.709
+                       c3.445,1.246,7.258-0.541,8.504-3.993C229.891,267.706,228.109,263.904,224.652,262.655z"/>
+               <path d="M202.216,295.679c-3.73-2.434-7.159-4.887-10.482-7.248c-10.889-7.785-20.31-14.507-30.628-12.707
+                       c-11.625,2.006-30.132,20.619-33.727,24.321c-2.551,2.639-2.481,6.845,0.154,9.401c1.291,1.238,2.955,1.868,4.615,1.868
+                       c1.738,0,3.473-0.674,4.774-2.022c8.897-9.188,21.537-19.63,26.439-20.479c4.85-0.831,12.184,4.381,20.66,10.431
+                       c3.265,2.334,6.968,4.973,10.938,7.566c3.069,2.002,7.189,1.137,9.195-1.937C206.152,301.798,205.287,297.688,202.216,295.679z"/>
+               <path d="M260.67,158.56c-5.537-2.338-11.327-4.798-15.988-8.677c-5.13-4.268-7.515-9.871-8.586-16.343
+                       c-1.386-8.439-14.192-4.848-12.81,3.528c2.841,17.23,15.523,26.562,30.677,32.959c3.336,1.417,7.08,1.047,9.085-2.379
+                       C264.706,164.829,264.003,159.973,260.67,158.56z"/>
+               <path d="M247.776,193.223c-4.986-1.54-8.774-3.483-14.052-6.604c-9.667-5.712-18.486-13.986-22.774-24.564
+                       c-1.358-3.351-4.37-5.685-8.172-4.637c-3.187,0.876-5.999,4.812-4.641,8.175c7.919,19.517,26.091,34.273,46.11,40.443
+                       C252.458,208.561,255.941,195.738,247.776,193.223z"/>
+       </g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/hourtrax copy.svg b/pointeuse/install/bin/electron/resources/app/img/hourtrax copy.svg
new file mode 100644 (file)
index 0000000..05f00e2
--- /dev/null
@@ -0,0 +1,90 @@
+<?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"
+   id="svg8"
+   version="1.1"
+   viewBox="0 0 150 35"
+   height="35mm"
+   width="150mm">
+  <defs
+     id="defs2" />
+  <metadata
+     id="metadata5">
+    <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>
+  <g
+     transform="translate(0,-262)"
+     id="layer1">
+    <text
+       id="text817"
+       y="-85.511909"
+       x="-172.35715"
+       style="font-style:normal;font-weight:normal;font-size:22.57777786px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       xml:space="preserve"><tspan
+         style="stroke-width:0.26458332"
+         y="-85.511909"
+         x="-172.35715"
+         id="tspan815">Hourtrax</tspan></text>
+    <g
+       id="text829"
+       style="font-style:normal;font-weight:normal;font-size:22.57777786px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       aria-label="HourTrax">
+      <g
+         id="text850"
+         style="font-style:normal;font-weight:normal;font-size:39.52468491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#88aa00;fill-opacity:1;stroke:none;stroke-width:0.12254968"
+         aria-label="Hourtrax">
+        <rect
+           y="262.5293"
+           x="0.33899626"
+           height="34.49929"
+           width="149.42519"
+           id="rect4553"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.04347825;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+        <path
+           id="path4536"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.52468491px;font-family:Digital-7;-inkscape-font-specification:'Digital-7, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#00ff00;stroke-width:0.12254968;stroke:#000000;stroke-opacity:1"
+           d="m 14.312061,278.28467 1.437262,1.43727 -1.437262,1.43726 H 4.9698631 l -1.4372613,-1.43726 1.4372613,-1.43727 z m 2.155892,1.79658 0.718631,0.71863 v 10.06083 q -0.359315,1.43726 -1.796577,1.79658 l -1.077946,-2.87452 v -7.54563 z m -2.155892,-2.87452 v -7.54562 l 1.077946,-2.87453 q 1.437262,0.35932 1.796577,1.79658 v 10.06083 l -0.718631,0.71863 z m -9.3421979,5.03041 v 7.54563 l -1.0779459,2.87452 q -1.4372613,-0.35932 -1.7965766,-1.79658 v -10.06083 l 0.7186306,-0.71863 z m -2.1558919,-2.5152 -0.7186306,-0.71863 v -10.06083 q 0.3593153,-1.43726 1.7965766,-1.79658 l 1.0779459,2.87452 v 7.54562 z" />
+        <path
+           id="path4538"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.52468491px;font-family:Digital-7;-inkscape-font-specification:'Digital-7, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#00ff00;stroke-width:0.12254968;stroke:#000000;stroke-opacity:1"
+           d="m 32.27502,269.66111 h -7.904937 l -1.437261,-1.43726 1.437261,-1.43727 h 7.904937 l 1.437261,1.43727 z m 0.71863,7.54562 v -7.54562 l 1.077946,-1.07795 1.796577,1.79658 v 8.26425 l -0.718631,0.71863 z m 2.155892,2.87452 0.718631,0.71863 v 8.26425 l -1.796577,1.79658 -1.077946,-1.07794 v -7.54563 z m -13.653982,-0.71863 -0.71863,-0.71863 v -8.26425 l 1.796576,-1.79658 1.077946,1.07795 v 7.54562 z m 12.216721,11.85741 -1.437261,1.43726 h -7.904937 l -1.437261,-1.43726 1.437261,-1.43726 h 7.904937 z m -10.060829,-8.98289 v 7.54563 l -1.077946,1.07794 -1.796576,-1.79658 v -8.26425 l 0.71863,-0.71863 z" />
+        <path
+           id="path4540"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.52468491px;font-family:Digital-7;-inkscape-font-specification:'Digital-7, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#00ff00;stroke-width:0.12254968;stroke:#000000;stroke-opacity:1"
+           d="m 53.831132,280.08125 0.71863,0.71863 v 10.06083 q -0.359315,1.43726 -1.796576,1.79658 l -1.077946,-2.87452 v -7.54563 z m -1.796577,12.57604 h -10.77946 q -1.437261,-0.35932 -1.796576,-1.79658 l 2.874522,-1.07794 h 8.623568 z m -12.576036,-2.51521 v -9.3422 l 0.71863,-0.71863 2.155892,2.15589 v 6.82699 z M 51.67524,277.20673 v -7.54562 l 1.077946,-2.87453 q 1.437261,0.35932 1.796576,1.79658 v 10.06083 l -0.71863,0.71863 z m -11.498091,2.51521 -0.71863,-0.71863 v -10.06083 q 0.359315,-1.43726 1.796576,-1.79658 l 1.077946,2.87452 v 7.54562 z" />
+        <path
+           id="path4542"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.52468491px;font-family:Digital-7;-inkscape-font-specification:'Digital-7, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#00ff00;stroke-width:0.12254968;stroke:#000000;stroke-opacity:1"
+           d="m 70.356831,278.28467 1.437261,1.43727 -1.437261,1.43726 h -9.342199 l -1.437261,-1.43726 1.437261,-1.43727 z m -8.623568,3.59316 h 2.155892 l 9.342198,9.3422 q -0.71863,1.43726 -2.874522,1.43726 l -8.623568,-8.62357 z m -0.718631,0.35931 v 7.54563 l -1.077946,2.87452 q -1.437261,-0.35932 -1.796576,-1.79658 v -10.06083 l 0.71863,-0.71863 z M 69.6382,269.66111 h -8.587636 l -2.874523,-1.07795 q 0.359316,-1.43726 1.796577,-1.79658 h 10.743528 z m 0.718631,7.54562 v -7.54562 l 1.077946,-2.87453 q 1.437261,0.35932 1.796576,1.79658 v 10.06083 l -0.71863,0.71863 z m -9.342199,-6.82699 v 6.82699 l -2.155892,2.15589 -0.71863,-0.71863 v -9.3422 z" />
+        <path
+           id="path4544"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.52468491px;font-family:Digital-7;-inkscape-font-specification:'Digital-7, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#00ff00;stroke-width:0.12254968;stroke:#000000;stroke-opacity:1"
+           d="m 84.331387,280.08125 1.437261,1.43726 v 9.3422 q -0.359315,1.43726 -1.796576,1.79658 l -1.077946,-2.87452 v -8.26426 z m -1.437261,-2.15589 v -7.54562 h 2.874522 v 7.54562 l -1.437261,1.43726 z m -3.197906,-8.26425 -2.874523,-1.07795 q 0.359315,-1.43726 1.796577,-1.79658 h 11.462158 q 1.437262,0.35932 1.796577,1.79658 l -2.874523,1.07795 z" />
+        <path
+           id="path4546"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.52468491px;font-family:Digital-7;-inkscape-font-specification:'Digital-7, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#00ff00;stroke-width:0.12254968;stroke:#000000;stroke-opacity:1"
+           d="m 107.72001,278.28467 1.43726,1.43727 -1.43726,1.43726 h -9.342203 l -1.437261,-1.43726 1.437261,-1.43727 z m -8.623573,3.59316 h 2.155893 l 9.3422,9.3422 q -0.71863,1.43726 -2.87452,1.43726 l -8.623573,-8.62357 z m -0.71863,0.35931 v 7.54563 l -1.077946,2.87452 q -1.437261,-0.35932 -1.796577,-1.79658 v -10.06083 l 0.718631,-0.71863 z m 8.623563,-12.57603 h -8.587632 l -2.874522,-1.07795 q 0.359315,-1.43726 1.796576,-1.79658 h 10.743528 z m 0.71864,7.54562 v -7.54562 l 1.07794,-2.87453 q 1.43726,0.35932 1.79658,1.79658 v 10.06083 l -0.71863,0.71863 z m -9.342203,-6.82699 v 6.82699 l -2.155892,2.15589 -0.718631,-0.71863 v -9.3422 z" />
+        <path
+           id="path4548"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.52468491px;font-family:Digital-7;-inkscape-font-specification:'Digital-7, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#00ff00;stroke-width:0.12254968;stroke:#000000;stroke-opacity:1"
+           d="m 126.4016,278.28467 1.43726,1.43727 -1.43726,1.43726 h -9.3422 l -1.43726,-1.43726 1.43726,-1.43727 z m 2.15589,1.79658 0.71863,0.71863 v 10.06083 q -0.35931,1.43726 -1.79657,1.79658 l -1.07795,-2.87452 v -7.54563 z m -2.87452,-10.42014 h -8.58764 l -2.87452,-1.07795 q 0.35932,-1.43726 1.79658,-1.79658 h 10.74353 z m -8.62357,0.71863 v 6.82699 l -2.15589,2.15589 -0.71863,-0.71863 v -9.3422 z m 9.3422,6.82699 v -7.54562 l 1.07795,-2.87453 q 1.43726,0.35932 1.79657,1.79658 v 10.06083 l -0.71863,0.71863 z m -9.3422,5.03041 v 7.54563 l -1.07794,2.87452 q -1.43727,-0.35932 -1.79658,-1.79658 v -10.06083 l 0.71863,-0.71863 z" />
+        <path
+           id="path4550"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.52468491px;font-family:Digital-7;-inkscape-font-specification:'Digital-7, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#00ff00;stroke-width:0.12254968;stroke:#000000;stroke-opacity:1"
+           d="m 140.7714,280.08125 h 1.61691 l 5.53346,11.13878 q -0.71863,1.43726 -2.87452,1.43726 l -4.27585,-8.69543 z m 0.0359,-4.59923 4.27585,-8.69544 q 2.15589,0 2.87452,1.43727 l -5.53345,11.13877 h -1.61692 z m -0.7905,8.47984 -4.27585,8.69543 q -2.15589,0 -2.87452,-1.43726 l 5.53345,-11.13878 h 1.61692 z m 0.0359,-4.59924 h -1.61692 l -5.53346,-11.13877 q 0.71863,-1.43727 2.87452,-1.43727 l 4.27586,8.73137 z" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/hourtrax.png b/pointeuse/install/bin/electron/resources/app/img/hourtrax.png
new file mode 100644 (file)
index 0000000..1399862
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/hourtrax.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/hourtrax.svg b/pointeuse/install/bin/electron/resources/app/img/hourtrax.svg
new file mode 100644 (file)
index 0000000..05f00e2
--- /dev/null
@@ -0,0 +1,90 @@
+<?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"
+   id="svg8"
+   version="1.1"
+   viewBox="0 0 150 35"
+   height="35mm"
+   width="150mm">
+  <defs
+     id="defs2" />
+  <metadata
+     id="metadata5">
+    <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>
+  <g
+     transform="translate(0,-262)"
+     id="layer1">
+    <text
+       id="text817"
+       y="-85.511909"
+       x="-172.35715"
+       style="font-style:normal;font-weight:normal;font-size:22.57777786px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       xml:space="preserve"><tspan
+         style="stroke-width:0.26458332"
+         y="-85.511909"
+         x="-172.35715"
+         id="tspan815">Hourtrax</tspan></text>
+    <g
+       id="text829"
+       style="font-style:normal;font-weight:normal;font-size:22.57777786px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+       aria-label="HourTrax">
+      <g
+         id="text850"
+         style="font-style:normal;font-weight:normal;font-size:39.52468491px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#88aa00;fill-opacity:1;stroke:none;stroke-width:0.12254968"
+         aria-label="Hourtrax">
+        <rect
+           y="262.5293"
+           x="0.33899626"
+           height="34.49929"
+           width="149.42519"
+           id="rect4553"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.04347825;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+        <path
+           id="path4536"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.52468491px;font-family:Digital-7;-inkscape-font-specification:'Digital-7, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#00ff00;stroke-width:0.12254968;stroke:#000000;stroke-opacity:1"
+           d="m 14.312061,278.28467 1.437262,1.43727 -1.437262,1.43726 H 4.9698631 l -1.4372613,-1.43726 1.4372613,-1.43727 z m 2.155892,1.79658 0.718631,0.71863 v 10.06083 q -0.359315,1.43726 -1.796577,1.79658 l -1.077946,-2.87452 v -7.54563 z m -2.155892,-2.87452 v -7.54562 l 1.077946,-2.87453 q 1.437262,0.35932 1.796577,1.79658 v 10.06083 l -0.718631,0.71863 z m -9.3421979,5.03041 v 7.54563 l -1.0779459,2.87452 q -1.4372613,-0.35932 -1.7965766,-1.79658 v -10.06083 l 0.7186306,-0.71863 z m -2.1558919,-2.5152 -0.7186306,-0.71863 v -10.06083 q 0.3593153,-1.43726 1.7965766,-1.79658 l 1.0779459,2.87452 v 7.54562 z" />
+        <path
+           id="path4538"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.52468491px;font-family:Digital-7;-inkscape-font-specification:'Digital-7, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#00ff00;stroke-width:0.12254968;stroke:#000000;stroke-opacity:1"
+           d="m 32.27502,269.66111 h -7.904937 l -1.437261,-1.43726 1.437261,-1.43727 h 7.904937 l 1.437261,1.43727 z m 0.71863,7.54562 v -7.54562 l 1.077946,-1.07795 1.796577,1.79658 v 8.26425 l -0.718631,0.71863 z m 2.155892,2.87452 0.718631,0.71863 v 8.26425 l -1.796577,1.79658 -1.077946,-1.07794 v -7.54563 z m -13.653982,-0.71863 -0.71863,-0.71863 v -8.26425 l 1.796576,-1.79658 1.077946,1.07795 v 7.54562 z m 12.216721,11.85741 -1.437261,1.43726 h -7.904937 l -1.437261,-1.43726 1.437261,-1.43726 h 7.904937 z m -10.060829,-8.98289 v 7.54563 l -1.077946,1.07794 -1.796576,-1.79658 v -8.26425 l 0.71863,-0.71863 z" />
+        <path
+           id="path4540"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.52468491px;font-family:Digital-7;-inkscape-font-specification:'Digital-7, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#00ff00;stroke-width:0.12254968;stroke:#000000;stroke-opacity:1"
+           d="m 53.831132,280.08125 0.71863,0.71863 v 10.06083 q -0.359315,1.43726 -1.796576,1.79658 l -1.077946,-2.87452 v -7.54563 z m -1.796577,12.57604 h -10.77946 q -1.437261,-0.35932 -1.796576,-1.79658 l 2.874522,-1.07794 h 8.623568 z m -12.576036,-2.51521 v -9.3422 l 0.71863,-0.71863 2.155892,2.15589 v 6.82699 z M 51.67524,277.20673 v -7.54562 l 1.077946,-2.87453 q 1.437261,0.35932 1.796576,1.79658 v 10.06083 l -0.71863,0.71863 z m -11.498091,2.51521 -0.71863,-0.71863 v -10.06083 q 0.359315,-1.43726 1.796576,-1.79658 l 1.077946,2.87452 v 7.54562 z" />
+        <path
+           id="path4542"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.52468491px;font-family:Digital-7;-inkscape-font-specification:'Digital-7, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#00ff00;stroke-width:0.12254968;stroke:#000000;stroke-opacity:1"
+           d="m 70.356831,278.28467 1.437261,1.43727 -1.437261,1.43726 h -9.342199 l -1.437261,-1.43726 1.437261,-1.43727 z m -8.623568,3.59316 h 2.155892 l 9.342198,9.3422 q -0.71863,1.43726 -2.874522,1.43726 l -8.623568,-8.62357 z m -0.718631,0.35931 v 7.54563 l -1.077946,2.87452 q -1.437261,-0.35932 -1.796576,-1.79658 v -10.06083 l 0.71863,-0.71863 z M 69.6382,269.66111 h -8.587636 l -2.874523,-1.07795 q 0.359316,-1.43726 1.796577,-1.79658 h 10.743528 z m 0.718631,7.54562 v -7.54562 l 1.077946,-2.87453 q 1.437261,0.35932 1.796576,1.79658 v 10.06083 l -0.71863,0.71863 z m -9.342199,-6.82699 v 6.82699 l -2.155892,2.15589 -0.71863,-0.71863 v -9.3422 z" />
+        <path
+           id="path4544"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.52468491px;font-family:Digital-7;-inkscape-font-specification:'Digital-7, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#00ff00;stroke-width:0.12254968;stroke:#000000;stroke-opacity:1"
+           d="m 84.331387,280.08125 1.437261,1.43726 v 9.3422 q -0.359315,1.43726 -1.796576,1.79658 l -1.077946,-2.87452 v -8.26426 z m -1.437261,-2.15589 v -7.54562 h 2.874522 v 7.54562 l -1.437261,1.43726 z m -3.197906,-8.26425 -2.874523,-1.07795 q 0.359315,-1.43726 1.796577,-1.79658 h 11.462158 q 1.437262,0.35932 1.796577,1.79658 l -2.874523,1.07795 z" />
+        <path
+           id="path4546"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.52468491px;font-family:Digital-7;-inkscape-font-specification:'Digital-7, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#00ff00;stroke-width:0.12254968;stroke:#000000;stroke-opacity:1"
+           d="m 107.72001,278.28467 1.43726,1.43727 -1.43726,1.43726 h -9.342203 l -1.437261,-1.43726 1.437261,-1.43727 z m -8.623573,3.59316 h 2.155893 l 9.3422,9.3422 q -0.71863,1.43726 -2.87452,1.43726 l -8.623573,-8.62357 z m -0.71863,0.35931 v 7.54563 l -1.077946,2.87452 q -1.437261,-0.35932 -1.796577,-1.79658 v -10.06083 l 0.718631,-0.71863 z m 8.623563,-12.57603 h -8.587632 l -2.874522,-1.07795 q 0.359315,-1.43726 1.796576,-1.79658 h 10.743528 z m 0.71864,7.54562 v -7.54562 l 1.07794,-2.87453 q 1.43726,0.35932 1.79658,1.79658 v 10.06083 l -0.71863,0.71863 z m -9.342203,-6.82699 v 6.82699 l -2.155892,2.15589 -0.718631,-0.71863 v -9.3422 z" />
+        <path
+           id="path4548"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.52468491px;font-family:Digital-7;-inkscape-font-specification:'Digital-7, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#00ff00;stroke-width:0.12254968;stroke:#000000;stroke-opacity:1"
+           d="m 126.4016,278.28467 1.43726,1.43727 -1.43726,1.43726 h -9.3422 l -1.43726,-1.43726 1.43726,-1.43727 z m 2.15589,1.79658 0.71863,0.71863 v 10.06083 q -0.35931,1.43726 -1.79657,1.79658 l -1.07795,-2.87452 v -7.54563 z m -2.87452,-10.42014 h -8.58764 l -2.87452,-1.07795 q 0.35932,-1.43726 1.79658,-1.79658 h 10.74353 z m -8.62357,0.71863 v 6.82699 l -2.15589,2.15589 -0.71863,-0.71863 v -9.3422 z m 9.3422,6.82699 v -7.54562 l 1.07795,-2.87453 q 1.43726,0.35932 1.79657,1.79658 v 10.06083 l -0.71863,0.71863 z m -9.3422,5.03041 v 7.54563 l -1.07794,2.87452 q -1.43727,-0.35932 -1.79658,-1.79658 v -10.06083 l 0.71863,-0.71863 z" />
+        <path
+           id="path4550"
+           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:39.52468491px;font-family:Digital-7;-inkscape-font-specification:'Digital-7, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#00ff00;stroke-width:0.12254968;stroke:#000000;stroke-opacity:1"
+           d="m 140.7714,280.08125 h 1.61691 l 5.53346,11.13878 q -0.71863,1.43726 -2.87452,1.43726 l -4.27585,-8.69543 z m 0.0359,-4.59923 4.27585,-8.69544 q 2.15589,0 2.87452,1.43727 l -5.53345,11.13877 h -1.61692 z m -0.7905,8.47984 -4.27585,8.69543 q -2.15589,0 -2.87452,-1.43726 l 5.53345,-11.13878 h 1.61692 z m 0.0359,-4.59924 h -1.61692 l -5.53346,-11.13877 q 0.71863,-1.43727 2.87452,-1.43727 l 4.27586,8.73137 z" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/hwbagde.svg b/pointeuse/install/bin/electron/resources/app/img/hwbagde.svg
new file mode 100644 (file)
index 0000000..a2aef02
--- /dev/null
@@ -0,0 +1,60 @@
+<?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"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="250mm"
+   height="250mm"
+   viewBox="0 0 250 250"
+   version="1.1"
+   id="svg1002"
+   inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
+   sodipodi:docname="hwbagde.svg">
+  <defs
+     id="defs996" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.35"
+     inkscape:cx="787.69805"
+     inkscape:cy="854.50192"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     inkscape:document-rotation="0"
+     showgrid="false"
+     units="mm"
+     inkscape:window-width="1294"
+     inkscape:window-height="1040"
+     inkscape:window-x="519"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata999">
+    <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>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#000000;stroke-width:0.82485"
+       d="m 160.91702,239.38219 c -0.30658,-1.63419 -0.44068,-3.05593 -0.298,-3.15939 0.14263,-0.10358 2.74845,-0.84471 5.79065,-1.64714 23.11193,-6.09632 41.53377,-25.64536 46.04604,-48.86349 l 0.98885,-5.08817 2.99908,0.46204 c 1.64948,0.25413 3.1336,0.57498 3.29804,0.713 0.16438,0.13795 -0.32986,3.07741 -1.09844,6.53196 -4.63897,20.85135 -17.9006,37.95581 -36.79316,47.4548 -5.6379,2.83471 -16.67584,6.56765 -19.41981,6.56765 -0.52571,0 -1.20668,-1.33706 -1.51325,-2.97126 z m -2.39472,-15.33964 c -1.04869,-3.91531 -0.65864,-4.55697 3.38717,-5.57213 14.38684,-3.60983 27.8263,-16.10583 32.25162,-29.98753 0.8953,-2.80841 1.85322,-6.12693 2.12875,-7.37452 0.51187,-2.31779 2.46278,-2.88225 5.50151,-1.59172 1.17988,0.50109 1.20392,1.1304 0.22634,5.92217 -3.87989,19.01861 -20.89014,35.8373 -40.41351,39.95839 -2.21478,0.46751 -2.64443,0.27864 -3.08193,-1.35466 z m -2.48759,-16.5469 c -1.0383,-3.87404 -0.61704,-4.47775 4.40135,-6.30755 6.64843,-2.42413 13.55971,-8.78604 16.65688,-15.33278 1.28882,-2.72424 2.34356,-5.78832 2.34391,-6.80907 5.8e-4,-1.62539 0.4244,-1.85591 3.41216,-1.85591 h 3.41154 l -0.51253,3.73918 c -1.31037,9.5603 -9.38662,20.0553 -18.96529,24.64527 -8.15919,3.90975 -10.12099,4.26035 -10.74802,1.92086 z m -54.27256,-12.1214 C 88.422599,192.92808 76.567937,187.03566 67.136881,178.16362 53.92134,165.73139 46.924153,151.36478 45.370684,133.47332 44.933809,128.44177 45.222796,125.59319 46.918824,118.2136 49.86997,105.37275 56.610571,86.008348 65.007569,66.248087 85.491954,18.043232 85.601403,17.833125 93.240744,12.036882 99.627886,7.1907496 104.31208,5.7464003 113.03714,5.9327981 c 6.36601,0.1360807 8.19304,0.5191175 12.82423,2.6891603 6.18624,2.8986586 10.60403,6.5068786 13.90429,11.3562846 4.83287,7.101424 32.35891,74.896487 36.8712,90.811707 2.61537,9.22459 3.04332,11.93332 3.06252,19.38397 0.0283,11.01109 -1.60921,17.8216 -6.84259,28.45731 -8.67435,17.62876 -24.19562,30.33498 -43.3389,35.47869 -5.73638,1.54134 -22.16441,2.28966 -27.75574,1.26433 z m 27.45817,-18.36357 c 8.3369,-3.0721 12.93136,-6.08781 19.71271,-12.93905 7.1166,-7.18997 11.39641,-14.96925 13.5199,-24.57477 5.88292,-26.61106 -10.76572,-53.341349 -37.45549,-60.136756 -8.02326,-2.0428 -18.9569,-1.812819 -26.45979,0.556528 -3.366968,1.063277 -6.30734,1.953086 -6.534188,1.977356 -1.629905,0.174426 -11.222682,6.924847 -14.6879,10.335843 -7.914341,7.790479 -12.09155,15.437049 -14.604484,26.734109 -5.390947,24.23553 10.434733,50.95137 34.653917,58.50039 6.319665,1.9698 7.576025,2.10184 17.321835,1.82039 7.11356,-0.20552 10.25272,-0.6966 14.53349,-2.27404 z m -27.91708,-4.33903 c -22.719602,-6.38378 -37.088002,-28.64146 -33.235142,-51.48371 1.390852,-8.24602 6.328019,-17.88402 12.264574,-23.94218 4.666516,-4.762099 12.526111,-9.941746 15.10767,-9.95629 0.756113,-0.0047 1.498477,-0.347964 1.649709,-0.763782 0.364332,-1.001853 12.045779,-3.371972 16.530949,-3.354062 8.93323,0.03554 21.99927,5.338222 29.27673,11.881295 25.16097,22.621869 17.35742,63.900859 -14.38613,76.099279 -7.00301,2.69112 -20.37979,3.43814 -27.20836,1.51945 z M 127.12781,36.602066 c 1.56518,-2.143692 1.47783,-5.351385 -0.19618,-7.201054 -1.12374,-1.241701 -2.63725,-1.508415 -8.55992,-1.508415 -5.38909,0 -7.45252,0.310508 -8.22165,1.237259 -0.56476,0.680497 -1.86389,1.237282 -2.88697,1.237282 -1.02306,0 -2.32221,-0.556785 -2.88697,-1.237282 -2.34332,-2.82351 -7.434402,-0.327482 -7.41102,3.633448 0.0304,5.149181 2.271753,5.905224 16.7588,5.652961 11.01922,-0.191963 12.35092,-0.372141 13.40381,-1.814199 z"
+       id="path1579" />
+  </g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/key-fob.png b/pointeuse/install/bin/electron/resources/app/img/key-fob.png
new file mode 100644 (file)
index 0000000..d8356db
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/key-fob.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/logo_512.png b/pointeuse/install/bin/electron/resources/app/img/logo_512.png
new file mode 100644 (file)
index 0000000..37e2068
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/logo_512.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/nfc-scan.svg b/pointeuse/install/bin/electron/resources/app/img/nfc-scan.svg
new file mode 100644 (file)
index 0000000..62800be
--- /dev/null
@@ -0,0 +1,210 @@
+<?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"
+   width="500"
+   height="350"
+   viewBox="0 0 132.29166 92.604173"
+   version="1.1"
+   id="svg8">
+  <defs
+     id="defs2">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath124">
+      <path
+         d="M 0,3401.57 H 4535.43 V 0 H 0 Z"
+         id="path122" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath96">
+      <path
+         d="M 0,3401.57 H 4535.43 V 0 H 0 Z"
+         id="path94" />
+    </clipPath>
+  </defs>
+  <metadata
+     id="metadata5">
+    <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>
+  <g
+     id="layer1">
+    <g
+       id="g2306"
+       transform="translate(-47.841245,-13.096207)">
+      <rect
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:8.687;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect833"
+         width="103.58537"
+         height="64.877937"
+         x="69.33857"
+         y="22.245407"
+         ry="2.4145069" />
+      <rect
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.42903;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect835"
+         width="36.446449"
+         height="34.067883"
+         x="52.068661"
+         y="66.888687"
+         ry="0"
+         rx="0" />
+      <path
+         style="fill:#000000;fill-opacity:1;stroke-width:0.11474"
+         d="m 101.07034,33.460061 c 1.62113,-1.049972 3.46575,-1.652626 5.3878,-1.760239 2.69333,-0.150796 4.96497,0.461091 7.06639,1.903396 0.59097,0.405615 0.87106,0.686205 1.50039,1.503115 1.09506,1.42146 2.51375,3.782649 3.80715,6.336385 3.15521,6.229802 3.16691,6.258869 3.02036,7.499734 -0.12254,1.037464 -0.44159,1.610843 -1.34837,2.423218 -0.66162,0.592723 -0.88886,0.732264 -1.59516,0.979422 -0.94345,0.330149 -1.7843,0.429231 -2.64643,0.311842 -1.26249,-0.171901 -11.42403,-3.58124 -13.61141,-4.566823 -1.26782,-0.571251 -1.60556,-0.771299 -2.41689,-1.431565 -1.199027,-0.975794 -1.772483,-1.736574 -2.396107,-3.178904 -1.033664,-2.390675 -0.836888,-4.994418 0.54944,-7.270246 0.41542,-0.681963 2.003337,-2.309236 2.682837,-2.749335 z m -0.79508,4.240562 c -0.513366,1.065057 -0.652594,1.76955 -0.597368,3.022646 0.05796,1.315051 0.468178,2.412954 1.295878,3.468279 2.29306,2.923668 6.88844,3.717278 10.33851,1.785433 1.03713,-0.580734 2.12309,-1.639941 2.62805,-2.563313 0.2266,-0.414372 0.4287,-0.772798 0.44912,-0.796507 0.14666,-0.170352 0.38804,-1.681597 0.36959,-2.313929 -0.0421,-1.444202 -0.44836,-2.520565 -1.42025,-3.763205 -2.08498,-2.66583 -6.59517,-3.536343 -9.87608,-1.906189 -0.85611,0.425368 -0.99811,0.532997 -1.95778,1.483925 -0.70046,0.6941 -0.96607,1.035982 -1.22967,1.58286 z m 3.30793,-2.26673 c 3.00196,-1.591233 6.87979,-0.978435 8.9697,1.417454 0.75445,0.864909 1.29979,2.19044 1.35471,3.292799 0.0432,0.866527 -0.19276,2.073522 -0.45349,2.320081 -0.0763,0.07225 -0.11445,0.173286 -0.0846,0.224604 0.0718,0.123644 -0.85763,1.444077 -1.3153,1.868606 -0.91155,0.845559 -2.81519,1.615707 -4.26542,1.725675 -5.01399,0.380206 -8.705297,-4.029376 -6.80505,-8.129218 0.41921,-0.904476 1.69724,-2.241743 2.5995,-2.720001 z m 12.1575,14.545111 c 0.0738,0.339199 0.43117,0.615946 0.8022,0.621272 0.24907,0.0036 0.43183,-0.116513 1.03361,-0.679206 0.54757,-0.512002 0.7235,-0.735634 0.70098,-0.891061 -0.0165,-0.114125 0.055,-0.28703 0.15893,-0.384229 0.10395,-0.0972 0.29644,-0.171148 0.42774,-0.164333 0.54482,0.02828 0.79096,-0.677217 0.35831,-1.026978 -0.56246,-0.454685 -0.87232,-0.308927 -2.31691,1.089858 -1.09878,1.063959 -1.21452,1.206491 -1.16484,1.434668 z"
+         id="path1579" />
+      <rect
+         style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:4.17863;stroke-opacity:1"
+         id="rect2101"
+         width="5.7193909"
+         height="2.0506716"
+         x="112.73341"
+         y="-54.043159"
+         ry="0.93088114"
+         transform="scale(1,-1)" />
+      <g
+         id="g118"
+         transform="matrix(0.17941993,0,0,-0.1740823,-311.75586,352.75191)"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+        <g
+           id="g120"
+           clip-path="url(#clipPath124)"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+          <g
+             id="g126"
+             transform="translate(2559.7549,1614.999)"
+             style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+            <path
+               d="m 0,0 c -1.623,0 -3.215,0.789 -4.177,2.244 l -66.784,101.069 c -8.507,12.917 -18.143,27.577 -34.354,26.941 -19.539,-0.741 -35.123,-1.245 -35.279,-1.251 -2.749,-0.069 -5.07,2.077 -5.158,4.837 -0.09,2.76 2.076,5.069 4.836,5.159 0.155,0.004 15.713,0.507 35.222,1.249 21.873,0.829 33.618,-17.06 43.085,-31.435 l 1.026,-1.556 L 4.167,7.758 C 5.689,5.454 5.056,2.352 2.752,0.829 1.903,0.269 0.946,0 0,0"
+               style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-opacity:1"
+               id="path128" />
+          </g>
+          <g
+             id="g130"
+             transform="translate(2497,1583.5)"
+             style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+            <path
+               d="m 0,0 c -15.459,0 -23.922,6.14 -28.469,9.438 -0.714,0.518 -1.388,1.007 -1.761,1.221 -4.171,2.383 -16.516,14.336 -20.49,25.69 -2.218,6.339 -3.767,9.332 -5.912,13.475 -1.102,2.13 -2.351,4.545 -3.887,7.785 -3.245,6.852 -14.585,16.113 -18.679,19.103 l -0.275,0.216 c -2.086,1.758 -51.16,43.14 -59.134,50.367 -7.706,6.983 -9.306,11.448 -10.285,15.422 -0.061,0.249 -0.119,0.487 -0.182,0.718 -0.868,3.186 -1.989,11.6 6.351,20.903 8.62,9.617 23.483,4.604 24.112,4.386 l 0.446,-0.155 86.409,-49.736 c 2.394,-1.377 3.217,-4.434 1.839,-6.827 -1.376,-2.394 -4.431,-3.221 -6.827,-1.839 l -85.51,49.217 c -1.755,0.493 -9.387,2.333 -13.023,-1.722 -5.06,-5.643 -4.587,-9.99 -4.149,-11.597 0.083,-0.307 0.162,-0.625 0.244,-0.957 0.536,-2.178 1.203,-4.888 7.289,-10.403 7.648,-6.931 55.868,-47.603 58.737,-50.023 2.288,-1.684 16.888,-12.688 21.675,-22.791 1.46,-3.082 2.666,-5.413 3.731,-7.471 2.244,-4.337 4.018,-7.763 6.47,-14.769 3.104,-8.872 13.628,-18.948 16.01,-20.31 0.845,-0.483 1.693,-1.097 2.673,-1.809 C -18.713,14.715 -12.213,10 0,10 2.762,10 5,7.762 5,5 5,2.238 2.762,0 0,0"
+               style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-opacity:1"
+               id="path132" />
+          </g>
+          <g
+             id="g134"
+             transform="translate(2379.8721,1690.8281)"
+             style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+            <path
+               d="M 40.992646,62.912646 36.505,38.068 l -9.754,2.208 6.417871,19.603231 c -1.022274,4.030343 7.823775,3.033415 7.823775,3.033415 z"
+               style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-opacity:1"
+               id="path136" />
+          </g>
+          <g
+             id="g138"
+             transform="translate(2420.25,1635)"
+             style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+            <path
+               d="m 0,0 c -3.088,0 -7.54,2.48 -10.731,4.562 l -0.184,0.125 c -7.724,5.542 -33.064,23.745 -34.839,25.267 -2.856,2.447 -4.951,7.102 -5.739,9.465 -1.505,4.515 -0.403,9.735 3.274,15.516 4.34,6.819 13.16,6.297 17.813,4.882 l 1.869,-0.466 -2.426,-9.702 -2.286,0.581 c -1.349,0.406 -5.461,1.02 -6.532,-0.665 -1.928,-3.027 -2.718,-5.507 -2.226,-6.984 0.671,-2.012 2.079,-4.45 2.761,-5.035 1.535,-1.262 21.67,-15.771 34.065,-24.665 1.981,-1.28 4.449,-2.585 5.418,-2.873 1.924,0.113 9.392,1.409 15.527,3.68 L 19.236,4.312 C 12.131,1.68 3.098,0 0,0"
+               style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-opacity:1"
+               id="path140" />
+          </g>
+          <g
+             id="g142"
+             transform="translate(2428.293,1610.1611)"
+             style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1">
+            <path
+               d="m 0,0 c -3.402,0 -8.256,0.82 -14.657,3.808 -11.039,5.151 -28.656,12.6 -28.832,12.675 l -0.544,0.23 -0.476,0.35 c -0.685,0.505 -6.701,5.188 -7.03,14.09 -0.358,9.672 10.047,17.543 16.969,17.928 l 0.308,0.018 3.976,-0.272 c 2.755,-0.187 4.836,-2.573 4.648,-5.328 -0.187,-2.755 -2.585,-4.83 -5.328,-4.648 l -3.269,0.222 c -2.261,-0.343 -7.443,-4.002 -7.312,-7.549 0.123,-3.319 1.928,-5.413 2.662,-6.131 3.439,-1.459 18.531,-7.891 28.456,-12.523 7.44,-3.473 11.24,-2.902 12.03,-2.723 l 0.606,0.406 0.317,-0.106 18.834,4.583 c 2.684,0.654 5.388,-0.993 6.041,-3.676 C 28.052,8.671 26.406,5.967 23.724,5.313 L 5.239,0.815 C 4.279,0.46 2.546,0 0,0"
+               style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-opacity:1"
+               id="path144" />
+          </g>
+        </g>
+      </g>
+      <g
+         id="g2207"
+         style="fill:#000000;fill-opacity:1"
+         transform="matrix(0.05019773,0,0,-0.05182505,-41.711971,170.65743)">
+        <rect
+           style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:20.7829;stroke-opacity:1"
+           id="rect2101-3"
+           width="27.965055"
+           height="10.37464"
+           x="422.00845"
+           y="193.33308"
+           ry="4.7094607"
+           transform="matrix(0.9923035,0,0,-0.9923035,1964.863,1895.303)" />
+        <ellipse
+           style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:6.94612;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path2183"
+           cx="2218.3765"
+           cy="-1707.038"
+           transform="scale(1,-1)"
+           rx="241.93335"
+           ry="174.19121" />
+        <g
+           id="g92"
+           clip-path="url(#clipPath96)"
+           style="fill:#000000;fill-opacity:1">
+          <g
+             id="g98"
+             transform="translate(2421,1616.7285)"
+             style="fill:#000000;fill-opacity:1">
+            <path
+               d="m 0,0 c -41.947,-47.402 -116.102,-78.895 -200.583,-78.895 -130.852,0 -236.929,75.551 -236.929,168.749 0,93.199 106.077,168.75 236.929,168.75 109.168,0 201.092,-52.586 228.56,-124.135 l 7.249,1.345 C 6.921,209.657 -87.932,263.938 -200.583,263.938 -335.571,263.938 -445,185.999 -445,89.854 c 0,-96.143 109.429,-174.083 244.417,-174.083 89.496,0 167.759,34.26 210.344,85.371"
+               style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+               id="path100" />
+          </g>
+          <g
+             id="g102"
+             transform="translate(2150.2432,1703.9434)"
+             style="fill:#000000;fill-opacity:1">
+            <path
+               d="m 0,0 c 0.001,0.146 0.008,0.289 0.008,0.436 0,19.239 -8.085,33.089 -12.786,39.518 -1.623,2.32 -2.79,3.651 -2.959,3.839 -4.499,5.034 -12.228,5.469 -17.262,0.968 -5.034,-4.5 -5.467,-12.229 -0.967,-17.263 0.01,-0.012 0.143,-0.167 0.361,-0.445 l -0.053,-0.051 -0.089,0.093 c 0.077,-0.083 0.51,-0.569 1.138,-1.397 2.601,-3.73 8.043,-13.042 8.158,-25.698 -0.123,-12.623 -5.542,-21.915 -8.146,-25.654 -0.634,-0.837 -1.073,-1.329 -1.15,-1.413 l 0.088,0.092 0.054,-0.051 c -0.218,-0.278 -0.35,-0.433 -0.361,-0.445 -4.5,-5.034 -4.066,-12.762 0.967,-17.262 5.035,-4.5 12.764,-4.067 17.263,0.966 0.169,0.19 1.342,1.529 2.973,3.862 4.704,6.439 12.77,20.28 12.77,39.497 C 0.007,-0.271 0,-0.137 0,0"
+               style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+               id="path104" />
+          </g>
+          <g
+             id="g106"
+             transform="translate(2168.2412,1634.749)"
+             style="fill:#000000;fill-opacity:1">
+            <path
+               d="m 0,0 c -2.541,0 -5.101,0.804 -7.275,2.465 -5.267,4.023 -6.275,11.554 -2.252,16.82 0.092,0.126 13.786,18.894 13.786,49.523 0,30.847 -13.898,51.302 -14.038,51.501 -3.834,5.405 -2.56,12.896 2.845,16.73 5.405,3.836 12.896,2.561 16.73,-2.846 C 10.55,133.131 28.259,107.718 28.259,68.808 28.259,29.666 10.309,5.717 9.545,4.717 7.183,1.625 3.612,0 0,0"
+               style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+               id="path108" />
+          </g>
+          <g
+             id="g110"
+             transform="translate(2212.2622,1611.8477)"
+             style="fill:#000000;fill-opacity:1">
+            <path
+               d="m 0,0 c -2.498,0 -5.017,0.777 -7.172,2.388 -5.31,3.966 -6.399,11.485 -2.432,16.795 0.166,0.228 19.82,27.553 19.82,72.201 0,45.376 -19.866,74.541 -20.067,74.831 -3.777,5.445 -2.425,12.922 3.021,16.7 5.445,3.776 12.923,2.424 16.7,-3.021 0.994,-1.434 24.346,-35.707 24.346,-88.51 C 34.216,38.35 10.627,6.163 9.623,4.819 7.267,1.665 3.656,0 0,0"
+               style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+               id="path112" />
+          </g>
+          <g
+             id="g114"
+             transform="translate(2255.6509,1588.0762)"
+             style="fill:#000000;fill-opacity:1">
+            <path
+               d="m 0,0 c -2.498,0 -5.017,0.777 -7.172,2.388 -5.31,3.966 -6.399,11.485 -2.432,16.795 0.239,0.326 26.375,36.503 26.375,95.635 0,59.427 -26.374,98.578 -26.64,98.967 -3.741,5.455 -2.371,12.923 3.075,16.678 5.446,3.755 12.894,2.409 16.664,-3.026 1.261,-1.819 30.901,-45.325 30.901,-112.619 C 40.771,47.291 10.895,6.521 9.623,4.819 7.267,1.665 3.656,0 0,0"
+               style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+               id="path116" />
+          </g>
+        </g>
+      </g>
+      <path
+         d="m 80.305381,58.049595 3.731682,4.017759 9.004422,-15.8186 4.478044,4.821337 -9.004423,15.818596 3.733072,4.019254 -12.120398,4.371229 z"
+         id="path2"
+         style="fill:#a8abb2;fill-opacity:1;stroke-width:0.0557593" />
+    </g>
+  </g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/nfc-scan_alt.svg b/pointeuse/install/bin/electron/resources/app/img/nfc-scan_alt.svg
new file mode 100644 (file)
index 0000000..d1bc262
--- /dev/null
@@ -0,0 +1,99 @@
+<?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"
+   version="1.1"
+   id="svg2"
+   xml:space="preserve"
+   width="600"
+   height="400"
+   viewBox="0 0 599.99999 400"><metadata
+     id="metadata8"><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="defs6"><clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath24"><path
+         d="M 0,3401.57 H 4535.43 V 0 H 0 Z"
+         id="path22" /></clipPath><clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath36"><path
+         d="m 1999.66,1779.67 h 150.67 V 1629 h -150.67 z"
+         id="path34" /></clipPath><clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath68"><path
+         d="M 0,3401.57 H 4535.43 V 0 H 0 Z"
+         id="path66" /></clipPath><clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath96"><path
+         d="M 0,3401.57 H 4535.43 V 0 H 0 Z"
+         id="path94" /></clipPath><clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath124"><path
+         d="M 0,3401.57 H 4535.43 V 0 H 0 Z"
+         id="path122" /></clipPath></defs><g
+     id="g10"
+     transform="matrix(1.3333333,0,0,-1.3333333,0,4535.4267)"><g
+       id="g18"
+       transform="translate(-100.9408,103.82483)" /><g
+       id="g90"
+       transform="matrix(0.75581714,0,0,0.75581714,-1483.3003,1962.4042)"><g
+         id="g92"
+         clip-path="url(#clipPath96)"><g
+           id="g98"
+           transform="translate(2421,1616.7285)"><path
+             d="m 0,0 c -41.947,-47.402 -116.102,-78.895 -200.583,-78.895 -130.852,0 -236.929,75.551 -236.929,168.749 0,93.199 106.077,168.75 236.929,168.75 109.168,0 201.092,-52.586 228.56,-124.135 l 7.249,1.345 C 6.921,209.657 -87.932,263.938 -200.583,263.938 -335.571,263.938 -445,185.999 -445,89.854 c 0,-96.143 109.429,-174.083 244.417,-174.083 89.496,0 167.759,34.26 210.344,85.371"
+             style="fill:#262626;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path100" /></g><g
+           id="g102"
+           transform="translate(2150.2432,1703.9434)"><path
+             d="m 0,0 c 0.001,0.146 0.008,0.289 0.008,0.436 0,19.239 -8.085,33.089 -12.786,39.518 -1.623,2.32 -2.79,3.651 -2.959,3.839 -4.499,5.034 -12.228,5.469 -17.262,0.968 -5.034,-4.5 -5.467,-12.229 -0.967,-17.263 0.01,-0.012 0.143,-0.167 0.361,-0.445 l -0.053,-0.051 -0.089,0.093 c 0.077,-0.083 0.51,-0.569 1.138,-1.397 2.601,-3.73 8.043,-13.042 8.158,-25.698 -0.123,-12.623 -5.542,-21.915 -8.146,-25.654 -0.634,-0.837 -1.073,-1.329 -1.15,-1.413 l 0.088,0.092 0.054,-0.051 c -0.218,-0.278 -0.35,-0.433 -0.361,-0.445 -4.5,-5.034 -4.066,-12.762 0.967,-17.262 5.035,-4.5 12.764,-4.067 17.263,0.966 0.169,0.19 1.342,1.529 2.973,3.862 4.704,6.439 12.77,20.28 12.77,39.497 C 0.007,-0.271 0,-0.137 0,0"
+             style="fill:#262626;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path104" /></g><g
+           id="g106"
+           transform="translate(2168.2412,1634.749)"><path
+             d="m 0,0 c -2.541,0 -5.101,0.804 -7.275,2.465 -5.267,4.023 -6.275,11.554 -2.252,16.82 0.092,0.126 13.786,18.894 13.786,49.523 0,30.847 -13.898,51.302 -14.038,51.501 -3.834,5.405 -2.56,12.896 2.845,16.73 5.405,3.836 12.896,2.561 16.73,-2.846 C 10.55,133.131 28.259,107.718 28.259,68.808 28.259,29.666 10.309,5.717 9.545,4.717 7.183,1.625 3.612,0 0,0"
+             style="fill:#262626;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path108" /></g><g
+           id="g110"
+           transform="translate(2212.2622,1611.8477)"><path
+             d="m 0,0 c -2.498,0 -5.017,0.777 -7.172,2.388 -5.31,3.966 -6.399,11.485 -2.432,16.795 0.166,0.228 19.82,27.553 19.82,72.201 0,45.376 -19.866,74.541 -20.067,74.831 -3.777,5.445 -2.425,12.922 3.021,16.7 5.445,3.776 12.923,2.424 16.7,-3.021 0.994,-1.434 24.346,-35.707 24.346,-88.51 C 34.216,38.35 10.627,6.163 9.623,4.819 7.267,1.665 3.656,0 0,0"
+             style="fill:#262626;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path112" /></g><g
+           id="g114"
+           transform="translate(2255.6509,1588.0762)"><path
+             d="m 0,0 c -2.498,0 -5.017,0.777 -7.172,2.388 -5.31,3.966 -6.399,11.485 -2.432,16.795 0.239,0.326 26.375,36.503 26.375,95.635 0,59.427 -26.374,98.578 -26.64,98.967 -3.741,5.455 -2.371,12.923 3.075,16.678 5.446,3.755 12.894,2.409 16.664,-3.026 1.261,-1.819 30.901,-45.325 30.901,-112.619 C 40.771,47.291 10.895,6.521 9.623,4.819 7.267,1.665 3.656,0 0,0"
+             style="fill:#262626;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path116" /></g></g></g><g
+       id="g118"
+       transform="matrix(0.75581714,0,0,0.75581714,-1492.7722,1966.752)"><g
+         id="g120"
+         clip-path="url(#clipPath124)"><g
+           id="g126"
+           transform="translate(2559.7549,1614.999)"><path
+             d="m 0,0 c -1.623,0 -3.215,0.789 -4.177,2.244 l -66.784,101.069 c -8.507,12.917 -18.143,27.577 -34.354,26.941 -19.539,-0.741 -35.123,-1.245 -35.279,-1.251 -2.749,-0.069 -5.07,2.077 -5.158,4.837 -0.09,2.76 2.076,5.069 4.836,5.159 0.155,0.004 15.713,0.507 35.222,1.249 21.873,0.829 33.618,-17.06 43.085,-31.435 l 1.026,-1.556 L 4.167,7.758 C 5.689,5.454 5.056,2.352 2.752,0.829 1.903,0.269 0.946,0 0,0"
+             style="fill:#262626;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path128" /></g><g
+           id="g130"
+           transform="translate(2497,1583.5)"><path
+             d="m 0,0 c -15.459,0 -23.922,6.14 -28.469,9.438 -0.714,0.518 -1.388,1.007 -1.761,1.221 -4.171,2.383 -16.516,14.336 -20.49,25.69 -2.218,6.339 -3.767,9.332 -5.912,13.475 -1.102,2.13 -2.351,4.545 -3.887,7.785 -3.245,6.852 -14.585,16.113 -18.679,19.103 l -0.275,0.216 c -2.086,1.758 -51.16,43.14 -59.134,50.367 -7.706,6.983 -9.306,11.448 -10.285,15.422 -0.061,0.249 -0.119,0.487 -0.182,0.718 -0.868,3.186 -1.989,11.6 6.351,20.903 8.62,9.617 23.483,4.604 24.112,4.386 l 0.446,-0.155 86.409,-49.736 c 2.394,-1.377 3.217,-4.434 1.839,-6.827 -1.376,-2.394 -4.431,-3.221 -6.827,-1.839 l -85.51,49.217 c -1.755,0.493 -9.387,2.333 -13.023,-1.722 -5.06,-5.643 -4.587,-9.99 -4.149,-11.597 0.083,-0.307 0.162,-0.625 0.244,-0.957 0.536,-2.178 1.203,-4.888 7.289,-10.403 7.648,-6.931 55.868,-47.603 58.737,-50.023 2.288,-1.684 16.888,-12.688 21.675,-22.791 1.46,-3.082 2.666,-5.413 3.731,-7.471 2.244,-4.337 4.018,-7.763 6.47,-14.769 3.104,-8.872 13.628,-18.948 16.01,-20.31 0.845,-0.483 1.693,-1.097 2.673,-1.809 C -18.713,14.715 -12.213,10 0,10 2.762,10 5,7.762 5,5 5,2.238 2.762,0 0,0"
+             style="fill:#262626;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path132" /></g><g
+           id="g134"
+           transform="translate(2379.8721,1690.8281)"><path
+             d="m 0,0 c -0.392,0.069 -39.303,7.006 -48.883,8.48 -3.994,0.615 -7.23,2.517 -9.356,5.5 -3.783,5.31 -2.69,12.082 -2.552,12.836 0.344,1.934 8.526,47.89 10.512,58.063 1.126,5.77 4.08,8.71 6.361,10.161 4.446,2.83 9.282,2.053 10.515,1.789 2.76,-0.476 51.086,-8.81 63.4,-10.983 6.391,-1.128 9.59,-4.463 11.149,-7.062 3.532,-5.892 1.792,-12.807 1.316,-14.402 l -5.957,-26.314 -9.754,2.208 6.124,26.95 c 0.308,0.991 0.934,4.384 -0.321,6.441 -0.267,0.436 -1.076,1.763 -4.295,2.331 -12.595,2.223 -62.973,10.909 -63.481,10.997 l -0.361,0.076 c -0.018,0 -1.78,0.319 -3.01,-0.495 -0.889,-0.589 -1.519,-1.805 -1.872,-3.612 -1.969,-10.092 -10.399,-57.442 -10.484,-57.919 -0.14,-0.848 -0.287,-3.689 0.869,-5.283 0.344,-0.474 0.999,-1.134 2.719,-1.398 9.697,-1.492 47.511,-8.234 49.117,-8.52 z"
+             style="fill:#262626;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path136" /></g><g
+           id="g138"
+           transform="translate(2420.25,1635)"><path
+             d="m 0,0 c -3.088,0 -7.54,2.48 -10.731,4.562 l -0.184,0.125 c -7.724,5.542 -33.064,23.745 -34.839,25.267 -2.856,2.447 -4.951,7.102 -5.739,9.465 -1.505,4.515 -0.403,9.735 3.274,15.516 4.34,6.819 13.16,6.297 17.813,4.882 l 1.869,-0.466 -2.426,-9.702 -2.286,0.581 c -1.349,0.406 -5.461,1.02 -6.532,-0.665 -1.928,-3.027 -2.718,-5.507 -2.226,-6.984 0.671,-2.012 2.079,-4.45 2.761,-5.035 1.535,-1.262 21.67,-15.771 34.065,-24.665 1.981,-1.28 4.449,-2.585 5.418,-2.873 1.924,0.113 9.392,1.409 15.527,3.68 L 19.236,4.312 C 12.131,1.68 3.098,0 0,0"
+             style="fill:#262626;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path140" /></g><g
+           id="g142"
+           transform="translate(2428.293,1610.1611)"><path
+             d="m 0,0 c -3.402,0 -8.256,0.82 -14.657,3.808 -11.039,5.151 -28.656,12.6 -28.832,12.675 l -0.544,0.23 -0.476,0.35 c -0.685,0.505 -6.701,5.188 -7.03,14.09 -0.358,9.672 10.047,17.543 16.969,17.928 l 0.308,0.018 3.976,-0.272 c 2.755,-0.187 4.836,-2.573 4.648,-5.328 -0.187,-2.755 -2.585,-4.83 -5.328,-4.648 l -3.269,0.222 c -2.261,-0.343 -7.443,-4.002 -7.312,-7.549 0.123,-3.319 1.928,-5.413 2.662,-6.131 3.439,-1.459 18.531,-7.891 28.456,-12.523 7.44,-3.473 11.24,-2.902 12.03,-2.723 l 0.606,0.406 0.317,-0.106 18.834,4.583 c 2.684,0.654 5.388,-0.993 6.041,-3.676 C 28.052,8.671 26.406,5.967 23.724,5.313 L 5.239,0.815 C 4.279,0.46 2.546,0 0,0"
+             style="fill:#262626;fill-opacity:1;fill-rule:nonzero;stroke:none"
+             id="path144" /></g></g></g></g></svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/pot.svg b/pointeuse/install/bin/electron/resources/app/img/pot.svg
new file mode 100644 (file)
index 0000000..931803d
--- /dev/null
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+        viewBox="0 0 1920 1080" style="enable-background:new 0 0 1920 1080;" xml:space="preserve">
+<style type="text/css">
+       .st0{fill:#003268;}
+       .st1{fill:#FFFFFF;}
+       .st2{fill:#005BCE;}
+</style>
+<g>
+       <g>
+               <path class="st0" d="M1107.86,464.03c-38.08-0.02-76.17-0.02-114.24,0.05c-2.02,0-3.2-0.62-4.56-2.21
+                       c-2.29-2.68-4.94-5.26-7.96-6.97c-2.41-1.38-2.96-2.75-2.96-5.27c0.07-48.71,0.04-97.43,0.04-146.14c0-1.2,0.07-2.41-0.04-3.59
+                       c-0.37-4.36-4.07-7.2-8.41-6.52c-3.87,0.61-6.02,3.54-6.02,8.34c-0.02,24.74,0,49.48,0,74.22c0,24.6-0.02,49.23,0.02,73.86
+                       c0.03,2.37-0.41,3.72-2.82,5.04c-2.96,1.57-5.56,4.07-7.79,6.63c-1.47,1.69-2.65,2.67-5,2.63c-7.59-0.15-15.19-0.04-22.79,0
+                       c-3.52,0.02-6.26,1.66-8.16,4.55c-2.24,3.33-2.34,6.96-0.55,10.51c1.88,3.7,5.17,5.52,9.28,5.56c7.58,0.07,15.2-0.06,22.77,0.11
+                       c1.34,0.05,2.8,1.07,3.94,1.97c3,2.41,5.72,5.23,8.87,7.42c1.53,1.05,2.3,1.82,2.28,3.73c-0.11,7.15-0.07,14.31-0.05,21.47
+                       c0,1.18-0.02,2.41,0.27,3.55c0.83,3.39,4.18,5.65,7.61,5.32c3.77-0.37,6.51-3.22,6.57-7.23c0.09-7.7,0.07-15.41,0-23.11
+                       c0-1.97,0.79-2.89,2.54-3.95c2.89-1.72,5.72-3.91,7.86-6.5c1.62-1.97,3.07-2.82,5.58-2.82c27.57,0.09,55.13,0.06,82.67,0.06
+                       c10.64,0,21.28,0.07,31.9-0.02c6.66-0.06,11.03-4.55,10.84-10.79C1119.35,467.84,1114.91,464.03,1107.86,464.03z M983.25,475.56
+                       c0,0.01,0,0.02-0.01,0.04c-0.01,0.13-0.02,0.25-0.04,0.38c-0.02,0.19-0.05,0.37-0.09,0.56c-0.1,0.55-0.24,1.1-0.42,1.63
+                       c-0.06,0.18-0.12,0.36-0.19,0.53c-0.08,0.21-0.16,0.41-0.26,0.62c-0.08,0.19-0.16,0.37-0.26,0.54c-0.18,0.36-0.38,0.72-0.6,1.05
+                       c-0.32,0.5-0.68,0.98-1.07,1.44c0,0.01,0,0.01-0.01,0.02c-0.27,0.3-0.54,0.58-0.82,0.86c-0.15,0.14-0.3,0.28-0.45,0.42
+                       c0,0,0,0.01-0.01,0.01c-0.2,0.18-0.41,0.35-0.62,0.51c-0.16,0.13-0.32,0.25-0.48,0.36c-0.94,0.67-1.98,1.22-3.09,1.62
+                       c-0.78,0.28-1.58,0.49-2.42,0.62c-0.42,0.06-0.84,0.11-1.27,0.13c-0.21,0-0.42,0.01-0.64,0.01c-0.23,0.01-0.45,0-0.68-0.02
+                       c-0.17-0.01-0.34-0.03-0.52-0.05c-0.37-0.04-0.74-0.11-1.1-0.2c-0.36-0.09-0.72-0.2-1.07-0.32c-1.28-0.47-2.5-1.18-3.6-2.07
+                       c-0.19-0.15-0.38-0.32-0.56-0.48c-0.24-0.22-0.47-0.44-0.69-0.67c-0.05-0.05-0.1-0.11-0.15-0.16c-0.22-0.24-0.44-0.49-0.64-0.74
+                       c-0.26-0.31-0.5-0.63-0.72-0.96c-0.22-0.33-0.43-0.66-0.63-1.01c-0.38-0.7-0.71-1.42-0.95-2.16c-0.13-0.37-0.23-0.75-0.32-1.12
+                       c-0.04-0.19-0.08-0.38-0.11-0.57c-0.06-0.29-0.1-0.59-0.11-0.89c-0.03-0.3-0.04-0.6-0.04-0.9c0-0.22,0.01-0.44,0.01-0.66
+                       c0.02-0.4,0.05-0.79,0.11-1.18c0.02-0.14,0.04-0.29,0.07-0.43c0.01-0.08,0.02-0.15,0.04-0.23c0.02-0.07,0.04-0.15,0.05-0.23
+                       c0.03-0.16,0.06-0.31,0.1-0.46c0.06-0.25,0.13-0.5,0.21-0.74c0.16-0.54,0.37-1.07,0.61-1.58c0.08-0.18,0.17-0.36,0.27-0.54
+                       c0.12-0.22,0.24-0.44,0.37-0.65c0.13-0.21,0.26-0.42,0.41-0.63c0.28-0.4,0.59-0.79,0.92-1.16c0.17-0.2,0.36-0.4,0.56-0.58
+                       c0.16-0.16,0.32-0.31,0.49-0.46c0.18-0.16,0.37-0.32,0.57-0.47c0.19-0.15,0.39-0.29,0.6-0.43c0.61-0.42,1.27-0.78,1.96-1.08
+                       c0.23-0.1,0.46-0.19,0.7-0.28c0.17-0.06,0.34-0.12,0.51-0.17c0.17-0.06,0.34-0.11,0.51-0.15s0.35-0.09,0.53-0.13
+                       c0.18-0.03,0.35-0.07,0.53-0.1c0.55-0.09,1.1-0.15,1.67-0.18c0.22-0.01,0.44-0.01,0.66-0.01c0.16,0,0.32,0,0.48,0.01
+                       c0.15,0.01,0.31,0.02,0.47,0.03c0.31,0.03,0.62,0.06,0.92,0.11c0.27,0.04,0.54,0.1,0.81,0.16c0.26,0.06,0.53,0.13,0.79,0.21
+                       c0.25,0.07,0.51,0.16,0.75,0.25l0.01,0.01c0.24,0.09,0.48,0.18,0.71,0.28c0.04,0.02,0.07,0.03,0.11,0.06
+                       c0.22,0.1,0.43,0.2,0.65,0.32c0.22,0.11,0.44,0.24,0.66,0.37c0.01,0.01,0.02,0.01,0.03,0.02c0.22,0.14,0.44,0.29,0.66,0.44
+                       c0.21,0.15,0.42,0.31,0.63,0.48c0.1,0.08,0.2,0.16,0.29,0.24c0.2,0.17,0.4,0.36,0.59,0.55c0.18,0.17,0.35,0.35,0.51,0.53
+                       c0.27,0.29,0.52,0.59,0.75,0.91c0.11,0.16,0.23,0.32,0.34,0.48c0.22,0.32,0.42,0.66,0.61,1.01c0.25,0.47,0.48,0.96,0.66,1.47
+                       c0.08,0.19,0.15,0.38,0.21,0.58c0.41,1.24,0.62,2.57,0.6,3.95C983.31,474.88,983.29,475.22,983.25,475.56z"/>
+               <path class="st0" d="M977.13,266.06c0,2.38,0.18,4.77-0.05,7.13c-0.33,3.46-2.74,5.61-5.97,5.68c-3.35,0.08-6.09-2.12-6.28-5.68
+                       c-0.26-4.85-0.26-9.73,0-14.58c0.18-3.35,2.89-5.5,6.12-5.5c3.24,0,5.81,2.14,6.15,5.5c0.24,2.46,0.05,4.97,0.05,7.46
+                       C977.13,266.06,977.13,266.06,977.13,266.06z"/>
+               <path class="st0" d="M977.18,682.72c0,2.27,0.14,4.55-0.03,6.81c-0.29,3.76-2.88,6.18-6.28,6.13c-3.29-0.05-5.91-2.38-6.08-5.97
+                       c-0.22-4.64-0.22-9.3-0.02-13.95c0.16-3.57,2.77-5.88,6.09-5.93c3.45-0.04,6.03,2.35,6.3,6.08c0.17,2.26,0.03,4.54,0.03,6.82
+                       C977.18,682.72,977.18,682.72,977.18,682.72z"/>
+               <path class="st0" d="M1192.26,474.54c-0.1,3.29-2.6,5.76-6.06,5.98c-0.21,0.02-0.44,0.01-0.65,0.01h-6.5c0-0.01,0-0.01,0-0.01
+                       c-2.27,0-4.55,0.1-6.82-0.03c-3.29-0.18-5.7-2.67-5.86-5.83c-0.16-3.24,2.25-6.29,5.58-6.45c4.86-0.21,9.75-0.2,14.61-0.01
+                       C1189.94,468.34,1192.36,471.27,1192.26,474.54z"/>
+               <path class="st0" d="M775.52,474.41c-0.01,3.28-2.51,5.85-5.93,6.11c-0.21,0.01-0.44,0.01-0.65,0.01
+                       c-1.44,0.01-2.88,0.01-4.33,0.01c-0.72-0.01-1.45-0.01-2.17-0.01c-1.8-0.01-3.61,0.05-5.42,0.02c-0.46-0.01-0.93-0.03-1.4-0.05
+                       c-3.44-0.17-5.94-2.75-5.99-6.04c-0.05-3.27,2.4-6.15,5.78-6.27c4.75-0.18,9.53-0.18,14.29-0.01
+                       C773.07,468.31,775.54,471.15,775.52,474.41z"/>
+               <path class="st1" d="M958.61,474.59c0,0.3,0.01,0.6,0.04,0.9c-0.04-0.3-0.05-0.6-0.05-0.91c0-0.22,0.01-0.43,0.02-0.65
+                       C958.62,474.15,958.61,474.37,958.61,474.59z"/>
+               <path class="st1" d="M961.78,466.1c-0.33,0.37-0.64,0.76-0.92,1.16C961.14,466.86,961.44,466.47,961.78,466.1z"/>
+               <path class="st1" d="M968.74,462.25c0.54-0.1,1.1-0.16,1.67-0.18C969.84,462.1,969.29,462.16,968.74,462.25z"/>
+               <path class="st1" d="M970.5,486.91c0.22,0,0.43-0.01,0.64-0.01c-0.22,0.01-0.43,0.02-0.65,0.02c-0.23,0-0.45-0.01-0.67-0.03
+                       C970.05,486.91,970.27,486.92,970.5,486.91z"/>
+               <path class="st1" d="M971.07,462.05c0.16,0,0.32,0.01,0.48,0.02c-0.16-0.01-0.32-0.01-0.48-0.01c-0.22,0-0.44,0-0.66,0.01
+                       C970.63,462.05,970.85,462.05,971.07,462.05z"/>
+               <path class="st1" d="M979.48,483.23c0.28-0.28,0.55-0.56,0.82-0.86c-0.39,0.46-0.81,0.89-1.27,1.28
+                       C979.18,483.51,979.33,483.37,979.48,483.23z"/>
+               <path class="st1" d="M980.31,482.35c0.39-0.46,0.75-0.94,1.07-1.44C981.06,481.42,980.71,481.9,980.31,482.35z"/>
+       </g>
+       <g>
+               <path class="st2" d="M938.51,758.43c-34.37-2.96-66.64-13.09-97.29-28.53c-49.17-24.78-88.16-60.95-116.45-107.95
+                       c-25.2-41.88-38.29-87.64-39.36-136.77c-0.09-3.85-0.09-7.71,0-11.52c0.09-7.29,0.48-14.49,1.12-21.63
+                       c11.91-134.4,113.67-241.26,251.03-257.66c4.31-0.5,8.67-0.59,14.3-0.96v29.07c-46.37,3.83-89.21,17.01-126.34,44.05
+                       c-69.97,50.9-108.26,116.27-110.73,196.23c-0.2,6.09-0.18,12.24,0.07,18.48c0.42,11.65,1.55,23.58,3.44,35.79
+                       c14.1,91.8,67.32,155.37,150.6,193.47c20.65,9.46,44.33,12.65,66.88,17.32c10.14,2.1,16.07,5.85,16.59,16.44
+                       C952.79,753.94,948.89,759.33,938.51,758.43z"/>
+               <path class="st0" d="M1162.02,683.4c-44.03,42.88-98.06,67.32-159.42,74.45c-8.29,0.97-17.41,2.57-19.25-9.57
+                       c-1.57-10.33,4.3-17.15,16.13-19.83c19.48-4.43,39.28-7.97,58.3-14c35.17-11.17,65.04-31.76,90.27-58.19
+                       c73.17-76.55,94.83-166.82,58.98-265.97c-35.85-99.21-110.67-153.99-215.54-167.1c-1.7-0.21-3.41-0.45-6.61-0.87v-29.03
+                       c11.2,1.26,21.95,1.57,32.31,3.75c112.32,23.39,189.63,88.88,222.52,198.65C1272.61,505.62,1244.34,603.25,1162.02,683.4z"/>
+       </g>
+</g>
+<g>
+       <path class="st0" d="M325.24,804.05c-1.87-3.14-4.47-5.6-7.78-7.36s-7.05-2.65-11.22-2.65h-25.68v65.84h10.4v-24.52h15.28
+               c4.17,0,7.91-0.88,11.22-2.65c3.31-1.76,5.91-4.21,7.78-7.36c1.87-3.14,2.8-6.69,2.8-10.65
+               C328.04,810.75,327.11,807.2,325.24,804.05z M316.2,820.15c-0.97,1.61-2.33,2.87-4.08,3.78c-1.74,0.9-3.71,1.35-5.88,1.35h-15.28
+               v-21.11h15.28c2.2,0,4.17,0.45,5.91,1.35c1.73,0.91,3.08,2.16,4.05,3.75c0.96,1.6,1.45,3.41,1.45,5.43
+               C317.65,816.73,317.16,818.54,316.2,820.15z"/>
+       <path class="st0" d="M335.68,791.65v68.23h10.03v-68.23H335.68z"/>
+       <path class="st0" d="M393.83,817.07c-3.19-3.33-7.91-4.99-14.17-4.99c-2.18,0-4.48,0.26-6.92,0.78s-4.74,1.26-6.9,2.21
+               c-2.17,0.95-3.88,2.05-5.13,3.31l1.61,3.08c0.46,0.86,1.12,1.54,2,2.03c0.87,0.49,1.82,0.74,2.83,0.74c0.92,0,1.76-0.17,2.53-0.51
+               c1.68-0.77,3.2-1.29,4.53-1.56c1.33-0.28,2.89-0.42,4.67-0.42c3.37,0,5.83,0.93,7.38,2.78c1.55,1.86,2.34,4.84,2.37,8.95
+               c-1.9-0.55-4.08-0.98-6.53-1.29c-2.45-0.3-4.45-0.46-5.98-0.46c-6.23,0-10.87,1.31-13.94,3.92c-3.07,2.6-4.6,6.25-4.6,10.94
+               c0,2.58,0.71,4.96,2.14,7.14c1.42,2.17,3.33,3.89,5.73,5.15c2.39,1.26,4.96,1.88,7.72,1.88c5.53,0,10.68-2.28,15.46-6.85v0.41
+               c0,1.72,0.39,3.09,1.18,4.1c0.78,1.01,2,1.52,3.65,1.52h5.16v-28.07C398.62,825.33,397.02,820.4,393.83,817.07z M388.63,846.17
+               c-2.27,1.63-4.5,2.95-6.69,3.98c-2.19,1.03-4.49,1.54-6.88,1.54c-2.42,0-4.35-0.51-5.8-1.54c-1.44-1.03-2.16-2.48-2.16-4.35
+               c0-2.45,0.86-4.15,2.58-5.1c1.72-0.95,4.37-1.43,7.96-1.43c3.95,0,7.62,0.46,10.99,1.38V846.17z"/>
+       <path class="st0" d="M449.73,817.3c-2.82-3.51-6.93-5.27-12.33-5.27c-2.79,0-5.41,0.52-7.87,1.55c-2.45,1.02-4.64,2.43-6.58,4.2
+               V817c0-1.25-0.23-2.26-0.71-3.01s-1.36-1.13-2.65-1.13h-6.67v47.02h10.03V827.4c1.84-1.72,3.82-3.08,5.94-4.09
+               c2.11-1.02,4.17-1.52,6.16-1.52c2.92,0,5.12,0.92,6.63,2.76c1.5,1.84,2.25,4.74,2.25,8.69v26.64h10.03v-27.74
+               C453.96,825.76,452.55,820.81,449.73,817.3z"/>
+       <path class="st0" d="M527.99,791.65v25.67c-1.63-1.56-3.48-2.8-5.55-3.72s-4.27-1.38-6.6-1.38c-4.42,0-8.37,1.04-11.85,3.13
+               c-3.48,2.08-6.2,4.97-8.16,8.67c-1.97,3.69-2.95,7.87-2.95,12.54c0,4.66,0.91,8.83,2.72,12.51s4.31,6.55,7.52,8.63
+               c3.2,2.07,6.85,3.1,10.93,3.1c2.82,0,5.39-0.52,7.72-1.56c2.33-1.05,4.41-2.47,6.22-4.28v0.55c0,2.91,1.19,4.37,3.58,4.37h6.44
+               v-68.23H527.99z M527.99,844.24c-1.51,1.93-3.2,3.5-5.09,4.69c-1.88,1.2-4.1,1.8-6.65,1.8c-2.57,0-4.87-0.61-6.9-1.82
+               c-2.02-1.21-3.61-2.9-4.76-5.06c-1.15-2.16-1.72-4.61-1.72-7.34c0-2.76,0.58-5.24,1.74-7.43c1.17-2.19,2.79-3.9,4.86-5.13
+               c2.07-1.23,4.39-1.84,6.97-1.84c1.71,0,3.36,0.3,4.92,0.9c1.56,0.59,2.93,1.33,4.1,2.2c1.16,0.88,2,1.73,2.53,2.56V844.24z"/>
+       <path class="st0" d="M560.17,794.44c-0.23-0.33-0.55-0.55-0.95-0.67l-3.26-0.83c-2.06,2.24-3.76,4.56-5.11,6.95
+               c-1.35,2.39-2.02,5.04-2.02,7.96c0,2.02,0.07,3.69,0.23,5.01c0.15,1.32,0.38,2.84,0.69,4.56c0.09,0.27,0.15,0.53,0.18,0.78
+               c0.03,0.24,0.06,0.44,0.09,0.6l8.83-1.57c-0.61-2.05-1.07-3.82-1.38-5.31c-0.3-1.49-0.46-2.97-0.46-4.44c0-1.66,0.23-3.19,0.69-4.6
+               c0.47-1.41,1.06-2.9,1.8-4.46c0.27-0.62,0.51-1.19,0.71-1.73c0.2-0.54,0.3-0.94,0.3-1.22C560.51,795.1,560.4,794.76,560.17,794.44z
+               "/>
+       <path class="st0" d="M613.44,823.88c-2.1-3.7-5.01-6.59-8.72-8.67c-3.71-2.09-7.91-3.13-12.6-3.13c-4.7,0-8.9,1.04-12.63,3.13
+               c-3.73,2.08-6.63,4.97-8.72,8.67c-2.09,3.7-3.13,7.88-3.13,12.54s1.05,8.83,3.15,12.51c2.1,3.68,5.01,6.57,8.72,8.65
+               c3.71,2.09,7.91,3.13,12.61,3.13c4.69,0,8.89-1.04,12.6-3.13c3.71-2.08,6.62-4.97,8.72-8.65s3.15-7.85,3.15-12.51
+               S615.54,827.58,613.44,823.88z M604.75,843.85c-1.25,2.19-2.97,3.9-5.18,5.13c-2.21,1.22-4.69,1.84-7.45,1.84s-5.25-0.62-7.46-1.87
+               c-2.2-1.24-3.93-2.95-5.17-5.15c-1.24-2.19-1.86-4.65-1.86-7.38c0-2.76,0.62-5.24,1.86-7.43c1.24-2.2,2.97-3.91,5.17-5.13
+               c2.21-1.23,4.7-1.84,7.46-1.84s5.24,0.61,7.45,1.84c2.21,1.22,3.93,2.93,5.18,5.13c1.24,2.19,1.86,4.67,1.86,7.43
+               S605.99,841.66,604.75,843.85z"/>
+       <path class="st0" d="M654.11,812.45c-1.06-0.28-2.43-0.42-4.12-0.42c-2.6,0-4.99,0.64-7.15,1.91c-2.16,1.28-4.04,3.02-5.64,5.23
+               v-1.52c0-1.38-0.33-2.53-1.01-3.43c-0.67-0.91-1.81-1.36-3.4-1.36h-5.57v47.02h9.98v-30.5c1.26-2.27,2.83-4.08,4.72-5.43
+               c1.89-1.35,3.96-2.03,6.23-2.03c1.02,0,1.95,0.08,2.81,0.24c0.49,0.06,0.84,0.09,1.06,0.09c1.22,0,2.28-0.35,3.17-1.06
+               c0.89-0.71,1.46-1.67,1.7-2.9l1.02-4.55C656.43,813.15,655.17,812.72,654.11,812.45z"/>
+       <path class="st0" d="M707.36,813.14c-1.38-0.28-3.17-0.42-5.38-0.42c-3.77,0-7.18,0.39-10.21,1.15c-2.76-1.16-5.72-1.74-8.88-1.74
+               c-3.59,0-6.86,0.79-9.82,2.37c-2.96,1.58-5.3,3.73-7,6.46c-1.7,2.73-2.55,5.74-2.55,9.02c0,1.96,0.31,3.85,0.94,5.66
+               c0.63,1.81,1.53,3.46,2.69,4.96c-1.41,1.14-2.56,2.46-3.45,3.96s-1.33,3.07-1.33,4.69c0,2.4,0.59,4.46,1.77,6.19
+               c1.18,1.73,2.85,3.04,5.02,3.91c2.16,0.88,4.67,1.27,7.52,1.18l9.8-0.33c2.85-0.09,5.06,0.22,6.64,0.95
+               c1.58,0.72,2.37,1.8,2.37,3.24c0,1.56-0.89,2.78-2.69,3.66c-1.79,0.87-4.3,1.31-7.52,1.31h-3.22c-1.07,0-2.94-0.14-5.59-0.42
+               c-2.65-0.27-5.27-0.62-7.84-1.05c-0.56-0.1-1.08-0.14-1.57-0.14c-1.53,0-2.74,0.45-3.63,1.36c-0.89,0.9-1.43,2.24-1.61,4.02
+               l-0.32,2.9c3.58,0.86,7.33,1.53,11.24,2.02c3.91,0.49,7.74,0.74,11.48,0.74c4.39,0,8.15-0.57,11.27-1.7
+               c3.13-1.14,5.53-2.79,7.18-4.95c1.66-2.16,2.49-4.74,2.49-7.75c0-2.7-0.68-5.05-2.03-7.04s-3.3-3.53-5.86-4.6
+               c-2.57-1.07-5.63-1.61-9.18-1.61c-0.77,0-1.34,0.02-1.71,0.05l-9.24,0.36c-1.69,0.07-2.99-0.14-3.91-0.62
+               c-0.92-0.47-1.38-1.26-1.38-2.37c0-0.49,0.11-0.99,0.34-1.52c0.23-0.52,0.56-0.99,0.99-1.42c2.98,1.53,6.23,2.3,9.75,2.3
+               c3.59,0,6.88-0.83,9.87-2.49c2.99-1.65,5.35-3.9,7.09-6.74c1.73-2.83,2.6-5.97,2.6-9.4c0-3.07-0.8-5.88-2.4-8.42
+               c0.83,0.03,1.58,0.13,2.26,0.32c0.43,0.06,0.72,0.09,0.87,0.09c1.41,0,2.48-0.6,3.2-1.82c0.72-1.21,1.05-2.61,0.99-4.21
+               L707.36,813.14z M691.45,834.6c-0.86,1.33-2.04,2.39-3.55,3.15c-1.5,0.77-3.16,1.15-4.97,1.15c-1.77,0-3.41-0.38-4.9-1.15
+               c-1.48-0.76-2.66-1.82-3.51-3.15c-0.86-1.33-1.29-2.81-1.29-4.44c0-1.66,0.43-3.17,1.29-4.53c0.85-1.37,2.03-2.44,3.51-3.22
+               c1.49-0.78,3.13-1.17,4.9-1.17c1.81,0,3.47,0.39,4.97,1.17c1.51,0.78,2.69,1.85,3.55,3.22c0.85,1.36,1.28,2.87,1.28,4.53
+               C692.73,831.79,692.3,833.27,691.45,834.6z"/>
+       <path class="st0" d="M748.59,817.07c-3.19-3.33-7.92-4.99-14.17-4.99c-2.18,0-4.49,0.26-6.93,0.78s-4.74,1.26-6.9,2.21
+               c-2.16,0.95-3.87,2.05-5.13,3.31l1.61,3.08c0.46,0.86,1.13,1.54,2,2.03c0.88,0.49,1.82,0.74,2.83,0.74c0.92,0,1.77-0.17,2.53-0.51
+               c1.69-0.77,3.2-1.29,4.53-1.56c1.34-0.28,2.89-0.42,4.67-0.42c3.38,0,5.84,0.93,7.39,2.78c1.55,1.86,2.34,4.84,2.37,8.95
+               c-1.91-0.55-4.08-0.98-6.54-1.29c-2.45-0.3-4.44-0.46-5.98-0.46c-6.22,0-10.87,1.31-13.94,3.92c-3.06,2.6-4.6,6.25-4.6,10.94
+               c0,2.58,0.72,4.96,2.14,7.14c1.43,2.17,3.34,3.89,5.73,5.15s4.97,1.88,7.73,1.88c5.52,0,10.67-2.28,15.46-6.85v0.41
+               c0,1.72,0.39,3.09,1.17,4.1c0.78,1.01,2,1.52,3.66,1.52h5.15v-28.07C753.37,825.33,751.78,820.4,748.59,817.07z M743.39,846.17
+               c-2.27,1.63-4.5,2.95-6.7,3.98c-2.19,1.03-4.48,1.54-6.88,1.54c-2.42,0-4.35-0.51-5.79-1.54c-1.44-1.03-2.16-2.48-2.16-4.35
+               c0-2.45,0.85-4.15,2.57-5.1c1.72-0.95,4.37-1.43,7.96-1.43c3.96,0,7.62,0.46,11,1.38V846.17z"/>
+       <path class="st0" d="M804.48,817.3c-2.82-3.51-6.93-5.27-12.33-5.27c-2.79,0-5.41,0.52-7.86,1.55c-2.46,1.02-4.65,2.43-6.58,4.2
+               V817c0-1.25-0.24-2.26-0.72-3.01c-0.47-0.75-1.35-1.13-2.64-1.13h-6.67v47.02h10.03V827.4c1.84-1.72,3.82-3.08,5.93-4.09
+               c2.12-1.02,4.17-1.52,6.17-1.52c2.91,0,5.12,0.92,6.62,2.76s2.26,4.74,2.26,8.69v26.64h10.03v-27.74
+               C808.72,825.76,807.31,820.81,804.48,817.3z"/>
+       <path class="st0" d="M822.98,812.86v47.02h10.03v-47.02H822.98z M833.81,796.12c-0.6-1.05-1.41-1.87-2.44-2.49
+               c-1.02-0.61-2.14-0.92-3.33-0.92c-1.23,0-2.36,0.31-3.41,0.92c-1.04,0.62-1.86,1.44-2.46,2.49c-0.6,1.04-0.89,2.16-0.89,3.35
+               c0,1.2,0.29,2.32,0.89,3.36c0.6,1.05,1.42,1.87,2.46,2.49c1.05,0.61,2.18,0.92,3.41,0.92c1.19,0,2.31-0.31,3.33-0.92
+               c1.03-0.62,1.84-1.44,2.44-2.49c0.6-1.04,0.9-2.16,0.9-3.36C834.71,798.28,834.41,797.16,833.81,796.12z"/>
+       <path class="st0" d="M872.87,836.83c-2.31-2.3-5.96-4.35-10.92-6.16c-2.3-0.8-3.91-1.58-4.83-2.33c-0.93-0.75-1.39-1.66-1.39-2.73
+               c0-1.32,0.43-2.33,1.29-3.02c0.86-0.69,2.12-1.03,3.78-1.03c0.55,0,1.1,0.07,1.65,0.2c0.55,0.14,1.13,0.33,1.73,0.56
+               c0.6,0.23,1.03,0.4,1.31,0.53c0.86,0.33,1.67,0.5,2.44,0.5c0.98,0,1.88-0.24,2.71-0.71c0.83-0.48,1.44-1.13,1.84-1.96l1.75-3.45
+               c-1.69-1.65-3.79-2.93-6.3-3.82c-2.52-0.89-4.99-1.33-7.41-1.33c-3.01,0-5.62,0.56-7.84,1.68c-2.23,1.12-3.94,2.7-5.13,4.74
+               c-1.2,2.04-1.8,4.41-1.8,7.11c0,2.23,0.37,4.14,1.11,5.72c0.73,1.58,2.07,3.06,4.02,4.44c1.95,1.38,4.72,2.75,8.31,4.1
+               c2.54,0.98,4.37,1.95,5.49,2.92c1.12,0.97,1.68,2.05,1.68,3.24c0,1.69-0.56,2.99-1.68,3.89c-1.12,0.91-2.69,1.36-4.71,1.36
+               c-1.44,0-2.8-0.23-4.07-0.69c-1.28-0.46-2.71-1.09-4.31-1.89c-0.85-0.43-1.79-0.64-2.8-0.64c-0.92,0-1.78,0.21-2.58,0.64
+               c-0.8,0.43-1.42,1.03-1.88,1.8l-1.89,3.31c2.18,2.08,4.68,3.76,7.52,5.01c2.84,1.26,5.9,1.89,9.18,1.89c3.4,0,6.41-0.62,9.02-1.86
+               c2.6-1.25,4.62-2.99,6.05-5.25c1.42-2.25,2.14-4.87,2.14-7.84C876.35,842.11,875.19,839.13,872.87,836.83z"/>
+       <path class="st0" d="M920.42,817.07c-3.19-3.33-7.91-4.99-14.17-4.99c-2.18,0-4.49,0.26-6.92,0.78c-2.44,0.52-4.74,1.26-6.91,2.21
+               c-2.16,0.95-3.87,2.05-5.13,3.31l1.61,3.08c0.46,0.86,1.13,1.54,2.01,2.03c0.87,0.49,1.81,0.74,2.83,0.74
+               c0.92,0,1.76-0.17,2.53-0.51c1.68-0.77,3.19-1.29,4.53-1.56c1.33-0.28,2.89-0.42,4.67-0.42c3.37,0,5.83,0.93,7.38,2.78
+               c1.55,1.86,2.34,4.84,2.37,8.95c-1.9-0.55-4.08-0.98-6.53-1.29c-2.46-0.3-4.45-0.46-5.98-0.46c-6.23,0-10.88,1.31-13.94,3.92
+               c-3.07,2.6-4.6,6.25-4.6,10.94c0,2.58,0.71,4.96,2.14,7.14c1.42,2.17,3.33,3.89,5.72,5.15c2.4,1.26,4.97,1.88,7.73,1.88
+               c5.52,0,10.68-2.28,15.46-6.85v0.41c0,1.72,0.39,3.09,1.17,4.1c0.79,1.01,2.01,1.52,3.66,1.52h5.15v-28.07
+               C925.2,825.33,923.61,820.4,920.42,817.07z M915.22,846.17c-2.27,1.63-4.5,2.95-6.69,3.98c-2.2,1.03-4.49,1.54-6.88,1.54
+               c-2.42,0-4.36-0.51-5.8-1.54c-1.44-1.03-2.16-2.48-2.16-4.35c0-2.45,0.86-4.15,2.58-5.1c1.71-0.95,4.37-1.43,7.95-1.43
+               c3.96,0,7.63,0.46,11,1.38V846.17z"/>
+       <path class="st0" d="M969.78,850.96c-0.27-0.71-0.73-1.25-1.35-1.61c-0.63-0.37-1.36-0.56-2.19-0.56c-0.92,0-1.79,0.2-2.62,0.6
+               c-0.92,0.49-1.78,0.88-2.58,1.15c-0.8,0.28-1.62,0.42-2.48,0.42c-2.09,0-3.74-0.67-4.97-2.01c-1.23-1.33-1.84-3.24-1.84-5.72V822.2
+               H965v-9.34h-13.25v-16.38h-6.12c-1.23,0-2.15,0.4-2.78,1.18c-0.63,0.78-0.98,1.75-1.04,2.92l-0.18,12.28h-4.97
+               c-0.83,0-1.58,0.28-2.26,0.83c-0.67,0.55-1.01,1.35-1.01,2.39v6.12h8.24v23.33c0,3.13,0.6,5.83,1.82,8.12
+               c1.21,2.28,2.91,4.03,5.1,5.24c2.19,1.21,4.73,1.82,7.62,1.82c2.88,0,5.6-0.49,8.16-1.47s4.98-2.17,7.25-3.55L969.78,850.96z"/>
+       <path class="st0" d="M979.77,812.86v47.02h10.03v-47.02H979.77z M990.6,796.12c-0.6-1.05-1.41-1.87-2.44-2.49
+               c-1.03-0.61-2.14-0.92-3.33-0.92c-1.23,0-2.36,0.31-3.41,0.92c-1.04,0.62-1.86,1.44-2.46,2.49c-0.6,1.04-0.9,2.16-0.9,3.35
+               c0,1.2,0.3,2.32,0.9,3.36c0.6,1.05,1.42,1.87,2.46,2.49c1.05,0.61,2.18,0.92,3.41,0.92c1.19,0,2.3-0.31,3.33-0.92
+               c1.03-0.62,1.84-1.44,2.44-2.49c0.6-1.04,0.9-2.16,0.9-3.36C991.5,798.28,991.2,797.16,990.6,796.12z"/>
+       <path class="st0" d="M1046.22,823.88c-2.1-3.7-5-6.59-8.71-8.67c-3.72-2.09-7.92-3.13-12.61-3.13c-4.69,0-8.9,1.04-12.63,3.13
+               c-3.73,2.08-6.63,4.97-8.72,8.67c-2.08,3.7-3.13,7.88-3.13,12.54s1.05,8.83,3.16,12.51c2.1,3.68,5,6.57,8.71,8.65
+               c3.71,2.09,7.92,3.13,12.61,3.13c4.69,0,8.89-1.04,12.61-3.13c3.71-2.08,6.61-4.97,8.71-8.65c2.1-3.68,3.16-7.85,3.16-12.51
+               S1048.32,827.58,1046.22,823.88z M1037.53,843.85c-1.24,2.19-2.97,3.9-5.18,5.13c-2.21,1.22-4.69,1.84-7.45,1.84
+               c-2.76,0-5.24-0.62-7.45-1.87c-2.21-1.24-3.94-2.95-5.18-5.15c-1.24-2.19-1.86-4.65-1.86-7.38c0-2.76,0.62-5.24,1.86-7.43
+               c1.24-2.2,2.97-3.91,5.18-5.13c2.21-1.23,4.69-1.84,7.45-1.84c2.76,0,5.24,0.61,7.45,1.84c2.21,1.22,3.94,2.93,5.18,5.13
+               c1.24,2.19,1.86,4.67,1.86,7.43S1038.77,841.66,1037.53,843.85z"/>
+       <path class="st0" d="M1096.81,817.3c-2.82-3.51-6.93-5.27-12.33-5.27c-2.79,0-5.42,0.52-7.87,1.55c-2.45,1.02-4.65,2.43-6.58,4.2
+               V817c0-1.25-0.24-2.26-0.71-3.01c-0.48-0.75-1.36-1.13-2.65-1.13H1060v47.02h10.03V827.4c1.84-1.72,3.82-3.08,5.94-4.09
+               c2.11-1.02,4.17-1.52,6.16-1.52c2.91,0,5.12,0.92,6.63,2.76c1.5,1.84,2.25,4.74,2.25,8.69v26.64h10.03v-27.74
+               C1101.04,825.76,1099.63,820.81,1096.81,817.3z"/>
+       <path class="st0" d="M1175.06,791.65v25.67c-1.62-1.56-3.47-2.8-5.54-3.72s-4.27-1.38-6.6-1.38c-4.42,0-8.37,1.04-11.85,3.13
+               c-3.48,2.08-6.2,4.97-8.16,8.67c-1.97,3.69-2.95,7.87-2.95,12.54c0,4.66,0.91,8.83,2.72,12.51c1.81,3.68,4.31,6.55,7.52,8.63
+               c3.2,2.07,6.84,3.1,10.92,3.1c2.83,0,5.4-0.52,7.73-1.56c2.33-1.05,4.4-2.47,6.21-4.28v0.55c0,2.91,1.2,4.37,3.59,4.37h6.44v-68.23
+               H1175.06z M1175.06,844.24c-1.5,1.93-3.19,3.5-5.08,4.69c-1.89,1.2-4.1,1.8-6.65,1.8c-2.57,0-4.87-0.61-6.9-1.82
+               c-2.02-1.21-3.61-2.9-4.76-5.06c-1.15-2.16-1.73-4.61-1.73-7.34c0-2.76,0.59-5.24,1.75-7.43c1.17-2.19,2.79-3.9,4.86-5.13
+               c2.07-1.23,4.39-1.84,6.97-1.84c1.71,0,3.36,0.3,4.92,0.9c1.56,0.59,2.93,1.33,4.09,2.2c1.17,0.88,2.01,1.73,2.53,2.56V844.24z"/>
+       <path class="st0" d="M1230.41,812.86v32.48c-1.84,1.72-3.83,3.08-5.96,4.1c-2.13,1.01-4.18,1.52-6.14,1.52
+               c-2.94,0-5.17-0.92-6.67-2.74c-1.5-1.83-2.26-4.73-2.26-8.72v-26.64h-9.98v27.74c0,6.38,1.41,11.33,4.23,14.84
+               c2.83,3.51,6.93,5.27,12.33,5.27c2.79,0,5.42-0.51,7.87-1.54c2.45-1.03,4.65-2.43,6.58-4.21v0.83c0,1.25,0.24,2.25,0.71,2.99
+               c0.48,0.73,1.36,1.1,2.65,1.1h6.62v-47.02H1230.41z"/>
+       <path class="st0" d="M1313.4,850.96c-0.27-0.71-0.72-1.25-1.35-1.61c-0.63-0.37-1.36-0.56-2.19-0.56c-0.92,0-1.79,0.2-2.62,0.6
+               c-0.92,0.49-1.78,0.88-2.58,1.15c-0.79,0.28-1.62,0.42-2.48,0.42c-2.09,0-3.74-0.67-4.97-2.01c-1.23-1.33-1.84-3.24-1.84-5.72
+               V822.2h13.25v-9.34h-13.25v-16.38h-6.12c-1.23,0-2.15,0.4-2.78,1.18c-0.63,0.78-0.98,1.75-1.04,2.92l-0.18,12.28h-4.97
+               c-0.83,0-1.58,0.28-2.25,0.83c-0.68,0.55-1.02,1.35-1.02,2.39v6.12h8.24v23.33c0,3.13,0.6,5.83,1.82,8.12
+               c1.21,2.28,2.91,4.03,5.1,5.24c2.2,1.21,4.73,1.82,7.62,1.82c2.88,0,5.6-0.49,8.16-1.47c2.56-0.98,4.98-2.17,7.25-3.55
+               L1313.4,850.96z"/>
+       <path class="st0" d="M1350.28,812.45c-1.06-0.28-2.43-0.42-4.12-0.42c-2.61,0-4.99,0.64-7.15,1.91c-2.17,1.28-4.04,3.02-5.64,5.23
+               v-1.52c0-1.38-0.34-2.53-1.01-3.43c-0.68-0.91-1.81-1.36-3.4-1.36h-5.57v47.02h9.98v-30.5c1.26-2.27,2.83-4.08,4.72-5.43
+               c1.88-1.35,3.96-2.03,6.23-2.03c1.01,0,1.95,0.08,2.81,0.24c0.49,0.06,0.84,0.09,1.06,0.09c1.22,0,2.28-0.35,3.17-1.06
+               c0.89-0.71,1.46-1.67,1.7-2.9l1.01-4.55C1352.6,813.15,1351.34,812.72,1350.28,812.45z"/>
+       <path class="st0" d="M1392.21,817.07c-3.19-3.33-7.91-4.99-14.17-4.99c-2.17,0-4.48,0.26-6.92,0.78s-4.74,1.26-6.9,2.21
+               c-2.16,0.95-3.87,2.05-5.13,3.31l1.61,3.08c0.46,0.86,1.13,1.54,2,2.03c0.87,0.49,1.82,0.74,2.83,0.74c0.92,0,1.76-0.17,2.53-0.51
+               c1.69-0.77,3.2-1.29,4.53-1.56c1.34-0.28,2.89-0.42,4.67-0.42c3.37,0,5.84,0.93,7.39,2.78c1.54,1.86,2.33,4.84,2.36,8.95
+               c-1.9-0.55-4.07-0.98-6.53-1.29c-2.45-0.3-4.45-0.46-5.98-0.46c-6.23,0-10.87,1.31-13.94,3.92c-3.07,2.6-4.6,6.25-4.6,10.94
+               c0,2.58,0.71,4.96,2.14,7.14c1.43,2.17,3.34,3.89,5.73,5.15c2.39,1.26,4.97,1.88,7.73,1.88c5.52,0,10.67-2.28,15.45-6.85v0.41
+               c0,1.72,0.4,3.09,1.18,4.1s2,1.52,3.66,1.52h5.15v-28.07C1397,825.33,1395.4,820.4,1392.21,817.07z M1387.01,846.17
+               c-2.26,1.63-4.5,2.95-6.69,3.98c-2.19,1.03-4.49,1.54-6.88,1.54c-2.42,0-4.35-0.51-5.79-1.54c-1.45-1.03-2.17-2.48-2.17-4.35
+               c0-2.45,0.86-4.15,2.58-5.1c1.72-0.95,4.37-1.43,7.96-1.43c3.96,0,7.62,0.46,10.99,1.38V846.17z"/>
+       <path class="st0" d="M1445.12,812.86c-1.47,0-2.74,0.35-3.79,1.04c-1.06,0.69-1.84,1.68-2.33,2.96l-11.41,28.81
+               c-0.18,0.55-0.32,1.25-0.41,2.09c-0.09,0.84-0.17,1.98-0.23,3.43h-0.09c-0.06-1.41-0.14-2.55-0.23-3.41
+               c-0.09-0.86-0.25-1.56-0.46-2.11l-11.37-28.81c-0.49-1.28-1.27-2.27-2.34-2.96c-1.08-0.69-2.35-1.04-3.82-1.04h-6.44l20.24,47.02
+               h8.93l20.24-47.02H1445.12z"/>
+       <path class="st0" d="M1490.76,817.07c-3.19-3.33-7.91-4.99-14.17-4.99c-2.18,0-4.48,0.26-6.92,0.78c-2.44,0.52-4.74,1.26-6.9,2.21
+               c-2.17,0.95-3.88,2.05-5.13,3.31l1.61,3.08c0.46,0.86,1.12,1.54,2,2.03c0.87,0.49,1.82,0.74,2.83,0.74c0.92,0,1.76-0.17,2.53-0.51
+               c1.68-0.77,3.2-1.29,4.53-1.56c1.33-0.28,2.89-0.42,4.67-0.42c3.37,0,5.83,0.93,7.38,2.78c1.55,1.86,2.34,4.84,2.37,8.95
+               c-1.9-0.55-4.08-0.98-6.53-1.29c-2.45-0.3-4.45-0.46-5.98-0.46c-6.23,0-10.87,1.31-13.94,3.92c-3.07,2.6-4.6,6.25-4.6,10.94
+               c0,2.58,0.71,4.96,2.14,7.14c1.42,2.17,3.33,3.89,5.73,5.15c2.39,1.26,4.96,1.88,7.72,1.88c5.52,0,10.68-2.28,15.46-6.85v0.41
+               c0,1.72,0.39,3.09,1.18,4.1c0.78,1.01,2,1.52,3.65,1.52h5.16v-28.07C1495.55,825.33,1493.95,820.4,1490.76,817.07z M1485.56,846.17
+               c-2.27,1.63-4.5,2.95-6.69,3.98c-2.19,1.03-4.49,1.54-6.88,1.54c-2.42,0-4.36-0.51-5.8-1.54c-1.44-1.03-2.16-2.48-2.16-4.35
+               c0-2.45,0.86-4.15,2.58-5.1c1.72-0.95,4.37-1.43,7.96-1.43c3.95,0,7.62,0.46,10.99,1.38V846.17z"/>
+       <path class="st0" d="M1509.85,812.86v47.02h10.03v-47.02H1509.85z M1520.69,796.12c-0.6-1.05-1.41-1.87-2.44-2.49
+               c-1.03-0.61-2.14-0.92-3.33-0.92c-1.23,0-2.37,0.31-3.41,0.92c-1.04,0.62-1.86,1.44-2.46,2.49c-0.6,1.04-0.9,2.16-0.9,3.35
+               c0,1.2,0.3,2.32,0.9,3.36c0.6,1.05,1.42,1.87,2.46,2.49c1.04,0.61,2.18,0.92,3.41,0.92c1.19,0,2.3-0.31,3.33-0.92
+               c1.03-0.62,1.84-1.44,2.44-2.49c0.6-1.04,0.9-2.16,0.9-3.36C1521.59,798.28,1521.29,797.16,1520.69,796.12z"/>
+       <path class="st0" d="M1534.24,791.65v68.23h10.03v-68.23H1534.24z"/>
+</g>
+<path class="st2" d="M620.48,351.6c-0.72-46.47-16.42-83.63-47.1-111.47c-31.42-28.52-73.53-42.77-126.33-42.77H289.68
+       c-9.98,0-18.07,8.09-18.07,18.07v82.8c14.78-16.16,35.3-26.83,57.84-27.88c28.02-1.31,56.12-0.7,84.18-0.92c0.8,0,1.58,0.38,2.4,0.6
+       l0.4,63.51c-16.76,1.57-26.57,10.97-26.99,25.49c-0.43,14.39,9.08,23.89,27.48,27.23l0.4,63.57c-25.22,0.16-49.7,0.4-74.2,0.4
+       c-7.3,0-14.69-0.05-21.88-1.21c-19.86-3.2-36.97-13-49.63-27.15v311.46c0,9.98,8.09,18.08,18.07,18.08h43.45
+       c9.98,0,18.08-8.1,18.08-18.08V529.49c0-9.99,8.09-18.08,18.08-18.08h40.53c52.28,0,92.41-5.61,120.39-16.83
+       c27.99-11.22,50.03-29.24,66.14-54.06c13.39-20.63,21.21-43.82,23.47-69.57c0.46-5.22,0.69-10.54,0.69-15.97
+       C620.51,353.85,620.5,352.72,620.48,351.6z M536.79,351.4c-14.22,0.09-28.41,0.29-42.61,0.1c-1.43-0.01-3.22-2.13-4.18-3.71
+       c-5.51-9.04-12.77-14.53-23.58-14.25c-11.44,0.29-22.88,0.19-34.61,0.27l-0.41-64C495.18,261.1,534.32,306.85,536.79,351.4z
+        M415.01,370.4c-6.43-0.07-10.54-4.08-10.89-10.11c-0.37-6.14,3.22-10.98,9.61-11.2c17.95-0.62,35.92-0.96,53.88-0.86
+       c6.81,0.03,10.48,4.78,10.28,11.31c-0.21,6.76-3.71,10.47-10.85,10.71c-8.74,0.32-17.52,0.18-26.3,0.24v-0.2
+       C432.17,370.35,423.58,370.52,415.01,370.4z M432.62,449.12l-0.41-63.97c10.99-0.07,21.62-0.7,32.19-0.06
+       c12.21,0.74,20.12-5.14,26.08-15.3c0.73-1.24,2.22-2.85,3.38-2.87c14.39-0.3,28.77-0.31,43.19-0.4
+       C534.44,410.98,496.74,457.08,432.62,449.12z"/>
+<path class="st2" d="M1649.63,193.61h-405.92c-12.49,0-22.62,10.12-22.62,22.62v25.52c0,12.49,10.13,22.62,22.62,22.62h144.46
+       c12.49,0,22.62,10.13,22.62,22.62v440.19c0,12.49,10.13,22.62,22.62,22.62h34.36c12.5,0,22.62-10.13,22.62-22.62V286.99
+       c0-12.49,10.13-22.62,22.62-22.62h136.62c12.49,0,22.62-10.13,22.62-22.62v-25.52C1672.25,203.73,1662.12,193.61,1649.63,193.61z"/>
+<g>
+       <path class="st2" d="M560.4,349.53c-1.41,0-2.83,0.29-4.51,0.47l0.11,17.56c1.71,0.12,3.48,0.34,5.27,0.34
+               c15.07,0.02,30.16-0.19,45.24,0.06c13.92,0.22,19.38,5.01,21.47,19.27c1.25,8.54,1.73,17.24,2.01,25.87
+               c0.99,30.98,17.18,50.79,46.85,55.6c9.62,1.56,19.56,1.28,29.35,1.22c6.08-0.04,9.74-4.48,9.29-9.82
+               c-0.42-5.1-4.33-8.12-10.16-8.33c-9.15-0.33-18.49,0.09-27.43-1.58c-19.96-3.75-29.56-16.55-30.35-37.68
+               c-0.39-10.14-0.67-20.43-2.58-30.33c-4.1-21.16-13.12-30.28-33.7-32.1C594.42,348.6,577.36,349.61,560.4,349.53z"/>
+</g>
+</svg>
diff --git a/pointeuse/install/bin/electron/resources/app/img/poticon512.png b/pointeuse/install/bin/electron/resources/app/img/poticon512.png
new file mode 100644 (file)
index 0000000..bce391c
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/poticon512.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/potlogowhite.svg b/pointeuse/install/bin/electron/resources/app/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/pointeuse/install/bin/electron/resources/app/img/pottop.png b/pointeuse/install/bin/electron/resources/app/img/pottop.png
new file mode 100644 (file)
index 0000000..5f159c5
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/pottop.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/toplogo.png b/pointeuse/install/bin/electron/resources/app/img/toplogo.png
new file mode 100644 (file)
index 0000000..37e2068
Binary files /dev/null and b/pointeuse/install/bin/electron/resources/app/img/toplogo.png differ
diff --git a/pointeuse/install/bin/electron/resources/app/img/touch.svg b/pointeuse/install/bin/electron/resources/app/img/touch.svg
new file mode 100644 (file)
index 0000000..33b7615
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?> 
+<svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" 
+        x="0px" y="0px" width="50px" height="50px" viewBox="0 0 41.37 64"> 
+<path fill="#fff" d="M15.981499,13.747002C18.05169,13.747002,19.73,15.426697,19.73,17.496992L19.73,29.981703 19.779463,29.852098C20.305013,28.579597 21.683165,27.672002 23.300499,27.672002 25.370689,27.672002 27.049,29.159006 27.049,30.994911L27.049,32.286549 27.098465,32.167931C27.624022,31.003298 29.002193,30.172002 30.619551,30.172002 32.689867,30.172002 34.368,31.533998 34.368,33.213693L34.368,42.065532 34.802896,37.581322C34.973396,35.815634 36.543791,34.521343 38.310686,34.693342 40.076281,34.862541 41.370577,36.435431 41.198677,38.201019L39.531998,55.4002 39.531998,56.770905C39.531998,60.763145,36.295256,64,32.301731,64L19.449066,64C16.080709,64,13.24998,61.695639,12.447613,58.577476L12.385349,58.30774 2.4728718,41.726652C1.7229061,40.474153 2.3947554,38.692953 3.9740238,37.750153 5.5534835,36.807454 7.4387784,37.057454 8.1887436,38.310053L12.233,45.075792 12.233,17.496992C12.232999,15.426697,13.91121,13.747002,15.981499,13.747002z M2.4651451,5.512001C3.0964394,5.512001,3.7279081,5.7528877,4.2096834,6.2346535L8.3473825,10.372528C9.3108721,11.336092 9.3108721,12.895937 8.3473825,13.859404 7.3840122,14.822868 5.821506,14.822868 4.8593559,13.859404L0.7216568,9.7214584C-0.2405529,8.7580528 -0.2405529,7.1982384 0.7216568,6.2346535 1.2027321,5.7528877 1.8338509,5.512001 2.4651451,5.512001z M29.787703,5.512001C30.419058,5.512001 31.050566,5.7528877 31.532339,6.2346535 32.495886,7.1982384 32.495886,8.7580528 31.532339,9.7214584L27.394133,13.859404C26.430585,14.822868 24.869307,14.822868 23.905759,13.859404 22.943411,12.895937 22.943411,11.336092 23.905759,10.372528L28.043965,6.2346535C28.525139,5.7528877,29.156345,5.512001,29.787703,5.512001z M16.182049,0C17.543967,0,18.648,1.1041412,18.647999,2.466156L18.647999,8.3178291C18.648,9.6823425 17.543967,10.784 16.182049,10.784 14.820132,10.784 13.715999,9.6823425 13.716,8.3178291L13.716,2.466156C13.715999,1.1041412,14.820132,0,16.182049,0z"/> 
+</svg>
\ No newline at end of file
diff --git a/pointeuse/install/bin/electron/resources/app/index.fingerprint.html b/pointeuse/install/bin/electron/resources/app/index.fingerprint.html
new file mode 100644 (file)
index 0000000..3838ea5
--- /dev/null
@@ -0,0 +1,162 @@
+<!DOCTYPE html>
+<html lang="fr">
+<head>
+  <meta charset="UTF-8">
+  <meta content="width=device-width, initial-scale=1.0" name="viewport">
+  <link href="css/icons.css?v=2" rel="stylesheet">
+  <link href="css/theme.css?v=2" rel="stylesheet">
+  <title>Time Clock - FingerPrint</title>
+</head>
+<body style="max-height: 470px;">
+  <div class="display-container" style="width: 800px; height:473px; overflow: hidden; background-color: #fff;">
+    <!-- Panel Screen Saver -->
+    <div class="display-container panel center" id="pnl_screensaver" onclick="timeclock.loadusers();return false;"
+         style="height: 473px;background-color: #000;"><img src="img/pot.svg"
+         style="height: 300px;"><br>
+    <img src="img/touch.svg" style="height: 100px;">
+  </div>
+    <div class="display-container panel" id="pnl_users" style="display: none;">
+         <div class="bar toolbar">
+          <div class="bar-item PageHeadTitle lbl" style="font-size: 12pt;" data-lbl="msgchoosename">Sélectionner votre nom!</div>
+          <button class="bar-item toolbarbtn right" onclick="timeclock.loadscreensaver();"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
+          <button class="bar-item toolbarbtn right" onclick="timeclock.nextusers();return false;" style="display: none;" id="mnubtn_usersnext"><span class="icon icon-next" style="font-size: 32px;"></span></button>
+          <button class="bar-item toolbarbtn right" onclick="timeclock.prevusers();return false;" style="display: none;" id="mnubtn_usersprev"><span class="icon icon-back" style="font-size: 32px;"></span></button>
+          <button class="bar-item toolbarbtn right" onclick="timeclock.loadadmin();return false;"  id="mnubtn_admin"><span class="icon icon-settings" style="font-size: 32px;"></span></button>
+        </div>
+      <div id="userlists"></div>
+    </div><!-- Panel Out of Time -->
+    <div class="display-container panel" id="pnl_returnmsg" style="display: none;">
+      <div class="textblack xlarge lbl" data-lbl="msgnotinworktime"  id="notallowedmsg" style="margin: auto; margin-top: 100px; width: 600px; font-size: 20px;">
+        Vous êtes en dehors de votre temps de travail! Vous pouvez pointer uniquement dans le temps de travail prévu (+/-<span id="flextime"></span> minutes)! Sinon, veuillez contacter votre superieur!
+      </div>
+    </div>
+    <!-- Pincode Identification-->
+    <div class="display-container panel"  id="pnl_pincode" style="display: none;">
+      <div class="bar toolbar">
+        <div class="bar-item PageHeadTitle lbl" data-lbl="enterpincode" style="font-size: 12pt;">PinCode</div>
+        <button class="bar-item toolbarbtn right" onclick="timeclock.loadusers();"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
+      </div>
+  
+      <div class="container">
+        <input type="password" class="input center xlarge" value="" id="pincode" readonly/>
+      </div>
+      <div class="row" id="keypad">
+        <button class="btnkeypad button border col s4 light-grey xlarge" onclick="timeclock.setPinValue('1');">1</button> 
+        <button class="btnkeypad button border col s4 light-grey xlarge" onclick="timeclock.setPinValue('2');">2</button> 
+        <button class="btnkeypad button border col s4 light-grey xlarge" onclick="timeclock.setPinValue('3');">3</button> 
+        <button class="btnkeypad button border col s4 light-grey xlarge" onclick="timeclock.setPinValue('4');">4</button> 
+        <button class="btnkeypad button border col s4 light-grey xlarge" onclick="timeclock.setPinValue('5');">5</button> 
+        <button class="btnkeypad button border col s4 light-grey xlarge" onclick="timeclock.setPinValue('6');">6</button> 
+        <button class="btnkeypad button border col s4 light-grey xlarge" onclick="timeclock.setPinValue('7');">7</button> 
+        <button class="btnkeypad button border col s4 light-grey xlarge" onclick="timeclock.setPinValue('8');">8</button> 
+        <button class="btnkeypad button border col s4 light-grey xlarge" onclick="timeclock.setPinValue('9');">9</button> 
+        <button class="btnkeypad button border col s4 light-grey text-red xlarge" onclick="timeclock.clearUserPin();">COR</button> 
+        <button class="btnkeypad button border col s4 light-grey xlarge" onclick="timeclock.setPinValue('0');">0</button> 
+        <button class="btnkeypad button border col s4 light-grey text-green xlarge"  onclick="timeclock.checkuserpin();">OK</button>
+      </div>
+      <div class="container" id="pincodemsg"></div>
+    </div>
+    <!-- Panel Identification-->
+  <div class="display-container panel" id="pnl_readfinger" style="display: none;">
+    <div class="bar toolbar">
+      <div class="bar-item PageHeadTitle lbl" style="font-size: 12pt;" data-lbl="identheader">Identification</div>
+      <button class="bar-item toolbarbtn right" onclick="timeclock.loadusers();"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
+    </div>
+    <div class="container center">
+      <p class="large lbl" data-lbl="msgplacefinger">Mettez un de vos doigts enregistrés sur l'emprinte digitale<br/></p>
+      <div class="bar center">
+        <span class="bar-item icon icon-finger1" id="finger1" style="font-size: 500%;"></span>
+        <span class="bar-item icon icon-finger2" id="finger2" style="font-size: 500%;"></span>
+        <span class="bar-item icon icon-finger3" id="finger3" style="font-size: 500%;"></span>
+        <span class="bar-item icon icon-finger4" id="finger4" style="font-size: 500%;"></span>
+        <span class="bar-item icon icon-finger5" id="finger5" style="font-size: 500%;"></span>
+      </div>
+      <p></p>
+      <span class="icon icon-fingerprint-scanning" style="font-size: 600%;"></span>
+    </div>
+  </div>
+  <!-- Panel Fingerprint  Registration-->
+  <div class="display-container panel" id="pnl_writefinger" style="display: none;">
+    <div class="bar toolbar">
+      <div class="bar-item PageHeadTitle lbl" style="font-size: 12pt;" data-lbl="registerfinger">Enregistrement</div>
+      <button class="bar-item toolbarbtn right" onclick="timeclock.loadusers();"><span class="icon icon-remove" style="font-size: 16px;"></span><span class="lbl" data-lbl="close">fermer</span></button>
+    </div>
+    <div class="container center">
+
+      <p class="large lbl" data-lbl="selectfinger">sélectionner un doigt</p>
+      <div class="bar center">
+        <button class="bar-item bodybtn wfreg" id="regfinger1" onclick="timeclock.registerfinger(this,1);"><span class="icon icon-finger1" style="font-size: 500%;"></span>1</button>
+        <button class="bar-item bodybtn wfreg" id="regfinger2" onclick="timeclock.registerfinger(this,2);"><span class="icon icon-finger2" style="font-size: 500%;"></span>2</button>
+        <button class="bar-item bodybtn wfreg" id="regfinger3" onclick="timeclock.registerfinger(this,3);"><span class="icon icon-finger3" style="font-size: 500%;"></span>3</button>
+        <button class="bar-item bodybtn wfreg" id="regfinger4" onclick="timeclock.registerfinger(this,4);"><span class="icon icon-finger4" style="font-size: 500%;"></span>4</button>
+        <button class="bar-item bodybtn wfreg" id="regfinger5" onclick="timeclock.registerfinger(this,5);"><span class="icon icon-finger5" style="font-size: 500%;"></span>5</button>
+      </div>
+      <p class="large lbl" data-lbl="msgstartregister">cliquer ci-dessous pour commencer l'enreigistrement, puis mettez le doigt sur l'emprinte digitale</p>
+      <button class="bodybtn" id="btnwritefinger" onclick="timeclock.startregisterfinger();"><span class="icon icon-fingerprint-scanning" style="font-size: 600%;"></span></button>
+    </div>
+    </div>
+    <!-- Panel Time Track -->
+    <div class="display-container panel" id="pnl_timetrack" style="display: none;">
+      <div class="bar toolbar">
+        <div class="bar-item PageHeadTitle lbl" style="font-size: 12pt;" data-lbl="tracking">Pointage</div>
+        <button class="bar-item toolbarbtn right" onclick="timeclock.loadusers();"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
+      </div>
+      <div class="container center" >
+        <div style="display:none;">
+        <label class="label large"></label><span class="username"></span>&nbsp;<span id="lasttrack" ></span></label>
+      </div>
+            <div class="row">
+              <div class="container col" style="width: 50%; margin-top: 30px;">
+              <div class="container margin">
+                  <button class="col button xxlarge moduletoolbar lbl" id="btntrackin" data-lbl="trackin" onclick="timeclock.setTrack('in');">Entrée</button>
+              </div>
+              <div class="container margin" style="margin-top: 100px;">
+                  <button class="col button xxlarge moduletoolbar lbl" id="btntrackout"  data-lbl="trackout" onclick="timeclock.setTrack('out');">Sortie</button>
+              </div>
+              <div class="container margin" style="display: none;">
+                  <button class="col button xlarge moduletoolbar lbl" id="btntrackinpause" onclick="timeclock.setTrackPause('in');" data-lbl="startpause">Début Pause</button>
+              </div>
+              <div class="container margin" style="display: none;" style="margin-top: 100px;">
+                  <button class="col button xlarge moduletoolbar lbl" id="btntrackoutpause" onclick="timeclock.setTrackPause('out');" data-lbl="endpause">Fin Pause<br/>Ende Pause</button>
+              </div>
+              </div>
+              <div class="container col" style="padding: 0px; width: 50%; display: none;">
+                <h4 class="lbl" data-lbl="weekview">cette semaine</h4>
+                <div id="tbl_weektracks"></div>
+              </div>
+            </div>
+    </div>
+    </div>
+    <!-- Panel Status Msg -->
+    <div class="display-container panel center" id="pnl_status" style="height: 470px;display: none;">
+      <div id="statusmsg" class="textblack xlarge lbl" data-lbl="msgtrackregistered" style=" margin: auto; margin-top: 100px; width: 600px; font-size: 20px;" >Merci,<br/> le pointage a été enregistré!</div>
+    </div>
+    <!-- Panel Admin -->
+    <div class="display-container panel" id="pnl_admin" style="display: none;">
+      <div class="bar toolbar">
+        <div class="bar-item PageHeadTitle"  data-lbl="adminhome" style="font-size: 12pt;">Administration</div>
+        <button class="bar-item toolbarbtn right" onclick="timeclock.loadusers();"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
+      </div>
+      <div class="container center padding-48">
+          <!-- <button class="bar-item toolbarbtn toolbar" onclick="admin.loadpanel('wlan');"><span class="icon icon-wlan"  style="font-size: 500%;"></span>WLAN</button> -->
+          <button class="bodybtn border" onclick="shell.shutdown();"><span class="icon icon-shutdown"  style="font-size: 128px;"></span>Shutdown</button>
+          <button class="bodybtn border" onclick="shell.reboot();"><span class="icon icon-reboot"  style="font-size: 128px;"></span>Reboot</button>
+          <button class="bodybtn border" onclick="shell.rotate_screen();"><span class="icon icon-rotate_screen"  style="font-size: 128px;"></span>Rotate Screen</button>
+          <!--<button class="bodybtn border" onclick="timeclock.loadbadges();"><span class="icon icon-hwbagde"  style="font-size: 128px;"></span>Badges</button>-->
+          <!-- <button class="bar-item toolbarbtn toolbar" onclick="admin.cleanfingerprints();"><span class="icon icon-fingerprint-check"  style="font-size: 500%;"></span>Clean Fingerprints</button> -->
+        
+      </div>
+    </div>
+  </div>
+  <div id="snackbar"></div>
+  <div class="xxlarge timer text-white" id="timer"></div>
+  <script src="js/app.js?v=1" type="text/javascript"></script> 
+  <script src="js/lang.js?v=1" type="text/javascript"></script> 
+  <script src="js/sqlite.js?v=1" type="text/javascript"></script> 
+  <script src="js/fingerprint.js?v=1" type="text/javascript"></script>
+  <script src="js/sync.js?v=1" type="text/javascript"></script>  
+  <!--<script src="vendor/tabulator/js/tabulator.min.js?v=1" type="text/javascript"></script>-->
+  <script src="vendor/moment/moment.min.js?v=1" type="text/javascript"></script> 
+  <script src="js/timeclock.fingerprint.js?v=1" type="text/javascript"></script>
+</body>
+</html>
diff --git a/pointeuse/install/bin/electron/resources/app/index.nfc.html b/pointeuse/install/bin/electron/resources/app/index.nfc.html
new file mode 100644 (file)
index 0000000..999f4ed
--- /dev/null
@@ -0,0 +1,180 @@
+<!DOCTYPE html>
+<html lang="fr">
+<head>
+  <meta charset="UTF-8">
+  <meta content="width=device-width, initial-scale=1.0" name="viewport">
+  <link href="css/icons.css?v=2" rel="stylesheet">
+  <link href="css/theme.css?v=2" rel="stylesheet">
+  <title>Time Clock - NFC</title>
+</head>
+<body style="max-height: 470px;">
+  <div class="display-container" style="width: 800px; height:473px; overflow: hidden; background-color: #fff;">
+    <!-- Panel Screen Saver -->
+    <div class="display-container panel center" id="pnl_screensaver" onclick="timeclock.loadusers();return false;"
+         style="height: 473px;background-color: #000;"><img src="img/pot.svg"
+         style="height: 300px;"><br>
+    <img src="img/touch.svg" style="height: 100px;">
+    </div>
+    <!-- Panel Users -->
+    <div class="display-container panel" id="pnl_users" style="display: none;">
+         <div class="bar toolbar">
+          <div class="bar-item PageHeadTitle lbl" style="font-size: 12pt;" data-lbl="msgchoosename">Scan badge!</div>
+          <button class="bar-item toolbarbtn right" style="width: 85px;"></button>
+          <button class="bar-item toolbarbtn right" onclick="timeclock.loadscreensaver();return false;"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
+          <!-- <button class="bar-item toolbarbtn right" onclick="timeclock.nextusers();return false;" style="display: none;" id="mnubtn_usersnext"><span class="icon icon-next" style="font-size: 32px;"></span></button>
+          <button class="bar-item toolbarbtn right" onclick="timeclock.prevusers();return false;" style="display: none;" id="mnubtn_usersprev"><span class="icon icon-back" style="font-size: 32px;"></span></button> -->
+          <button class="bar-item toolbarbtn right" onclick="timeclock.loadadmin();return false;"  id="mnubtn_admin"><span class="icon icon-settings" style="font-size: 32px;"></span></button>
+        </div>
+        <br>
+        <div class="container center">
+          <img src="img/nfc-scan.svg" style="height: 300px;" /><br/>
+          <button class="button moduletoolbar xxlarge block" id="btn_haspincode" onclick="timeclock.loaduserlist();" style="display: none;">PinCode</button>
+        </div>
+    </div>
+    <!-- Panel Time Track -->
+    <div class="display-container panel" id="pnl_userlist" style="display: none;">
+      <div class="bar toolbar">
+       <div class="bar-item PageHeadTitle lbl" style="font-size: 12pt;" data-lbl="msgusername">Sélectionner votre nom!</div>
+       <button class="bar-item toolbarbtn right" style="width: 85px;"></button>
+       <button class="bar-item toolbarbtn right" onclick="timeclock.loadscreensaver();"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
+       <button class="bar-item toolbarbtn right" onclick="timeclock.nextusers();return false;" style="display: none;" id="mnubtn_usersnext"><span class="icon icon-next" style="font-size: 32px;"></span></button>
+       <button class="bar-item toolbarbtn right" onclick="timeclock.prevusers();return false;" style="display: none;" id="mnubtn_usersprev"><span class="icon icon-back" style="font-size: 32px;"></span></button>
+       <button class="bar-item toolbarbtn right" onclick="timeclock.loadadmin();return false;"  id="mnubtn_admin"><span class="icon icon-settings" style="font-size: 32px;"></span></button>
+     </div>
+        <div id="userlists"></div>
+    </div>
+    <div class="display-container panel" id="pnl_timetrack" style="display: none;">
+      <div class="bar toolbar">
+        <div class="bar-item PageHeadTitle lbl" style="font-size: 12pt;" data-lbl="tracking">Pointage</div>
+        <button class="bar-item toolbarbtn right" style="width: 85px;"></button>
+        <button class="bar-item toolbarbtn right" onclick="timeclock.loadscreensaver();"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
+      </div>
+      <div class="container center" >
+        <div>
+        <label class="label xlarge"><span id="username"></span></label>
+      </div>
+            <div class="row">
+              <div class="container half" style="margin-top: 30px;">
+              <div class="container margin">
+                  <button class="col button xxlarge moduletoolbar lbl" id="btntrackin" data-lbl="trackin" onclick="timeclock.setTrack('in');">Entrée</button>
+              </div>
+              <div class="container margin" style="margin-top: 100px;">
+                  <button class="col button xxlarge moduletoolbar lbl" id="btntrackout"  data-lbl="trackout" onclick="timeclock.setTrack('out');">Sortie</button>
+              </div>
+              <!--<div class="container margin" style="display: none;">
+                  <button class="col button xlarge moduletoolbar lbl" id="btntrackinpause" onclick="timeclock.setTrackPause('in');" data-lbl="startpause">Début Pause</button>
+              </div>
+              <div class="container margin" style="display: none;" style="margin-top: 100px;">
+                  <button class="col button xlarge moduletoolbar lbl" id="btntrackoutpause" onclick="timeclock.setTrackPause('out');" data-lbl="endpause">Fin Pause<br/>Ende Pause</button>
+              </div>-->
+              </div>
+              <div class="container half" style="margin-top: 30px;">
+                <div class="container">
+                  
+                </div>
+              </div>
+            </div>
+    </div>
+    </div>
+    <!-- Panel Status Msg -->
+    <div class="display-container panel center" id="pnl_status" style="height: 470px;display: none;">
+      <div id="statusmsg" class="textblack xlarge lbl" data-lbl="msgtrackregistered" style=" margin: auto; margin-top: 100px; width: 600px; font-size: 20px;" >Merci,<br/> le pointage a été enregistré!</div>
+    </div>
+
+    <div class="display-container panel" id="pnl_admin" style="display: none;">
+      <div class="bar toolbar">
+        <div class="bar-item PageHeadTitle"  data-lbl="adminhome" style="font-size: 12pt;">Administration</div>
+        <button class="bar-item toolbarbtn right" style="width: 85px;"></button>
+        <button class="bar-item toolbarbtn right" onclick="timeclock.loadusers();"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
+      </div>
+      <div class="container center padding-48">
+        
+          <!-- <button class="bar-item toolbarbtn toolbar" onclick="admin.loadpanel('wlan');"><span class="icon icon-wlan"  style="font-size: 500%;"></span>WLAN</button> -->
+          <button class="bodybtn border" onclick="shell.shutdown();"><span class="icon icon-shutdown"  style="font-size: 128px;"></span>Shutdown</button>
+          <button class="bodybtn border" onclick="shell.reboot();"><span class="icon icon-reboot"  style="font-size: 128px;"></span>Reboot</button>
+          <button class="bodybtn border" onclick="shell.turnscreen();"><span class="icon icon-rotate_screen"  style="font-size: 128px;"></span>Rotate Screen</button>
+          <button class="bodybtn border" onclick="timeclock.loadbadges();"><span class="icon icon-hwbagde"  style="font-size: 128px;"></span>Badges</button>
+          <!-- <button class="bar-item toolbarbtn toolbar" onclick="admin.cleanfingerprints();"><span class="icon icon-fingerprint-check"  style="font-size: 500%;"></span>Clean Fingerprints</button> -->
+        
+      </div>
+    </div>
+    <div class="display-container panel" id="pnl_badges" style="display: none;">
+      <div class="bar toolbar">
+        <div class="bar-item PageHeadTitle"  data-lbl="adminhome" style="font-size: 12pt;">Badges</div>
+        <button class="bar-item toolbarbtn right" style="width: 85px;"></button>
+        <button class="bar-item toolbarbtn right" onclick="timeclock.loadadmin();"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
+        <button class="bar-item toolbarbtn right" onclick="timeclock.addbadge();"><span class="icon icon-plus" style="font-size: 32px;"></span></button>
+      </div>
+      <div class="container center" style="height: calc(100vh - 53px); overflow-y: scroll;">
+          <ul class="ul" id="userlistbadge">
+            
+          </ul>
+
+        
+      </div>
+    </div>
+    <div class="display-container panel" id="pnl_addbadge" style="display: none;">
+      <div class="bar toolbar">
+        <div class="bar-item PageHeadTitle"  data-lbl="adminhome" style="font-size: 12pt;">Badges</div>
+        <button class="bar-item toolbarbtn right" style="width: 85px;"></button>
+        <button class="bar-item toolbarbtn right" onclick="timeclock.loadbadges();"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
+
+      </div>
+        <div class="container center" id="addbagescanimg">
+          <img src="img/nfc-scan.svg" style="height: 300px;" />
+        </div>
+        <div class="container center" id="addusertobadge" style="height: calc(100vh - 53px); overflow-y: scroll;">
+          <ul class="ul" id="userlistnobadge">
+
+          </ul>
+        </div>
+  </div>
+  <!-- Pincode Identification-->
+  <div class="display-container panel"  id="pnl_pincode" style="display: none;">
+    <div class="bar toolbar">
+      <div class="bar-item PageHeadTitle lbl" data-lbl="enterpincode" style="font-size: 12pt;">PinCode </div>
+      <div class="bar-item PageHeadTitle" id="lbl_username"></div>
+      <button class="bar-item toolbarbtn right" style="width: 85px;"></button>
+      <button class="bar-item toolbarbtn right" onclick="timeclock.loadusers();"><span class="icon icon-remove" style="font-size: 32px;"></span></button>
+    </div>
+    <div class="center">
+    <div class="bar">
+      <input type="password" class="bar-item input center xlarge border" value="" id="pincode" placeholder="Code" readonly onclick="timeclock.selectfield('pincode','pincode2');"/>
+      <input type="password" class="bar-item input center xlarge border" value="" id="pincode2"  placeholder="répéter Code" readonly onclick="timeclock.selectfield('pincode2','pincode');"/>
+    </div></div>
+    <div id="keypad">
+    <div class="row center">
+      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('1');">1</button> 
+      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('2');">2</button> 
+      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('3');">3</button>
+    </div>
+    <div class="row center">
+      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('4');">4</button> 
+      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('5');">5</button> 
+      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('6');">6</button>
+    </div>
+    <div class="row center">
+      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('7');">7</button> 
+      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('8');">8</button> 
+      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('9');">9</button> 
+    </div>
+    <div class="row center">
+      <button class="btnkeypad button border s4 light-grey text-red xlarge" style="height:85px; width:85px;" onclick="timeclock.clearUserPin();">COR</button> 
+      <button class="btnkeypad button border s4 light-grey xlarge" style="height:85px; width:85px;" onclick="timeclock.setPinValue('0');">0</button> 
+      <button class="btnkeypad button border s4 light-grey text-green xlarge" style="height:85px; width:85px;" onclick="timeclock.checkuserpin();">OK</button>
+    </div>
+    </div>
+    <div class="container" id="pincodemsg"></div>
+  </div>
+  <div id="snackbar"></div>
+  <div class="xxlarge timer text-white"  id="timer"></div>
+  <script src="js/renderer.js?v=1" type="text/javascript"></script>
+  <script src="js/app.js?v=1" type="text/javascript"></script> 
+  <script src="js/lang.js?v=1" type="text/javascript"></script> 
+  <script src="js/sqlite.js?v=1" type="text/javascript"></script> 
+  <script src="js/shell.js?v=1" type="text/javascript"></script>
+  <script src="js/sync.js?v=1" type="text/javascript"></script>  
+  <script src="vendor/moment/moment.min.js?v=1" type="text/javascript"></script> 
+  <script src="js/timeclock.nfc.js?v=1" type="text/javascript"></script>
+</body>
+</html>
diff --git a/pointeuse/install/bin/electron/resources/app/js/app.js b/pointeuse/install/bin/electron/resources/app/js/app.js
new file mode 100644 (file)
index 0000000..388f32a
--- /dev/null
@@ -0,0 +1,65 @@
+//const fs = require('fs'); 
+//const os = require('os');
+
+
+let cfgpath = os.homedir() + '/.hourtrax/';
+let binpath = os.homedir() + '/bin/';
+let preferences= {};
+
+let app = {
+    currentview: null,
+
+    viewpanel: function(pnlname){
+      let panels = document.getElementsByClassName("panel");
+      //console.log("change panel to " + pnlname);
+      app.currentview = pnlname;
+      for (let p=0;p<panels.length;p++){
+        panels[p].style.display = 'none';
+      }
+      if (document.getElementById('pnl_' + pnlname)){
+        //console.log("Set to block!");
+        document.getElementById('pnl_' + pnlname).style.display = 'block';
+      }
+      return false;
+    },
+    snackbar: function(msg,color){
+      var sb = document.getElementById("snackbar");
+      sb.className="show " + color;
+      sb.innerHTML = msg;
+      setTimeout(function(){ sb.className = sb.className.replace("show " + color, ""); }, 3000);
+      return false;
+    },
+    // getPreference: function(key){
+    //     let data = null;
+    //     if (fs.existsSync(cfgpath  + key + ".json")){
+    //         //console.log("Read Key:" + key);
+    //         let data = fs.readFileSync(cfgpath  + key + ".json", 'utf-8');
+    //         if (data.startsWith("{") || data.startsWith("[")){
+    //             data = JSON.parse(data);
+    //         }
+    //         return data;
+    //     }
+    //     return data;
+    // },
+    setlanguage:  function(nlang){
+      if (nlang != 'fr' && nlang != 'de'){ nlang='de';}
+        var lbldata = document.getElementsByClassName("lbl");
+        for (var l=0;l<lbldata.length;l++){
+          console.log(lbldata[l].dataset.lbl);
+          lbldata[l].innerHTML=lang[nlang][lbldata[l].dataset.lbl];
+          
+        }
+    },
+    uuidv4: function() {
+      return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+        var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
+        return v.toString(16);
+      });
+    }
+}
+
+document.addEventListener("DOMContentLoaded", function() {
+  preferences = usersystem.getPref('hourtrax');
+  //console.log("Content loaded",preferences);
+  db.connect(usersystem.dataPath() + preferences.db);
+});
diff --git a/pointeuse/install/bin/electron/resources/app/js/fingerprint.js b/pointeuse/install/bin/electron/resources/app/js/fingerprint.js
new file mode 100644 (file)
index 0000000..32a34cd
--- /dev/null
@@ -0,0 +1,139 @@
+const { spawn } = require('child_process');
+
+// let fpmsg={ "0": "Accès autorisé!<br/>Zugriff gewährt!",
+// "-1":"Erreur/Fehler! Veuillez essayer de placer le centre de l'empreinte digitale à plat sur le capteur, ou cette empreinte existe déjà!<br/>Versuchen Sie bitte, die Mitte des Fingerabdrucks flach auf den Sensor zu legen, sonst ist der Fingerabdruck bereits vorhanden.",
+// "2":"l'empreinte digitale a été sauvegardée!<br/>Der Fingerabdruck wurde gespeichert!",
+  
+//   "-4": "Erreur/Fehler! La bibliothèque d'empreintes digitales est pleine! Prière de contacter le Support!<br/>Die Fingerabdruck-Bibliothek ist voll! Bitte kontaktieren Sie den Support!",
+// "-5":"Erreur/Fehler! Utilisateur non verifé! Veuillez essayer de placer le centre de l'empreinte digitale à plat sur le capteur!<br/>Nicht verifizierter Benutzer! Bitte versuchen Sie, die Mitte des Fingerabdrucks flach auf den Sensor zu legen!",
+// "-8":"Timed Out!"
+
+// }
+
+let fingerprint ={
+  unload: function(){
+    //console.log(binpath +'fpunload.sh');
+    const fpunload = spawn('bash', ['/home/pot/bin/fpunload.sh','']);
+    //const fpunload = spawn('bash', ["-c",binpath +'/fpunload.sh','']);
+    fpunload.stdout.on('data', (data) => {
+      console.log(`fpunload stdout: ${data}`);
+    });
+
+    fpunload.stderr.on('data', (data) => {
+     console.error(`fpunload stderr: ${data}`);
+    });
+
+    fpunload.on('close', (code) => {
+      console.log(`fpunload child process exited with code ${code}`);
+    });
+  },
+  read: function(){
+    console.log("Read Start",moment(new Date()).format('hh:mm:ss'));
+    timeclock.startCheckIdle();
+    console.log("execute",binpath + 'fpread.sh');
+    const fpread = spawn('python', ['/home/pot/bin/fp.py', 'read',preferences.timeout]);
+    //const fpread = spawn('bash', ['-c',binpath + '/fpread.sh', 'read',preferences.timeout]);
+    fpread.stdout.on('data', (data) => {
+      console.log(`fpread stdout: ${data}`);
+      console.log("Read OUT End",moment(new Date()).format('hh:mm:ss'));
+      
+      if (data.toString().startsWith("u")){
+        //var user=data.toString();
+        var user = data.toString().replace(/^u/,'');
+        console.log("fp user",user);
+        var rsql = "select id_staff,fingerhash,fingertype from fingerprints where fingerhash='"+user+"' and id_staff='"+timeclock.userdata[timeclock.current_index].id+"';";
+        console.log("rsql",rsql);
+        db.query(rsql).then(fpdata => {
+          console.log("fpdata",fpdata);
+          if (fpdata){
+            console.log("data compared",fpdata)
+            timeclock.loadtimetrack();
+            app.snackbar(lang["de"]["fp_ok"],'green');
+          } else {
+            fingerprint.read();
+            app.snackbar(lang["de"]["fp_notok"],'red');
+          }
+        }).catch(e => {
+          console.log("db error",e);
+          fingerprint.read();
+          app.snackbar(lang["de"]["fp_notok"],'red');
+        })
+      } else {
+        app.snackbar(lang["de"]["fp_notok"],'red');
+        fingerprint.read();
+      }
+      
+      
+    });
+
+    fpread.stderr.on('data', (data) => {
+      console.log("Read ERR end",moment(new Date()).format('hh:mm:ss'));
+     console.error(`fpread stderr: ${data}`);
+     if (data == "8"){
+      timeclock.loadusers();
+     } else {
+
+     }
+    });
+
+    fpread.on('close', (code) => {
+      console.log(`Read CLOSE ${code} end`,moment(new Date()).format('hh:mm:ss'));
+      //console.log(`fpread: child process exited with code ${code}`);
+      if (`${code}` != "0" ){
+        timeclock.loadusers();
+      }
+    });
+  },
+  write: function(){
+    console.log("Write Start",moment(new Date()).format('hh:mm:ss'));
+    //const fpwrite = spawn('bash', ["-c",binpath + '/fp.py', 'write',preferences.timeout]);
+    const fpwrite = spawn('python', ['/home/pot/bin/fp.py', 'write',preferences.timeout]);
+    timeclock.startCheckIdle();
+    fpwrite.stdout.on('data', (data) => {
+      console.log("Write OUT End",moment(new Date()).format('hh:mm:ss'));
+      console.log("Write result",`${data}`);
+      console.log(data.toString());
+      if (data.toString().startsWith("au")){
+        var newuser = data.toString().replace(/^au/,'');
+        console.log("write FP to User:",timeclock.current_index,timeclock.writefinger,newuser);
+        db.exec("REPLACE INTO fingerprints (id_staff,fingerhash,fingertype) VALUES ('"+ timeclock.userdata[timeclock.current_index].id +"','"+ newuser +"','"+ timeclock.writefinger +"');").then(dbdata => {
+          console.log("newfinger db sql",dbdata);
+          document.getElementById("regfinger"+ timeclock.writefinger).classList.add("orange");
+          app.snackbar(lang["de"]["fp_saved"],'green');
+          document.getElementById("btnwritefinger").classList.remove("green");
+          //fingerprint.write();
+        }
+        ).catch(e =>{
+          console.log("errordb",e);
+          app.snackbar(lang["de"]["fp_notok"],'red');
+          document.getElementById("btnwritefinger").classList.remove("green");
+          //fingerprint.write();
+        });
+      } else {
+        app.snackbar(lang["de"]["fp_notok"],'red');
+        document.getElementById("btnwritefinger").classList.remove("green");
+        //fingerprint.write();
+      }
+      
+    });
+
+    fpwrite.stderr.on('data', (data) => {
+      console.log("Write ERR end",moment(new Date()).format('hh:mm:ss'));
+      console.error(`fpwrite: ${data}`);
+      if (data == "8"){
+       timeclock.loadusers();
+      } else {
+
+      }
+     
+    });
+
+    fpwrite.on('close', (code) => {
+      console.log(`Write CLOSE ${code} end`,moment(new Date()).format('hh:mm:ss'));
+      if (`${code}` != "0" ){
+        timeclock.loadusers();
+      }
+      //console.log(`fpwrite: child process exited with code ${code}`);
+    });
+  }
+}
\ No newline at end of file
diff --git a/pointeuse/install/bin/electron/resources/app/js/lang.js b/pointeuse/install/bin/electron/resources/app/js/lang.js
new file mode 100644 (file)
index 0000000..e2d849e
--- /dev/null
@@ -0,0 +1,75 @@
+
+
+let lang = {"de":
+{"pinerrormsg":"Pin-Code nicht korrekt!",
+"msgplacefinger":"Legen Sie einen Ihrer registrierten Finger auf den Fingerabdruck-Sensor",
+"cancel":"abbrechen",
+"msgchoosename":"Scan Badge!",
+"msgattention":"Achtung!",
+"msgstarttime":"Sie dürfen sich erst ab <span style=\"xlarge\" =id=\"daystarttime\">%%daystarttime%%</span> Uhr einloggen!",
+"msgendtime":"Sie müssen sich vor <span style=\"xlarge\" id=\"dayendtime\">%%dayendtime%%</span> Uhr ausloggen!",
+"enterpincode":"Pincode eingeben:",
+"registerfinger":"Registrierung",
+"close":"schließen",
+"selectfinger":"einen Finger auswählen",
+"msgstartregister":"klicken Sie unten, um die Registrierung zu starten, dann legen Sie Ihren Finger auf den Fingerabdruck-Sensor",
+"tracking":"Stechuhr",
+"trackin":"Einloggen",
+"trackout":"Ausloggen",
+"endpause":"Ende Pause",
+"startpause":"Start Pause",
+"weekview":"Wochenübersicht",
+"msgtrackregistered":"Danke,<br/> der Vorgang wurde gespeichert!",
+"fp_ok":"Zugriff gewährt!",
+"fp_notok":"Fingerabdruck nicht erkannt!",
+"fp_saved":"Der Fingerabdruck wurde gespeichert",
+"fplib_full":"Die Fingerabdruck-Bibliothek ist voll! Bitte kontaktieren Sie den Support!",
+"timeout":"Timed Out!",
+"badge_unknown":"unbekannter Badge!",
+"badge_added":"Badge wurde hinzugefügt!",
+"badge_removed":"Badge wurde entfernt!",
+"badge_notauthorized":"Badge nicht zugelaasen!",
+"pincode_notsame":"Pincodes nicht identisch!"
+}};
+
+lang["fr"] = {
+  "pinerrormsg":"Code-Pin incorrecte!",
+  "msgplacefinger":"Mettez un de vos doigts enregistrés sur l'emprinte digitale",
+"cancel":"abandonner",
+"msgchoosename":"Scan Badge!",
+"msgattention":"Attention!",
+"msgstarttime":"vous êtes autorisés à pointer l'entrée à partir de <span  style=\"xlarge\" id=\"daystarttime\">%%daystartime%%</span>h!",
+"msgendtime":"vous devez pointer la sortie avant <span id=\"dayendtime\"  style=\"xlarge\">%%dayendtime%%</span>h!",
+"enterpincode":"entrer Code-Pin:",
+"registerfinger":"Enregistrement",
+"close":"fermer",
+"selectfinger":"sélectionner un doigt",
+"msgstartregister":"cliquer ci-dessous pour commencer l'enreigistrement, puis mettez le doigt sur l'emprinte digitale",
+"tracking":"pointage",
+"trackin":"Entrée",
+"trackout":"Sortie",
+"endpause":"Fin Pause",
+"startpause":"Début Pause",
+"weekview":"Semaine courrante",
+"msgtrackregistered":"Merci,<br/> le pointage a été sauvegardé!",
+"fp_ok":"Accès authorisé!",
+"fp_notok":"empr. digitale pas reconue!",
+"fp_saved":"empr. digitale a été sauvegardée",
+"fplib_full":"la Biblio des empr. digitale est plein! contactez le Support!",
+"timeout":"Timed Out!",
+"badge_unknown":"Badge inconnue!",
+"badge_added":"Badge a été ajouté!",
+"badge_removed":"Badge supprimé!",
+"badge_notauthorized":"Badge non authorisé!",
+"pincode_notsame":"codes PIN pas identiques!"
+};
+
+// let fpmsg={ "0": "Accès autorisé!<br/>!",
+// "-1":"Erreur/Fehler! Veuillez essayer de placer le centre de l'empreinte digitale à plat sur le capteur, ou cette empreinte existe déjà!<br/>Versuchen Sie bitte, die Mitte des Fingerabdrucks flach auf den Sensor zu legen, sonst ist der Fingerabdruck bereits vorhanden.",
+// "2":"l'empreinte digitale a été sauvegardée!<br/>!",
+  
+//   "-4": "Erreur/Fehler! La bibliothèque d'empreintes digitales est pleine! Prière de contacter le Support!<br/>",
+// "-5":"Erreur/Fehler! Utilisateur non verifé! Veuillez essayer de placer le centre de l'empreinte digitale à plat sur le capteur!<br/>Nicht verifizierter Benutzer! Bitte versuchen Sie, die Mitte des Fingerabdrucks flach auf den Sensor zu legen!",
+// "-8":"Timed Out!"
+
+// }
diff --git a/pointeuse/install/bin/electron/resources/app/js/renderer.js b/pointeuse/install/bin/electron/resources/app/js/renderer.js
new file mode 100644 (file)
index 0000000..230fa10
--- /dev/null
@@ -0,0 +1,36 @@
+const fs = require('fs'); 
+const os = require('os');
+let usersystem = {
+  dataPath: function(){
+    return os.homedir() + '/.hourtrax/';
+  },
+  readDir: function(dir){
+    files = fs.readdirSync(os.datapath() + dir);
+    console.log("Dir parse:" + dir,JSON.stringify(files));
+    return files;
+  },
+  setPref: function(key,data){
+      
+      console.log("Set Pref",key,data);
+      if ((typeof data == 'object') || (typeof data == 'array')){
+          data = JSON.stringify(data);
+      }
+      let result = fs.writeFileSync(this.dataPath()  + key + ".json", data);
+      return result;
+  },
+  getPref: function(key){
+      console.log("get Pref key",key);
+    //console.log("getPreference:" + this.profilepath()  + key + ".json");
+      let data = null;
+      if (fs.existsSync(this.dataPath()  + key + ".json")){
+          //console.log("Read Key:" + key);
+          let data = fs.readFileSync(this.dataPath()  + key + ".json", 'utf-8');
+          if (data.startsWith("{") || data.startsWith("[")){
+              data = JSON.parse(data);
+          }
+          return data;
+      }
+      console.log("get Pref data",data);
+      return data;
+  },
+}
\ No newline at end of file
diff --git a/pointeuse/install/bin/electron/resources/app/js/shell.js b/pointeuse/install/bin/electron/resources/app/js/shell.js
new file mode 100644 (file)
index 0000000..aa356f7
--- /dev/null
@@ -0,0 +1,156 @@
+const { spawn } = require('child_process');
+
+let shell = {
+  scanwlans: function(){
+    const scanwlan = spawn('bash', ['/home/pot/bin/scanwlan.sh','get']);
+    scanwlan.stdout.on('data', (data) => {
+      console.log(`scanwlan stdout: ${data}`);
+    });
+
+    scanwlan.stderr.on('data', (data) => {
+     console.error(`scanwlan stderr: ${data}`);
+    });
+
+    scanwlan.on('close', (code) => {
+      console.log(`scanwlan exit code ${code}`);
+    });
+  },
+  netstatus: function(){
+    const netstatus = spawn('bash', ['ip --json addr show']);
+    netstatus.stdout.on('data', (data) => {
+      console.log(`netstatus stout: ${data}`);
+    });
+
+    netstatus.stderr.on('data', (data) => {
+     console.error(`netstatus stderr: ${data}`);
+    });
+
+    netstatus.on('close', (code) => {
+      console.log(`netstatus: exit code ${code}`);
+    });
+  },
+  savewlan: function(ssid,psk){
+    const netstatus = spawn('bash', ['/home/pot/bin/savewlan.sh','"'+ ssid+'"',psk]);
+    netstatus.stdout.on('data', (data) => {
+      console.log(`netstatus stout: ${data}`);
+    });
+
+    netstatus.stderr.on('data', (data) => {
+     console.error(`netstatus stderr: ${data}`);
+    });
+
+    netstatus.on('close', (code) => {
+      console.log(`netstatus: exit code ${code}`);
+    });
+  },
+  shutdown: function(){
+    const sh_shutdown = spawn('bash', ['/home/pot/bin/shutdown.sh']);
+    sh_shutdown.stdout.on('data', (data) => {
+      console.log(`sh_shutdown stout: ${data}`);
+    });
+
+    sh_shutdown.stderr.on('data', (data) => {
+     console.error(`sh_shutdown stderr: ${data}`);
+    });
+
+    sh_shutdown.on('close', (code) => {
+      console.log(`sh_shutdown: exit code ${code}`);
+    });
+  },
+  reboot: function(){
+    const sh_reboot = spawn('bash', ['/home/pot/bin/reboot.sh']);
+    sh_reboot.stdout.on('data', (data) => {
+      console.log(`sh_reboot stout: ${data}`);
+    });
+
+    sh_reboot.stderr.on('data', (data) => {
+     console.error(`sh_reboot stderr: ${data}`);
+    });
+
+    sh_reboot.on('close', (code) => {
+      console.log(`sh_reboot: exit code ${code}`);
+    });
+  },
+  turnscreen: function(){
+    const sh_turnscreen = spawn('bash', ['/home/pot/bin/turnscreen.sh']);
+    sh_turnscreen.stdout.on('data', (data) => {
+      //alert(`"DATA" + ${data}`);
+      console.log(`sh_turnscreen stout: ${data}`);
+    });
+
+    sh_turnscreen.stderr.on('data', (data) => {
+     console.error(`sh_turnscreen stderr: ${data}`);
+    });
+
+    sh_turnscreen.on('close', (code) => {
+      console.log(`sh_turnscreen: exit code ${code}`);
+    });
+  },
+  nfcimportid: function(){
+    const sh_nfcimport = spawn('bash', ['/home/pot/bin/nfcimportid.sh']);
+    console.log("NFC import started!")
+    sh_nfcimport.stdout.on('data', (data) => {
+      console.log(`sh_nfcimport stout: ${data}`);
+      let nuid=data.toString().replace(/^UID:/,'').replace(/\n/g,'');
+     if (nuid != ""){
+      timeclock.setbadgetouser(nuid);
+     } else {
+       app.snackbar("Badge not recognized!",'red');
+       timeclock.loadbadges();
+     }
+    });
+
+    sh_nfcimport.stderr.on('data', (data) => {
+     console.error(`sh_nfcimport stderr: ${data}`);
+     
+     
+    });
+
+    sh_nfcimport.on('close', (code) => {
+      console.log(`sh_nfcimport: exit code ${code}`);
+    });
+  },
+  nfcunload: function(){
+    const sh_nfcunload = spawn('bash', ['/home/pot/bin/nfcunload.sh']);
+    timeclock.current_staff_id='';
+    sh_nfcunload.stdout.on('data', (data) => {
+      console.log(`sh_nfcunload stout: ${data}`);
+    });
+
+    sh_nfcunload.stderr.on('data', (data) => {
+     console.error(`sh_nfcunload stderr: ${data}`);
+    });
+
+    sh_nfcunload.on('close', (code) => {
+      console.log(`sh_nfcunload: exit code ${code}`);
+    });
+  },
+  nfcwaitbadge: function(){
+    const sh_nfcwaitbadge = spawn('bash', ['/home/pot/bin/nfcreadbadge.sh']);
+    timeclock.current_staff_id='';
+    sh_nfcwaitbadge.stdout.on('data', (data) => {
+      console.log(`sh_nfcwaitbadge stout: ${data}`);
+      timeclock.current_staff_id=data.toString().replace(/^STAFFID:/,'').replace(/\n/g,'');
+      console.log("C St:->" + timeclock.current_staff_id + "<-",timeclock.current_staff_id.length);
+      //timeclock.userdata=usersystem.getPref('staff/' + timeclock.current_staff_id);
+      //console.log("Staffdata from file:",JSON.stringify(timeclock.userdata));
+      if (timeclock.current_staff_id.length > 35){
+        timeclock.loadtimetrack();
+      } else {
+        app.snackbar("Unknown Badge",'red');
+        timeclock.loadusers();
+      }
+      
+      
+    });
+
+    sh_nfcwaitbadge.stderr.on('data', (data) => {
+     console.error(`sh_nfcwaitbadge stderr: ${data}`);
+    });
+
+    sh_nfcwaitbadge.on('close', (code) => {
+      console.log(`sh_nfcwaitbadge: exit code ${code}`);
+    });
+  }
+}
+
diff --git a/pointeuse/install/bin/electron/resources/app/js/sqlite.js b/pointeuse/install/bin/electron/resources/app/js/sqlite.js
new file mode 100644 (file)
index 0000000..d4ab683
--- /dev/null
@@ -0,0 +1,93 @@
+const sqlite3 = require('sqlite3').verbose();
+
+let db = {
+  dbh: null,
+  connect: function(dbfile){
+    //console.log("connect to" + dbfile);
+    if (db.dbh != null){
+      db.disconnect();
+    }
+    db.dbh = new sqlite3.Database(dbfile);
+  },
+  query: function(sql){
+    if (preferences.debug==1){
+      console.log("query sql:",sql);
+    }
+    return new Promise((resolve, reject) => {
+      db.dbh.get(`${sql}`, (err, row) => {
+          if (err) {
+            reject(err); // optional: you might choose to swallow errors.
+          } else {
+            resolve(row); // accumulate the data
+          }
+      });
+    });
+  },
+  queryarray: function(sql){
+    if (preferences.debug==1){
+      console.log("queryarray sql:",sql);
+    }
+    return new Promise((resolve, reject) => {
+      let queries = [];
+      //console.log("Query array",sql);
+      db.dbh.each(`${sql}`, (err, row) => {
+          //console.log("XXOK");;
+          if (err) {
+              reject(err); // optional: you might choose to swallow errors.
+          } else {
+              queries.push(row); // accumulate the data
+          }
+      }, (err, n) => {
+        //console.log("XXNO",err,n);
+          if (err) {
+              reject(err); // optional: again, you might choose to swallow this error.
+          } else {
+              resolve(queries); // resolve the promise
+          }
+      });
+    });
+  },
+  querybykey: function(key,sql){
+    if (preferences.debug==1){
+      console.log("querybykey sql:",sql);
+    }
+    return new Promise((resolve, reject) => {
+      let ret = {}
+      db.dbh.each(`${sql}`, (err, row) => {
+          if (err) {
+              reject(err); // optional: you might choose to swallow errors.
+          } else {
+            ret[row[key]] = row;
+          }
+      }, (err, n) => {
+          if (err) {
+              reject(err); // optional: again, you might choose to swallow this error.
+          } else {
+              resolve(ret); // resolve the promise
+          }
+      });
+    });
+  },
+  exec: function(sql,callback){
+    if (preferences.debug==1){
+      console.log("exec sql:",sql);
+    }
+    return new Promise((resolve, reject) => {
+      
+      db.dbh.exec(sql, (err,n) => {
+        if (err) {
+          reject(err); // optional: you might choose to swallow errors.
+        } else {
+          resolve(n); // accumulate the data
+        }
+      });
+    });
+  },
+  newuuid: function(){
+    return db.query("SELECT lower(hex( randomblob(4)) || '-' || hex( randomblob(2)) || '-' || hex( randomblob(2)) || '-' || hex( randomblob(2))  ||  '-' || hex(randomblob(6))) as id;");
+  },
+  disconnect: function(){
+    db.dbh = null;
+  }
+}
+
diff --git a/pointeuse/install/bin/electron/resources/app/js/sync.js b/pointeuse/install/bin/electron/resources/app/js/sync.js
new file mode 100644 (file)
index 0000000..53d4015
--- /dev/null
@@ -0,0 +1,19 @@
+let syncdata ={
+  track: function(id){
+    console.log("Send track id " + id);
+    var child = spawn('bash', ['/home/pot/bin/sendtrack.sh',id], {
+      detached: true,
+      stdio: [ 'ignore', 'ignore', 'ignore' ]
+    });
+    child.unref();
+  },
+  sendnfcuid: function(staffid){
+    console.log("Send badge id_staff " + staffid);
+    var child = spawn('bash', ['/home/pot/bin/sendnfcuid.sh',staffid], {
+      detached: true,
+      stdio: [ 'ignore', 'ignore', 'ignore' ]
+    });
+    child.unref();
+  }
+}
+
diff --git a/pointeuse/install/bin/electron/resources/app/js/timecalc.js b/pointeuse/install/bin/electron/resources/app/js/timecalc.js
new file mode 100644 (file)
index 0000000..489f487
--- /dev/null
@@ -0,0 +1,129 @@
+let timecalc = {
+  MinutesToTime:function (minutes) {
+    //console.log("MtoT: " + minutes);
+    if ((minutes == null) || (minutes == "")){ return "00:00";};
+    let hours = parseInt(minutes/60);
+    let restminutes = minutes-(hours*60);
+    //console.log("H:" + hours + " M:" +restminutes);
+    //console.log("H:" + timecalc.lpad(hours,2,'0') + " M:" +timecalc.lpad(restminutes,2,'0'));
+    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));
+    //console.log(hours +"+" + minutes);
+    return hours+minutes;
+  },
+  lpad: function(str, length,padString) {
+    let xstr = str.toString();
+    //console.log("xstr" + xstr);
+    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.substring(0,5);
+    strin = strin.replace(/\D/g,'');
+    if (strin.length == 0){ return "";}
+    if (strin.length <= 2){
+      if (strin > "23") {return ""} else {
+        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){
+    
+    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 hours + ":" + timecalc.lpad(minutes,2,'0');
+    } 
+    if (strin == ""){ return "";}
+    strin = strin.replace(/\D/g,'');
+    return 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);
+    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;
+  },
+  // multiplyInterval(obj,factor){
+  //   let mval = timecalc.IntervalToMinutes(obj.value) * factor;
+  //   obj.value = timecalc.MinutesToInterval(mval);
+  //   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/pointeuse/install/bin/electron/resources/app/js/timeclock.fingerprint.js b/pointeuse/install/bin/electron/resources/app/js/timeclock.fingerprint.js
new file mode 100644 (file)
index 0000000..550902c
--- /dev/null
@@ -0,0 +1,333 @@
+
+let timeclock = {
+  current_index: null,
+  currentuser: null,
+  currentpanel: null,
+  currentwday: null,
+  //tbl: null,
+  lasttrack: null,
+  interval: null,
+  userdata: [],
+  currentuserlist: 1,
+  intervaltime: preferences.timeout,
+  writefinger: null,
+  loadscreensaver: function(){
+    console.log("Load screensaver");
+    timeclock.currentpanel = 'screensaver';
+    timeclock.currentuser= null;
+    fingerprint.unload();
+    timeclock.stopCheckIdle();
+    app.viewpanel('screensaver');
+    return false;
+  },
+  checkuserpin: function(){
+    timeclock.stopCheckIdle();
+    let pcode = document.getElementById("pincode").value;
+    if ((timeclock.current_index == 'admin') && (pcode == preferences.pincode)){
+      app.viewpanel("admin");
+    } else if (pcode == timeclock.userdata[timeclock.current_index].pin){
+      //console.log("goto fingerprint registration");
+      timeclock.loadfingerwriter();
+    } else {
+      document.getElementById("pincode").value = "";
+      timeclock.startCheckIdle();
+      app.snackbar(lang[timeclock.userdata[timeclock.current_index].lang].pinerrormsg,'red');
+    }
+    return false;
+  },
+  loadstatus: function(msg){
+    if (msg == null){
+      msg = '';
+    }
+    document.getElementById("statusmsg").innerHTML=msg;
+    //console.log("Load status");
+    //timeclock.currentpanel = 'status';
+    //timeclock.currentuser= null;
+    fingerprint.unload();
+    //timeclock.tbl.clearData();
+    app.viewpanel('status');
+    setTimeout('timeclock.loadusers()',3000);
+  },
+  loadusers: function(){
+    console.log("Load users");
+    timeclock.currentpanel = 'users';
+    timeclock.currentuser= null;
+    fingerprint.unload();
+    //timeclock.tbl.clearData();
+    timeclock.currentwday= moment().format('ddd').toLowerCase();
+    db.queryarray("select * from (select st.id,coalesce(st.prename,'') as prename,coalesce(st.surname,'') as surname, st.pin, count(fp.fingerhash) as fingercount,lang,"+timeclock.currentwday+"start,"+timeclock.currentwday+"end from staff st left join fingerprints fp on (st.id=fp.id_staff) where st.isenabled=true group by st.id order by st.surname,st.prename) where LENGTH(pin) > 3 or fingercount > 0 order by surname,prename;").then(data => {
+    let ulist = '<div class="row userlistdata" id="userlist1" style="height: 400px;">';
+    console.log(data);
+    timeclock.userdata = data;
+    if (timeclock.userdata.length > 24){
+      document.getElementById("mnubtn_usersprev").style.display = 'block';
+      document.getElementById("mnubtn_usersnext").style.display = 'block';
+    }
+    ulistnum = 1;
+    for (i=0; i < timeclock.userdata.length;i++){
+      //style="padding: 8px 12px!important;" 
+      //if (timeclock.userdata[i].fingercount == 0 && timeclock.userdata[i].pin != ""){
+        ulist += '<button class="button col m3 moduletoolbar border" onclick="timeclock.userselected(\''+ i+'\');return false;"><span class="large">'+timeclock.userdata[i].surname+'</span><br/>' + timeclock.userdata[i].prename +'</button>';
+        if (i == 23) {ulistnum++;ulist += '</div><div class="row userlistdata" id="userlist'+ ulistnum+'" style="display: none;height: 400px;">';}
+      // } else if (timeclock.userdata[i].fingercount > 0) {
+      //   ulist += '<button class="button col m3 moduletoolbar border" onclick="timeclock.loadfingerprint(\''+ i+'\');""><span class="large">'+timeclock.userdata[i].surname+'</span><br/>' + timeclock.userdata[i].prename +'</button>';
+      // }
+    }
+    ulist += '</div>';
+    document.getElementById('userlists').innerHTML=ulist;
+    });
+    app.viewpanel('users');
+    timeclock.startCheckIdle();
+    return false;
+  },
+  userselected: function(i){
+    console.log("user selected!");
+    var ctime= moment().format("HH:MM");
+    
+    let showstartend=false;
+    let regmsg = lang[timeclock.userdata[i].lang].msgattention+"<br>";
+    let haswdaystart = timeclock.userdata[i][timeclock.currentwday + "start"];
+    let haswdayend = timeclock.userdata[i][timeclock.currentwday + "end"];
+    console.log("start:" + haswdaystart + " - END: " + haswdayend + " - CTIME: " + ctime);
+    if (timeclock.userdata[i].lang) { app.setlanguage(timeclock.userdata[i].lang);}
+    else { app.setlanguage("fr");} 
+    if ((haswdaystart != null) && (ctime < haswdaystart)){
+      regmsg += lang[timeclock.userdata[i].lang].msgstarttime+"<br>";
+      showstartend=true;
+    }
+    if ((haswdayend != null) && (ctime > haswdayend)){
+      regmsg += lang[timeclock.userdata[i].lang].msgendtime;
+      showstartend=true;
+    } 
+    if (showstartend == true){
+      regmsg = regmsg.replace(/%%daystarttime%%/g,haswdaystart).replace(/%%dayendtime%%/g,hasdayend);
+      timeclock.loadstatus(regmsg);
+    }
+    else if (timeclock.userdata[i].fingercount == 0 && timeclock.userdata[i].pin != ""){
+      timeclock.loadpincode(i);
+    } else if (timeclock.userdata[i].fingercount > 0) {
+      timeclock.loadfingerprint(i);
+    }
+    return false;
+  },
+  prevusers: function(){
+    let ulx = document.getElementsByClassName("userlistdata");
+    console.log(ulx);
+    if (timeclock.currentuserlist == 1 ){ return false;}
+    for (u=0;u<ulx.length;u++){
+      console.log(u);
+      ulx[u].style.display = 'none';
+    }
+    timeclock.currentuserlist=timeclock.currentuserlist-1;
+    document.getElementById('userlist' +timeclock.currentuserlist).style.display = 'block';
+    return false;
+  },
+  nextusers: function(){
+    let ulx = document.getElementsByClassName("userlistdata");
+    console.log(ulx.length);
+    if (timeclock.currentuserlist == ulx.length ){ return false;}
+    for (u=0;u<ulx.length;u++){
+      console.log(u);
+      ulx[u].style.display = 'none';
+    }
+    timeclock.currentuserlist=timeclock.currentuserlist+1;
+    document.getElementById('userlist' +timeclock.currentuserlist).style.display = 'block';
+    return false;
+  },
+  loadadmin: function(){
+    timeclock.stopCheckIdle();
+    timeclock.loadpincode();
+  },
+  loadpincode: function(uindex){
+    document.getElementById("pincode").value="";
+    timeclock.current_index = uindex;
+    if (uindex != 'admin'){
+      timeclock.startCheckIdle();
+    }
+    app.viewpanel('pincode');
+    return false;
+  },
+  loadfingerwriter: function(){
+    timeclock.stopCheckIdle();
+    for (var d=1;d<=5;d++){
+      console.log("clean finger " + d);
+      document.getElementById("regfinger"+ d).classList.remove("orange");
+      document.getElementById("regfinger"+ d).classList.remove("green");   
+    }
+    console.log("get fingertypes"  + timeclock.userdata[timeclock.current_index].id);
+    app.viewpanel('writefinger');
+    timeclock.startCheckIdle();
+    return false;
+  },
+  loadfingerprint: function (uindex){
+    timeclock.stopCheckIdle();
+    timeclock.current_index= uindex;
+    var allgr = document.getElementsByClassName("username");
+    for (var i in allgr){
+      allgr[i].innerHTML = timeclock.userdata[uindex].prename + ' ' + timeclock.userdata[uindex].surname;
+    }
+      //console.log("set view readfinger!",timeclock.userdata[uindex].id);
+      for (var d=1;d<=5;d++){
+        document.getElementById("finger"+ d).style.display = 'none';   
+      }
+      //console.log("XXOK","select fingertype from fingerprints where id_staff='"+ timeclock.userdata[uindex].id +"';");
+
+      db.queryarray("select fingertype from fingerprints where id_staff='"+ timeclock.userdata[uindex].id +"';").then(data => {
+        console.log("fingertype got!",data);
+        for (var d in data){
+          document.getElementById("finger"+ data[d].fingertype).style.display = 'block';
+        }
+        
+        fingerprint.read();
+
+        app.viewpanel('readfinger');
+        timeclock.startCheckIdle();  
+      }).catch(e => {
+        console.log("fingerprints error!");
+      });
+      return false;
+  },
+  registerfinger: function(obj,finger){
+    timeclock.writefinger = finger;
+    var allfingers = document.getElementsByClassName("wfreg");
+    for(var i=0;i<allfingers.length;i++){
+      //console.log(i);
+      allfingers[i].classList.remove("green");
+    }
+    obj.classList.add("green");
+    timeclock.stopCheckIdle();
+    timeclock.startCheckIdle();
+  },
+  startregisterfinger: function(){
+    timeclock.stopCheckIdle();
+    timeclock.startCheckIdle();
+    document.getElementById("btnwritefinger").classList.add("green");
+    fingerprint.write();
+  },
+  loadtimetrack: function(){
+    fingerprint.unload();
+    timeclock.stopCheckIdle();
+    document.getElementById("btntrackin").disabled = true;
+    document.getElementById("btntrackout").disabled = true;
+    document.getElementById("btntrackinpause").disabled = true;
+    document.getElementById("btntrackoutpause").disabled = true;
+    db.query("select id,id_staff,daydate,strftime('%d/%m/%Y',daydate) as dspdaydate ,strftime('%Y-%m-%d %H:%M:00',stamp_in) as stamp_in,strftime('%Y-%m-%d %H:%M:00',stamp_out) as stamp_out,strftime('%H:%M',stamp_in) as dspstamp_in,strftime('%H:%M',stamp_out) as dspstamp_out from timetracks where stamp_in=(select max(stamp_in) from timetracks where id_staff='" + timeclock.userdata[timeclock.current_index].id + "') and id_staff='" + timeclock.userdata[timeclock.current_index].id + "';").then(trdata => {
+      timeclock.gettabledata();
+      if (trdata){
+        timeclock.lasttrack = trdata;
+      }
+      document.getElementById("lasttrack").innerHTML = "<u>Dernier Pointage</u>:&nbsp;<strong>" + ((trdata.dspdaydate)?trdata.dspdaydate:"") + "</strong> "+  ((trdata.dspstamp_in)?" Entrée:<strong>" + trdata.dspstamp_in:"N/A") + "</strong> Sortie: <strong>" +((trdata.dspstamp_out)?trdata.dspstamp_out:"N/A") + "</strong>";
+      let today = moment().format("YYYY-MM-DD");
+      let yesterday = moment().add(-1, 'days').format("YYYY-MM-DD");
+      let hournow = moment().format("HH:mm");
+      console.log("today:" + today + " => now: " + hournow);
+      if ((trdata == null) || (trdata.stamp_in != null && trdata.stamp_out != null)){
+        document.getElementById("btntrackin").disabled = false;
+        //document.getElementById("btntrackout").disabled = false;
+      } else if (trdata.stamp_in != null && trdata.stamp_out == null){
+        if (((trdata.daydate == yesterday) && (hournow < "06:00")) || (trdata.daydate == today)){
+          document.getElementById("btntrackout").disabled = false;
+        } else {
+          document.getElementById("btntrackin").disabled = false;
+        }
+      }
+      app.viewpanel('timetrack');
+      timeclock.startCheckIdle();
+    }).catch(e => {
+      console.log("SQL error: " + e);
+      document.getElementById("btntrackin").disabled = false;
+      //document.getElementById("btntrackout").disabled = false;
+      app.viewpanel('timetrack');
+      timeclock.startCheckIdle();
+    });
+     
+  },
+  setTrack:function (direction){
+    let sql = "";
+    db.newuuid().then(newid => {
+        var syncid=newid.id;
+        if (direction == 'in'){
+          sql = "INSERT INTO timetracks (id,id_staff,daydate, stamp_in) VALUES ('"+ newid.id+"','"+timeclock.userdata[timeclock.current_index].id+"',date('now','localtime'),datetime('now','localtime'));";
+        } else if (direction == 'out'){
+          syncid=timeclock.lasttrack.id;
+          sql = "UPDATE timetracks SET stamp_out=datetime('now','localtime') where id_staff='"+ timeclock.userdata[timeclock.current_index].id+"' and id='"+timeclock.lasttrack.id+"';";
+        }
+        
+        console.log("SET TrackSQL",sql);
+        db.exec(sql).then(data => {
+          var msgreg = lang["fr"].msgtrackregistered;
+          if (timeclock.userdata[timeclock.current_index].lang){
+            msgreg = lang[timeclock.userdata[timeclock.current_index].lang].msgtrackregistered;
+          }
+          //app.snackbar('le pointage a été enregistré!','green');
+          timeclock.loadstatus(msgreg);
+          syncdata.track(syncid);
+          
+          //timeclock.loadusers();
+        }).catch(e => {
+          app.snackbar(e + ' erreur 1 d\'enregistrement du pointage!','red');
+        });
+        
+    }).catch(e => {
+      app.snackbar('erreur  2 d\'enregistrement du pointage!','red');
+    });
+      
+    
+  
+},
+  checkIdle: function (){
+  //console.log("check idle");
+  if (timeclock.intervaltime <= 0){
+    //console.log("change view");
+    timeclock.loadscreensaver();
+    //req.reqdata("POST","fingerunload.cgi",{"fn":"unload"},noaction);
+  } else {
+    document.getElementById("timer").innerHTML = timeclock.intervaltime;
+    timeclock.intervaltime = timeclock.intervaltime - 1; 
+   
+    //console.log(intervaltime);
+  }
+},
+startCheckIdle: function (){
+   window.clearInterval(timeclock.interval);
+   timeclock.intervaltime = preferences.timeout;
+   document.getElementById("timer").style.display = 'block';
+   
+   timeclock.interval = window.setInterval("timeclock.checkIdle()",1000);
+  
+}, 
+stopCheckIdle: function (){
+  document.getElementById("timer").style.display = 'none';
+  window.clearInterval(timeclock.interval);
+},
+inittable: function (){
+//   timeclock.tbl = new Tabulator("#tbl_weektracks", {
+//   headerSort:false,
+//   height: "370px",
+//   layout:"fitColumns",
+//   locale:"fr",
+//   columns: [ 
+//   {title:"Date", field:"dspdaydate",align: "center"},
+//   {title:"Entrée",align: "right",field:"dspstamp_in"},
+//   {title:"Sortie",align: "right",field:"dspstamp_out"}
+// ]
+// });
+},
+setPinValue: function(key){
+  var cobj = document.getElementById("pincode");
+  var cpin = cobj.value;
+  cobj.value = cpin + key;
+  return false;
+},
+clearUserPin: function(){
+  document.getElementById("pincode").value = "";
+  return false;
+},
+gettabledata: function(){
+  // db.queryarray("select id,id_staff,strftime('%d/%m/%Y',daydate) as dspdaydate,strftime('%H:%M',stamp_in) as dspstamp_in,strftime('%H:%M',stamp_out) as dspstamp_out from timetracks where strftime('%W',daydate) = strftime('%W',date('now','localtime')) and id_staff='" + timeclock.userdata[timeclock.current_index].id +"' order by daydate,stamp_in,stamp_out;").then(tbldata => {
+  //   timeclock.tbl.setData(tbldata);
+  // });
+}
+
+}
diff --git a/pointeuse/install/bin/electron/resources/app/js/timeclock.nfc.js b/pointeuse/install/bin/electron/resources/app/js/timeclock.nfc.js
new file mode 100644 (file)
index 0000000..82903bb
--- /dev/null
@@ -0,0 +1,359 @@
+
+let timeclock = {
+  current_index: null,
+  current_staff_id: null,
+  currentpanel: null,
+  currentwday: null,
+  tbl: null,
+  lasttrack: null,
+  interval: null,
+  lang: preferences.lang,
+  userdata: [],
+  weekdays:['sun','mon','tue','wed','thu','fri','sat'],
+  currentuserlist: 1,
+  intervaltime: preferences.timeout,
+  loadscreensaver: function(){
+    timeclock.lang = "fr";
+    console.log("Load screensaver");
+    timeclock.currentpanel = 'screensaver';
+    timeclock.currentuser= null;
+    shell.nfcunload();
+    timeclock.stopCheckIdle();
+    app.viewpanel('screensaver');
+    return false;
+  },
+  loadstatus: function(msg){
+    if (msg == null){
+      msg = '';
+    }
+    document.getElementById("statusmsg").innerHTML=msg;
+    app.viewpanel('status');
+    setTimeout('timeclock.loadscreensaver()',3000);
+  },
+  loadusers: function(){
+    console.log("Load users");
+    timeclock.currentpanel = 'users';
+    timeclock.current_staff_id=null;
+    if (preferences.pinview == "1"){
+      document.getElementById("btn_haspincode").style.display = 'block';
+    } else {
+      document.getElementById("btn_haspincode").style.display = 'none';
+    }
+    shell.nfcwaitbadge();
+    app.viewpanel('users');
+    timeclock.startCheckIdle();
+    return false;
+  },
+  loaduserlist: function(){
+    timeclock.stopCheckIdle();
+    shell.nfcunload();
+    let ulist = "";
+    db.queryarray("select * from (select st.id,coalesce(st.prename,'') as prename,coalesce(st.surname,'') as surname, count(fp.id) as badgecount,st.pin, fp.id as nfcuid from staff st left join badges fp on (st.id=fp.id_staff) group by st.id order by st.surname,st.prename) where badgecount > 0 order by surname,prename;").then(data => {
+      console.log("userdata",data);
+      timeclock.userdata = data;
+      if (timeclock.userdata.length > 24){
+        document.getElementById("mnubtn_usersprev").style.display = 'block';
+        document.getElementById("mnubtn_usersnext").style.display = 'block';
+      }
+      ulistnum = 1;
+      for (i=0; i < timeclock.userdata.length;i++){
+        ulist += '<button class="button col m3 moduletoolbar border" onclick="timeclock.loadpincode(\''+ i+'\');return false;"><span class="large">'+timeclock.userdata[i].surname+'</span><br/>' + timeclock.userdata[i].prename +'</button>';
+        if (i == 23) {ulistnum++;ulist += '</div><div class="row userlistdata" id="userlist'+ ulistnum+'" style="display: none;height: 400px;">';}
+      }
+      ulist += '</div>';
+      document.getElementById('userlists').innerHTML=ulist;
+      app.viewpanel('userlist');
+    });
+    return false;
+  },
+  
+  prevusers: function(){
+    let ulx = document.getElementsByClassName("userlistdata");
+    console.log(ulx);
+    if (timeclock.currentuserlist == 1 ){ return false;}
+    for (u=0;u<ulx.length;u++){
+      console.log(u);
+      ulx[u].style.display = 'none';
+    }
+    timeclock.currentuserlist=timeclock.currentuserlist-1;
+    document.getElementById('userlist' +timeclock.currentuserlist).style.display = 'block';
+    return false;
+  },
+  nextusers: function(){
+    let ulx = document.getElementsByClassName("userlistdata");
+    console.log(ulx.length);
+    if (timeclock.currentuserlist == ulx.length ){ return false;}
+    for (u=0;u<ulx.length;u++){
+      console.log(u);
+      ulx[u].style.display = 'none';
+    }
+    timeclock.currentuserlist=timeclock.currentuserlist+1;
+    document.getElementById('userlist' +timeclock.currentuserlist).style.display = 'block';
+    return false;
+  },
+  loadadmin: function(){
+    timeclock.stopCheckIdle();
+    timeclock.loadpincode(null);
+  },
+  loadbadges: function(){
+    timeclock.stopCheckIdle();
+    shell.nfcunload();
+    app.viewpanel('badges');
+    
+    db.queryarray("select * from (select st.id,coalesce(st.prename,'') as prename,coalesce(st.surname,'') as surname,st.pin, count(fp.id) as badgecount, fp.id as nfcuid from staff st left join badges fp on (st.id=fp.id_staff) group by st.id order by st.surname,st.prename) where badgecount > 0 order by surname,prename;").then(data => {
+      
+      let ulist = document.getElementById("userlistbadge");
+      ulist.innerHTML ='';
+      for (i=0; i < data.length;i++){
+        var uadata = '<li class="display-container xlarge">'+
+        '<span>'+ data[i].surname + ' ' + data[i].prename +'<br/>('+data[i].nfcuid+')</span>';
+        console.log("has pin:",data[i].pin,preferences.pinview);
+        if ((preferences.pinview == "1") && (data[i].pin != null)){
+          console.log("set pin button!");
+          uadata += '<span onclick="timeclock.cleanpincode(\''+ data[i].id + '\');" class="button display-left2 xxlarge border red" style="font-weight: bold; width:120px;">&times;Pin</span>';
+        }
+        uadata += '<span onclick="timeclock.removebadge(\''+ data[i].id + '\');" class="button display-left xxlarge border red" style="font-weight: bold; width:120px;">&times;</span>'+
+        '<span onclick="timeclock.removebadge(\''+ data[i].id + '\');" class="button display-right xxlarge border red" style="font-weight: bold; width:120px;">&times;</span>'+
+        '</li>';
+        ulist.insertAdjacentHTML("beforeend",uadata);
+      }
+    });
+  },
+  cleanpincode: function(iduser){
+    db.exec("UPDATE staff set pin=null where id='"+iduser+"'").then(data => {
+      timeclock.loadbadges();
+    });
+  },
+  addbadge: function(){
+    document.getElementById("addbagescanimg").style.display ='block';
+    document.getElementById("addusertobadge").style.display ='none';
+    shell.nfcimportid();
+    app.viewpanel('addbadge');
+  },
+  setbadgetouser: function(nuid){
+    db.queryarray("select * from (select st.id,coalesce(st.prename,'') as prename,coalesce(st.surname,'') as surname, count(fp.id) as badgecount from staff st left join badges fp on (st.id=fp.id_staff) group by st.id order by st.surname,st.prename) where badgecount == 0 order by surname,prename;").then(data => {
+      document.getElementById("addbagescanimg").style.display ='none';
+      document.getElementById("addusertobadge").style.display ='block';
+      let ulist = document.getElementById("userlistnobadge");
+      ulist.innerHTML ='';
+    for (i=0; i < data.length;i++){
+        ulist.insertAdjacentHTML("beforeend",'<li class="display-container xxlarge">'+ data[i].surname + ' ' + data[i].prename +'<span onclick="timeclock.savebadge(\''+ nuid +'\',\''+ data[i].id + '\');" class="button display-left xxlarge border green" style="font-weight: bold;width:120px;">&check;</span><span onclick="timeclock.savebadge(\''+ nuid +'\',\''+ data[i].id + '\');" class="button display-right xxlarge border green" style="font-weight: bold;width:120px;">&check;</span></li>');  
+      }
+    });
+  },
+  savebadge: function(nuid,staffid){
+    let sql = "REPLACE INTO badges (id,id_staff,type) VALUES ('" +nuid+"','" +staffid+"','nfc');";
+    db.exec(sql).then(data => {
+      syncdata.sendnfcuid(staffid);
+      app.snackbar('Badge Added','green');
+      timeclock.loadbadges();
+    }).catch(e => {
+      app.snackbar('error on saving','red');
+      timeclock.loadbadges();}
+    );
+  },
+  removebadge: function(staffid){
+    let sql = "DELETE FROM badges where id_staff='" +staffid+"';";
+    db.exec(sql).then(data => {
+      syncdata.sendnfcuid(staffid);
+      app.snackbar('badge deleted!','green');
+      timeclock.loadbadges();
+    }).catch(e => {
+      app.snackbar('error on saving','red');
+      timeclock.loadbadges();}
+    );
+  },
+  loadpincode: function(uindex){
+      
+      timeclock.current_index = uindex;
+
+      console.log("Current Index",timeclock.current_index);
+      console.log("Current Userdata",timeclock.userdata[timeclock.current_index]);
+      timeclock.selectfield('pincode','pincode2');
+      document.getElementById("pincode").value="";
+      document.getElementById("pincode2").value="";
+      if (timeclock.current_index == null){
+        document.getElementById("lbl_username").innerHTML = "Administrator";
+        //load admin
+        document.getElementById("pincode2").style.display="none";
+      } else {
+        //load user
+        document.getElementById("lbl_username").innerHTML = timeclock.userdata[timeclock.current_index].surname + " " + timeclock.userdata[timeclock.current_index].prename;
+        if (timeclock.userdata[timeclock.current_index].pin == null){
+          document.getElementById("pincode2").style.display="inline";
+        }  else {
+          document.getElementById("pincode2").style.display="none";
+        }
+      }
+      
+      timeclock.startCheckIdle();
+      app.viewpanel('pincode');
+    return false;
+  },
+  checkuserpin: function(){
+    timeclock.stopCheckIdle();
+    let pcode = document.getElementById("pincode").value;
+    console.log(pcode +" = " + preferences.pincode );
+    console.log('CIndex',timeclock.current_index);
+    if (document.getElementById("pincode2").style.display == 'inline'){
+      if (document.getElementById("pincode2").value != document.getElementById("pincode").value){
+        document.getElementById("pincode").value = "";
+        document.getElementById("pincode2").value = "";
+        timeclock.startCheckIdle();
+        app.snackbar(lang['fr'].pincode_notsame,'red');
+        return false;
+      } else {
+        db.exec("UPDATE staff SET pin='"+document.getElementById("pincode").value+ "' where id='"+timeclock.userdata[timeclock.current_index].id+"';").then(data => {
+          timeclock.current_staff_id = timeclock.userdata[timeclock.current_index].id;
+          timeclock.loadtimetrack();
+        }).catch(e => { app.snackbar("Erreur de sauvegarde!",'red');});
+        
+      }
+    }
+    else if ((timeclock.current_index == null) &&  (pcode == preferences.pincode)){
+      //console.log("goto badge registration");
+      app.viewpanel("admin");
+    } else if ((timeclock.current_index != null) && (timeclock.userdata[timeclock.current_index].pin = document.getElementById("pincode").value)){
+      timeclock.current_staff_id = timeclock.userdata[timeclock.current_index].id;
+      timeclock.loadtimetrack();
+    }
+    else {
+      document.getElementById("pincode").value = "";
+      timeclock.startCheckIdle();
+      app.snackbar(lang['fr'].pinerrormsg,'red');
+    }
+    return false;
+  },
+  selectfield: function(fid,fid2){
+    timeclock.pinfield = fid;
+    document.getElementById(fid).style.backgroundColor = 'yellow';
+    document.getElementById(fid2).style.backgroundColor = 'white';
+  },
+  loadtimetrack: function(){
+    timeclock.stopCheckIdle();
+    document.getElementById("btntrackin").disabled = true;
+    document.getElementById("btntrackout").disabled = true;
+    var sql = "select tt.id,st.id as id_staff,st.lang,st.isenabled,date('now','localtime') as today,strftime('%w',date('now','localtime')) as weekday,date('now','-1 day','localtime') as yesterday,strftime('%H:%M',time('now','localtime')) as timenow,st.prename,st.surname,st.monstart,st.monend,st.tuestart,st.tueend,st.wedstart,st.wedend,st.thustart,st.thuend,st.fristart,st.friend,st.satstart,st.satend,st.sunstart,st.sunend,tt.daydate,tt.stamp_in,tt.stamp_out from staff st left join timetracks tt on (st.id=tt.id_staff) where st.id='" + timeclock.current_staff_id + "' or tt.stamp_in=(select max(stamp_in) as stamp_in from timetracks where id_staff='" + timeclock.current_staff_id + "') order by tt.stamp_in DESC LIMIT 1;";
+    db.query(sql).then(trdata => {
+      console.log("userdata",trdata);
+      
+      let ulang = timeclock.lang;
+      if (trdata.lang != null){
+        ulang = trdata.lang;
+        timeclock.lang=trdata.lang;
+      }
+      if (trdata.isenabled != '1'){
+        app.snackbar(lang[ulang].badge_notauthorized,'red');
+        timeclock.startCheckIdle();
+        return false;
+      } else {
+        app.setlanguage(ulang);
+      }
+      let today = trdata.today;
+      let yesterday = trdata.yesterday;
+      let hournow = trdata.timenow;
+      let weekday = timeclock.weekdays[trdata.weekday];
+      let regmsg = "";
+      if (trdata){
+         timeclock.lasttrack = trdata;
+        
+      }
+      let notimeauth = false;
+      if ((trdata[weekday + "start"] != null) || (trdata[weekday + "end"] != null)){
+      
+        if ((trdata[weekday + "start"] > hournow) || (trdata[weekday + "end"] < hournow)){ 
+          notimeauth =true;
+        }
+        if (trdata[weekday + "start"] != null){
+          regmsg += lang[ulang].msgstarttime+"<br>";
+        }
+        if (trdata[weekday + "end"] != null)   {
+          regmsg += lang[ulang].msgendtime+"<br>";
+        }
+      }
+      if (notimeauth == true){
+        regmsg = regmsg.replace(/%%daystarttime%%/g,trdata[weekday + "start"]).replace(/%%dayendtime%%/g,trdata[weekday + "end"]);
+        timeclock.loadstatus(regmsg);
+        return false;
+      }
+      document.getElementById("username").innerHTML = trdata.surname+" " + trdata.prename;
+      if (trdata.stamp_in != null && trdata.stamp_out == null){
+        if (((trdata.daydate == yesterday) && (hournow < "06:00:00")) || (trdata.daydate == today)){
+          document.getElementById("btntrackout").disabled = false;
+        } else {
+          document.getElementById("btntrackin").disabled = false;
+        }
+      } else {
+        document.getElementById("btntrackin").disabled = false;
+      }
+      app.viewpanel('timetrack');
+      timeclock.startCheckIdle();
+    }).catch(e => {
+      console.log("SQL error: " + e);
+      document.getElementById("btntrackin").disabled = false;
+      timeclock.startCheckIdle();
+      return false;
+    });
+     
+  },
+  setTrack:function (direction){
+    let sql = "";
+    db.newuuid().then(newid => {
+        var syncid=newid.id;
+        if (direction == 'in'){
+          sql = "INSERT INTO timetracks (id,id_staff,daydate, stamp_in) VALUES ('"+ newid.id+"','"+timeclock.current_staff_id+"',date('now','localtime'),datetime('now','localtime'));";
+        } else if (direction == 'out'){
+          syncid=timeclock.lasttrack.id;
+          sql = "UPDATE timetracks SET stamp_out=datetime('now','localtime') where id_staff='"+ timeclock.current_staff_id+"' and id='"+timeclock.lasttrack.id+"';";
+        }
+        
+        //console.log("SET TrackSQL",sql);
+        db.exec(sql).then(data => {
+          console.log("LANG:" + timeclock.lang);
+          var msgreg = lang[timeclock.lang].msgtrackregistered;
+          timeclock.loadstatus(msgreg);
+          syncdata.track(syncid);
+        }).catch(e => {
+          app.snackbar('ERROR on saving (1)!','red');
+        });
+        
+    }).catch(e => {
+      app.snackbar('ERROR on saving (2)!','red');
+    });
+      
+    
+  
+},
+  checkIdle: function (){
+  if (timeclock.intervaltime <= 0){
+    timeclock.loadscreensaver();
+  } else {
+    document.getElementById("timer").innerHTML = timeclock.intervaltime;
+    timeclock.intervaltime = timeclock.intervaltime - 1; 
+  }
+},
+startCheckIdle: function (){
+   window.clearInterval(timeclock.interval);
+   timeclock.intervaltime = preferences.timeout;
+   document.getElementById("timer").style.display = 'block';
+   
+   timeclock.interval = window.setInterval("timeclock.checkIdle()",1000);
+  
+}, 
+stopCheckIdle: function (){
+  document.getElementById("timer").style.display = 'none';
+  window.clearInterval(timeclock.interval);
+},
+setPinValue: function(key){
+  var cobj = document.getElementById(timeclock.pinfield);
+  var cpin = cobj.value;
+  cobj.value = cpin + key;
+  return false;
+},
+clearUserPin: function(){
+  document.getElementById(timeclock.pinfield).value = "";
+  return false;
+}
+
+
+}
diff --git a/pointeuse/install/bin/electron/resources/app/main.js b/pointeuse/install/bin/electron/resources/app/main.js
new file mode 100644 (file)
index 0000000..5707b36
--- /dev/null
@@ -0,0 +1,65 @@
+const {app, BrowserWindow} = require('electron')
+const os = require('os')
+const fs = require('fs')
+
+app.disableHardwareAcceleration()
+
+let mainWindow
+let cdate = new Date();
+console.log(cdate.toString() + ": Start App")
+function createWindow () {
+  let appcfg = localcfg();
+  if (appcfg == null){
+    console.log("No Config found!")
+    app.quit()
+  }
+  mainWindow = new BrowserWindow({
+    show: true, 
+    width: 800, 
+    height: 470 ,
+    frame: false,
+    webPreferences: {
+      nodeIntegration: true,
+      worldSafeExecuteJavaScript: true,
+      defaultEncoding: 'UTF-8',
+      enableRemoteModule: true,
+    }
+  })
+  mainWindow.setMenu(null)
+  mainWindow.setBackgroundColor('#000');
+  if (os.platform() != "win32"){
+    mainWindow.maximize()
+    mainWindow.setFullScreen(true)
+  }
+
+       console.log("Path:" + __dirname);
+  mainWindow.loadFile("index."+ appcfg.type +".html")
+  mainWindow.show()
+  mainWindow.on('closed', () => {
+    mainWindow = null
+  })
+}
+
+function localcfg(){
+  var data = null;
+  cfgfile = os.homedir() + '/.hourtrax/hourtrax.json';
+  if (fs.existsSync(cfgfile)){
+    var data = fs.readFileSync(cfgfile, 'utf-8');
+    if (data.startsWith("{") || data.startsWith("[")){
+        data = JSON.parse(data);
+    }
+    return data;
+  } 
+  return data;
+}
+
+app.on('ready', createWindow)
+app.on('window-all-closed', () => {
+  app.quit()
+})
+
+app.on('activate', () => {
+  if (mainWindow === null) {
+    createWindow()
+  }
+})
diff --git a/pointeuse/install/bin/electron/resources/app/package-lock.json b/pointeuse/install/bin/electron/resources/app/package-lock.json
new file mode 100644 (file)
index 0000000..99e17af
--- /dev/null
@@ -0,0 +1,938 @@
+{
+  "name": "Hourtrax",
+  "version": "1.0.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+    },
+    "ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+      "optional": true,
+      "requires": {
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      }
+    },
+    "ansi-regex": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+    },
+    "aproba": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+    },
+    "are-we-there-yet": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+      "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+      "requires": {
+        "delegates": "^1.0.0",
+        "readable-stream": "^2.0.6"
+      }
+    },
+    "asn1": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+      "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+      "optional": true,
+      "requires": {
+        "safer-buffer": "~2.1.0"
+      }
+    },
+    "assert-plus": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+      "optional": true
+    },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+      "optional": true
+    },
+    "aws-sign2": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+      "optional": true
+    },
+    "aws4": {
+      "version": "1.10.1",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz",
+      "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==",
+      "optional": true
+    },
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+    },
+    "bcrypt-pbkdf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+      "optional": true,
+      "requires": {
+        "tweetnacl": "^0.14.3"
+      }
+    },
+    "block-stream": {
+      "version": "0.0.9",
+      "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+      "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+      "optional": true,
+      "requires": {
+        "inherits": "~2.0.0"
+      }
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "caseless": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+      "optional": true
+    },
+    "chownr": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+      "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
+    },
+    "code-point-at": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+    },
+    "combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "optional": true,
+      "requires": {
+        "delayed-stream": "~1.0.0"
+      }
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+    },
+    "console-control-strings": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+      "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
+    },
+    "core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+    },
+    "dashdash": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+      "optional": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "debug": {
+      "version": "3.2.6",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+      "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+      "requires": {
+        "ms": "^2.1.1"
+      }
+    },
+    "deep-extend": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+      "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
+    },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+      "optional": true
+    },
+    "delegates": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+    },
+    "detect-libc": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+      "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
+    },
+    "ecc-jsbn": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+      "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+      "optional": true,
+      "requires": {
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.1.0"
+      }
+    },
+    "extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+      "optional": true
+    },
+    "extsprintf": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+      "optional": true
+    },
+    "fast-deep-equal": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+      "optional": true
+    },
+    "fast-json-stable-stringify": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+      "optional": true
+    },
+    "forever-agent": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+      "optional": true
+    },
+    "form-data": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+      "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+      "optional": true,
+      "requires": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.6",
+        "mime-types": "^2.1.12"
+      }
+    },
+    "fs-minipass": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
+      "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
+      "requires": {
+        "minipass": "^2.6.0"
+      }
+    },
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+    },
+    "fstream": {
+      "version": "1.0.12",
+      "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
+      "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
+      "optional": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "inherits": "~2.0.0",
+        "mkdirp": ">=0.5 0",
+        "rimraf": "2"
+      }
+    },
+    "gauge": {
+      "version": "2.7.4",
+      "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+      "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+      "requires": {
+        "aproba": "^1.0.3",
+        "console-control-strings": "^1.0.0",
+        "has-unicode": "^2.0.0",
+        "object-assign": "^4.1.0",
+        "signal-exit": "^3.0.0",
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wide-align": "^1.1.0"
+      }
+    },
+    "getpass": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+      "optional": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "glob": {
+      "version": "7.1.6",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+      "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+      "requires": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      }
+    },
+    "graceful-fs": {
+      "version": "4.2.4",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
+      "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
+      "optional": true
+    },
+    "har-schema": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+      "optional": true
+    },
+    "har-validator": {
+      "version": "5.1.5",
+      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+      "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+      "optional": true,
+      "requires": {
+        "ajv": "^6.12.3",
+        "har-schema": "^2.0.0"
+      }
+    },
+    "has-unicode": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+      "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
+    },
+    "http-signature": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+      "optional": true,
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
+      }
+    },
+    "iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "requires": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      }
+    },
+    "ignore-walk": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz",
+      "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==",
+      "requires": {
+        "minimatch": "^3.0.4"
+      }
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "requires": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "ini": {
+      "version": "1.3.8",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+      "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+    },
+    "is-fullwidth-code-point": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+      "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+      "requires": {
+        "number-is-nan": "^1.0.0"
+      }
+    },
+    "is-typedarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+      "optional": true
+    },
+    "isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "optional": true
+    },
+    "isstream": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+      "optional": true
+    },
+    "jsbn": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+      "optional": true
+    },
+    "json-schema": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+      "optional": true
+    },
+    "json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+      "optional": true
+    },
+    "json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+      "optional": true
+    },
+    "jsprim": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+      "optional": true,
+      "requires": {
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.2.3",
+        "verror": "1.10.0"
+      }
+    },
+    "mime-db": {
+      "version": "1.44.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+      "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
+      "optional": true
+    },
+    "mime-types": {
+      "version": "2.1.27",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+      "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+      "optional": true,
+      "requires": {
+        "mime-db": "1.44.0"
+      }
+    },
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+      "requires": {
+        "brace-expansion": "^1.1.7"
+      }
+    },
+    "minimist": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+    },
+    "minipass": {
+      "version": "2.9.0",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
+      "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
+      "requires": {
+        "safe-buffer": "^5.1.2",
+        "yallist": "^3.0.0"
+      }
+    },
+    "minizlib": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
+      "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
+      "requires": {
+        "minipass": "^2.9.0"
+      }
+    },
+    "mkdirp": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+      "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+      "requires": {
+        "minimist": "^1.2.5"
+      }
+    },
+    "ms": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+    },
+    "needle": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.2.tgz",
+      "integrity": "sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ==",
+      "requires": {
+        "debug": "^3.2.6",
+        "iconv-lite": "^0.4.4",
+        "sax": "^1.2.4"
+      }
+    },
+    "node-addon-api": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz",
+      "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA=="
+    },
+    "node-gyp": {
+      "version": "3.8.0",
+      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
+      "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
+      "optional": true,
+      "requires": {
+        "fstream": "^1.0.0",
+        "glob": "^7.0.3",
+        "graceful-fs": "^4.1.2",
+        "mkdirp": "^0.5.0",
+        "nopt": "2 || 3",
+        "npmlog": "0 || 1 || 2 || 3 || 4",
+        "osenv": "0",
+        "request": "^2.87.0",
+        "rimraf": "2",
+        "semver": "~5.3.0",
+        "tar": "^2.0.0",
+        "which": "1"
+      }
+    },
+    "node-pre-gyp": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz",
+      "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==",
+      "requires": {
+        "detect-libc": "^1.0.2",
+        "mkdirp": "^0.5.1",
+        "needle": "^2.2.1",
+        "nopt": "^4.0.1",
+        "npm-packlist": "^1.1.6",
+        "npmlog": "^4.0.2",
+        "rc": "^1.2.7",
+        "rimraf": "^2.6.1",
+        "semver": "^5.3.0",
+        "tar": "^4"
+      },
+      "dependencies": {
+        "nopt": {
+          "version": "4.0.3",
+          "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz",
+          "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==",
+          "requires": {
+            "abbrev": "1",
+            "osenv": "^0.1.4"
+          }
+        },
+        "tar": {
+          "version": "4.4.13",
+          "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz",
+          "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==",
+          "requires": {
+            "chownr": "^1.1.1",
+            "fs-minipass": "^1.2.5",
+            "minipass": "^2.8.6",
+            "minizlib": "^1.2.1",
+            "mkdirp": "^0.5.0",
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.3"
+          }
+        }
+      }
+    },
+    "nopt": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+      "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+      "optional": true,
+      "requires": {
+        "abbrev": "1"
+      }
+    },
+    "npm-bundled": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz",
+      "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==",
+      "requires": {
+        "npm-normalize-package-bin": "^1.0.1"
+      }
+    },
+    "npm-normalize-package-bin": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
+      "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA=="
+    },
+    "npm-packlist": {
+      "version": "1.4.8",
+      "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz",
+      "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==",
+      "requires": {
+        "ignore-walk": "^3.0.1",
+        "npm-bundled": "^1.0.1",
+        "npm-normalize-package-bin": "^1.0.1"
+      }
+    },
+    "npmlog": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+      "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+      "requires": {
+        "are-we-there-yet": "~1.1.2",
+        "console-control-strings": "~1.1.0",
+        "gauge": "~2.7.3",
+        "set-blocking": "~2.0.0"
+      }
+    },
+    "number-is-nan": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+    },
+    "oauth-sign": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+      "optional": true
+    },
+    "object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "os-homedir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+    },
+    "os-tmpdir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+    },
+    "osenv": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+      "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+      "requires": {
+        "os-homedir": "^1.0.0",
+        "os-tmpdir": "^1.0.0"
+      }
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+    },
+    "performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+      "optional": true
+    },
+    "process-nextick-args": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+    },
+    "psl": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+      "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+      "optional": true
+    },
+    "punycode": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+      "optional": true
+    },
+    "qs": {
+      "version": "6.5.2",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+      "optional": true
+    },
+    "rc": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+      "requires": {
+        "deep-extend": "^0.6.0",
+        "ini": "~1.3.0",
+        "minimist": "^1.2.0",
+        "strip-json-comments": "~2.0.1"
+      }
+    },
+    "readable-stream": {
+      "version": "2.3.7",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+      "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+      "requires": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "request": {
+      "version": "2.88.2",
+      "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+      "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+      "optional": true,
+      "requires": {
+        "aws-sign2": "~0.7.0",
+        "aws4": "^1.8.0",
+        "caseless": "~0.12.0",
+        "combined-stream": "~1.0.6",
+        "extend": "~3.0.2",
+        "forever-agent": "~0.6.1",
+        "form-data": "~2.3.2",
+        "har-validator": "~5.1.3",
+        "http-signature": "~1.2.0",
+        "is-typedarray": "~1.0.0",
+        "isstream": "~0.1.2",
+        "json-stringify-safe": "~5.0.1",
+        "mime-types": "~2.1.19",
+        "oauth-sign": "~0.9.0",
+        "performance-now": "^2.1.0",
+        "qs": "~6.5.2",
+        "safe-buffer": "^5.1.2",
+        "tough-cookie": "~2.5.0",
+        "tunnel-agent": "^0.6.0",
+        "uuid": "^3.3.2"
+      }
+    },
+    "rimraf": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+      "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+      "requires": {
+        "glob": "^7.1.3"
+      }
+    },
+    "safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+    },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+    },
+    "sax": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+    },
+    "semver": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+      "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8="
+    },
+    "set-blocking": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+    },
+    "signal-exit": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+      "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
+    },
+    "sqlite3": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.0.tgz",
+      "integrity": "sha512-rjvqHFUaSGnzxDy2AHCwhHy6Zp6MNJzCPGYju4kD8yi6bze4d1/zMTg6C7JI49b7/EM7jKMTvyfN/4ylBKdwfw==",
+      "requires": {
+        "node-addon-api": "2.0.0",
+        "node-gyp": "3.x",
+        "node-pre-gyp": "^0.11.0"
+      }
+    },
+    "sshpk": {
+      "version": "1.16.1",
+      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+      "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+      "optional": true,
+      "requires": {
+        "asn1": "~0.2.3",
+        "assert-plus": "^1.0.0",
+        "bcrypt-pbkdf": "^1.0.0",
+        "dashdash": "^1.12.0",
+        "ecc-jsbn": "~0.1.1",
+        "getpass": "^0.1.1",
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.0.2",
+        "tweetnacl": "~0.14.0"
+      }
+    },
+    "string-width": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+      "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+      "requires": {
+        "code-point-at": "^1.0.0",
+        "is-fullwidth-code-point": "^1.0.0",
+        "strip-ansi": "^3.0.0"
+      }
+    },
+    "string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "requires": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "strip-ansi": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+      "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "strip-json-comments": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+      "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
+    },
+    "tar": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
+      "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
+      "optional": true,
+      "requires": {
+        "block-stream": "*",
+        "fstream": "^1.0.12",
+        "inherits": "2"
+      }
+    },
+    "tough-cookie": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+      "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+      "optional": true,
+      "requires": {
+        "psl": "^1.1.28",
+        "punycode": "^2.1.1"
+      }
+    },
+    "tunnel-agent": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+      "optional": true,
+      "requires": {
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "tweetnacl": {
+      "version": "0.14.5",
+      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+      "optional": true
+    },
+    "uri-js": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
+      "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
+      "optional": true,
+      "requires": {
+        "punycode": "^2.1.0"
+      }
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+    },
+    "uuid": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+      "optional": true
+    },
+    "verror": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+      "optional": true,
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "^1.2.0"
+      }
+    },
+    "which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "optional": true,
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
+    "wide-align": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+      "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+      "requires": {
+        "string-width": "^1.0.2 || 2"
+      }
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+    },
+    "yallist": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+    }
+  }
+}
diff --git a/pointeuse/install/bin/electron/resources/app/package.json b/pointeuse/install/bin/electron/resources/app/package.json
new file mode 100644 (file)
index 0000000..3d27b5f
--- /dev/null
@@ -0,0 +1,10 @@
+{
+  "name": "Hourtrax",
+  "version": "1.0.0",
+  "main": "main.js",
+  "author": "POT s.à r.l.",
+  "license": "UNLICENSED",
+  "dependencies": {
+    "sqlite3": "^5.0.0"
+  }
+}
diff --git a/pointeuse/install/bin/electron/resources/app/vendor/moment/locales.js b/pointeuse/install/bin/electron/resources/app/vendor/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/pointeuse/install/bin/electron/resources/app/vendor/moment/locales.min.js b/pointeuse/install/bin/electron/resources/app/vendor/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/pointeuse/install/bin/electron/resources/app/vendor/moment/locales.min.js.map b/pointeuse/install/bin/electron/resources/app/vendor/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":"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"}
\ No newline at end of file
diff --git a/pointeuse/install/bin/electron/resources/app/vendor/moment/moment-with-locales.js b/pointeuse/install/bin/electron/resources/app/vendor/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/pointeuse/install/bin/electron/resources/app/vendor/moment/moment-with-locales.min.js b/pointeuse/install/bin/electron/resources/app/vendor/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/pointeuse/install/bin/electron/resources/app/vendor/moment/moment-with-locales.min.js.map b/pointeuse/install/bin/electron/resources/app/vendor/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/pointeuse/install/bin/electron/resources/app/vendor/moment/moment.js b/pointeuse/install/bin/electron/resources/app/vendor/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/pointeuse/install/bin/electron/resources/app/vendor/moment/moment.min.js b/pointeuse/install/bin/electron/resources/app/vendor/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/pointeuse/install/bin/electron/resources/app/vendor/moment/moment.min.js.map b/pointeuse/install/bin/electron/resources/app/vendor/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":"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"}
\ No newline at end of file
diff --git a/pointeuse/install/bin/exportToJSON.sh b/pointeuse/install/bin/exportToJSON.sh
new file mode 100644 (file)
index 0000000..211926d
--- /dev/null
@@ -0,0 +1,74 @@
+#!/bin/bash
+CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+function calc
+{
+    awk "BEGIN {print $* }";
+}
+#staff
+OUTPATH="${HOME}/.hourtrax/staff"
+if [[ ! -d "${OUTPATH}" ]]
+then
+  mkdir "${OUTPATH}"
+fi
+
+OUTFILE="${OUTPATH}.json"
+/usr/local/bin/sqlite3  -json "${HOME}/.hourtrax/hourtrax.sqlite" "select st.id,st.staffnumber,st.prename,st.surname,st.isenabled,st.lang, st.timetrackers,st.monstart, st.monend, st.tuestart, st.tueend, st.wedstart, st.wedend , st.thustart, st.thuend, st.fristart, st.friend, st.satstart, st.satend, st.sunstart, st.sunend,bg.id as nfcuid from staff st left join badges bg on (st.id=bg.id_staff);" > ${OUTFILE}
+JLEN=`jq length ${OUTFILE}`
+JLEN=`calc ${JLEN} - 1`
+for i in $(seq 0 ${JLEN})
+do
+ echo $i 
+ CID=`jq ".[$i].id" ${OUTFILE} | sed 's/"//g;'`
+ echo "$i => ${CID}"
+ jq ".[$i]" ${OUTFILE} >  ${OUTPATH}"/"${CID}".json"
+
+ cat ${OUTPATH}"/"${CID}".json"
+done
+
+#timetracks
+OUTPATH="${HOME}/.hourtrax/timetracks"
+if [[ ! -d "${OUTPATH}" ]]
+then
+  mkdir "${OUTPATH}"
+fi
+rm -rf "${HOME}/.hourtrax/timetracks/*"
+OUTFILE="${OUTPATH}.json"
+/usr/local/bin/sqlite3  -json "${HOME}/.hourtrax/hourtrax.sqlite" "select id,id_staff,daydate,stamp_in,stamp_out,tracktype from timetracks;" > ${OUTFILE}
+JLEN=`jq length ${OUTFILE}`
+JLEN=`calc ${JLEN} - 1`
+for i in $(seq 0 ${JLEN})
+do
+ echo $i 
+ CIDSTAFF=`jq ".[$i].id_staff" ${OUTFILE} | sed 's/"//g;'`
+ STPIN=`jq ".[$i].stamp_in" ${OUTFILE} | sed 's/"//g;'`
+ CTS=`date +"%Y%m%d%H%M%S%3N" --date="${STPIN}"`
+ echo "$i => ${CIDSTAFF} ${CTS}"
+ if [[ ! -d ${OUTPATH}"/"${CIDSTAFF} ]]
+ then
+  mkdir ${OUTPATH}"/"${CIDSTAFF}
+ fi
+ jq ".[$i]" ${OUTFILE} >  ${OUTPATH}"/"${CIDSTAFF}"/"${CIDSTAFF}"_"${CTS}".json"
+ cat ${OUTPATH}"/"${CIDSTAFF}"/"${CIDSTAFF}"_"${CTS}".json"
+done
+
+#NOUSE!!!!badges
+OUTPATH="${HOME}/.hourtrax/badges"
+if [[ ! -d "${OUTPATH}" ]]
+then
+  mkdir "${OUTPATH}"
+fi
+
+# OUTFILE="${OUTPATH}.json"
+# /usr/local/bin/sqlite3  -json "${HOME}/.hourtrax/hourtrax.sqlite" "select id,type,id_staff from badges;" > ${OUTFILE}
+# JLEN=`jq length ${OUTFILE}`
+# JLEN=`calc ${JLEN} - 1`
+# for i in $(seq 0 ${JLEN})
+# do
+#  echo $i 
+#  CID=`jq ".[$i].id" ${OUTFILE} | sed 's/"//g;'`
+#  echo "$i => ${CID}"
+#  jq ".[$i]" ${OUTFILE} >  ${OUTPATH}"/"${CID}".json"
+
+#  cat ${OUTPATH}"/"${CID}".json"
+# done
diff --git a/pointeuse/install/bin/fp.py b/pointeuse/install/bin/fp.py
new file mode 100644 (file)
index 0000000..2bc90ff
--- /dev/null
@@ -0,0 +1,326 @@
+#!/usr/bin/env python
+# -*- coding:utf-8 -*-
+
+import serial
+import time
+import sys
+import RPi.GPIO as GPIO
+
+MYCMD=sys.argv[1]
+MYTIMEOUT=int(sys.argv[2])
+MYLEVEL=5
+MYLOW=-1
+MYHIGH=-1
+MYPERM=1
+#if len(sys.argv) == 4:
+#    MYLEVEL=int(sys.argv[3])
+if MYCMD == "deleteuser" or MYCMD == "replaceuser":
+    MYHIGH=int(sys.argv[3])
+    MYLOW=int(sys.argv[4])
+elif MYCMD == "write":
+    if len(sys.argv) == 4:
+        MYPERM=int(sys.argv[3])
+# elif len(sys.argv) == 4:
+#     MYLEVEL=int(sys.argv[3])
+
+TRUE         =  1
+FALSE        =  0
+
+# Basic response message definition
+ACK_SUCCESS           = 0x00
+ACK_FAIL              = 0x01
+ACK_FULL              = 0x04
+ACK_NO_USER           = 0x05
+ACK_TIMEOUT           = 0x08
+ACK_GO_OUT            = 0x0F     # The center of the fingersys.stdout.write is out of alignment with sensor
+
+# User information definition
+ACK_ALL_USER          = 0x00
+ACK_GUEST_USER        = 0x01
+ACK_NORMAL_USER       = 0x02
+ACK_MASTER_USER       = 0x03
+
+USER_MAX_CNT          = 1000        # Maximum fingersys.stdout.write number
+
+# Command definition
+CMD_HEAD              = 0xF5
+CMD_TAIL              = 0xF5
+CMD_ADD_1             = 0x01
+CMD_ADD_2             = 0x02
+CMD_ADD_3             = 0x03
+CMD_MATCH             = 0x0C
+CMD_DEL               = 0x04
+CMD_DEL_ALL           = 0x05
+CMD_USER_CNT          = 0x09
+CMD_COM_LEV           = 0x28
+CMD_LP_MODE           = 0x2C
+CMD_TIMEOUT           = 0x2E
+CMD_ALLUSERS          = 0x2B
+
+CMD_FINGER_DETECTED   = 0x14
+
+
+
+Finger_WAKE_Pin   = 23
+Finger_RST_Pin    = 24
+
+GPIO.setmode(GPIO.BCM)
+GPIO.setwarnings(False)
+GPIO.setup(Finger_WAKE_Pin, GPIO.IN)
+GPIO.setup(Finger_RST_Pin, GPIO.OUT)
+GPIO.setup(Finger_RST_Pin, GPIO.OUT, initial=GPIO.HIGH)
+
+g_rx_buf            = []
+PC_Command_RxBuf    = []
+Finger_SleepFlag    = 1
+
+ser = serial.Serial("/dev/ttyS0", 19200)
+
+
+def  TxAndRxCmd(command_buf, rx_bytes_need, timeout):
+    global g_rx_buf
+    CheckSum = 0
+    tx_buf = []
+    tx = ""
+
+    tx_buf.append(CMD_HEAD)
+    for byte in command_buf:
+        tx_buf.append(byte)
+        CheckSum ^= byte
+
+    tx_buf.append(CheckSum)
+    tx_buf.append(CMD_TAIL)
+
+    for i in tx_buf:
+        tx += chr(i)
+
+    ser.flushInput()
+    ser.write(tx)
+
+    g_rx_buf = []
+    time_before = time.time()
+    time_after = time.time()
+    while time_after - time_before < timeout and len(g_rx_buf) < rx_bytes_need:  # Waiting for response
+        bytes_can_recv = ser.inWaiting()
+        if bytes_can_recv != 0:
+            g_rx_buf += ser.read(bytes_can_recv)
+        time_after = time.time()
+
+    for i in range(len(g_rx_buf)):
+        g_rx_buf[i] = ord(g_rx_buf[i])
+
+    if len(g_rx_buf) != rx_bytes_need:
+        return ACK_TIMEOUT * -1
+    if g_rx_buf[0] != CMD_HEAD:
+        return ACK_FAIL * -1
+    if g_rx_buf[rx_bytes_need - 1] != CMD_TAIL:
+        return ACK_FAIL * -1
+    if g_rx_buf[1] != tx_buf[1]:
+        return ACK_FAIL  * -1
+
+    CheckSum = 0
+    for index, byte in enumerate(g_rx_buf):
+        if index == 0:
+            continue
+        if index == 6:
+            if CheckSum != byte:
+                return ACK_FAIL * -1
+        CheckSum ^= byte
+    return  ACK_SUCCESS
+
+
+def  GetCompareLevel():
+    global g_rx_buf
+    command_buf = [CMD_COM_LEV, 0, 0, 1, 0]
+    r = TxAndRxCmd(command_buf, 8, 0.1)
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT * -1
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:
+        return g_rx_buf[3]
+    else:
+        return 0xFF
+
+
+def SetCompareLevel(level):
+    global g_rx_buf
+    command_buf = [CMD_COM_LEV, 0, level, 0, 0]
+    r = TxAndRxCmd(command_buf, 8, 0.1)
+
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT * -1
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:
+        return  g_rx_buf[3]
+    else:
+        return 0xFF
+
+
+def GetUserCount():
+    global g_rx_buf
+    command_buf = [CMD_USER_CNT, 0, 0, 0, 0]
+    r = TxAndRxCmd(command_buf, 8, 0.1)
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:
+        return g_rx_buf[3]
+    else:
+        return 0xFF
+
+def GetTimeOut():
+    global g_rx_buf
+    command_buf = [CMD_TIMEOUT, 0, 0, 1, 0]
+    r = TxAndRxCmd(command_buf, 8, 0.1)
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT * -1
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:
+        return g_rx_buf[3]
+    else:
+        return 0xFF
+
+
+def AddUser(perm):
+    global g_rx_buf,MYTIMEOUT
+    r = GetUserCount()
+    #sys.stdout.write ("users" + str(r))
+    if r >= USER_MAX_CNT:
+        return ACK_FULL * -1
+
+    command_buf = [CMD_ADD_1, 0, r+1, perm, 0]
+    r = TxAndRxCmd(command_buf, 8, MYTIMEOUT)
+    #sys.stdout.write("1:" + str(g_rx_buf))
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT * -1
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:
+        command_buf[0] = CMD_ADD_3
+        r = TxAndRxCmd(command_buf, 8, MYTIMEOUT)
+        #sys.stdout.write("2:" + str(g_rx_buf))
+        if r == ACK_TIMEOUT:
+            return ACK_TIMEOUT * -1
+        if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:
+            sys.stdout.write("a")
+            r = VerifyUser()
+            return r
+        else:
+            return ACK_FAIL * -1
+    else:
+        return ACK_FAIL * -1
+
+def ReplaceUser(highbit,lowbit):
+    global g_rx_buf,MYTIMEOUT
+    r = DeleteUser(highbit,lowbit)
+    if r == ACK_SUCCESS:
+        r = AddUser(MYPERM)
+        return r
+
+def DeleteUser(highbit,lowbit):
+    global g_rx_buf,MYTIMEOUT
+    if highbit == -1:
+        return ACK_GO_OUT * -1
+    if lowbit == -1:
+        return ACK_GO_OUT * -1
+    command_buf = [CMD_DEL, highbit, lowbit, 0, 0]
+    #print("CMD",command_buf)
+    r = TxAndRxCmd(command_buf, 8, MYTIMEOUT)
+    #print(g_rx_buf)
+    if r == ACK_FAIL:
+        return ACK_FAIL * -1
+    if r == ACK_SUCCESS:
+        return ACK_SUCCESS
+
+def ClearAllUser():
+    global g_rx_buf
+    command_buf = [CMD_DEL_ALL, 0, 0, 0, 0]
+    r = TxAndRxCmd(command_buf, 8, 5)
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT * -1
+    if r == ACK_SUCCESS and g_rx_buf[4] == ACK_SUCCESS:
+        return ACK_SUCCESS
+    else:
+        return ACK_FAIL * -1
+
+def GetAllUsers():
+    global g_rx_buf
+    command_buf = [CMD_ALLUSERS, 0, 0, 0, 0]
+    r = TxAndRxCmd(command_buf, 8, 20)
+    print(g_rx_buf)
+    if r == ACK_TIMEOUT:
+        return ACK_TIMEOUT * -1
+    if r == ACK_SUCCESS:
+        return ACK_SUCCESS
+    else:
+        return ACK_FAIL * -1
+
+ #***************************************************************************
+# @brief    Check if user ID is between 1 and 3
+#***************************************************************************/
+def IsMasterUser(user_id):
+    if user_id == 1 or user_id == 2 or user_id == 3:
+        return TRUE
+    else:
+        return FALSE
+
+def VerifyUser():
+    global g_rx_buf,MYTIMEOUT
+    command_buf = [CMD_MATCH, 0, 0, 0, 0]
+    r = TxAndRxCmd(command_buf, 8, MYTIMEOUT)
+    #sys.stdout.write("v" + str(g_rx_buf))
+    if r == ACK_TIMEOUT:
+        return str(ACK_TIMEOUT * -1)
+    if r == ACK_SUCCESS and IsMasterUser(g_rx_buf[4]) == TRUE:
+        #ACK_SUCCESS
+        return "u["+ str(g_rx_buf[2])+',' + str(g_rx_buf[3])+',' + str(g_rx_buf[4])+',' + str(g_rx_buf[6]) +"]"
+    else:
+        return "-" + str(ACK_NO_USER)  # The center of the fingersys.stdout.write is out of alignment with sensor
+
+def ExitApp(reason):
+    if ser != None:
+        ser.close()
+    GPIO.cleanup()
+    sys.stdout.write(reason)
+    sys.exit()
+
+def Analysis_PC_Command(command):
+    global Finger_SleepFlag
+    #exitmsg = "-50"
+    if  command == "count":
+        ExitApp(str(GetUserCount()))
+    elif command == "write":
+        r = AddUser(MYPERM)
+        ExitApp(str(r))
+    elif command == "read":
+        r = VerifyUser()
+        ExitApp(str(r))
+    elif command == "clearall":
+        r = ClearAllUser()
+        ExitApp(str(r))
+    elif command == "gettimeout":
+        r = GetTimeOut()
+        ExitApp(str(r))
+    elif command == "allusers":
+        r = GetAllUsers()
+        ExitApp(str(r))
+    elif command == "deleteuser":
+        r = DeleteUser(MYHIGH,MYLOW)
+        ExitApp(str(r))
+    elif command == "replaceuser":
+        r = ReplaceUser(MYHIGH,MYLOW)
+        ExitApp(str(r))
+    else:
+        ExitApp("-99")
+    ExitApp("-100")
+
+
+def main():
+
+    GPIO.output(Finger_RST_Pin, GPIO.LOW)
+    time.sleep(0.25)
+    GPIO.output(Finger_RST_Pin, GPIO.HIGH)
+    time.sleep(0.25)    # Wait for module to start
+    if SetCompareLevel(MYLEVEL) != MYLEVEL:
+        ExitApp("-20")
+    Analysis_PC_Command(MYCMD)
+
+if __name__ == '__main__':
+        try:
+            main()
+        except KeyboardInterrupt:
+            ExitApp("-30")
\ No newline at end of file
diff --git a/pointeuse/install/bin/fpunload.sh b/pointeuse/install/bin/fpunload.sh
new file mode 100644 (file)
index 0000000..fe8fc6f
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/bash
+MYPID=`ps ax | grep fp.py | grep -v "grep" | head -n 1 | awk '{ print $1 }'`
+if [ "${MYPID}" != "" ]
+then
+       kill ${MYPID}
+fi
+
diff --git a/pointeuse/install/bin/nfcimportid.sh b/pointeuse/install/bin/nfcimportid.sh
new file mode 100644 (file)
index 0000000..c03d337
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/bash
+CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+CMD='sudo '${CALLDIR}'/nfcread'
+RUNS=`ps ax | grep nfcread | head -n 1 | awk '{ print $1 }'`
+if [[ ${RUNS} == "" ]]
+then
+  kill ${RUNS}
+fi
+#NDATA=$(`sudo nfc-poll`)
+#NUID=`echo "${NDATA}" | grep UID: | sed 's/UID://' | sed 's/ //g'`
+#echo ${NUID}
+# RUN=1
+
+# while [ $RUN == 1 ]
+# do 
+  RES=`$CMD`
+  #echo "->"${RES}"<-"
+  if [[ "${RES}" == *UID* ]]
+  then
+    #echo "UID Found"
+    IFS=$'\n'
+
+    for r in ${RES[@]}
+    do
+      NL=${r//[[:space:]]/}
+      if [[ "${NL}" == UID* ]]
+      then
+        NUID=`echo ${NL} | awk -F":" '{ print $2 }'`
+      fi
+    done
+    IFS=' '
+    if [[ "${NUID}" != "" ]]
+    then
+      echo "UID:"${NUID}
+      RUN=2
+    fi 
+  fi
+# done
\ No newline at end of file
diff --git a/pointeuse/install/bin/nfcread.c b/pointeuse/install/bin/nfcread.c
new file mode 100644 (file)
index 0000000..90389b0
--- /dev/null
@@ -0,0 +1,85 @@
+// To compile this simple example:
+// $ gcc -o quick_start_example1 quick_start_example1.c -lnfc
+
+#include <stdlib.h>
+#include <nfc/nfc.h>
+
+static void
+print_hex(const uint8_t *pbtData, const size_t szBytes)
+{
+  size_t  szPos;
+
+  for (szPos = 0; szPos < szBytes; szPos++) {
+    printf("%02x  ", pbtData[szPos]);
+  }
+  printf("\n");
+  print_hex()
+}
+
+int
+main(int argc, const char *argv[])
+{
+  nfc_device *pnd;
+  nfc_target nt;
+
+  // Allocate only a pointer to nfc_context
+  nfc_context *context;
+
+  // Initialize libnfc and set the nfc_context
+  nfc_init(&context);
+  if (context == NULL) {
+    printf("Unable to init libnfc (malloc)\n");
+    exit(EXIT_FAILURE);
+  }
+
+  // Display libnfc version
+  const char *acLibnfcVersion = nfc_version();
+  (void)argc;
+  //printf("%s uses libnfc %s\n", argv[0], acLibnfcVersion);
+
+  // Open, using the first available NFC device which can be in order of selection:
+  //   - default device specified using environment variable or
+  //   - first specified device in libnfc.conf (/etc/nfc) or
+  //   - first specified device in device-configuration directory (/etc/nfc/devices.d) or
+  //   - first auto-detected (if feature is not disabled in libnfc.conf) device
+  pnd = nfc_open(context, NULL);
+
+  if (pnd == NULL) {
+    printf("ERROR: %s\n", "Unable to open NFC device.");
+    exit(EXIT_FAILURE);
+  }
+  // Set opened NFC device to initiator mode
+  if (nfc_initiator_init(pnd) < 0) {
+    nfc_perror(pnd, "nfc_initiator_init");
+    exit(EXIT_FAILURE);
+  }
+
+  //printf("NFC reader: %s opened\n", nfc_device_get_name(pnd));
+
+  // Poll for a ISO14443A (MIFARE) tag
+  const nfc_modulation nmMifare = {
+    .nmt = NMT_ISO14443A,
+    .nbr = NBR_106,
+  };
+  if (nfc_initiator_select_passive_target(pnd, nmMifare, NULL, 0, &nt) > 0) {
+    //printf("The following (NFC) ISO14443A tag was found:\n");
+    //printf("    ATQA (SENS_RES): ");
+    //print_hex(nt.nti.nai.abtAtqa, 2);
+    printf("UID:");
+    //printf("UID (NFCID%c): ", (nt.nti.nai.abtUid[0] == 0x08 ? '3' : '1'));
+    print_hex(nt.nti.nai.abtUid, nt.nti.nai.szUidLen);
+    //printf("      SAK (SEL_RES): ");
+    print_hex(&nt.nti.nai.btSak, 1);
+    //if (nt.nti.nai.szAtsLen) {
+    //  printf("          ATS (ATR): ");
+    //  print_hex(nt.nti.nai.abtAts, nt.nti.nai.szAtsLen);
+    //}
+  } else {
+    printf("no badge");
+  }
+  // Close NFC device
+  nfc_close(pnd);
+  // Release the context
+  nfc_exit(context);
+  exit(EXIT_SUCCESS);
+}
\ No newline at end of file
diff --git a/pointeuse/install/bin/nfcreadbadge.sh b/pointeuse/install/bin/nfcreadbadge.sh
new file mode 100644 (file)
index 0000000..f7646e7
--- /dev/null
@@ -0,0 +1,43 @@
+#!/bin/bash
+CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+CMD='sudo '${CALLDIR}'/nfcread'
+RUNS=`ps ax | grep nfcread | head -n 1 | awk '{ print $1 }'`
+if [[ ${RUNS} == "" ]]
+then
+  kill ${RUNS}
+fi
+#NDATA=$(`sudo nfc-poll`)
+#NUID=`echo "${NDATA}" | grep UID: | sed 's/UID://' | sed 's/ //g'`
+#echo ${NUID}
+# RUN=1
+
+# while [ $RUN == 1 ]
+# do 
+  RES=`$CMD`
+  #echo "->"${RES}"<-"
+  if [[ "${RES}" == *UID* ]]
+  then
+    #echo "UID Found"
+    IFS=$'\n'
+
+    for r in ${RES[@]}
+    do
+      NL=${r//[[:space:]]/}
+      if [[ "${NL}" == UID* ]]
+      then
+        NUID=`echo ${NL} | awk -F":" '{ print $2 }'`
+        #echo "UIDFOUND:"${NUID}
+      fi
+    done
+    IFS=' '
+    if [[ "${NUID}" != "" ]]
+    then
+      STAFFID=`sqlite3 ~/.hourtrax/hourtrax.sqlite "select id_staff from badges where id='"${NUID}"' and type='nfc';"`
+      #STAFFID=`jq -s ".[]  | select( .nfcuid==\"${NUID}\" ) | .id" .hourtrax/staff/*.json
+      echo "STAFFID:"${STAFFID}
+      RUN=2
+    fi 
+  fi
+  #
+# done
+
diff --git a/pointeuse/install/bin/nfcunload.sh b/pointeuse/install/bin/nfcunload.sh
new file mode 100644 (file)
index 0000000..f701040
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/bash
+MYPID=`ps ax | grep nfcread | grep -v "grep" | head -n 1 | awk '{ print $1 }'`
+if [ "${MYPID}" != "" ]
+then
+       sudo kill ${MYPID}
+fi
\ No newline at end of file
diff --git a/pointeuse/install/bin/reboot.sh b/pointeuse/install/bin/reboot.sh
new file mode 100644 (file)
index 0000000..475b2dd
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/bash
+sudo shutdown -r now
\ No newline at end of file
diff --git a/pointeuse/install/bin/resetgui.sh b/pointeuse/install/bin/resetgui.sh
new file mode 100644 (file)
index 0000000..3b91231
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/bash
+export DISPLAY=:0
+TPID=`ps ax | grep electron | head -n 1 | awk '{ print $1 }'`
+kill $TPI
+${HOME}/bin/startapp.sh
+
diff --git a/pointeuse/install/bin/savewlan.sh b/pointeuse/install/bin/savewlan.sh
new file mode 100644 (file)
index 0000000..8c6ba01
--- /dev/null
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+WLANFILE="/etc/wpa_supplicant/wpa_supplicant.conf"
+WLANDATA='ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
+update_config=1
+country=LU
+
+network={ 
+        ssid="'$1'" 
+        psk="'$2'"
+        priority=1
+        id_str="local"
+}
+
+network={ \
+        ssid="ksphone" \
+        psk="flk2kilx"
+        priority=1
+        id_str="support"
+}
+
+network={
+        ssid="EireLAN24"
+        psk="daataalt2602@"
+        priority=2
+        id_str="install"
+}' 
+sudo echo  ${WLANDATA} > ${WLANFILE}
+sudo wpa_cli -i wlan0 reconfigure
+#sudo dhclient -r wlan0
+#sudo ifdown wlan0
+#sudo ifup wlan0
+#sudo dhclient -v wlan0
\ No newline at end of file
diff --git a/pointeuse/install/bin/scanwlan.sh b/pointeuse/install/bin/scanwlan.sh
new file mode 100644 (file)
index 0000000..cd26358
--- /dev/null
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+IFS=$'\n'; set -f;
+WLANS=(`sudo iwlist wlan0 scan`)
+OUTPUT=""
+for w in "${!WLANS[@]}"
+do
+        #echo $w
+        if [[ "${WLANS[$w]}" =~ "Cell " ]]
+        then
+                CELLDATA=`echo "${WLANS[$w]}" | sed 's/^[ \t]*//' | awk '{ print $2 }'`
+                if [[ "${OUTPUT}" != "" ]]
+                then
+                        OUTPUT=${OUTPUT}","
+                fi
+                OUTPUT=${OUTPUT}'{"id":"'${CELLDATA}'",'
+        fi
+        if [[ "${WLANS[$w]}" =~ "ESSID:" ]]
+        then
+                #echo ${WLANS[$w]}
+                SDATA=`echo "${WLANS[$w]}" | sed 's/^[ \t]*//' | sed 's/ESSID://g'`
+                OUTPUT=${OUTPUT}'"SSID":'${SDATA}'}'
+        fi
+        if [[ "${WLANS[$w]}" =~ "Quality=" ]]
+        then
+                QDATA=`echo "${WLANS[$w]}" | sed 's/^[ \t]*//' | awk '{ print $1 }' | sed 's/Quality=//g'`
+                OUTPUT=${OUTPUT}'"quality":"'${QDATA}'",'
+        fi
+done
+echo "["${OUTPUT}"]"
\ No newline at end of file
diff --git a/pointeuse/install/bin/sendnfcuid.sh b/pointeuse/install/bin/sendnfcuid.sh
new file mode 100644 (file)
index 0000000..0b6e3fb
--- /dev/null
@@ -0,0 +1,59 @@
+#!/bin/bash
+CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+. ${HOME}/.hourtrax/sync.conf
+CDATE=`date +"%Y%m%d"`
+LOGFILE=${HOME}/log/${CDATE}".log"
+if [[ $# -eq 0 ]]
+then 
+  echo "No args!" >> ${LOGFILE}
+  exit 0
+fi
+STAFFID=$1
+# HOSTS=(172.16.10.186 172.16.10.170 172.16.10.186)
+# #HOSTS=(172.16.10.198 172.16.10.194 172.16.10.202)
+# SYNCSERVER="172.16.10.190"
+# SCHEMA="demo50"
+# RUSER="pot"
+# RPORT="3587"
+OWNHOST=`ip addr show dev tun0 | grep "inet " | awk '{print $2 }'`
+IFS='
+'
+TDATA=(`/usr/local/bin/sqlite3 -header -quote ${HOME}/.hourtrax/hourtrax.sqlite "select * from badges where id_staff='"${STAFFID}"';"`)
+
+COLS=${TDATA[0]//\'/}
+SQL="REPLACE INTO badges ("${COLS}") VALUES (${TDATA[1]});"
+if [ "${COLS}" == "" ]
+then
+  SQL="DELETE FROM badges WHERE id_staff='${STAFFID}';"
+fi 
+
+echo "SQL:"${SQL}  >> ${LOGFILE}
+
+RCMD='/usr/local/bin/sqlite3 -echo .hourtrax/hourtrax.sqlite "'${SQL}'"'
+RSERVERCMD='bin/setdata.sh "'${SCHEMA}'" "'${SQL}'"'
+echo "SEND TO server "${SYNCSERVER}" SCHEMA "${SCHEMA}  >> ${LOGFILE}
+SSHRET=`ssh -p ${RPORT} ${RUSER}@${SYNCSERVER} "${RSERVERCMD}"`
+echo "SSH return: ${SSHRET}"  >> ${LOGFILE}
+
+for h in ${HOSTS[@]}
+do
+  if [ "$h" != "${OWNHOST}" ]
+  then 
+    echo "Transfer to "$h  >> ${LOGFILE}
+    SSHRET=`ssh -p ${RPORT} ${RUSER}@$h "$RCMD"`
+    echo "SSH return: ${SSHRET}"  >> ${LOGFILE}
+  fi
+done
+
+
+
+
+# DATABYID=`/usr/local/bin/sqlite3 -json ${HOME}/.hourtrax/hourtrax.sqlite "select * from timetracks where id='"${TRACKID}"';"`;
+# # #echo "Data to send: "${DATABYID}
+# HNAME=`hostname`
+# curl -k -A "${USERAGENT}" -H "pot-tracker: ${HNAME}" \
+#    -H "pot-schema: ${POTSCHEMA}" \
+#    -H "pot-api-key: ${POTAPIKEY}" \
+#    --request POST \
+#    --data "cl=TimeTracker&fn=setTracker&schema=${POTSCHEMA}&tracker=${HNAME}&data=${DATABYID}" \
+#  ${POTAPIURL}
\ No newline at end of file
diff --git a/pointeuse/install/bin/sendtrack.sh b/pointeuse/install/bin/sendtrack.sh
new file mode 100644 (file)
index 0000000..2625146
--- /dev/null
@@ -0,0 +1,54 @@
+#!/bin/bash
+CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+. ${HOME}/.hourtrax/sync.conf
+CDATE=`date +"%Y%m%d"`
+LOGFILE=${HOME}/log/${CDATE}".log"
+if [[ $# -eq 0 ]]
+then 
+  echo "No args!"  >> ${LOGFILE}
+  exit 0
+fi
+TRACKID=$1
+# HOSTS=(172.16.10.186 172.16.10.170 172.16.10.186)
+# #HOSTS=(172.16.10.198 172.16.10.194 172.16.10.202)
+# SYNCSERVER="172.16.10.190"
+# SCHEMA="demo50"
+# RUSER="pot"
+# RPORT="3587"
+OWNHOST=`ip addr show dev tun0 | grep "inet " | awk '{print $2 }'`
+IFS='
+'
+TDATA=(`/usr/local/bin/sqlite3 -header -quote ${HOME}/.hourtrax/hourtrax.sqlite "select * from timetracks  where id='"${TRACKID}"';"`)
+
+COLS=${TDATA[0]//\'/}
+SQL="REPLACE INTO timetracks ("${COLS}") VALUES (${TDATA[1]});"
+echo "SQL:"${SQL}  >> ${LOGFILE}
+
+RCMD='/usr/local/bin/sqlite3 -echo .hourtrax/hourtrax.sqlite "'${SQL}'"'
+RSERVERCMD='bin/settrack.sh "'${SCHEMA}'" "'${SQL}'"'
+echo "SEND TO server "${SYNCSERVER}" SCHEMA "${SCHEMA}  >> ${HOME}/log/${CDATE}".log"
+SSHRET=`ssh -p ${RPORT} ${RUSER}@${SYNCSERVER} "${RSERVERCMD}"` 
+echo "SSH return: ${SSHRET}"  >> ${LOGFILE}
+
+for h in ${HOSTS[@]}
+do
+  if [ "$h" != "${OWNHOST}" ]
+  then 
+    echo "Transfer to "$h  >> ${LOGFILE}
+    SSHRET=`ssh -p ${RPORT} ${RUSER}@$h "$RCMD"`
+    echo "SSH return: ${SSHRET}"  >> ${LOGFILE}
+  fi
+done
+
+
+
+
+# DATABYID=`/usr/local/bin/sqlite3 -json ${HOME}/.hourtrax/hourtrax.sqlite "select * from timetracks where id='"${TRACKID}"';"`;
+# # #echo "Data to send: "${DATABYID}
+# HNAME=`hostname`
+# curl -k -A "${USERAGENT}" -H "pot-tracker: ${HNAME}" \
+#    -H "pot-schema: ${POTSCHEMA}" \
+#    -H "pot-api-key: ${POTAPIKEY}" \
+#    --request POST \
+#    --data "cl=TimeTracker&fn=setTracker&schema=${POTSCHEMA}&tracker=${HNAME}&data=${DATABYID}" \
+#  ${POTAPIURL}
\ No newline at end of file
diff --git a/pointeuse/install/bin/setstaff.sh b/pointeuse/install/bin/setstaff.sh
new file mode 100644 (file)
index 0000000..0a3794c
--- /dev/null
@@ -0,0 +1,61 @@
+#!/bin/bash
+CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+if [[ $# -eq 0 ]]
+then 
+  echo "No args!"
+  exit 0
+fi
+
+#$db="/mnt/c/Users/ksaff/Workspace/hourtrax/.hourtrax/hourtrax.sqlite"
+db=${HOME}"/.hourtrax/hourtrax.sqlite"
+params=$1
+params=${params//[\[|\$|\]|\{|\}|\']}
+
+#eval ${params}
+IFS=';'
+stdata=(`echo "$params"`)
+HASID="0"
+USERID=""
+CDATE=`date +"%F %T"`
+declare -a acol
+declare -a aval
+declare -a aupd
+for s in "${stdata[@]}"
+do
+  IFS='='
+  cold=(`echo "$s"`)
+  acol=(${acol[@]} ${cold[0]})
+  if [ "${cold[0]}" == "id" ]; then
+    HASID="1"
+    USERID=${cold[1]};
+  fi
+  if [ "${cold[1]}" == "" ]; then
+    val='null'
+  else 
+    val="'"${cold[1]}"'"
+  fi
+  if [ "${cold[0]}" != "id" ] && [ "${cold[0]}" != "pin" ]; then
+    IFS=$'\n'
+    cupd=${cold[0]}"="$val
+    aupd=(${aupd[@]} $cupd)
+  fi
+  
+  aval=(${aval[@]} $val)
+done
+
+IFS='|'
+scol=$(IFS=',' ; echo "${acol[*]}")
+sval=$(IFS=',' ; echo "${aval[*]}")
+supd=$(IFS=',' ; echo "${aupd[*]}")
+
+sql="INSERT INTO staff ("$scol") VALUES ("$sval") ON CONFLICT(id) DO UPDATE SET "$supd" WHERE excluded.id='"$USERID"';"
+if [[ "$HASID" == "1" ]]; then
+  sqlite3 $db "$sql"
+  echo $sql
+  echo $sql >> ${HOME}'/.hourtrax/staffupd.log'
+  
+else
+  echo ${stdata}" has no ID!" >> ${HOME}.'/.hourtrax/staffupd.log'
+fi 
+
+
diff --git a/pointeuse/install/bin/shutdown.sh b/pointeuse/install/bin/shutdown.sh
new file mode 100644 (file)
index 0000000..d3835a9
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/bash
+sudo shutdown -h now
\ No newline at end of file
diff --git a/pointeuse/install/bin/startapp.sh b/pointeuse/install/bin/startapp.sh
new file mode 100644 (file)
index 0000000..4380397
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/bash
+#/home/dks/bin/mountdrives.pl -m &&
+rm -rf ${HOME}"/cache/Hourtrax" && 
+#/home/dks/bin/hourtrax/hourtrax.pl &&
+${HOME}/bin/electron/electron &
+xset dpms 0 0 60 &
\ No newline at end of file
diff --git a/pointeuse/install/bin/syncdown.pl b/pointeuse/install/bin/syncdown.pl
new file mode 100644 (file)
index 0000000..16b6c3c
--- /dev/null
@@ -0,0 +1,29 @@
+#!/usr/bin/env perl
+
+use strict;
+use JSON::PP;
+my $cfg = &readconfig($ENV{HOME}.'/.hourtrax/sync.conf');
+
+my $sql = "select id,prename,surname,isdeleted,case when istimetrackenabled is null or timetrackers LIKE '%".$cfg->{htxstation}."%' then true else null end as isdisabled, timetrackerlang as lang,timetrackerfixtime as fixtime,timetrackerpin as pin, timetrackerrestriction as restriction from ".$cfg->{htxschema}.".staff";
+
+my $cmd = 'curl -H "Content-type: application/json" --user "'.$cfg->{htxuser}.':'.$cfg->{htxpwd}.'" -X POST --data \'{"fn":"queryarray","cl":"data","sql":"'.$sql.'"}\' '.$cfg->{htxurl};
+
+
+print $cmd."\n";
+my $res = `$cmd`; 
+
+print $res."\n";
+
+sub readconfig($file){
+  my $file = shift;
+  my $ncfg = ();
+  open(CFG,$file);
+  while (my $l = <CFG>){
+    chomp($l);
+    if (($l =~ /^#/ ) || ($l eq "")) { next;}
+    my ($k,$v) = $l =~ m/^(.+)="(.+)"/;
+    $ncfg->{$k} = $v;
+  }
+  close(CFG);
+  return $ncfg;
+}
diff --git a/pointeuse/install/bin/turnscreen.sh b/pointeuse/install/bin/turnscreen.sh
new file mode 100644 (file)
index 0000000..16718a8
--- /dev/null
@@ -0,0 +1,12 @@
+#!/bin/bash
+CUR_LCD=`grep lcd_rotate /boot/config.txt`
+if [[ "${CUR_LCD}" == "lcd_rotate=2" ]] 
+then
+  #echo "is 2"
+  sudo sed -i 's/lcd_rotate/#lcd_rotate/' /boot/config.txt
+else
+  #echo "is 0"
+  sudo sed -i 's/#lcd_rotate/lcd_rotate/' /boot/config.txt
+fi
+echo "${CUR_LCD}";
+sudo shutdown -r now
diff --git a/pointeuse/install/create_pkg.sh b/pointeuse/install/create_pkg.sh
new file mode 100644 (file)
index 0000000..a9bf588
--- /dev/null
@@ -0,0 +1 @@
+#!/bin/bash
diff --git a/pointeuse/install/installpot01.sh b/pointeuse/install/installpot01.sh
new file mode 100644 (file)
index 0000000..d23676a
--- /dev/null
@@ -0,0 +1,83 @@
+#!/bin/bash
+
+#sudo -i
+
+NEWHOST=$1
+echo ${NEWHOST}
+update-rc.d "ssh" enable
+echo 'echo -e "mai5ia7a\nmai5ia7a" | passwd' > tmp.sh && bash tmp.sh && rm tmp.sh
+sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
+sed -i 's/#Port.*/Port 3587/' /etc/ssh/sshd_config
+service ssh restart
+cp /usr/share/zoneinfo/Europe/Luxembourg /etc/localtime
+
+groupadd pot
+useradd pot -c pot -g pot -G adm,sudo,crontab,dialout,gpio -s /bin/bash -d /home/pot
+echo 'echo -e "sai4seip\nsai4seip" | passwd pot' > tmp.sh && bash tmp.sh && rm tmp.sh
+mkdir -p /home/pot
+chown pot:pot /home/pot
+echo "lcd_rotate=2" >> /boot/config.txt
+echo "enable_uart=1" >> /boot/config.txt
+chmod 660 /etc/sudoers
+sed -i 's/\%sudo.*/%sudo   ALL=(ALL:ALL) NOPASSWD:ALL/' /etc/sudoers
+chmod 440 /etc/sudoers
+
+
+systemctl stop autologin@tty1
+sed -i -e "s/autologin pi/autologin pot/" /etc/systemd/system/autologin@.service
+sed -i -e 's/pi/pot/' /etc/systemd/system/getty@tty1.service.d/autologin.conf
+#NEWHOST="ldin-hourtrax"
+hostnamectl set-hostname ${NEWHOST}
+sed -i -e "s/127.0.1.1.*/127.0.1.1\t${NEWHOST}/" /etc/hosts
+#apt-get update
+apt-get update
+apt-get install -y wget curl unzip openvpn sqlite3 libnfc5 libnfc-bin libnfc-examples i2c-tools
+curl -sL https://deb.nodesource.com/setup_12.x | bash -
+apt-get install -y nodejs
+sed -i -e 's/MinProtocol/#MinProtocol/' /etc/ssl/openssl.cnf
+sed -i -e 's/CipherString/#CipherString/' /etc/ssl/openssl.cnf
+#echo "lcd_rotate=2" >> /boot/config.txt
+sed -i -e 's/#xserver-command=X/xserver-command=X -nocursor/' /etc/lightdm/lightdm.conf
+sed -i -e 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
+sysctl -p
+echo "#!/bin/bash" > /etc/xdg/lxsession/LXDE-pi/sshpwd.sh
+sed -i -e "s/^autologin-user=pi/autologin-user=pot/" /etc/lightdm/lightdm.conf 
+sed -i -e  "s/@/#@/" /etc/xdg/lxsession/LXDE-pi/autostart
+sed -i -e  "s/@/#@/" /etc/xdg/lxsession/LXDE/autostart
+# echo "@xset s off" >> /etc/xdg/lxsession/LXDE-pi/autostart
+# echo "@xset -dpms" >> /etc/xdg/lxsession/LXDE-pi/autostart
+# echo "@xset s noblank" >> /etc/xdg/lxsession/LXDE-pi/autostart
+echo 'country=LU' >> /etc/wpa_supplicant/wpa_supplicant.conf
+echo '' >> /etc/wpa_supplicant/wpa_supplicant.conf
+echo 'network={' >> /etc/wpa_supplicant/wpa_supplicant.conf
+echo '        ssid="ksphone"' >> /etc/wpa_supplicant/wpa_supplicant.conf
+echo '        priority=2' >> /etc/wpa_supplicant/wpa_supplicant.conf
+echo '        psk="flk2kilx"' >> /etc/wpa_supplicant/wpa_supplicant.conf
+echo '}' >> /etc/wpa_supplicant/wpa_supplicant.conf
+echo 'network={' >> /etc/wpa_supplicant/wpa_supplicant.conf
+echo '        ssid="EireLAN24"' >> /etc/wpa_supplicant/wpa_supplicant.conf
+echo '        priority=1' >> /etc/wpa_supplicant/wpa_supplicant.conf
+echo '        psk="daataalt2602@"' >> /etc/wpa_supplicant/wpa_supplicant.conf
+echo '}' >> /etc/wpa_supplicant/wpa_supplicant.conf
+echo  '<?xml version="1.0" encoding="UTF-8"?>' > /etc/xdg/openbox/menu.xml
+echo '<openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/ file:///usr/share/openbox/menu.xsd">' >> /etc/xdg/openbox/menu.xml
+echo  '<menu id="root-menu" label="Openbox 3"></menu>' >> /etc/xdg/openbox/menu.xml
+echo  '</openbox_menu>' >> /etc/xdg/openbox/menu.xml
+
+
+rm /etc/xdg/autostart/xdg-user-dirs.desktop
+rm /etc/xdg/autostart/pprompt.desktop
+rm /etc/xdg/autostart/xcompmgr.desktop
+rm /etc/xdg/autostart/piwiz.desktop
+rm /etc/xdg/autostart/lxpolkit.desktop
+sudo rfkill unblock all
+shutdown -r now
+
+
+
+#shutdown -r now
+
+
+
+
+
diff --git a/pointeuse/install/installpot02.sh b/pointeuse/install/installpot02.sh
new file mode 100644 (file)
index 0000000..2181b34
--- /dev/null
@@ -0,0 +1,73 @@
+
+#export USERNAME="pot"
+#NEWHOST="ldin-hourtrax"
+if [ "$(id -u)" != 0 ]; then
+  echo 'Sorry, you need to run this script with sudo'
+  exit 1
+fi
+NEWHOST=$1
+echo ${NEWHOST}
+cd /home/pot
+curl -O http://dksserver/installers/pot/pot.tar.gz && tar xzvf pot.tar.gz
+chown -R pot:pot /home/pot/bin
+chown -R pot:pot /home/pot/.hourtrax
+echo "@/home/pot/bin/startapp.sh" > /etc/xdg/lxsession/LXDE-pi/autostart
+cp ${HOME}/bin/sqlite3 /usr/local/bin/sqlite3
+cp /home/pot/splash.png /usr/share/plymouth/themes/pix/splash.png
+userdel pi
+rm -r /home/pi
+
+rfkill unblock all
+wpa_cli -i wlan0 reconfigure
+
+su - pot
+mkdir ${HOME}/log
+cd ${HOME}/.hourtrax
+sqlite3 hourtrax.sqlite < ht.sql
+chmod +x ${HOME}/bin/*.sh
+#cp "/home/pot/vpn/DKS-VPN-"${NEWHOST}".ovpn" "/etc/openvpn/DKS-VPN-"${NEWHOST}.".conf"
+#systemctl enable openvpn@DKS-VPN-${NEWHOST}.service
+
+exit 
+#enable i2c
+echo '>>> Enable I2C'
+if grep -q 'i2c-bcm2708' /etc/modules; then
+  echo 'Seems i2c-bcm2708 module already exists, skip this step.'
+else
+  echo 'i2c-bcm2708' >> /etc/modules
+fi
+if grep -q 'i2c-dev' /etc/modules; then
+  echo 'Seems i2c-dev module already exists, skip this step.'
+else
+  echo 'i2c-dev' >> /etc/modules
+fi
+if grep -q 'dtparam=i2c1=on' /boot/config.txt; then
+  echo 'Seems i2c1 parameter already set, skip this step.'
+else
+  echo 'dtparam=i2c1=on' >> /boot/config.txt
+fi
+if grep -q 'dtparam=i2c_arm=on' /boot/config.txt; then
+  echo 'Seems i2c_arm parameter already set, skip this step.'
+else
+  echo 'dtparam=i2c_arm=on' >> /boot/config.txt
+fi
+if [ -f /etc/modprobe.d/raspi-blacklist.conf ]; then
+  sed -i 's/^blacklist spi-bcm2708/#blacklist spi-bcm2708/' /etc/modprobe.d/raspi-blacklist.conf
+  sed -i 's/^blacklist i2c-bcm2708/#blacklist i2c-bcm2708/' /etc/modprobe.d/raspi-blacklist.conf
+else
+  echo 'File raspi-blacklist.conf does not exist, skip this step.'
+fi
+
+# echo '>>> Install i2c-tools'
+# if hash i2cget 2>/dev/null; then
+#   echo 'Seems i2c-tools is installed already, skip this step.'
+# else
+#   apt-get install -y i2c-tools
+# fi
+
+systemctl reboot -i
+
+
+
+
+# for fingerprint on gpio
\ No newline at end of file
diff --git a/pointeuse/install/installvpnkey.sh b/pointeuse/install/installvpnkey.sh
new file mode 100644 (file)
index 0000000..47576a3
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+#curl -s http://dksserver/installers/installpot01.sh | bash -s kaji-pot10dhart-pot03
+#curl -s http://dksserver/installers/installpot02.sh | bash -s kaji-pot10 dhart-pot03
+#curl -s http://dksserver/installers/installvpnkey.sh | bash -s kaji-pot10 
+NEWHOST=$1
+cd /etc/openvpn
+curl -O http://dksserver/installers/pot/vpn/DKS-VPN-${NEWHOST}.ovpn
+mv DKS-VPN-${NEWHOST}.ovpn DKS-VPN-${NEWHOST}.conf
+systemctl enable openvpn@DKS-VPN-${NEWHOST}.service
+update-rc.d openvpn enable
+service openvpn start
+
diff --git a/pointeuse/install/linkstationtoserver.sh b/pointeuse/install/linkstationtoserver.sh
new file mode 100644 (file)
index 0000000..3cbbafd
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/bash
+#webserver for communication pot app to badge station 
+#DKSVPN2 Server (intermediate2)
+cd ~
+ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa <<< y
+ssh-copy-id pot@188.34.195.60
+# ~: ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y 2>&1 >/dev/null
+# ~: echo $?
+# -->0
+
+ssh -p 3587 dks@188.34.195.60 
+#get station vpnIP
+SCHEMA=
+STATIONIP=?
+#/home/dks/public_html/htx/data/hosts/{STATION}.json
+echo '{ "sshuser":"pot","sshpwd":"sai4seip","sshport":"3587","sshhost":"${STATIONIP}"}' >> /home/dks/public_html/htx/data/hosts/{STATION}.json
+
+#scriptserver for communication from badge station to potapp
+ssh -p 3587 pot@188.34.195.60
+mkdir /home/pot/data/${SCHEMA}
+SCHEMADATA=
+scp -P 3587 .hourtrax/hourtrax.sqlite /home/pot/data/${SCHEMA}/
\ No newline at end of file
diff --git a/pointeuse/install/splash.png b/pointeuse/install/splash.png
new file mode 100644 (file)
index 0000000..118c3f7
Binary files /dev/null and b/pointeuse/install/splash.png differ
diff --git a/pointeuse/server/home/dks/bin/checkcert.sh b/pointeuse/server/home/dks/bin/checkcert.sh
new file mode 100644 (file)
index 0000000..4321806
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/bash
+CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+PREEXEC='service apache2 stop'
+POSTEXEC='service apache2 start'
+IFS='
+'
+CERTS=(`certbot certificates | grep -a1 "VALID:"`)
+DOMAIN=""
+VALID=""
+for c in "${CERTS[@]}"
+do
+       #echo "~:"$c
+       if [[ "$c" =~ "Domains" ]]
+       then
+               DOMAIN=`echo "$c" | awk '{ print $2 }'`
+               #echo "Domain:"${DOMAIN}"<-"
+               VALID=""
+       fi
+       if [[ "$c" =~ "VALID:" ]]
+       then
+               VALID=`echo "$c" | awk -F"VALID" '{ print $2 }' | sed -e 's/[^0-9]//g'`
+               #echo "Valid:"$VALID"<-"
+       fi
+
+       if [ "${VALID}" != "" ] && [ "${DOMAIN}" != "" ]
+       then
+               if [[ "${VALID}" < "35" ]]
+               then
+                       $PREEXEC &&
+                       certbot renew --standalone -d ${DOMAIN}
+                       $POSTEXEC
+                       DOMAIN=""
+                       VALID=""
+               else 
+                       echo "Domain ${DOMAIN} Certificate still valid ${VALID} days"
+                       DOMAIN=""
+                       VALID=""
+               fi 
+       fi
+done
+
diff --git a/pointeuse/server/home/dks/bin/lib/ConfigFile.pm b/pointeuse/server/home/dks/bin/lib/ConfigFile.pm
new file mode 100644 (file)
index 0000000..ae7a6f7
--- /dev/null
@@ -0,0 +1,57 @@
+package ConfigFile;
+
+use strict;
+use JSON::PP;
+use POSIX qw/strftime/;
+sub new {
+    my $class = shift;
+    my $p = shift;
+    my $self = bless {}, $class;
+    $self->{logfile} = $p->{logfile};
+    return $self;
+}
+
+sub read_conf(){
+  my $self = shift;
+  my $cfile = shift;
+  my $retcfg = ();
+  open(CFG,$cfile);
+  while (my $l = <CFG>){
+    chomp($l);
+    $l =~ s/^\s+//;
+    $l =~ s/\s+$//;
+    if (($l eq "") || ($l =~ /^#/) || ($l =~ /^;/)){next;}
+    my ($k,$v) = $l =~ m/(\w+)\s*=\s*(.*)$/;
+    $retcfg->{lc($k)} = $v;
+  }
+  close(CFG);
+  return $retcfg;
+}
+
+sub read_json(){
+  my $self = shift;
+  my $jfile = shift;
+  my $strdata = "";
+  open(CFG,$jfile);
+  while (my $l = <CFG>){
+    chomp($l);
+    $strdata .= $l;
+  }
+  close(CFG);
+  return JSON::PP::decode_json($strdata);
+}
+
+sub writelog(){
+  my $self = shift;
+  my $type = shift;
+  my $system = shift;
+  my $action = shift;
+  my $msg = shift;
+  $msg =~ s/\r//g;
+  $msg =~ s/\n//g;
+  open(LOG,">>".$self->{logfile});
+  print LOG strftime('%Y-%m-%d %H:%M:%S',localtime()).";".$type.";".$system.";".$action.";".$msg."\n";
+  close(LOG);
+}
+
+1;
\ No newline at end of file
diff --git a/pointeuse/server/home/dks/bin/lib/DB/PgSQL.pm b/pointeuse/server/home/dks/bin/lib/DB/PgSQL.pm
new file mode 100644 (file)
index 0000000..5971e5b
--- /dev/null
@@ -0,0 +1,349 @@
+package DB::PgSQL;
+
+use strict;
+use DBI;
+use File::Basename;
+use DBD::PgPP; 
+use URI::Encode qw(uri_encode uri_decode);
+use Encode;
+use Data::Dumper;
+use Text::Unidecode;
+
+
+sub new {
+    my $class = shift;
+    my $p = shift;
+    my $self = bless {}, $class;
+    $self->{debug} = 1;
+    $self->{dbh} = DBI->connect("DBI:PgPP:dbname=".$p->{dbname}.":host=".$p->{dbhost},$p->{dbuser},$p->{dbpasswd},{PrintError=>1,RaiseError=>1,AutoCommit=>1})  or return "query Connection Error!".$!;
+    return $self;
+}
+
+sub disconnect(){
+  my $self = shift;
+  return $self->{dbh}->disconnect();
+}
+
+sub securetext(){
+       my $self = shift;
+       my $text = shift;
+       $text =~ s/'/''/g;
+       return $text;
+}
+
+sub value(){
+  my $self = shift;
+  my $text = shift;
+  if ($text eq ""){
+    return 'null';
+  }
+  return "'".$text."'";
+}
+
+sub logerror(){
+  my $self = shift;
+  my $fn = shift;
+  my $stat = shift;
+
+  return ();
+}
+
+sub newuuid(){
+       my $self = shift;
+       my $rx = $self->query("SELECT uuid_in(md5(random()::text || clock_timestamp()::text)::cstring) as id;");
+       return $rx->{id};
+}
+
+sub query_unenc(){
+       my $self = shift;
+    my $stat = shift;
+
+    my $retdata = ();
+    $stat = encode("utf8", $stat);
+    if ($self->{debug} == 1){
+      print STDERR "QUERY_UNENC:\n".$stat."\n===\n";
+    }
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("query_unenc",$stat);
+
+               
+   $sth->execute() or return $self->logerror("query_unenc",$stat);
+   
+   my $data = $sth->fetchrow_hashref();
+   foreach my $k (keys %{$data}){
+      $retdata->{$k} = $data->{$k};#decode("utf-8",$data->{$k});
+   }
+   
+   $sth->finish();
+        
+   return $retdata;
+}
+
+sub query(){
+       my $self = shift;
+    my $stat = shift;
+    my $retdata = ();
+    $stat = encode("utf8", $stat);
+    if ($self->{debug} == 1){
+      print STDERR "QUERY:\n".$stat."\n===\n";
+    }
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("query",$stat);
+
+   $sth->execute() or return $self->logerror("query",$stat);
+   
+   my $data = $sth->fetchrow_hashref();
+   foreach my $k (keys %{$data}){
+      $retdata->{$k} = decode("utf-8",$data->{$k});
+   }
+   
+   $sth->finish();
+        
+   return $retdata;
+}
+
+sub querybykey(){
+    my $self = shift;
+    my $key = shift;
+    my $stat = shift;
+    my $retdata =();
+    if ($self->{debug} == 1){
+      print STDERR "QUERYBYKEY:\n".$stat."\n===\n";
+    }
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("querybykey",$stat);
+   $sth->execute() or return $self->logerror("querybykey",$stat);
+   while(my $data = $sth->fetchrow_hashref())
+   {
+     if (exists $data->{$key}){
+        foreach my $k (keys %{$data}){
+           $retdata->{$data->{$key}}{$k} =decode("utf-8",$data->{$k});
+        }
+     }
+   }
+   if (keys(%{$retdata}) == 0){
+    $retdata =();
+   }
+   $sth->finish();
+   return $retdata;
+}
+
+sub querysorted(){
+    my $self = shift;
+    my $stat = shift;
+    my $retdata = ();
+    if ($stat !~ /sessions/){
+      if ($self->{debug} == 1){
+        print STDERR "QUERYSORTED:\n".$stat."\n===\n";
+      }
+    } 
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("querysorted",$stat);
+   $sth->execute() or return $self->logerror("querysorted",$stat);
+   my $count = 0;
+   while(my $data = $sth->fetchrow_hashref()){
+                       foreach my $k (keys %{$data}){
+        if ($data->{$k} =~ /^{.*}$/){
+          $retdata->{$count}->{$k} = JSON::PP::decode_json($data->{$k});  
+        } else {
+          $retdata->{$count}->{$k} = decode("utf-8",$data->{$k});
+        }
+      }
+     $count++;
+   }
+   $sth->finish();
+   return $retdata;
+}
+
+sub exec(){
+    my $self = shift;
+    my $stat = shift;
+    my $retdata;
+    $stat = encode("UTF-8", $stat);
+    if ($self->{debug} == 1){
+      print STDERR "EXEC:\n".$stat."\n===\n";
+    }
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("exec",$stat);
+   $retdata->{success}  = $self->{dbh}->do($stat) or return $self->logerror("exec",$stat);
+   return $retdata;
+}
+
+sub queryarray(){
+   my $self = shift;
+   my $stat = shift;
+   my @retdata = ();
+  my $res = $self->querysorted($stat);
+  foreach my $r (sort {$a <=> $b} keys(%{$res})){
+    push(@retdata,$res->{$r});
+  }
+  return \@retdata;
+}
+
+
+# sub create_ddl_insert(){
+#      my $self = shift;
+#      my $data = shift;
+#      my $fields = ();
+#      my @ddl = ();
+#      foreach my $f (keys(%{$data})){
+#                      if (($f =~ /\_/) && ($f !~ /^ident_/) && ($f !~ /\_id$/)){
+#                              my $t = substr($f,0,index($f,"_"));
+#                              my $c = substr($f,length($t)+1);
+#                              $fields->{$t}->{$c} = $data->{$f};
+#                      } elsif ($f =~ /^ident_/){
+#         my $f2 = $f; 
+#         $f2 =~ s/^ident_//;
+
+#         my $t = substr($f2,0,index($f2,"_"));
+#                              my $c = substr($f2,length($t)+1);
+#          if ($c ne "id"){
+#            $fields->{$t}->{$c} = $data->{$f};
+#          }
+#       }
+
+#               }
+#      foreach my $tb (keys(%{$fields})){
+#              my @sqlcol = ();
+#              my @sqlval = ();
+#              foreach my $c (keys(%{$fields->{$tb}})){
+#                      my $v = $fields->{$tb}->{$c};
+#                      $v =~ s/'/''/g;
+#                      push (@sqlcol,$c);
+#                      if ($v eq ''){
+#                              $v = 'null';
+#                      } else {
+#                              $v = "'".$v."'";
+#                      }
+#                      push (@sqlval,$v);
+#              }
+#              push(@ddl,"INSERT INTO ".$tb." (".join(",",@sqlcol).") VALUES (".join(",",@sqlval).") returning id;");
+#      }
+#      return @ddl;
+# }
+
+
+# sub create_ddl_update(){
+#      my $self = shift;
+#      my $data = shift;
+#      my $fields = ();
+#      my @ddl = ();
+#      foreach my $f (keys(%{$data})){
+#                      if ($f =~ /^ident_/){
+#                              my $fx = substr($f,6);
+#                              my $t = substr($fx,0,index($fx,"_"));
+#                              my $c = substr($fx,length($t)+1);
+#                              $fields->{$t}->{cond}->{$c} = $data->{$f};
+#                      } elsif ( ($f !~ /^ident/) && ($f =~ /.+\_.+/) ){
+#                              my $t = substr($f,0,index($f,"_"));
+#                              my $c = substr($f,length($t)+1);
+#                              $fields->{$t}->{fields}->{$c} = $data->{$f};
+#                      }
+#               }
+#      foreach my $tb (keys(%{$fields})){
+#              my @sqlupd = ();
+#              my @sqlcond = ();
+#                      foreach my $c (keys(%{$fields->{$tb}->{fields}})){
+                               
+#                              my $v = $fields->{$tb}->{fields}->{$c};
+#                              $v =~ s/'/''/g;
+                               
+#         if ($c =~ /-/){
+#           my @jp = split('-',$c);
+#           if ($v eq ''){
+#                                        $v = 'null';
+#                                } else {
+#                                        $v = '"'.$v.'"';
+#                                }
+#           $c = 'jsonb_set(to_jsonb('.$jp[0].'),\'{"'.$jp[1].'"}\',\''.$v.'\')::json';
+#           push (@sqlupd,$jp[0]."=".$c);  
+#         }else {
+#           if ($v eq ''){
+#                                        $v = 'null';
+#                                } else {
+#                                        $v = "'".$v."'";
+#                                }
+#           push (@sqlupd,$c."=".$v);
+#         }
+                               
+#                      }
+#                      foreach my $c (keys(%{$fields->{$tb}->{cond}})){
+#                              my $v = $fields->{$tb}->{cond}->{$c};
+#                              $v =~ s/'/''/g;
+#                              if ($v eq ''){
+#                                      $v = 'null';
+#                              } else {
+#                                      $v = "'".$v."'";
+#                              }
+#                              push (@sqlcond,$c."=".$v);
+#                      }
+#              push(@ddl,"UPDATE ".$tb." SET ".join(",",@sqlupd)." WHERE ".join(" AND ",@sqlcond).";");
+#      } 
+       
+#      return @ddl; 
+# }
+
+# sub create_cnt_statement(){
+#      my $self = shift;
+#      my $data = shift;
+#      my $fields = ();
+#      my @ddl = ();
+#      foreach my $f (keys(%{$data})){
+#                      if ($f =~ /^ident_/){
+#                              my $fx = substr($f,6);
+#                              my $t = substr($fx,0,index($fx,"_"));
+#                              my $c = substr($fx,length($t)+1);
+#                              $fields->{$t}->{cond}->{$c} = $data->{$f};
+#                      } 
+#               }
+#      foreach my $tb (keys(%{$fields})){
+#              my @sqlcond = ();
+#                      foreach my $c (keys(%{$fields->{$tb}->{cond}})){
+#                              my $v = $fields->{$tb}->{cond}->{$c};
+#                              $v =~ s/'/''/g;
+#                              if ($v eq ''){
+#                                      $v = 'null';
+#                              } else {
+#                                      $v = "'".$v."'";
+#                              }
+#                              push (@sqlcond,$c."=".$v);
+#                      }
+     
+#              push(@ddl,"SELECT count(*) as cnt from ".$tb." WHERE ".join(" AND ",@sqlcond).";");
+#      } 
+#      return @ddl; 
+# }
+
+# sub create_ddl_delete(){
+#      my $self = shift;
+#      my $data = shift;
+#      my $fields = ();
+#      my @ddl = ();
+#      my @refcols = ();
+#      my $refdata = ();
+#      foreach my $f (keys(%{$data})){
+#                      if ($f =~ /^ident_/){
+#                              my ($t,$c) = $f =~ m/ident_(.+)\_(.+)/;
+                               
+#                              $fields->{$t}->{cond}->{$c} = $data->{$f};
+#                              push(@refcols,"'".$c.'_'.$t."'");
+#                              $refdata->{$c.'_'.$t} = $data->{$f};
+#                      } 
+#               }
+#      foreach my $tb (keys(%{$fields})){
+#              my @sqlcond = ();
+#              foreach my $c (keys(%{$fields->{$tb}->{cond}})){
+#                      my $v = $fields->{$tb}->{cond}->{$c};
+#                      $v =~ s/'/''/g;
+#                      push (@sqlcond,$c."='".$v."'");
+#              }
+#              push(@ddl,"DELETE FROM ".$tb." WHERE ".join(" AND ",@sqlcond).";");
+#      } 
+#      return @ddl;
+# }
+
+sub textunidecode(){
+  my $self = shift;
+  my $text = shift;
+  $text = lc(unidecode(decode("utf-8",$text)));
+  $text =~ s/^[a-z0-9]//g;
+  return $text;
+} 
+
+1;
+
diff --git a/pointeuse/server/home/dks/bin/lib/DB/SQLite.pm b/pointeuse/server/home/dks/bin/lib/DB/SQLite.pm
new file mode 100644 (file)
index 0000000..b76e4b7
--- /dev/null
@@ -0,0 +1,349 @@
+package DB::SQLite;
+
+use strict;
+use DBI;
+use File::Basename;
+use DBD::SQLite;
+use URI::Encode qw(uri_encode uri_decode);
+use Encode;
+use Data::Dumper;
+use Text::Unidecode;
+
+
+sub new {
+    my $class = shift;
+    my $p = shift;
+    my $self = bless {}, $class;
+    $self->{debug} = 1;
+    $self->{dbh} = DBI->connect("DBI:SQLite:dbname=".$p->{dbfile},'','',{PrintError=>1,RaiseError=>1,AutoCommit=>1})  or return "query Connection Error!".$!;
+    return $self;
+}
+
+sub disconnect(){
+  my $self = shift;
+  return $self->{dbh}->disconnect();
+}
+
+sub securetext(){
+       my $self = shift;
+       my $text = shift;
+       $text =~ s/'/''/g;
+       return $text;
+}
+
+sub value(){
+  my $self = shift;
+  my $text = shift;
+  if ($text eq ""){
+    return 'null';
+  }
+  return "'".$text."'";
+}
+
+sub logerror(){
+  my $self = shift;
+  my $fn = shift;
+  my $stat = shift;
+
+  return ();
+}
+
+sub newuuid(){
+       my $self = shift;
+       my $rx = $self->query("SELECT lower(hex( randomblob(4)) || '-' || hex( randomblob(2)) || '-' || hex( randomblob(2)) || '-' || hex( randomblob(2))  ||  '-' || hex(randomblob(6))) as id;");
+       return $rx->{id};
+}
+
+sub query_unenc(){
+       my $self = shift;
+    my $stat = shift;
+
+    my $retdata = ();
+    $stat = encode("utf8", $stat);
+    if ($self->{debug} == 1){
+      print STDERR "QUERY_UNENC:\n".$stat."\n===\n";
+    }
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("query_unenc",$stat);
+
+               
+   $sth->execute() or return $self->logerror("query_unenc",$stat);
+   
+   my $data = $sth->fetchrow_hashref();
+   foreach my $k (keys %{$data}){
+      $retdata->{$k} = $data->{$k};#decode("utf-8",$data->{$k});
+   }
+   
+   $sth->finish();
+        
+   return $retdata;
+}
+
+sub query(){
+       my $self = shift;
+    my $stat = shift;
+    my $retdata = ();
+    $stat = encode("utf8", $stat);
+    if ($self->{debug} == 1){
+      print STDERR "QUERY:\n".$stat."\n===\n";
+    }
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("query",$stat);
+
+   $sth->execute() or return $self->logerror("query",$stat);
+   
+   my $data = $sth->fetchrow_hashref();
+   foreach my $k (keys %{$data}){
+      $retdata->{$k} = decode("utf-8",$data->{$k});
+   }
+   
+   $sth->finish();
+        
+   return $retdata;
+}
+
+sub querybykey(){
+    my $self = shift;
+    my $key = shift;
+    my $stat = shift;
+    my $retdata =();
+    if ($self->{debug} == 1){
+      print STDERR "QUERYBYKEY:\n".$stat."\n===\n";
+    }
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("querybykey",$stat);
+   $sth->execute() or return $self->logerror("querybykey",$stat);
+   while(my $data = $sth->fetchrow_hashref())
+   {
+     if (exists $data->{$key}){
+        foreach my $k (keys %{$data}){
+           $retdata->{$data->{$key}}{$k} =decode("utf-8",$data->{$k});
+        }
+     }
+   }
+   if (keys(%{$retdata}) == 0){
+    $retdata =();
+   }
+   $sth->finish();
+   return $retdata;
+}
+
+sub querysorted(){
+    my $self = shift;
+    my $stat = shift;
+    my $retdata = ();
+    if ($stat !~ /sessions/){
+      if ($self->{debug} == 1){
+        print STDERR "QUERYSORTED:\n".$stat."\n===\n";
+      }
+    } 
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("querysorted",$stat);
+   $sth->execute() or return $self->logerror("querysorted",$stat);
+   my $count = 0;
+   while(my $data = $sth->fetchrow_hashref()){
+                       foreach my $k (keys %{$data}){
+        if ($data->{$k} =~ /^{.*}$/){
+          $retdata->{$count}->{$k} = JSON::PP::decode_json($data->{$k});  
+        } else {
+          $retdata->{$count}->{$k} = decode("utf-8",$data->{$k});
+        }
+      }
+     $count++;
+   }
+   $sth->finish();
+   return $retdata;
+}
+
+sub exec(){
+    my $self = shift;
+    my $stat = shift;
+    my $retdata;
+    $stat = encode("UTF-8", $stat);
+    if ($self->{debug} == 1){
+      print STDERR "EXEC:\n".$stat."\n===\n";
+    }
+    my $sth = $self->{dbh}->prepare($stat) or return $self->logerror("exec",$stat);
+   $retdata->{success}  = $self->{dbh}->do($stat) or return $self->logerror("exec",$stat);
+   return $retdata;
+}
+
+sub queryarray(){
+   my $self = shift;
+   my $stat = shift;
+   my @retdata = ();
+  my $res = $self->querysorted($stat);
+  foreach my $r (sort {$a <=> $b} keys(%{$res})){
+    push(@retdata,$res->{$r});
+  }
+  return \@retdata;
+}
+
+
+sub create_ddl_insert(){
+       my $self = shift;
+       my $data = shift;
+       my $fields = ();
+       my @ddl = ();
+       foreach my $f (keys(%{$data})){
+                       if (($f =~ /\_/) && ($f !~ /^ident_/) && ($f !~ /\_id$/)){
+                               my $t = substr($f,0,index($f,"_"));
+                               my $c = substr($f,length($t)+1);
+                               $fields->{$t}->{$c} = $data->{$f};
+                       } elsif ($f =~ /^ident_/){
+        my $f2 = $f; 
+        $f2 =~ s/^ident_//;
+
+        my $t = substr($f2,0,index($f2,"_"));
+                               my $c = substr($f2,length($t)+1);
+         if ($c ne "id"){
+           $fields->{$t}->{$c} = $data->{$f};
+         }
+      }
+
+                }
+       foreach my $tb (keys(%{$fields})){
+               my @sqlcol = ();
+               my @sqlval = ();
+               foreach my $c (keys(%{$fields->{$tb}})){
+                       my $v = $fields->{$tb}->{$c};
+                       $v =~ s/'/''/g;
+                       push (@sqlcol,$c);
+                       if ($v eq ''){
+                               $v = 'null';
+                       } else {
+                               $v = "'".$v."'";
+                       }
+                       push (@sqlval,$v);
+               }
+               push(@ddl,"INSERT INTO ".$tb." (".join(",",@sqlcol).") VALUES (".join(",",@sqlval).") returning id;");
+       }
+       return @ddl;
+}
+
+
+sub create_ddl_update(){
+       my $self = shift;
+       my $data = shift;
+       my $fields = ();
+       my @ddl = ();
+       foreach my $f (keys(%{$data})){
+                       if ($f =~ /^ident_/){
+                               my $fx = substr($f,6);
+                               my $t = substr($fx,0,index($fx,"_"));
+                               my $c = substr($fx,length($t)+1);
+                               $fields->{$t}->{cond}->{$c} = $data->{$f};
+                       } elsif ( ($f !~ /^ident/) && ($f =~ /.+\_.+/) ){
+                               my $t = substr($f,0,index($f,"_"));
+                               my $c = substr($f,length($t)+1);
+                               $fields->{$t}->{fields}->{$c} = $data->{$f};
+                       }
+                }
+       foreach my $tb (keys(%{$fields})){
+               my @sqlupd = ();
+               my @sqlcond = ();
+                       foreach my $c (keys(%{$fields->{$tb}->{fields}})){
+                               
+                               my $v = $fields->{$tb}->{fields}->{$c};
+                               $v =~ s/'/''/g;
+                               
+        if ($c =~ /-/){
+          my @jp = split('-',$c);
+          if ($v eq ''){
+                                         $v = 'null';
+                                 } else {
+                                         $v = '"'.$v.'"';
+                                 }
+          $c = 'jsonb_set(to_jsonb('.$jp[0].'),\'{"'.$jp[1].'"}\',\''.$v.'\')::json';
+          push (@sqlupd,$jp[0]."=".$c);  
+        }else {
+          if ($v eq ''){
+                                         $v = 'null';
+                                 } else {
+                                         $v = "'".$v."'";
+                                 }
+          push (@sqlupd,$c."=".$v);
+        }
+                               
+                       }
+                       foreach my $c (keys(%{$fields->{$tb}->{cond}})){
+                               my $v = $fields->{$tb}->{cond}->{$c};
+                               $v =~ s/'/''/g;
+                               if ($v eq ''){
+                                       $v = 'null';
+                               } else {
+                                       $v = "'".$v."'";
+                               }
+                               push (@sqlcond,$c."=".$v);
+                       }
+               push(@ddl,"UPDATE ".$tb." SET ".join(",",@sqlupd)." WHERE ".join(" AND ",@sqlcond).";");
+       } 
+       
+       return @ddl; 
+}
+
+sub create_cnt_statement(){
+       my $self = shift;
+       my $data = shift;
+       my $fields = ();
+       my @ddl = ();
+       foreach my $f (keys(%{$data})){
+                       if ($f =~ /^ident_/){
+                               my $fx = substr($f,6);
+                               my $t = substr($fx,0,index($fx,"_"));
+                               my $c = substr($fx,length($t)+1);
+                               $fields->{$t}->{cond}->{$c} = $data->{$f};
+                       } 
+                }
+       foreach my $tb (keys(%{$fields})){
+               my @sqlcond = ();
+                       foreach my $c (keys(%{$fields->{$tb}->{cond}})){
+                               my $v = $fields->{$tb}->{cond}->{$c};
+                               $v =~ s/'/''/g;
+                               if ($v eq ''){
+                                       $v = 'null';
+                               } else {
+                                       $v = "'".$v."'";
+                               }
+                               push (@sqlcond,$c."=".$v);
+                       }
+     
+               push(@ddl,"SELECT count(*) as cnt from ".$tb." WHERE ".join(" AND ",@sqlcond).";");
+       } 
+       return @ddl; 
+}
+
+sub create_ddl_delete(){
+       my $self = shift;
+       my $data = shift;
+       my $fields = ();
+       my @ddl = ();
+       my @refcols = ();
+       my $refdata = ();
+       foreach my $f (keys(%{$data})){
+                       if ($f =~ /^ident_/){
+                               my ($t,$c) = $f =~ m/ident_(.+)\_(.+)/;
+                               
+                               $fields->{$t}->{cond}->{$c} = $data->{$f};
+                               push(@refcols,"'".$c.'_'.$t."'");
+                               $refdata->{$c.'_'.$t} = $data->{$f};
+                       } 
+                }
+       foreach my $tb (keys(%{$fields})){
+               my @sqlcond = ();
+               foreach my $c (keys(%{$fields->{$tb}->{cond}})){
+                       my $v = $fields->{$tb}->{cond}->{$c};
+                       $v =~ s/'/''/g;
+                       push (@sqlcond,$c."='".$v."'");
+               }
+               push(@ddl,"DELETE FROM ".$tb." WHERE ".join(" AND ",@sqlcond).";");
+       } 
+       return @ddl;
+}
+
+sub textunidecode(){
+  my $self = shift;
+  my $text = shift;
+  $text = lc(unidecode(decode("utf-8",$text)));
+  $text =~ s/^[a-z0-9]//g;
+  return $text;
+} 
+
+1;
+
diff --git a/pointeuse/server/home/dks/bin/lib/SSH.pm b/pointeuse/server/home/dks/bin/lib/SSH.pm
new file mode 100644 (file)
index 0000000..ce20cf8
--- /dev/null
@@ -0,0 +1,61 @@
+package SSH;
+
+use strict;
+use Net::OpenSSH;
+use Data::Dumper;
+sub new {
+    my $class = shift;
+    my $p = shift;
+    my $self = bless {}, $class;
+    $self->{opts} = $p->{opts};
+    $self->{host} = $p->{host};
+    return $self;
+}
+
+sub execremote(){
+  my $self = shift;
+  my $cmd = shift;
+  print $cmd."\n";
+  #my $stx = 0;
+  my $ssh = Net::OpenSSH->new($self->{host},%{$self->{opts}}); 
+  if ($ssh->error){
+        print "Couldn't establish SSH connection: ". $ssh->error;
+        return 1;
+  }
+  my $stx =$ssh->system($cmd);
+  #returns true (1) on success
+  if ($stx == 1){
+        $stx = 0;
+  }
+  if ($ssh->error){
+        print "remote cmd failed!". $ssh->error;
+        return 1;
+  }
+  return $stx;
+}
+
+sub piperemote(){
+  my $self = shift;
+  my $cmd = shift;
+  $cmd =~ s/"/\\\"/g;
+  my $sshcmd = 'ssh -o ConnectTimeout=10 -p '.$self->{opts}->{port}.' '.$self->{opts}->{user}.'@'.$self->{host}.' "'.$cmd.'"';
+  #print $sshcmd."\n--\n";
+  #print "\n---\n".$sshcmd."\n---\n";
+   my $out = `$sshcmd`;
+#   print "pipe cmd:".$cmd." - to:".$self->{host}."-".Dumper($self->{opts})."\n";
+#    my $ssh = Net::OpenSSH->new($self->{host},%{$self->{opts}}); 
+#   if ($ssh->error){
+#         print "Couldn't establish SSH connection: ". $ssh->error;
+#         return 1;
+#   }
+#   #print $cmd."\n";
+#   my $out = $ssh->capture($cmd);
+#   if ($ssh->error){
+#         print "remote cmd failed!". $ssh->error;
+#         return $out;
+#   }
+  #print $out;
+  return $out;
+}
+
+1;
diff --git a/pointeuse/server/home/dks/bin/sync_pot_to_timetracker.pl b/pointeuse/server/home/dks/bin/sync_pot_to_timetracker.pl
new file mode 100644 (file)
index 0000000..5f9ab35
--- /dev/null
@@ -0,0 +1,120 @@
+#!/usr/bin/env perl
+use strict;
+use Getopt::Long;
+use Data::Dumper;
+use File::Basename;
+use FindBin qw($RealBin);
+use JSON::PP;
+use lib (dirname($RealBin).'/lib');
+use DB::PgSQL; 
+use ConfigFile;
+use SSH;
+use POSIX qw/strftime/;
+# check if running
+#print "PID:".$$."\n";
+my $cmd = 'ps ax | grep '.basename($0).' | grep -v "grep" | awk \'{ print $1 }\'';
+my $cfgpath = dirname($RealBin).'/conf';
+my $logpath = dirname($RealBin).'/log';
+my $cfgdata = ConfigFile->new({logfile => $logpath.'/'.strftime('%Y-%m-%d',localtime()).'.log'});
+#print $cmd."\n";
+my $isrunning = `$cmd`;
+chomp($isrunning);
+#print "Result:".$isrunning."\n";
+if ($isrunning ne "$$"){
+  $cfgdata->writelog("script","params","start","script already running on PID:$$!");
+  print basename($0)." already runs!\n";
+  exit(1);
+}
+
+
+
+my $timetracker = "";
+my $system = "";
+GetOptions( "timetracker|t=s" => \$timetracker);
+print "start htx(down) sync pot to timetracker $timetracker\n";
+
+if (($timetracker eq "") || (! -e $cfgpath.'/'.$timetracker.'.conf')){
+  $cfgdata->writelog("script","params","start","no timetracker in params!");
+  print "no timetracker!\n";
+  exit(2);
+}
+my $ttcfgfile = dirname($RealBin).'/conf/'.$timetracker.'.conf';
+my $ttcfg = $cfgdata->read_conf($ttcfgfile);
+#print Dumper($ttcfg);
+if (exists($ttcfg->{syncdb}) && exists($ttcfg->{syncschema}) && ($ttcfg->{syncdb} ne "") && ($ttcfg->{syncschema} ne "") && -f $cfgpath.'/'.$ttcfg->{syncdb}.'.conf'){
+  my $ttssh = SSH->new({host => $ttcfg->{sshhost},opts => {user => $ttcfg->{sshuser}, password =>  $ttcfg->{sshpwd}, port => $ttcfg->{sshport}, strict_mode => 0}});
+  my $syscfgfile = dirname($RealBin).'/conf/'.$ttcfg->{syncdb}.'.conf';
+  my $syscfg = $cfgdata->read_conf($syscfgfile);
+  #print Dumper($syscfg);
+  my $sysdb = DB::PgSQL->new({dbname => $syscfg->{dbname},dbhost => $syscfg->{dbhost},dbuser=>$syscfg->{dbuser}, dbpasswd => $syscfg->{dbpasswd}});
+  my $newts = $sysdb->query("select to_char(now(),'YYYY-MM-DD HH24:MI:SS') as newts;");
+  my $staffsql = "select id,prename,surname,istimetrackenabled,isdeleted from ".$ttcfg->{syncschema}.".staff";
+  if (exists($ttcfg->{lastsyncdown}) && ($ttcfg->{lastsyncdown} =~ /\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d/)){
+    my $tmpsyncdate = substr($ttcfg->{lastsyncdown},0,16);
+    $staffsql .= "  where modified > to_timestamp('".$tmpsyncdate."','YYYY-MM-DD HH24:MI')";
+  }
+  $staffsql .= ";";
+  my $st = $sysdb->querysorted($staffsql);
+  foreach my $s (keys(%{$st})){
+    my $ttsql = "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES (".$sysdb->value($st->{$s}->{id}).",".$sysdb->value($st->{$s}->{prename}).",".$sysdb->value($st->{$s}->{surname}).",".(($st->{$s}->{istimetrackenabled} eq "1")?'null':"'1'").",".$sysdb->value($st->{$s}->{isdeleted}).");";
+    
+    my $cmd = 'sqlite3 "'.$ttcfg->{datapath}.'/'.$ttcfg->{dbfile}.'" "'.$ttsql.'"';
+    $cfgdata->writelog("ssh","syncdown","sql",$cmd);
+    #print $cmd."\n"; 
+    my $out = $ttssh->piperemote($cmd);
+    if ($out eq ""){
+       print $ttcfg->{sshhost}." noting to update or Connection timed out!\n";
+       exit(3);
+    }
+  }
+  #print "New TS: ".$newts->{newts}."\n";
+  my $replts = "sed -i 's/^lastsyncdown=.*/lastsyncdown=".$newts->{newts}."/' ".$ttcfgfile;
+  my $out = `$replts`;
+  if ($out ne ""){
+    $cfgdata->writelog("config","sed","errror","error writing timetamp to config ".$timetracker.".conf!".$out);
+  }
+  #print "newcfg\n";
+  #print $out."\n";
+} else {
+  $cfgdata->writelog("script","params","start","no System DB or schema found!");
+  print "no System DB or schema found!\n";
+  exit(2);
+}
+# if (($system eq "") || (! -e $cfgpath.'/'.$system.'.conf')){
+#   $cfgdata->writelog("script","params","start","no system in params!");
+#   print "no system\n";
+#   exit(3);
+# }
+
+#$sysdb->
+#if (! -e $cfg->{datapath}.'/'.$cfg->{dbfile}){
+#  print "no database ".$cfg->{datapath}.'/'.$cfg->{dbfile}." found!\n";
+#  exit(1);
+#}
+
+#my $jdata = &readdatafile();
+#my $db = DB::SQLite->new({dbfile => $cfg->{datapath}.'/'.$cfg->{dbfile}});
+#my @k = keys(%{$jdata->{result}});
+#foreach my $fn (keys(%{$jdata->{result}})){
+#  foreach my $j (keys(%{$jdata->{$fn}->{data}})){
+#    my $data = $jdata->{result}->{$fn}->{$j};
+    #print Dumper($user);
+#    if ($fn eq "getusers"){
+#      my $sql = "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES (".$db->value($data->{id}).",".$db->value($data->{prename}).",".$db->value($data->{surname}).",".(($data->{istimetrackenabled} eq "1")?'null':"'1'").",".$db->value($data->{isdeleted}).");";
+#      print $sql."\n";
+#      $db->exec($sql);
+#    } elsif ($fn eq "getpotdata"){
+#      my $sql = "REPLACE INTO staffworktimes (id,id_staff,starttime1,endtime1,starttime2,endtime2) VALUES (".$db->value($data->{id}).",".$db->value($data->{id_staff}).",".$db->value($data->{timestart1}).",".$db->value($data->{timeend1}).",".$db->value($data->{timestart2}).",".$db->value($data->{timeend2}).");";
+#      print $sql."\n";
+#      $db->exec($sql);
+#    }
+
+#  }
+#}
+
+#unlink($datafile);
+
+
+
+
+
diff --git a/pointeuse/server/home/dks/bin/sync_timetracker_to_pot.pl b/pointeuse/server/home/dks/bin/sync_timetracker_to_pot.pl
new file mode 100644 (file)
index 0000000..5401bb6
--- /dev/null
@@ -0,0 +1,131 @@
+#!/usr/bin/env perl
+use strict;
+use Getopt::Long;
+use Data::Dumper;
+use File::Basename;
+use FindBin qw($RealBin);
+use JSON::PP;
+use lib (dirname($RealBin).'/lib');
+use DB::PgSQL; 
+use ConfigFile;
+use SSH;
+use POSIX qw/strftime/;
+# check if running
+#print "PID:".$$."\n";
+my $cmd = 'ps ax | grep '.basename($0).' | grep -v "grep" | awk \'{ print $1 }\'';
+my $cfgpath = dirname($RealBin).'/conf';
+my $logpath = dirname($RealBin).'/log';
+my $cfgdata = ConfigFile->new({logfile => $logpath.'/'.strftime('%Y-%m-%d',localtime()).'.log'});
+#print $cmd."\n";
+my $isrunning = `$cmd`;
+chomp($isrunning);
+#print "Result:".$isrunning."\n";
+if ($isrunning ne "$$"){
+  $cfgdata->writelog("script","params","start","script already running on PID:$$!");
+  print basename($0)." already runs!\n";
+  exit(1);
+}
+
+
+
+my $timetracker = "";
+my $system = "";
+GetOptions( "timetracker|t=s" => \$timetracker);
+print "start htx(up) sync timetracker  $timetracker to pot\n";
+
+if (($timetracker eq "") || (! -e $cfgpath.'/'.$timetracker.'.conf')){
+  $cfgdata->writelog("script","params","start","no timetracker in params!");
+  print "no timetracker!\n";
+  exit(2);
+}
+my $ttcfgfile = dirname($RealBin).'/conf/'.$timetracker.'.conf';
+my $ttcfg = $cfgdata->read_conf($ttcfgfile);
+#print Dumper($ttcfg);
+if (exists($ttcfg->{syncdb}) && exists($ttcfg->{syncschema}) && ($ttcfg->{syncdb} ne "") && ($ttcfg->{syncschema} ne "") && -f $cfgpath.'/'.$ttcfg->{syncdb}.'.conf'){
+  my $ttssh = SSH->new({host => $ttcfg->{sshhost},opts => {user => $ttcfg->{sshuser}, password =>  $ttcfg->{sshpwd}, port => $ttcfg->{sshport}, strict_mode => 0}});
+  my $syscfgfile = dirname($RealBin).'/conf/'.$ttcfg->{syncdb}.'.conf';
+  my $syscfg = $cfgdata->read_conf($syscfgfile);
+  #print Dumper($syscfg);
+  my $sysdb = DB::PgSQL->new({dbname => $syscfg->{dbname},dbhost => $syscfg->{dbhost},dbuser=>$syscfg->{dbuser}, dbpasswd => $syscfg->{dbpasswd}});
+  my $newts = $sysdb->query("select to_char(now(),'YYYY-MM-DD HH24:MI:SS') as newts;");
+  my $ttsql = "select id,id_staff,stamp_in,stamp_out from timetracks ";
+  if (exists($ttcfg->{lastsyncup}) && ($ttcfg->{lastsyncup} =~ /\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d/)){
+    $ttsql .= "  where stamp_in >= '".$ttcfg->{lastsyncup}."' or stamp_out >= '".$ttcfg->{lastsyncup}."'";
+  }
+  $ttsql .= ";";
+  my $cmd = 'sqlite3 "'.$ttcfg->{datapath}.'/'.$ttcfg->{dbfile}.'" "'.$ttsql.'"';
+  
+  $cfgdata->writelog("ssh","syncup","sqlite",$cmd);
+  my $out = $ttssh->piperemote($cmd);
+  #print "->$out<-\n";
+  if ($out eq ""){
+       print $ttcfg->{sshhost}.": nothing to update or Connection Time Out!\n";
+       exit(3);
+  }
+  #print $out;
+  my @ttdata = split("\n",$out);
+  #print Dumper(@ttdata);
+  foreach my $tt (@ttdata){
+    #print $tt."\n";
+    chomp($tt);
+    my @cols = split(/\|/,$tt);
+    #print Dumper(@cols);
+    my $sysrowsql = "INSERT INTO ".$ttcfg->{syncschema}.".timetracker (id,id_staff,daydate,stamp_in) VALUES ('".$cols[0]."','".$cols[1]."',date('".substr($cols[2],0,10)."'),'".$cols[2]."') on conflict on constraint timetracker_pkey do nothing;";
+    if ($cols[3] ne ""){
+      $sysrowsql .= "UPDATE ".$ttcfg->{syncschema}.".timetracker set stamp_out='".$cols[3]."' where stamp_out is null and id='".$cols[0]."';";
+    }
+    #print $sysrowsql."\n--\n";
+    $cfgdata->writelog("pot","syncup","sql",$sysrowsql); 
+    my $st = $sysdb->exec($sysrowsql);
+  }
+  print "New TS: ".$newts->{newts}."\n";
+  # 
+  my $replts = "sed -i 's/^lastsyncup=.*/lastsyncup=".$newts->{newts}."/' ".$ttcfgfile;
+  $out = `$replts`;
+  if ($out ne ""){
+    $cfgdata->writelog("config","sed","errror","error writing timetamp to config ".$timetracker.".conf!".$out);
+  }
+   
+} else {
+  $cfgdata->writelog("script","params","start","no System DB or schema found!");
+  print "no System DB or schema found!\n";
+  exit(2);
+}
+# if (($system eq "") || (! -e $cfgpath.'/'.$system.'.conf')){
+#   $cfgdata->writelog("script","params","start","no system in params!");
+#   print "no system\n";
+#   exit(3);
+# }
+
+#$sysdb->
+#if (! -e $cfg->{datapath}.'/'.$cfg->{dbfile}){
+#  print "no database ".$cfg->{datapath}.'/'.$cfg->{dbfile}." found!\n";
+#  exit(1);
+#}
+
+#my $jdata = &readdatafile();
+#my $db = DB::SQLite->new({dbfile => $cfg->{datapath}.'/'.$cfg->{dbfile}});
+#my @k = keys(%{$jdata->{result}});
+#foreach my $fn (keys(%{$jdata->{result}})){
+#  foreach my $j (keys(%{$jdata->{$fn}->{data}})){
+#    my $data = $jdata->{result}->{$fn}->{$j};
+    #print Dumper($user);
+#    if ($fn eq "getusers"){
+#      my $sql = "REPLACE INTO staff (id,prename,surname,isdisabled,isdeleted) VALUES (".$db->value($data->{id}).",".$db->value($data->{prename}).",".$db->value($data->{surname}).",".(($data->{istimetrackenabled} eq "1")?'null':"'1'").",".$db->value($data->{isdeleted}).");";
+#      print $sql."\n";
+#      $db->exec($sql);
+#    } elsif ($fn eq "getpotdata"){
+#      my $sql = "REPLACE INTO staffworktimes (id,id_staff,starttime1,endtime1,starttime2,endtime2) VALUES (".$db->value($data->{id}).",".$db->value($data->{id_staff}).",".$db->value($data->{timestart1}).",".$db->value($data->{timeend1}).",".$db->value($data->{timestart2}).",".$db->value($data->{timeend2}).");";
+#      print $sql."\n";
+#      $db->exec($sql);
+#    }
+
+#  }
+#}
+
+#unlink($datafile);
+
+
+
+
+
diff --git a/pointeuse/server/home/dks/bin/syncpot_alicehartmann.sh b/pointeuse/server/home/dks/bin/syncpot_alicehartmann.sh
new file mode 100644 (file)
index 0000000..8de0370
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/bash
+PERLBINARY="/home/posdab/perl5/perlbrew/perls/perl-5.28.2/bin/perl" 
+${PERLBINARY} /home/posdab/pot/bin/htx_syncup.pl -t dhartmann01
+${PERLBINARY} /home/posdab/pot/bin/htx_syncdown.pl -t dhartmann01
+${PERLBINARY} /home/posdab/pot/bin/htx_syncup.pl -t dhartmann02
+${PERLBINARY} /home/posdab/pot/bin/htx_syncdown.pl -t dhartmann02
+${PERLBINARY} /home/posdab/pot/bin/htx_syncup.pl -t dhartmann03
+${PERLBINARY} /home/posdab/pot/bin/htx_syncdown.pl -t dhartmann03
+
diff --git a/pointeuse/server/home/dks/bin/syncpot_elch.sh b/pointeuse/server/home/dks/bin/syncpot_elch.sh
new file mode 100644 (file)
index 0000000..e476f70
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/bash
+PERLBINARY="/home/posdab/perl5/perlbrew/perls/perl-5.28.2/bin/perl" 
+${PERLBINARY} /home/posdab/pot/bin/htx_syncup.pl -t elch
+${PERLBINARY} /home/posdab/pot/bin/htx_syncdown.pl -t elch
+
diff --git a/pointeuse/server/home/dks/bin/syncpot_ldiner.sh b/pointeuse/server/home/dks/bin/syncpot_ldiner.sh
new file mode 100644 (file)
index 0000000..9d255a7
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/bash
+PERLBINARY="/home/posdab/perl5/perlbrew/perls/perl-5.28.2/bin/perl" 
+${PERLBINARY} /home/posdab/pot/bin/htx_syncup.pl -t lousdiner
+${PERLBINARY} /home/posdab/pot/bin/htx_syncdown.pl -t lousdiner
+
diff --git a/pointeuse/server/home/dks/bin/testsync.sh b/pointeuse/server/home/dks/bin/testsync.sh
new file mode 100644 (file)
index 0000000..bbd61d4
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+curl -H "Content-type: application/json" --user "kilian:fb1ia1ka" \
+-X POST --data '{"fn":"queryarray","cl":"data","sql":"select * from alicehartmann.staff"}' https://htx.plandutravail.lu/htx/api.php
\ No newline at end of file
diff --git a/pointeuse/server/home/dks/conf/dhartmann01.conf b/pointeuse/server/home/dks/conf/dhartmann01.conf
new file mode 100644 (file)
index 0000000..f8035be
--- /dev/null
@@ -0,0 +1,11 @@
+datapath=/home/pot/.hourtrax
+dbfile=hourtrax.sqlite
+sshuser=pot
+sshpwd=sai4seip
+sshhost=172.16.10.170
+sshport=3587
+syncschema=alicehartmann
+syncdb=pot
+lastsyncup=2021-01-22 08:57:44
+lastsyncdown=2021-02-03 14:45:11
+
diff --git a/pointeuse/server/home/dks/conf/dhartmann02.conf b/pointeuse/server/home/dks/conf/dhartmann02.conf
new file mode 100644 (file)
index 0000000..7dd71e9
--- /dev/null
@@ -0,0 +1,11 @@
+datapath=/home/pot/.hourtrax
+dbfile=hourtrax.sqlite
+sshuser=pot
+sshpwd=sai4seip
+sshhost=172.16.10.174
+sshport=3587
+syncschema=alicehartmann
+syncdb=pot
+lastsyncup=2021-04-07 07:15:21
+lastsyncdown=2021-02-03 14:45:12
+
diff --git a/pointeuse/server/home/dks/conf/dhartmann03.conf b/pointeuse/server/home/dks/conf/dhartmann03.conf
new file mode 100644 (file)
index 0000000..f5ff6a1
--- /dev/null
@@ -0,0 +1,11 @@
+datapath=/home/pot/.hourtrax
+dbfile=hourtrax.sqlite
+sshuser=pot
+sshpwd=sai4seip
+sshhost=172.16.10.178
+sshport=3587
+syncschema=alicehartmann
+syncdb=pot
+lastsyncup=2021-01-22 08:50:50
+lastsyncdown=2021-02-03 14:45:23
+
diff --git a/pointeuse/server/home/dks/conf/elch.conf b/pointeuse/server/home/dks/conf/elch.conf
new file mode 100644 (file)
index 0000000..d145e30
--- /dev/null
@@ -0,0 +1,17 @@
+datapath=/home/dks/.hourtrax
+dbfile=hourtrax.sqlite
+#mode=deployment
+#mode=development
+sshuser=dks
+sshpwd=sai4seip
+sshhost=172.16.10.154
+#synctype=ssh
+sshport=3587
+syncschema=elch
+syncdb=pot
+#dbuser=potlu2_user
+#dbpasswd=dMY8xGB6cBLzrDGE
+#dbhost=sql12.your-server.de
+#dbname=potlu2_db
+lastsyncup=2021-01-22 08:05:01
+lastsyncdown=2021-01-27 20:05:02
diff --git a/pointeuse/server/home/dks/conf/lousdiner.conf b/pointeuse/server/home/dks/conf/lousdiner.conf
new file mode 100644 (file)
index 0000000..0183129
--- /dev/null
@@ -0,0 +1,12 @@
+datapath=/home/pot/.hourtrax
+dbfile=hourtrax.sqlite
+sshuser=pot
+sshpwd=sai4seip
+sshhost=172.16.10.182
+sshport=3587
+syncschema=lousdiner
+syncdb=pot
+lastsyncup=2021-02-08 11:00:26
+lastsyncdown=
+
+
diff --git a/pointeuse/server/home/dks/conf/pot.conf b/pointeuse/server/home/dks/conf/pot.conf
new file mode 100644 (file)
index 0000000..bcdddcd
--- /dev/null
@@ -0,0 +1,5 @@
+mode=development
+dbuser=potlu2_user
+dbpasswd=dMY8xGB6cBLzrDGE
+dbhost=sql12.your-server.de
+dbname=potlu2_db
diff --git a/pointeuse/server/home/dks/public_html/.htaccess b/pointeuse/server/home/dks/public_html/.htaccess
new file mode 100644 (file)
index 0000000..7010097
--- /dev/null
@@ -0,0 +1,8 @@
+#RewriteEngine on
+DirectoryIndex index.html index.php
+#AddHandler cgi-script .cgi
+#AuthType Basic
+#AuthName "Restricted"
+#AuthUserFile /home/dks/public_html/.htpasswd
+#Require valid-user
+#
diff --git a/pointeuse/server/home/dks/public_html/.htpasswd b/pointeuse/server/home/dks/public_html/.htpasswd
new file mode 100644 (file)
index 0000000..deead71
--- /dev/null
@@ -0,0 +1,2 @@
+kilian:$apr1$ap8gpaKM$pfrcK1QINojzNYqocelTy.
+htx:$apr1$knL66PWn$qiwrkdbOzs3I86ZNLJjS5/
diff --git a/pointeuse/server/home/dks/public_html/htx/.htaccess b/pointeuse/server/home/dks/public_html/htx/.htaccess
new file mode 100644 (file)
index 0000000..87ad108
--- /dev/null
@@ -0,0 +1,5 @@
+AuthType Basic
+AuthName "Restricted"
+AuthUserFile /home/dks/public_html/.htpasswd
+Require valid-user
+
diff --git a/pointeuse/server/home/dks/public_html/htx/api.php b/pointeuse/server/home/dks/public_html/htx/api.php
new file mode 100644 (file)
index 0000000..f79a4a1
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+  //  require('../composer/vendor/mustache/mustache/src/Mustache/Autoloader.php');
+  //  Mustache_Autoloader::register();
+   $mainclasses = scandir("lib");
+   foreach ($mainclasses as $key => $value)
+   {
+    if ((is_file("lib/".$value) && strpos($value,'.') !== 0)  && substr_compare($value, ".php", -strlen(".php")) === 0){
+      require("lib/".$value);
+    }  
+   }
+   $moduleclasses = scandir("lib/modules");
+   foreach ($moduleclasses as $key => $value)
+   {
+    if ((is_file("lib/modules/".$value) && strpos($value,'.') !== 0)  && substr_compare($value, ".php", -strlen(".php")) === 0){
+      //error_log($value);
+      require("lib/modules/".$value);
+    }
+   }
+
+   $db = new database($cfg["db"]);
+  //  $sess = new session($db);
+   $vars = array();
+   $html = array();
+  //  if (isset($_COOKIE[$cfg["cookie"]])){
+  //   $vars["sid"] = $_COOKIE[$cfg["cookie"]]; 
+  //  }
+  //  if (isset($vars["sid"]) && ($vars["sid"] != "")){
+  //   $vars["session"] = $sess->getSession($vars["sid"]);
+  //  } else {
+  //   error_log("No Session!"); 
+  //  }
+   $params = array();
+  //  $html["session"] = $vars["session"];
+   //error_log(print_r($vars,true));
+   $params = json_decode(file_get_contents('php://input'), true);
+   //$params =$_GET;
+   //$html["params"] = $params;
+   //$html["cfg"] = $cfg;
+   file_put_contents("data/params.log",date('Y-m-d H:i:s').":".print_r($params,true)."\n",FILE_APPEND);
+   if (isset($params["cl"]) && isset($params["fn"]) && $params["cl"] != "database"){
+    if (class_exists($params["cl"])) {
+      $strclass=$params["cl"];
+      $cl = new $strclass($db,$cfg);
+      if (!method_exists($cl,$params["fn"])){
+        $html["error"] = "class ".$params["cl"]."->method ".$params["fn"]." does not exist!";
+      }
+      $r = new ReflectionMethod($strclass, $params["fn"]);
+      $metparams = $r->getParameters();
+      $fnp = array();
+      $prcnt = 0;
+      foreach ($metparams as $p) {
+        if (isset($params[$p->getName()])){
+          array_push($fnp,$params[$p->getName()]);
+        }
+        if ($p->isOptional() === false){
+          $prcnt++;
+        }
+        $html["fnparams"][$p->getName()] = (($p->isOptional() === true)?"optional":"required");
+      }
+      if (count($fnp) < $prcnt){
+        $html["error"] = "Function has ".$prcnt." required parameters!";
+      } else {
+        $html["data"] = call_user_func_array(array($cl, $params["fn"]), $fnp);
+      }
+    } else {
+      $html["error"] = "class ".$params["cl"]." does not exist!";
+    }
+   }
+  header('Content-Type: application/json');
+  echo json_encode($html);
+
+?>
diff --git a/pointeuse/server/home/dks/public_html/htx/cmds.log b/pointeuse/server/home/dks/public_html/htx/cmds.log
new file mode 100644 (file)
index 0000000..6a67a8c
--- /dev/null
@@ -0,0 +1,195 @@
+dhart-pot02;bin/clearfingerprint.sh c606a41a-613b-7e1d-64a4-13375a44e85fdhart-pot03;bin/clearfingerprint.sh c606a41a-613b-7e1d-64a4-13375a44e85fdhart-pot02;bin/clearfingerprint.sh c606a41a-613b-7e1d-64a4-13375a44e85fdhart-pot03;bin/clearfingerprint.sh c606a41a-613b-7e1d-64a4-13375a44e85fdhart-pot02;bin/clearfingerprint.sh 6f8036b4-338f-a581-2256-4e8c59646836dhart-pot03;bin/clearfingerprint.sh 6f8036b4-338f-a581-2256-4e8c59646836dhart-pot02;bin/setstaff.sh 'id=;staffnumber=;prename=;surname=;isenabled=;pin=;fixtime=;lang=;restriction=;timetrackers=;'dhart-pot03;bin/setstaff.sh 'id=;staffnumber=;prename=;surname=;isenabled=;pin=;fixtime=;lang=;restriction=;timetrackers=;'dhart-pot02;bin/setstaff.sh 'id=;staffnumber=;prename=;surname=;isenabled=;pin=;fixtime=;lang=;restriction=;timetrackers=;'
+dhart-pot03;bin/setstaff.sh 'id=;staffnumber=;prename=;surname=;isenabled=;pin=;fixtime=;lang=;restriction=;timetrackers=;'
+dhart-pot02;bin/setstaff.sh 'id=;staffnumber=;prename=;surname=;isenabled=;pin=;fixtime=;lang=;restriction=;timetrackers=;'
+dhart-pot03;bin/setstaff.sh 'id=;staffnumber=;prename=;surname=;isenabled=;pin=;fixtime=;lang=;restriction=;timetrackers=;'
+dhart-pot02;bin/setstaff.sh 'id=c606a41a-613b-7e1d-64a4-13375a44e85f;staffnumber=;prename=Alpar-Bela;surname=Fabian;isenabled=;pin=1234;fixtime=;lang=de;restriction=;'
+dhart-pot03;bin/setstaff.sh 'id=c606a41a-613b-7e1d-64a4-13375a44e85f;staffnumber=;prename=Alpar-Bela;surname=Fabian;isenabled=;pin=1234;fixtime=;lang=de;restriction=;'
+dhart-pot02;bin/setstaff.sh 'id=c606a41a-613b-7e1d-64a4-13375a44e85f;staffnumber=;prename=Alpar-Bela;surname=Fabian;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;'
+dhart-pot03;bin/setstaff.sh 'id=c606a41a-613b-7e1d-64a4-13375a44e85f;staffnumber=;prename=Alpar-Bela;surname=Fabian;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;'
+dhart-pot02;bin/clearfingerprint.sh c606a41a-613b-7e1d-64a4-13375a44e85f
+dhart-pot03;bin/clearfingerprint.sh c606a41a-613b-7e1d-64a4-13375a44e85f
+2021-04-20 07:48:56;dhart-hourtrax01;ls
+2021-04-20 08:00:49;dhart-hourtrax01;ls
+2021-04-20 08:02:45;dhart-hourtrax01;bin/setstaff.sh 'id=cc63023b-4892-c29c-787d-088392d58b88;staffnumber=;prename=Catia;surname=;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;'
+2021-04-20 08:03:58;dhart-hourtrax01;bin/setstaff.sh 'id=cc63023b-4892-c29c-787d-088392d58b88;staffnumber=;prename=Catia;surname=;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;'
+2021-04-25 18:38:56;dhart-hourtrax01;bin/setstaff.sh 'id=cc63023b-4892-c29c-787d-088392d58b88;staffnumber=;prename=Catia;surname=;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=12:00:00;monend=14:00:00;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=10:00:00;sunend=16:00:00;'
+2021-04-25 18:45:55;dhart-hourtrax01;bin/setstaff.sh 'id=cc63023b-4892-c29c-787d-088392d58b88;staffnumber=;prename=Catia;surname=;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=12:00:00;monend=14:00:00;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=10:00:00;sunend=16:00:00;'
+2021-04-25 18:48:26;dhart-hourtrax01;bin/setstaff.sh 'id=cc63023b-4892-c29c-787d-088392d58b88;staffnumber=;prename=Catia;surname=;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=12:00:00;monend=14:00:00;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=10:00:00;sunend=16:00:00;'
+2021-04-25 18:53:42;dhart-hourtrax01;bin/setstaff.sh 'id=cc63023b-4892-c29c-787d-088392d58b88;staffnumber=;prename=Catia;surname=;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=12:00;monend=14:00;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=10:00;sunend=16:00;'
+2021-04-26 14:21:36;dhart-pot01;bin/setstaff.sh 'id=f58b0cce-2466-1b6c-befc-033cc2d0422a;staffnumber=01;prename=Markus;surname=Pusch;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=08:00;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-04-26 14:21:37;dhart-pot02;bin/setstaff.sh 'id=f58b0cce-2466-1b6c-befc-033cc2d0422a;staffnumber=01;prename=Markus;surname=Pusch;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=08:00;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-04-26 14:21:39;dhart-pot03;bin/setstaff.sh 'id=f58b0cce-2466-1b6c-befc-033cc2d0422a;staffnumber=01;prename=Markus;surname=Pusch;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=08:00;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-04-26 14:23:01;dhart-pot01;bin/setstaff.sh 'id=f58b0cce-2466-1b6c-befc-033cc2d0422a;staffnumber=01;prename=Markus;surname=Pusch;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=08:00;monend=17:30;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-04-26 14:23:02;dhart-pot02;bin/setstaff.sh 'id=f58b0cce-2466-1b6c-befc-033cc2d0422a;staffnumber=01;prename=Markus;surname=Pusch;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=08:00;monend=17:30;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-04-26 14:23:04;dhart-pot03;bin/setstaff.sh 'id=f58b0cce-2466-1b6c-befc-033cc2d0422a;staffnumber=01;prename=Markus;surname=Pusch;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=08:00;monend=17:30;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-16 15:10:35;vince-pot06;bin/setstaff.sh 'id=3465d3a7-a883-624c-f677-17864861a2d5;staffnumber=;prename=Naomie Goue ;surname=Edwige Gname;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-16 15:11:41;vince-pot06;bin/setstaff.sh 'id=3465d3a7-a883-624c-f677-17864861a2d5;staffnumber=;prename=Naomie Goue ;surname=Edwige Gname;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-16 15:12:45;vince-pot06;bin/setstaff.sh 'id=e9a88e20-dc82-820e-f615-68302a180759;staffnumber=;prename=Christine-Marie;surname=DOUMB'A DOUMBE;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-16 15:13:53;vince-pot06;bin/setstaff.sh 'id=2c3ded86-8f2c-0c9b-1dc1-64412989407f;staffnumber=;prename=Thomas;surname=Marie;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-16 15:14:48;vince-pot06;bin/setstaff.sh 'id=5d020c34-f057-5b13-e47e-7ce73003e230;staffnumber=;prename=Michael;surname=Grimalt;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-16 15:18:31;vince-pot06;bin/setstaff.sh 'id=e9a88e20-dc82-820e-f615-68302a180759;staffnumber=;prename=Christine-Marie;surname=DOUMB'A DOUMBE;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-16 15:27:27;vince-pot06;bin/setstaff.sh 'id=3465d3a7-a883-624c-f677-17864861a2d5;staffnumber=;prename=Naomie Goue ;surname=Edwige Gname;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-16 15:30:36;vince-pot06;bin/setstaff.sh 'id=3465d3a7-a883-624c-f677-17864861a2d5;staffnumber=;prename=Naomie Goue ;surname=Edwige Gname;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-16 15:36:48;vince-pot06;Send CMD:bin/setstaff.sh 'id=3465d3a7-a883-624c-f677-17864861a2d5;staffnumber=;prename=Naomie Goue ;surname=Edwige Gname;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-16 15:36:48;vince-pot06;Connected
+2021-05-16 15:36:48;vince-pot06;Exec Done
+2021-05-16 15:38:49;vince-pot06;Send CMD:bin/setstaff.sh 'id=e9a88e20-dc82-820e-f615-68302a180759;staffnumber=;prename=Christine-Marie;surname=DOUMB A DOUMBE;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-16 15:38:50;vince-pot06;Connected
+2021-05-16 15:38:50;vince-pot06;Exec Done
+2021-05-16 15:43:48;vince-pot06;Send CMD:bin/setstaff.sh 'id=e9a88e20-dc82-820e-f615-68302a180759;staffnumber=;prename=Christine-Marie;surname=DOUMBA DOUMBE;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-16 15:43:48;vince-pot06;Connected
+2021-05-16 15:43:49;vince-pot06;Exec Done
+2021-05-17 10:11:53;dhart-pot01;Send CMD:bin/setstaff.sh 'id=213e619d-1149-69d4-de57-997a16cd3d21;staffnumber=;prename=Celia;surname=Guerreiro;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-17 10:11:53;dhart-pot01;Connected
+2021-05-17 10:11:54;dhart-pot01;Exec Done
+2021-05-17 10:12:24;dhart-pot03;Send CMD:bin/setstaff.sh 'id=213e619d-1149-69d4-de57-997a16cd3d21;staffnumber=;prename=Celia;surname=Guerreiro;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-17 10:12:25;dhart-pot03;Connected
+2021-05-17 10:12:25;dhart-pot03;Exec Done
+2021-05-17 10:12:55;dhart-pot02;Send CMD:bin/setstaff.sh 'id=213e619d-1149-69d4-de57-997a16cd3d21;staffnumber=;prename=Celia;surname=Guerreiro;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-17 10:12:57;dhart-pot02;Connected
+2021-05-17 10:12:57;dhart-pot02;Exec Done
+2021-05-17 10:16:42;dhart-pot02;Send CMD:bin/setstaff.sh 'id=5c9b540e-6a25-433b-6522-9c6c4f36c9d3;staffnumber=6;prename=Csilla;surname=Gego;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-17 10:16:43;dhart-pot02;Connected
+2021-05-17 10:16:43;dhart-pot02;Exec Done
+2021-05-17 10:21:55;dhart-pot02;Send CMD:bin/setstaff.sh 'id=35531775-6a9f-e7b9-fbbd-aa914656137b;staffnumber=5;prename=Zsolt;surname=Biro;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-17 10:21:56;dhart-pot02;Connected
+2021-05-17 10:21:57;dhart-pot02;Exec Done
+2021-05-18 11:31:15;vince-pot06;Send CMD:bin/setstaff.sh 'id=1f2b91e5-2ac4-509c-b054-ec7f5a22e0c3;staffnumber=;prename=Valentina;surname=Lauria;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-18 11:31:15;vince-pot06;Connected
+2021-05-18 11:31:15;vince-pot06;Exec Done
+2021-05-18 11:40:19;vince-pot06;Send CMD:bin/setstaff.sh 'id=998f0d4b-3e14-6198-53b1-7e117944921e;staffnumber=;prename=Neza;surname=;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-18 11:40:20;vince-pot06;Connected
+2021-05-18 11:40:20;vince-pot06;Exec Done
+2021-05-18 11:41:04;vince-pot06;Send CMD:bin/setstaff.sh 'id=410d087c-15c7-6e72-4811-6e44f2056916;staffnumber=;prename=Christian;surname=Grimalt;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-18 11:41:04;vince-pot06;Connected
+2021-05-18 11:41:05;vince-pot06;Exec Done
+2021-05-18 11:41:40;vince-pot06;Send CMD:bin/setstaff.sh 'id=a924e42f-fdd7-e970-8149-fd8efe26f6e7;staffnumber=;prename=Enver;surname=Sabanovic;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-18 11:41:40;vince-pot06;Connected
+2021-05-18 11:41:40;vince-pot06;Exec Done
+2021-05-18 11:42:25;vince-pot06;Send CMD:bin/setstaff.sh 'id=6f107d15-f1ff-f618-970b-19197d7a95e5;staffnumber=;prename=Jorge;surname=Tovar;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-18 11:42:26;vince-pot06;Connected
+2021-05-18 11:42:26;vince-pot06;Exec Done
+2021-05-18 11:43:27;vince-pot06;Send CMD:bin/setstaff.sh 'id=954ae8a3-4bf8-909a-54a3-31f3c8e2af8b;staffnumber=;prename=José;surname=Maria;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-18 11:43:27;vince-pot06;Connected
+2021-05-18 11:43:28;vince-pot06;Exec Done
+2021-05-18 11:44:06;vince-pot06;Send CMD:bin/setstaff.sh 'id=2c3ded86-8f2c-0c9b-1dc1-64412989407f;staffnumber=;prename=Thomas;surname=Marie;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-18 11:44:06;vince-pot06;Connected
+2021-05-18 11:44:06;vince-pot06;Exec Done
+2021-05-18 11:44:47;vince-pot06;Send CMD:bin/setstaff.sh 'id=af7bf290-b154-0f7b-4484-05bec10ea033;staffnumber=;prename=Andrea;surname=Del Rosario;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-18 11:44:47;vince-pot06;Connected
+2021-05-18 11:44:47;vince-pot06;Exec Done
+2021-05-18 11:45:32;vince-pot06;Send CMD:bin/setstaff.sh 'id=7ec669d5-b348-1523-2768-2339e1f83b70;staffnumber=;prename=Anna;surname=Mesto;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-18 11:45:33;vince-pot06;Connected
+2021-05-18 11:45:33;vince-pot06;Exec Done
+2021-05-18 11:46:21;vince-pot06;Send CMD:bin/setstaff.sh 'id=be1bc843-b54d-92a0-814d-2b7e34b4b927;staffnumber=;prename=Vanessa;surname=Volpi;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-18 11:46:22;vince-pot06;Connected
+2021-05-18 11:46:22;vince-pot06;Exec Done
+2021-05-18 11:47:24;vince-pot06;Send CMD:bin/setstaff.sh 'id=5d020c34-f057-5b13-e47e-7ce73003e230;staffnumber=;prename=Michael;surname=Grimalt;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-18 11:47:24;vince-pot06;Connected
+2021-05-18 11:47:25;vince-pot06;Exec Done
+2021-05-18 11:48:08;vince-pot06;Send CMD:bin/setstaff.sh 'id=327be400-18a2-cdc7-898a-c8b5c3c3b0ee;staffnumber=;prename=Mattia;surname=Pascolini;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-18 11:48:08;vince-pot06;Connected
+2021-05-18 11:48:09;vince-pot06;Exec Done
+2021-05-18 11:48:52;vince-pot06;Send CMD:bin/setstaff.sh 'id=63d25b04-0486-d233-f145-377054ba5d11;staffnumber=;prename=Olivier;surname=Zimmermann;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-18 11:48:52;vince-pot06;Connected
+2021-05-18 11:48:53;vince-pot06;Exec Done
+2021-05-19 15:17:22;dhart-pot01;Send CMD:bin/setstaff.sh 'id=5c9b540e-6a25-433b-6522-9c6c4f36c9d3;staffnumber=6;prename=Csilla;surname=Gego;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-19 15:17:23;dhart-pot01;Connected
+2021-05-19 15:17:23;dhart-pot01;Exec Done
+2021-05-19 15:17:53;dhart-pot02;Send CMD:bin/setstaff.sh 'id=5c9b540e-6a25-433b-6522-9c6c4f36c9d3;staffnumber=6;prename=Csilla;surname=Gego;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-19 15:17:54;dhart-pot02;Connected
+2021-05-19 15:17:54;dhart-pot02;Exec Done
+2021-05-19 15:18:30;dhart-pot01;Send CMD:bin/setstaff.sh 'id=35531775-6a9f-e7b9-fbbd-aa914656137b;staffnumber=5;prename=Zsolt;surname=Biro;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-19 15:18:30;dhart-pot01;Connected
+2021-05-19 15:18:31;dhart-pot01;Exec Done
+2021-05-19 15:19:01;dhart-pot02;Send CMD:bin/setstaff.sh 'id=35531775-6a9f-e7b9-fbbd-aa914656137b;staffnumber=5;prename=Zsolt;surname=Biro;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-19 15:19:01;dhart-pot02;Connected
+2021-05-19 15:19:02;dhart-pot02;Exec Done
+2021-05-19 15:20:44;dhart-pot03;Send CMD:bin/setstaff.sh 'id=213e619d-1149-69d4-de57-997a16cd3d21;staffnumber=;prename=Celia;surname=Guerreiro;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-19 15:20:45;dhart-pot03;Connected
+2021-05-19 15:20:45;dhart-pot03;Exec Done
+2021-05-20 15:04:24;dhart-pot01;Send CMD:bin/setstaff.sh 'id=a3a22aa2-8c0e-a2df-80b5-ac180161ccf5;staffnumber=02;prename=Krystian;surname=Swietlik;isenabled=1;pin=1234;fixtime=5;lang=de;restriction=;monstart=06:50;monend=15:30;tuestart=06:50;tueend=15:40;wedstart=06:50;wedend=15:40;thustart=06:50;thuend=15:40;fristart=06:50;friend=15:40;satstart=06:50;satend=15:40;sunstart=;sunend=;'
+2021-05-20 15:04:25;dhart-pot01;Connected
+2021-05-20 15:04:25;dhart-pot01;Exec Done
+2021-05-20 15:04:55;dhart-pot02;Send CMD:bin/setstaff.sh 'id=a3a22aa2-8c0e-a2df-80b5-ac180161ccf5;staffnumber=02;prename=Krystian;surname=Swietlik;isenabled=1;pin=1234;fixtime=5;lang=de;restriction=;monstart=06:50;monend=15:30;tuestart=06:50;tueend=15:40;wedstart=06:50;wedend=15:40;thustart=06:50;thuend=15:40;fristart=06:50;friend=15:40;satstart=06:50;satend=15:40;sunstart=;sunend=;'
+2021-05-20 15:04:56;dhart-pot02;Connected
+2021-05-20 15:04:56;dhart-pot02;Exec Done
+2021-05-25 08:03:06;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=50e446df-14ca-87b6-f443-2cd70b33e069;staffnumber=;prename=Danielle;surname=Simon;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:03:06;dolvi-pot07;Connected
+2021-05-25 08:03:07;dolvi-pot07;Exec Done
+2021-05-25 08:04:07;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=440afd12-38a6-8b64-b68a-77b88ecf5c75;staffnumber=;prename=Antonio;surname=Borges;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:04:08;dolvi-pot07;Connected
+2021-05-25 08:04:08;dolvi-pot07;Exec Done
+2021-05-25 08:04:48;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=8ad632ef-aa14-468d-ede6-283cb9c1ce24;staffnumber=;prename=Antonio;surname=Delgado;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:04:48;dolvi-pot07;Connected
+2021-05-25 08:04:48;dolvi-pot07;Exec Done
+2021-05-25 08:06:07;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=813c99cd-fe76-c8ef-4352-65fda02ddb7f;staffnumber=;prename=Gezim;surname=Hoxha;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:06:07;dolvi-pot07;Connected
+2021-05-25 08:06:08;dolvi-pot07;Exec Done
+2021-05-25 08:06:47;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=a32da709-0202-71c4-43c9-bc89fdf5aaba;staffnumber=;prename=Manu;surname=Lopes;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:06:48;dolvi-pot07;Connected
+2021-05-25 08:06:48;dolvi-pot07;Exec Done
+2021-05-25 08:07:27;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=e5c70de3-366c-4b2a-1af0-aed175cf37c0;staffnumber=;prename=Teodoro;surname=Lopes;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:07:28;dolvi-pot07;Connected
+2021-05-25 08:07:28;dolvi-pot07;Exec Done
+2021-05-25 08:08:11;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=29488caf-66ac-84e6-ab9b-1aebadd8bcf2;staffnumber=;prename=Silvino;surname=Rodrigues;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:08:12;dolvi-pot07;Connected
+2021-05-25 08:08:12;dolvi-pot07;Exec Done
+2021-05-25 08:08:53;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=cd20d578-869c-693f-db20-198cca57cbe5;staffnumber=;prename=Resmija;surname=Kurtovic;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:08:53;dolvi-pot07;Connected
+2021-05-25 08:08:53;dolvi-pot07;Exec Done
+2021-05-25 08:09:34;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=eb5819bb-6268-3485-1845-2c1806f71b5c;staffnumber=;prename=Oksana;surname=Pensato ;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:09:35;dolvi-pot07;Connected
+2021-05-25 08:09:35;dolvi-pot07;Exec Done
+2021-05-25 08:10:18;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=10d324ef-e2da-a461-5b3b-ae0705d8d301;staffnumber=;prename=Carlos;surname=Rodrigues Gomes;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:10:18;dolvi-pot07;Connected
+2021-05-25 08:10:18;dolvi-pot07;Exec Done
+2021-05-25 08:11:25;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=f6d9f93a-45cc-cd89-d73d-ce62392f4b3b;staffnumber=;prename=Paul;surname=Schumeng;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:11:26;dolvi-pot07;Connected
+2021-05-25 08:11:26;dolvi-pot07;Exec Done
+2021-05-25 08:12:22;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=3ba9019c-5397-5cef-3e3d-c4d3f66a2c07;staffnumber=;prename=Magalie;surname=Caron;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:12:22;dolvi-pot07;Connected
+2021-05-25 08:12:23;dolvi-pot07;Exec Done
+2021-05-25 08:13:21;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=8842ec2c-3eee-8bcb-4242-2ee0c477e169;staffnumber=;prename=Evgeniy;surname=Mikhaylov;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:13:21;dolvi-pot07;Connected
+2021-05-25 08:13:21;dolvi-pot07;Exec Done
+2021-05-25 08:14:09;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=d8e44d1a-359c-055b-72dc-343c57fdfb76;staffnumber=;prename=Lydia;surname=Muller;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:14:09;dolvi-pot07;Connected
+2021-05-25 08:14:09;dolvi-pot07;Exec Done
+2021-05-25 08:14:54;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=c21502ac-0d4c-07da-8692-d2e1ace8cd56;staffnumber=;prename=Laura;surname=Ferrara;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:14:54;dolvi-pot07;Connected
+2021-05-25 08:14:55;dolvi-pot07;Exec Done
+2021-05-25 08:15:50;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=259e0687-463b-7c35-af11-c55afbf46a58;staffnumber=;prename=Abdou Aziz;surname=Mbodj;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:15:51;dolvi-pot07;Connected
+2021-05-25 08:15:51;dolvi-pot07;Exec Done
+2021-05-25 08:16:42;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=0aa23353-9daa-cf0d-e075-17913f9c662c;staffnumber=;prename=Pascaol;surname=Simoes;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:16:43;dolvi-pot07;Connected
+2021-05-25 08:16:43;dolvi-pot07;Exec Done
+2021-05-25 08:17:31;dolvi-pot07;Send CMD:bin/setstaff.sh 'id=5bb844ec-5b72-5707-c985-fee51a201046;staffnumber=;prename=Caterina;surname=Venanzi;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-05-25 08:17:32;dolvi-pot07;Connected
+2021-05-25 08:17:32;dolvi-pot07;Exec Done
+2021-06-01 14:53:49;dhart-pot01;Send CMD:bin/setstaff.sh 'id=6f8036b4-338f-a581-2256-4e8c59646836;staffnumber=04;prename=Mathieu;surname=Cox;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=06:50;monend=15:40;tuestart=06:50;tueend=15:40;wedstart=06:50;wedend=15:40;thustart=06:50;thuend=15:40;fristart=06:50;friend=15:40;satstart=06:50;satend=15:40;sunstart=;sunend=;'
+2021-06-01 14:54:51;dhart-pot02;Send CMD:bin/setstaff.sh 'id=6f8036b4-338f-a581-2256-4e8c59646836;staffnumber=04;prename=Mathieu;surname=Cox;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=06:50;monend=15:40;tuestart=06:50;tueend=15:40;wedstart=06:50;wedend=15:40;thustart=06:50;thuend=15:40;fristart=06:50;friend=15:40;satstart=06:50;satend=15:40;sunstart=;sunend=;'
+2021-06-01 14:54:52;dhart-pot02;Connected
+2021-06-01 14:54:52;dhart-pot02;Exec Done
+2021-06-01 14:55:22;dhart-pot03;Send CMD:bin/setstaff.sh 'id=6f8036b4-338f-a581-2256-4e8c59646836;staffnumber=04;prename=Mathieu;surname=Cox;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=06:50;monend=15:40;tuestart=06:50;tueend=15:40;wedstart=06:50;wedend=15:40;thustart=06:50;thuend=15:40;fristart=06:50;friend=15:40;satstart=06:50;satend=15:40;sunstart=;sunend=;'
+2021-06-01 14:55:23;dhart-pot03;Connected
+2021-06-01 14:55:23;dhart-pot03;Exec Done
+2021-06-03 12:52:13;dhart-pot03;Send CMD:bin/setstaff.sh 'id=c606a41a-613b-7e1d-64a4-13375a44e85f;staffnumber=;prename=Alpar-Bela;surname=Fabian;isenabled=;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-06-03 12:52:14;dhart-pot03;Connected
+2021-06-03 12:52:15;dhart-pot03;Exec Done
+2021-06-03 12:52:45;dhart-pot02;Send CMD:bin/setstaff.sh 'id=c606a41a-613b-7e1d-64a4-13375a44e85f;staffnumber=;prename=Alpar-Bela;surname=Fabian;isenabled=;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-06-03 12:52:46;dhart-pot02;Connected
+2021-06-03 12:52:46;dhart-pot02;Exec Done
+2021-06-09 07:51:01;dhart-pot01;Send CMD:bin/setstaff.sh 'id=b5a21377-6cd5-b954-255a-d3c2a0f42960;staffnumber=6;prename=Laszlo;surname=Biro;isenabled=1;pin=1112;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-06-09 07:51:01;dhart-pot01;Connected
+2021-06-09 07:51:02;dhart-pot01;Exec Done
+2021-06-09 07:51:02;dhart-pot02;Send CMD:bin/setstaff.sh 'id=b5a21377-6cd5-b954-255a-d3c2a0f42960;staffnumber=6;prename=Laszlo;surname=Biro;isenabled=1;pin=1112;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-06-09 07:51:03;dhart-pot02;Connected
+2021-06-09 07:51:03;dhart-pot02;Exec Done
+2021-06-09 07:51:43;dhart-pot03;Send CMD:bin/setstaff.sh 'id=c606a41a-613b-7e1d-64a4-13375a44e85f;staffnumber=;prename=Alpar-Bela;surname=Fabian;isenabled=;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-06-09 07:51:44;dhart-pot03;Connected
+2021-06-09 07:51:44;dhart-pot03;Exec Done
+2021-06-09 07:51:44;dhart-pot02;Send CMD:bin/setstaff.sh 'id=c606a41a-613b-7e1d-64a4-13375a44e85f;staffnumber=;prename=Alpar-Bela;surname=Fabian;isenabled=;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+2021-06-09 07:51:45;dhart-pot02;Connected
+2021-06-09 07:51:46;dhart-pot02;Exec Done
diff --git a/pointeuse/server/home/dks/public_html/htx/data/.htaccess b/pointeuse/server/home/dks/public_html/htx/data/.htaccess
new file mode 100644 (file)
index 0000000..a7a56f7
--- /dev/null
@@ -0,0 +1 @@
+Require all denied
\ No newline at end of file
diff --git a/pointeuse/server/home/dks/public_html/htx/data/hosts/dhart-hourtrax01.json b/pointeuse/server/home/dks/public_html/htx/data/hosts/dhart-hourtrax01.json
new file mode 100644 (file)
index 0000000..81f0335
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "sshuser":"pot",
+  "sshpwd":"sai4seip",
+  "sshport":"3587",
+  "sshhost":"172.16.10.170"}
diff --git a/pointeuse/server/home/dks/public_html/htx/data/hosts/dhart-pot01.json b/pointeuse/server/home/dks/public_html/htx/data/hosts/dhart-pot01.json
new file mode 100644 (file)
index 0000000..99e5c13
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "sshuser":"pot",
+  "sshpwd":"sai4seip",
+  "sshport":"3587",
+  "sshhost":"172.16.10.194"}
diff --git a/pointeuse/server/home/dks/public_html/htx/data/hosts/dhart-pot02.json b/pointeuse/server/home/dks/public_html/htx/data/hosts/dhart-pot02.json
new file mode 100644 (file)
index 0000000..871582d
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "sshuser":"pot",
+  "sshpwd":"sai4seip",
+  "sshport":"3587",
+  "sshhost":"172.16.10.202"
+}
diff --git a/pointeuse/server/home/dks/public_html/htx/data/hosts/dhart-pot03.json b/pointeuse/server/home/dks/public_html/htx/data/hosts/dhart-pot03.json
new file mode 100644 (file)
index 0000000..6c26352
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "sshuser":"pot",
+  "sshpwd":"sai4seip",
+  "sshport":"3587",
+  "sshhost":"172.16.10.198"
+}
diff --git a/pointeuse/server/home/dks/public_html/htx/data/hosts/dksserver.json b/pointeuse/server/home/dks/public_html/htx/data/hosts/dksserver.json
new file mode 100644 (file)
index 0000000..e9534df
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "sshuser":"dks",
+  "sshpwd":"sai4seip",
+  "sshport":"3587",
+  "sshhost":"172.16.10.186"
+}
\ No newline at end of file
diff --git a/pointeuse/server/home/dks/public_html/htx/data/hosts/dolvi-pot07.json b/pointeuse/server/home/dks/public_html/htx/data/hosts/dolvi-pot07.json
new file mode 100644 (file)
index 0000000..a7e2a29
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "sshuser":"pot",
+  "sshpwd":"sai4seip",
+  "sshport":"3587",
+  "sshhost":"172.16.10.214"
+}
diff --git a/pointeuse/server/home/dks/public_html/htx/data/hosts/elch-pothourtrax.json b/pointeuse/server/home/dks/public_html/htx/data/hosts/elch-pothourtrax.json
new file mode 100644 (file)
index 0000000..88df13e
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "sshuser":"pot",
+  "sshpwd":"sai4seip",
+  "sshport":"3587",
+  "sshhost":"172.16.10.160"
+}
\ No newline at end of file
diff --git a/pointeuse/server/home/dks/public_html/htx/data/hosts/ldin-hourtrax.json b/pointeuse/server/home/dks/public_html/htx/data/hosts/ldin-hourtrax.json
new file mode 100644 (file)
index 0000000..2183323
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "sshuser":"pot",
+  "sshpwd":"sai4seip",
+  "sshport":"3587",
+  "sshhost":"172.16.10.180"
+}
\ No newline at end of file
diff --git a/pointeuse/server/home/dks/public_html/htx/data/hosts/vince-pot06.json b/pointeuse/server/home/dks/public_html/htx/data/hosts/vince-pot06.json
new file mode 100644 (file)
index 0000000..722c6c2
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "sshuser":"pot",
+  "sshpwd":"sai4seip",
+  "sshport":"3587",
+  "sshhost":"172.16.10.210"}
diff --git a/pointeuse/server/home/dks/public_html/htx/data/params.log b/pointeuse/server/home/dks/public_html/htx/data/params.log
new file mode 100644 (file)
index 0000000..6df0a79
--- /dev/null
@@ -0,0 +1,614 @@
+2021-04-20 08:00:49:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-hourtrax01
+    [cmd] => ls
+)
+2021-04-20 08:02:45:1
+2021-04-20 08:03:58:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-hourtrax01
+    [cmd] => bin/setstaff.sh 'id=cc63023b-4892-c29c-787d-088392d58b88;staffnumber=;prename=Catia;surname=;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;'
+)
+
+2021-04-25 18:38:56:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-hourtrax01
+    [cmd] => bin/setstaff.sh 'id=cc63023b-4892-c29c-787d-088392d58b88;staffnumber=;prename=Catia;surname=;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=12:00:00;monend=14:00:00;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=10:00:00;sunend=16:00:00;'
+)
+
+2021-04-25 18:45:55:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-hourtrax01
+    [cmd] => bin/setstaff.sh 'id=cc63023b-4892-c29c-787d-088392d58b88;staffnumber=;prename=Catia;surname=;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=12:00:00;monend=14:00:00;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=10:00:00;sunend=16:00:00;'
+)
+
+2021-04-25 18:48:26:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-hourtrax01
+    [cmd] => bin/setstaff.sh 'id=cc63023b-4892-c29c-787d-088392d58b88;staffnumber=;prename=Catia;surname=;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=12:00:00;monend=14:00:00;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=10:00:00;sunend=16:00:00;'
+)
+
+2021-04-25 18:53:42:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-hourtrax01
+    [cmd] => bin/setstaff.sh 'id=cc63023b-4892-c29c-787d-088392d58b88;staffnumber=;prename=Catia;surname=;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=12:00;monend=14:00;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=10:00;sunend=16:00;'
+)
+
+2021-04-26 14:21:36:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot01
+    [cmd] => bin/setstaff.sh 'id=f58b0cce-2466-1b6c-befc-033cc2d0422a;staffnumber=01;prename=Markus;surname=Pusch;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=08:00;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-04-26 14:21:37:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot02
+    [cmd] => bin/setstaff.sh 'id=f58b0cce-2466-1b6c-befc-033cc2d0422a;staffnumber=01;prename=Markus;surname=Pusch;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=08:00;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-04-26 14:21:38:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot03
+    [cmd] => bin/setstaff.sh 'id=f58b0cce-2466-1b6c-befc-033cc2d0422a;staffnumber=01;prename=Markus;surname=Pusch;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=08:00;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-04-26 14:22:59:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot01
+    [cmd] => bin/setstaff.sh 'id=f58b0cce-2466-1b6c-befc-033cc2d0422a;staffnumber=01;prename=Markus;surname=Pusch;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=08:00;monend=17:30;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-04-26 14:23:01:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot02
+    [cmd] => bin/setstaff.sh 'id=f58b0cce-2466-1b6c-befc-033cc2d0422a;staffnumber=01;prename=Markus;surname=Pusch;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=08:00;monend=17:30;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-04-26 14:23:03:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot03
+    [cmd] => bin/setstaff.sh 'id=f58b0cce-2466-1b6c-befc-033cc2d0422a;staffnumber=01;prename=Markus;surname=Pusch;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=08:00;monend=17:30;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-16 14:58:27:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=3465d3a7-a883-624c-f677-17864861a2d5;staffnumber=;prename=Naomie Goue ;surname=Edwige Gname;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-16 15:05:13:
+2021-05-16 15:10:34:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=3465d3a7-a883-624c-f677-17864861a2d5;staffnumber=;prename=Naomie Goue ;surname=Edwige Gname;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-16 15:11:41:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=3465d3a7-a883-624c-f677-17864861a2d5;staffnumber=;prename=Naomie Goue ;surname=Edwige Gname;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-16 15:12:44:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=e9a88e20-dc82-820e-f615-68302a180759;staffnumber=;prename=Christine-Marie;surname=DOUMB'A DOUMBE;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-16 15:13:52:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=2c3ded86-8f2c-0c9b-1dc1-64412989407f;staffnumber=;prename=Thomas;surname=Marie;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-16 15:14:48:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=5d020c34-f057-5b13-e47e-7ce73003e230;staffnumber=;prename=Michael;surname=Grimalt;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-16 15:18:31:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=e9a88e20-dc82-820e-f615-68302a180759;staffnumber=;prename=Christine-Marie;surname=DOUMB'A DOUMBE;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-16 15:24:11:
+2021-05-16 15:25:45:
+2021-05-16 15:27:27:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=3465d3a7-a883-624c-f677-17864861a2d5;staffnumber=;prename=Naomie Goue ;surname=Edwige Gname;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-16 15:29:53:
+2021-05-16 15:30:36:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=3465d3a7-a883-624c-f677-17864861a2d5;staffnumber=;prename=Naomie Goue ;surname=Edwige Gname;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-16 15:36:09:
+2021-05-16 15:36:48:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=3465d3a7-a883-624c-f677-17864861a2d5;staffnumber=;prename=Naomie Goue ;surname=Edwige Gname;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-16 15:38:49:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=e9a88e20-dc82-820e-f615-68302a180759;staffnumber=;prename=Christine-Marie;surname=DOUMB A DOUMBE;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-16 15:42:22:
+2021-05-16 15:43:48:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=e9a88e20-dc82-820e-f615-68302a180759;staffnumber=;prename=Christine-Marie;surname=DOUMBA DOUMBE;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-17 10:11:53:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot01
+    [cmd] => bin/setstaff.sh 'id=213e619d-1149-69d4-de57-997a16cd3d21;staffnumber=;prename=Celia;surname=Guerreiro;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-17 10:12:24:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot03
+    [cmd] => bin/setstaff.sh 'id=213e619d-1149-69d4-de57-997a16cd3d21;staffnumber=;prename=Celia;surname=Guerreiro;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-17 10:12:55:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot02
+    [cmd] => bin/setstaff.sh 'id=213e619d-1149-69d4-de57-997a16cd3d21;staffnumber=;prename=Celia;surname=Guerreiro;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-17 10:16:42:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot02
+    [cmd] => bin/setstaff.sh 'id=5c9b540e-6a25-433b-6522-9c6c4f36c9d3;staffnumber=6;prename=Csilla;surname=Gego;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-17 10:21:55:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot02
+    [cmd] => bin/setstaff.sh 'id=35531775-6a9f-e7b9-fbbd-aa914656137b;staffnumber=5;prename=Zsolt;surname=Biro;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-18 11:31:15:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=1f2b91e5-2ac4-509c-b054-ec7f5a22e0c3;staffnumber=;prename=Valentina;surname=Lauria;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-18 11:40:19:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=998f0d4b-3e14-6198-53b1-7e117944921e;staffnumber=;prename=Neza;surname=;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-18 11:41:04:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=410d087c-15c7-6e72-4811-6e44f2056916;staffnumber=;prename=Christian;surname=Grimalt;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-18 11:41:40:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=a924e42f-fdd7-e970-8149-fd8efe26f6e7;staffnumber=;prename=Enver;surname=Sabanovic;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-18 11:42:25:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=6f107d15-f1ff-f618-970b-19197d7a95e5;staffnumber=;prename=Jorge;surname=Tovar;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-18 11:43:27:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=954ae8a3-4bf8-909a-54a3-31f3c8e2af8b;staffnumber=;prename=José;surname=Maria;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-18 11:44:06:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=2c3ded86-8f2c-0c9b-1dc1-64412989407f;staffnumber=;prename=Thomas;surname=Marie;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-18 11:44:47:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=af7bf290-b154-0f7b-4484-05bec10ea033;staffnumber=;prename=Andrea;surname=Del Rosario;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-18 11:45:32:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=7ec669d5-b348-1523-2768-2339e1f83b70;staffnumber=;prename=Anna;surname=Mesto;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-18 11:46:21:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=be1bc843-b54d-92a0-814d-2b7e34b4b927;staffnumber=;prename=Vanessa;surname=Volpi;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-18 11:47:24:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=5d020c34-f057-5b13-e47e-7ce73003e230;staffnumber=;prename=Michael;surname=Grimalt;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-18 11:48:08:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=327be400-18a2-cdc7-898a-c8b5c3c3b0ee;staffnumber=;prename=Mattia;surname=Pascolini;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-18 11:48:52:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => vince-pot06
+    [cmd] => bin/setstaff.sh 'id=63d25b04-0486-d233-f145-377054ba5d11;staffnumber=;prename=Olivier;surname=Zimmermann;isenabled=1;pin=1234;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-19 15:17:22:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot01
+    [cmd] => bin/setstaff.sh 'id=5c9b540e-6a25-433b-6522-9c6c4f36c9d3;staffnumber=6;prename=Csilla;surname=Gego;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-19 15:17:53:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot02
+    [cmd] => bin/setstaff.sh 'id=5c9b540e-6a25-433b-6522-9c6c4f36c9d3;staffnumber=6;prename=Csilla;surname=Gego;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-19 15:18:30:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot01
+    [cmd] => bin/setstaff.sh 'id=35531775-6a9f-e7b9-fbbd-aa914656137b;staffnumber=5;prename=Zsolt;surname=Biro;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-19 15:19:01:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot02
+    [cmd] => bin/setstaff.sh 'id=35531775-6a9f-e7b9-fbbd-aa914656137b;staffnumber=5;prename=Zsolt;surname=Biro;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-19 15:20:44:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot03
+    [cmd] => bin/setstaff.sh 'id=213e619d-1149-69d4-de57-997a16cd3d21;staffnumber=;prename=Celia;surname=Guerreiro;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-20 15:04:24:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot01
+    [cmd] => bin/setstaff.sh 'id=a3a22aa2-8c0e-a2df-80b5-ac180161ccf5;staffnumber=02;prename=Krystian;surname=Swietlik;isenabled=1;pin=1234;fixtime=5;lang=de;restriction=;monstart=06:50;monend=15:30;tuestart=06:50;tueend=15:40;wedstart=06:50;wedend=15:40;thustart=06:50;thuend=15:40;fristart=06:50;friend=15:40;satstart=06:50;satend=15:40;sunstart=;sunend=;'
+)
+
+2021-05-20 15:04:55:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot02
+    [cmd] => bin/setstaff.sh 'id=a3a22aa2-8c0e-a2df-80b5-ac180161ccf5;staffnumber=02;prename=Krystian;surname=Swietlik;isenabled=1;pin=1234;fixtime=5;lang=de;restriction=;monstart=06:50;monend=15:30;tuestart=06:50;tueend=15:40;wedstart=06:50;wedend=15:40;thustart=06:50;thuend=15:40;fristart=06:50;friend=15:40;satstart=06:50;satend=15:40;sunstart=;sunend=;'
+)
+
+2021-05-25 08:03:06:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=50e446df-14ca-87b6-f443-2cd70b33e069;staffnumber=;prename=Danielle;surname=Simon;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-25 08:04:07:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=440afd12-38a6-8b64-b68a-77b88ecf5c75;staffnumber=;prename=Antonio;surname=Borges;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-25 08:04:48:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=8ad632ef-aa14-468d-ede6-283cb9c1ce24;staffnumber=;prename=Antonio;surname=Delgado;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-25 08:06:07:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=813c99cd-fe76-c8ef-4352-65fda02ddb7f;staffnumber=;prename=Gezim;surname=Hoxha;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-25 08:06:47:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=a32da709-0202-71c4-43c9-bc89fdf5aaba;staffnumber=;prename=Manu;surname=Lopes;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-25 08:07:27:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=e5c70de3-366c-4b2a-1af0-aed175cf37c0;staffnumber=;prename=Teodoro;surname=Lopes;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-25 08:08:11:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=29488caf-66ac-84e6-ab9b-1aebadd8bcf2;staffnumber=;prename=Silvino;surname=Rodrigues;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-25 08:08:53:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=cd20d578-869c-693f-db20-198cca57cbe5;staffnumber=;prename=Resmija;surname=Kurtovic;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-25 08:09:34:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=eb5819bb-6268-3485-1845-2c1806f71b5c;staffnumber=;prename=Oksana;surname=Pensato ;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-25 08:10:18:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=10d324ef-e2da-a461-5b3b-ae0705d8d301;staffnumber=;prename=Carlos;surname=Rodrigues Gomes;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-25 08:11:25:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=f6d9f93a-45cc-cd89-d73d-ce62392f4b3b;staffnumber=;prename=Paul;surname=Schumeng;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-25 08:12:22:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=3ba9019c-5397-5cef-3e3d-c4d3f66a2c07;staffnumber=;prename=Magalie;surname=Caron;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-25 08:13:21:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=8842ec2c-3eee-8bcb-4242-2ee0c477e169;staffnumber=;prename=Evgeniy;surname=Mikhaylov;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-25 08:14:09:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=d8e44d1a-359c-055b-72dc-343c57fdfb76;staffnumber=;prename=Lydia;surname=Muller;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-25 08:14:54:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=c21502ac-0d4c-07da-8692-d2e1ace8cd56;staffnumber=;prename=Laura;surname=Ferrara;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-25 08:15:50:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=259e0687-463b-7c35-af11-c55afbf46a58;staffnumber=;prename=Abdou Aziz;surname=Mbodj;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-25 08:16:42:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=0aa23353-9daa-cf0d-e075-17913f9c662c;staffnumber=;prename=Pascaol;surname=Simoes;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-05-25 08:17:31:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dolvi-pot07
+    [cmd] => bin/setstaff.sh 'id=5bb844ec-5b72-5707-c985-fee51a201046;staffnumber=;prename=Caterina;surname=Venanzi;isenabled=1;pin=;fixtime=;lang=fr;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-06-01 14:53:49:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot01
+    [cmd] => bin/setstaff.sh 'id=6f8036b4-338f-a581-2256-4e8c59646836;staffnumber=04;prename=Mathieu;surname=Cox;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=06:50;monend=15:40;tuestart=06:50;tueend=15:40;wedstart=06:50;wedend=15:40;thustart=06:50;thuend=15:40;fristart=06:50;friend=15:40;satstart=06:50;satend=15:40;sunstart=;sunend=;'
+)
+
+2021-06-01 14:54:51:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot02
+    [cmd] => bin/setstaff.sh 'id=6f8036b4-338f-a581-2256-4e8c59646836;staffnumber=04;prename=Mathieu;surname=Cox;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=06:50;monend=15:40;tuestart=06:50;tueend=15:40;wedstart=06:50;wedend=15:40;thustart=06:50;thuend=15:40;fristart=06:50;friend=15:40;satstart=06:50;satend=15:40;sunstart=;sunend=;'
+)
+
+2021-06-01 14:55:22:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot03
+    [cmd] => bin/setstaff.sh 'id=6f8036b4-338f-a581-2256-4e8c59646836;staffnumber=04;prename=Mathieu;surname=Cox;isenabled=1;pin=1234;fixtime=;lang=de;restriction=;monstart=06:50;monend=15:40;tuestart=06:50;tueend=15:40;wedstart=06:50;wedend=15:40;thustart=06:50;thuend=15:40;fristart=06:50;friend=15:40;satstart=06:50;satend=15:40;sunstart=;sunend=;'
+)
+
+2021-06-03 12:52:13:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot03
+    [cmd] => bin/setstaff.sh 'id=c606a41a-613b-7e1d-64a4-13375a44e85f;staffnumber=;prename=Alpar-Bela;surname=Fabian;isenabled=;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-06-03 12:52:45:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot02
+    [cmd] => bin/setstaff.sh 'id=c606a41a-613b-7e1d-64a4-13375a44e85f;staffnumber=;prename=Alpar-Bela;surname=Fabian;isenabled=;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-06-09 07:51:01:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot01
+    [cmd] => bin/setstaff.sh 'id=b5a21377-6cd5-b954-255a-d3c2a0f42960;staffnumber=6;prename=Laszlo;surname=Biro;isenabled=1;pin=1112;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-06-09 07:51:02:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot02
+    [cmd] => bin/setstaff.sh 'id=b5a21377-6cd5-b954-255a-d3c2a0f42960;staffnumber=6;prename=Laszlo;surname=Biro;isenabled=1;pin=1112;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-06-09 07:51:43:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot03
+    [cmd] => bin/setstaff.sh 'id=c606a41a-613b-7e1d-64a4-13375a44e85f;staffnumber=;prename=Alpar-Bela;surname=Fabian;isenabled=;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
+2021-06-09 07:51:44:Array
+(
+    [cl] => ssh
+    [fn] => exec
+    [host] => dhart-pot02
+    [cmd] => bin/setstaff.sh 'id=c606a41a-613b-7e1d-64a4-13375a44e85f;staffnumber=;prename=Alpar-Bela;surname=Fabian;isenabled=;pin=1234;fixtime=;lang=de;restriction=;monstart=;monend=;tuestart=;tueend=;wedstart=;wedend=;thustart=;thuend=;fristart=;friend=;satstart=;satend=;sunstart=;sunend=;'
+)
+
diff --git a/pointeuse/server/home/dks/public_html/htx/index.html b/pointeuse/server/home/dks/public_html/htx/index.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/pointeuse/server/home/dks/public_html/htx/index.php b/pointeuse/server/home/dks/public_html/htx/index.php
new file mode 100644 (file)
index 0000000..b660a5f
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+  //  require('../composer/vendor/mustache/mustache/src/Mustache/Autoloader.php');
+  //  Mustache_Autoloader::register();
+   $mainclasses = scandir("lib");
+   foreach ($mainclasses as $key => $value)
+   {
+    if ((is_file("lib/".$value) && strpos($value,'.') !== 0)  && substr_compare($value, ".php", -strlen(".php")) === 0){
+      require("lib/".$value);
+    }  
+   }
+   $moduleclasses = scandir("lib/modules");
+   foreach ($moduleclasses as $key => $value)
+   {
+    if ((is_file("lib/modules/".$value) && strpos($value,'.') !== 0)  && substr_compare($value, ".php", -strlen(".php")) === 0){
+      error_log($value);
+      require("lib/modules/".$value);
+    }
+   }
+
+   $db = new database($cfg["db"]);
+  //  $sess = new session($db);
+   $vars = array();
+   $html = array();
+  //  if (isset($_COOKIE[$cfg["cookie"]])){
+  //   $vars["sid"] = $_COOKIE[$cfg["cookie"]]; 
+  //  }
+  //  if (isset($vars["sid"]) && ($vars["sid"] != "")){
+  //   $vars["session"] = $sess->getSession($vars["sid"]);
+  //  } else {
+  //   error_log("No Session!"); 
+  //  }
+   $params = array();
+  //  $html["session"] = $vars["session"];
+   //error_log(print_r($vars,true));
+   $params = json_decode(file_get_contents('php://input'), true);
+   //$params =$_GET;
+   $html["params"] = $params;
+   //$html["cfg"] = $cfg;
+   if (isset($params["cl"]) && isset($params["fn"]) && $params["cl"] != "database"){
+    if (class_exists($params["cl"])) {
+      $strclass=$params["cl"];
+      $cl = new $strclass($db,$cfg);
+      if (!method_exists($cl,$params["fn"])){
+        $html["error"] = "class ".$params["cl"]."->method ".$params["fn"]." does not exist!";
+      }
+      $r = new ReflectionMethod($strclass, $params["fn"]);
+      $metparams = $r->getParameters();
+      $fnp = array();
+      $prcnt = 0;
+      foreach ($metparams as $p) {
+        if (isset($params[$p->getName()])){
+          array_push($fnp,$params[$p->getName()]);
+        }
+        if ($p->isOptional() === false){
+          $prcnt++;
+        }
+        $html["fnparams"][$p->getName()] = (($p->isOptional() === true)?"optional":"required");
+      }
+      if (count($fnp) < $prcnt){
+        $html["error"] = "Function has ".$prcnt." required parameters!";
+      } else {
+        $html["data"] = call_user_func_array(array($cl, $params["fn"]), $fnp);
+      }
+    } else {
+      $html["error"] = "class ".$params["cl"]." does not exist!";
+    }
+   }
+  header('Content-Type: application/json');
+  echo json_encode($html);
+
+?>
\ No newline at end of file
diff --git a/pointeuse/server/home/dks/public_html/htx/lib/config.php b/pointeuse/server/home/dks/public_html/htx/lib/config.php
new file mode 100644 (file)
index 0000000..38b4d09
--- /dev/null
@@ -0,0 +1,33 @@
+<?php
+  $cfg = array(
+    "basepath" => substr(dirname($_SERVER["SCRIPT_FILENAME"]),strlen($_SERVER["DOCUMENT_ROOT"])).'/',
+    "webdocroot" => $_SERVER["DOCUMENT_ROOT"].'/'.substr(dirname($_SERVER["SCRIPT_FILENAME"]),strlen($_SERVER["DOCUMENT_ROOT"])).'/',
+    "authfile" => "/home/dks/public_html/.htpasswd",
+    "datapath" => "data",
+    "ovpn" => array(
+      "serverhost" => "88.99.170.20",
+      "sshuser" => "posdab",
+      "sshpwd" => "lee7yoh6",
+      "sshport" => "3587"
+    ),
+    // "db"=> array(
+    //   "type" => "pgsql",
+    //   "host" => "sql12.your-server.de",
+    //   "dbname" => "potlu2_db",
+    //   "user" =>  "potlu2_user",
+    //   "password" => "dMY8xGB6cBLzrDGE",
+    // ),
+    "db"=> array(
+      "type" => "pgsql",
+      "host" => "172.16.10.6",
+      "dbname" => "potlu2_db",
+      "user" =>  "potlu2_user",
+      "password" => "dMY8xGB6cBLzrDGE",
+    ),
+    "tmppath" => "tmp",
+    "toolspath" => "bin",
+    "version" => date("YmdHis"),
+    "minify" => "",
+  );
+
+?>
\ No newline at end of file
diff --git a/pointeuse/server/home/dks/public_html/htx/lib/database.php b/pointeuse/server/home/dks/public_html/htx/lib/database.php
new file mode 100644 (file)
index 0000000..54e8d48
--- /dev/null
@@ -0,0 +1,158 @@
+<?php
+class database {
+  private $conn;
+  private $dbconf;
+  private $debug=1;
+  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
+      //error_log("connect: ".'sqlite:'.$this->dbconf["dbfile"]);
+      if ($this->dbconf["type"] == "pgsql"){
+        $this->conn = new PDO($this->dbconf["type"].':host='.$this->dbconf["host"].';port=5432;dbname='.$this->dbconf["dbname"],$this->dbconf["user"],$this->dbconf["password"]);
+      } else if ($this->dbconf["type"] == "sqlite") {
+        $this->conn = new PDO('sqlite:'.$this->dbconf["dbfile"],'','');
+      }
+      //$this->conn = new PDO('pgsql:'.$this->dbconf["dbfile"],'','');
+      //$this->conn = new PDO('pgsql:'.$this->dbconf["dbfile"],'','');
+    } catch(PDOException $e){
+      error_log("Connection Error: ".$e->getMessage());
+    }
+  }
+  
+  public function securetext($text){
+    return str_replace("'","''",$text);
+  }
+  public function value($text){
+    if (($text == "") || ($text == null)){
+      return 'null';
+    }
+    return "'".$this->securetext($text)."'";
+  }
+
+  public function query($sql){
+    $result = array();
+    if ($this->debug == 1){
+      //error_log("QUERY:".$sql);
+    } 
+    try {
+      if ($this->conn){
+        $sth = $this->conn->prepare($sql);
+                         $sth->execute();
+        $result = $sth->fetch(PDO::FETCH_ASSOC);
+        return $result;
+      }
+    } catch(PDOException $e){
+      error_log("QUERY ERROR: ".$sql);
+    }
+    return $result;
+  }
+
+  public function querybykey($key,$sql){
+    $result = null;
+    $kresult = array();
+    if ($this->debug == 1){
+      //error_log("QUERYbykey: ".$sql);
+    }
+    try {
+      if ($this->conn){
+                         $sth = $this->conn->prepare($sql);
+                         $sth->execute();
+        $result = $sth->fetchAll(PDO::FETCH_ASSOC);
+        foreach($result as $r){
+          $kresult[$r[$key]] = $r;
+        }
+         
+        return $kresult;
+      }
+    } catch (PDOException $e){
+      error_log("QUERYBYKEY ERROR: ".$sql);
+    }
+               return $result;
+  }
+
+  public function queryarray($sql){
+    $result = null;
+    if ($this->debug == 1){
+      //error_log("QUERYARRAY: ".$sql);
+    }
+    try {
+      if ($this->conn){
+                         $sth = $this->conn->prepare($sql);
+                         $sth->execute();
+        $result = $sth->fetchAll(PDO::FETCH_ASSOC);
+        return $result;
+      }
+    } catch (PDOException $e){
+      error_log("QUERYARRAY ERROR: ".$sql);
+    }
+               return $result;
+  }
+
+  public function exec($sql){
+    if ($this->debug == 1){
+      error_log("EXEC: ".$sql);
+    }
+    try {
+      if ($this->conn){
+        return $this->conn->exec($sql);
+      }
+    } catch (PDOException $e){
+      error_log("EXEC ERROR: ".$sql);
+    }
+               return -1;
+  }
+
+  public function createUpdateDDL($schema,$table,$idents,$data){
+    $da = array();
+    $di = array();
+    foreach ($data as $col => $val){
+      array_push($da,$col."=".$this->value($val));
+    }
+    foreach ($idents as $col => $val){
+      array_push($di,$col."=".$this->value($val));
+    }
+    if ($schema != null){$schema = $schema.".";}
+    $updsql = "UPDATE ".$schema.$table." SET ".join(",",$da)." WHERE ".join(" AND ",$di).";";
+    return $updsql;
+  }
+
+  public function createInsertDDL($schema,$table,$data){
+    $dc = array();
+    $dv = array();
+    foreach ($data as $col => $val){
+      array_push($dc,$col);
+      array_push($dv,$this->value($val));
+    }
+    if ($schema != null){$schema = $schema.".";}
+    $inssql = "INSERT INTO ".$schema.$table." (".join(",",$dc).") VALUES (".join(",",$dv).");";
+    return $inssql;
+  }
+  public function createReplaceDDL($table,$data){
+    $dc = array();
+    $dv = array();
+    foreach ($data as $col => $val){
+      array_push($dc,$col);
+      array_push($dv,$this->value($val));
+    }
+    $inssql = "REPLACE INTO ".$table." (".join(",",$dc).") VALUES (".join(",",$dv).");";
+    return $inssql;
+  }
+
+  public function newuuid(){
+    if ($this->dbconf["type"] == "sqlite"){
+      $nid = $this->query("SELECT lower(hex( randomblob(4)) || '-' || hex( randomblob(2)) || '-' || hex( randomblob(2)) || '-' || hex( randomblob(2))  ||  '-' || hex(randomblob(6))) as id;");
+    } else if ($this->dbconf["type"] == "pgsql"){
+      $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/pointeuse/server/home/dks/public_html/htx/lib/dksssh.php b/pointeuse/server/home/dks/public_html/htx/lib/dksssh.php
new file mode 100644 (file)
index 0000000..eea1919
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+class dksssh {
+  private $cfg;
+  private $conn;
+  public function __construct($cfg){
+    $this->cfg = $cfg;
+      if (!($this->conn = ssh2_connect($this->cfg->sshhost, $this->cfg->sshport))) {
+        file_put_contents('cmds.log',$this->cfg->sshhost." connection FAILED!"."\n",FILE_APPAEND);
+          throw new Exception('Cannot connect to server');
+      }
+      #$fingerprint = ssh2_fingerprint($this->connection, SSH2_FINGERPRINT_MD5 | SSH2_FINGERPRINT_HEX);
+      #if (strcmp($this->ssh_server_fp, $fingerprint) !== 0) {
+      #    throw new Exception('Unable to verify server identity!');
+      #}
+      //error_log(print_r($this->cfg,true));
+      if (!ssh2_auth_password($this->conn, $this->cfg->sshuser, $this->cfg->sshpwd)) {
+          throw new Exception('USER Autentication rejected by server');
+      }
+  }
+  public function __destruct(){
+    $this->disconnect();
+  }
+  public function hasConnection(){
+    if ($this->conn != null){ return true;}
+    return false;
+  }
+  public function connect($cfg) {
+      //array("sshhost" => "","sshuser" => "","sshport" => "","sshfp" => "","sshpwd" =>"", "pubfile" => "", "privfile" =>"")
+      $this->cfg = $cfg;
+      if (!($this->conn = ssh2_connect($this->cfg->sshhost, $this->cfg->sshport))) {
+        file_put_contents('cmds.log',$this->cfg->sshhost." connection FAILED!"."\n",FILE_APPEND);
+          throw new Exception('Cannot connect to server');
+      }
+      #$fingerprint = ssh2_fingerprint($this->connection, SSH2_FINGERPRINT_MD5 | SSH2_FINGERPRINT_HEX);
+      #if (strcmp($this->ssh_server_fp, $fingerprint) !== 0) {
+      #    throw new Exception('Unable to verify server identity!');
+      #}
+      //error_log(print_r($this->cfg,true));
+      if (!ssh2_auth_password($this->conn, $this->cfg->sshuser, $this->cfg->sshpwd)) {
+          throw new Exception('USER Autentication rejected by server');
+      }
+  }
+  public function exec($cmd) {
+    $data = null;
+    if ($this->conn){
+      if (!($stream = ssh2_exec($this->conn, $cmd))) {
+        file_put_contents('cmds.log',$cmd." FAILED!"."\n".FILE_APPEND);
+        throw new Exception('SSH command failed');
+      }
+      stream_set_blocking($stream, true);
+      $data = "";
+      while ($buf = fread($stream, 4096)) {
+        $data .= $buf;
+      }
+      fclose($stream);
+    }
+    return $data;
+  }
+  public function disconnect() {
+      #$this->exec('echo "EXITING" && exit;');
+      $this->conn = null;
+  }
+
+}
+?>
\ No newline at end of file
diff --git a/pointeuse/server/home/dks/public_html/htx/lib/modules/data.php b/pointeuse/server/home/dks/public_html/htx/lib/modules/data.php
new file mode 100644 (file)
index 0000000..3d0e32f
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+class data {
+  private $dbh;
+  private $cfg;
+  public function __construct($dblink,$cfg){
+    $this->dbh = $dblink;
+    $this->cfg = $cfg;
+  }
+  public function __destruct(){
+    $this->dbh = null;
+  }
+  public function query($sql){
+    return $this->dbh->query($sql);
+  }
+  public function queryarray($sql){
+    return $this->dbh->queryarray($sql);
+  }
+  public function querybykey($key,$sql){
+    return $this->dbh->querybykey($key,$sql);
+  }
+  public function exec($sql){
+    return $this->dbh->exec($sql);
+  }
+  public function newuuid(){
+    return $this->dbh->newuuid();
+  }
+}
+?>
\ No newline at end of file
diff --git a/pointeuse/server/home/dks/public_html/htx/lib/modules/ovpn.php b/pointeuse/server/home/dks/public_html/htx/lib/modules/ovpn.php
new file mode 100644 (file)
index 0000000..38279e0
--- /dev/null
@@ -0,0 +1,33 @@
+<?php
+class ovpn {
+  private $dbh;
+  private $cfg;
+  public function __construct($dblink,$cfg){
+    $this->dbh = $dblink;
+    $this->cfg = $cfg;
+  }
+  public function __destruct(){
+    $this->dbh = null;
+  }
+
+  public function getOnlineClients($name = null){
+    $ovpnssh = new dksssh();
+    $sshsrv = array("sshhost"=> $this->cfg["ovpn"]["serverhost"],
+                    "sshuser" => $this->cfg["ovpn"]["sshuser"] ,
+                    "sshpwd" => $this->cfg["ovpn"]["sshpwd"],
+                    "sshport" => $this->cfg["ovpn"]["sshport"]
+                  );
+    $strres = ""; 
+    if ($name != null){
+      $strres = $ovpnssh->exec("bin/syncstationdb.pl -st ".$name,$sshsrv);
+    } else {
+      $strres = $ovpnssh->exec("bin/syncstationdb.pl -l",$sshsrv);
+    }
+    $ret  = null;
+    if ($strres != ""){
+      $ret = json_decode($strres);
+    }
+    return $res;
+  }
+}
+?>
\ No newline at end of file
diff --git a/pointeuse/server/home/dks/public_html/htx/lib/modules/ssh.php b/pointeuse/server/home/dks/public_html/htx/lib/modules/ssh.php
new file mode 100644 (file)
index 0000000..193f666
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+class ssh {
+  private $dbh;
+  private $cfg;
+  public function __construct($dblink,$cfg){
+    $this->dbh = $dblink;
+    $this->cfg = $cfg;
+  }
+  public function __destruct(){
+    $this->dbh = null;
+  }
+
+  public function exec($host,$cmd){
+    $sshcfg = null;
+    $retdata = null;
+    $hfile =  $this->cfg["datapath"].'/hosts/'.$host.".json";
+    file_put_contents('cmds.log',date("Y-m-d H:i:s").";".$host.";Send CMD:".$cmd."\n",FILE_APPEND);
+    if (file_exists($hfile)){
+      $sshcfg  = json_decode(file_get_contents($hfile));
+    } else {
+      return array("error" => "Host ".$hfile." unknown!");
+    }
+    if ($sshcfg != null){
+      $ssh =  new dksssh($sshcfg);
+      if ($ssh->hasConnection()){
+        file_put_contents('cmds.log',date("Y-m-d H:i:s").";".$host.";Connected\n",FILE_APPEND);
+        $retdata = $ssh->exec($cmd);
+       file_put_contents('cmds.log',date("Y-m-d H:i:s").";".$host.";Exec Done\n",FILE_APPEND);
+      } else {
+        return array("error" => "Connection error!");
+      }
+      
+    }
+    return array("output" => $retdata);
+  } 
+
+  // public function update_station_staff($schema,$id_staff,$data){
+  //   //get staff data from pot db
+  //   if (file_exists($this->cfg["datapath"].'/'.$schema.".sqlite")){
+  //     $stdata = $this->dbh->query("select id,surname,prename,timetrackerpin as pin,timetrackerlang as language,timetrackers as trackers,timetrackerrestriction as restriction,isdeleted,case when istimetrackerenabled is not true then true else false end as isdisabled from ".$schema.".staff where id='".$id_staff."';");
+  //     $csqlite = new database(array("type" => "sqlite","dbfile" => $this->cfg["datapath"].'/'.$schema.".sqlite"));
+  //     $sql = $csqlite->createReplaceDDL("staff",$stadata);
+  //     $csqlite->exec($sql);
+  //   }
+    
+  //   //insert into local sqlite db
+  //   //update databases on stations
+  // }
+
+  // public function update_track($schema,$stampds,$src){
+  //   //update trackdata in trackdb put in $stamp;
+  //   //if (trfrom == station)
+  //   //sync to station
+  //   //if (trfrom == db)
+  //   //sync to pot db
+  // }
+  
+}
+?>
diff --git a/pointeuse/server/home/dks/public_html/index.html b/pointeuse/server/home/dks/public_html/index.html
new file mode 100644 (file)
index 0000000..788961e
--- /dev/null
@@ -0,0 +1,3 @@
+<h1>system works!</h1>
+
+
diff --git a/pointeuse/server/home/dks/public_html/index.php b/pointeuse/server/home/dks/public_html/index.php
new file mode 100644 (file)
index 0000000..5f3cf5c
--- /dev/null
@@ -0,0 +1,5 @@
+<?php
+       header('Content-Type: text/html');
+       echo print_r($_SERVER,true);
+       file_put_contents("test.txt",print_r($_SERVER,true),FILE_APPEND);
+?>
diff --git a/pointeuse/vpn/DKS-VPN-dbs-hourtrax.ovpn b/pointeuse/vpn/DKS-VPN-dbs-hourtrax.ovpn
new file mode 100644 (file)
index 0000000..f5b5d7e
--- /dev/null
@@ -0,0 +1,153 @@
+client
+dev tun
+proto udp
+remote vsrv01.dks.lu 1098
+remote arandks.lu 1098
+
+remote-random
+resolv-retry infinite
+nobind
+persist-key
+persist-tun
+mute-replay-warnings
+<ca>
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV
+BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD
+VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X
+8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt
+pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4
+4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H
+vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6
+gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1
+CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ
+f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV
+BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN
+BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h
+wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn
+AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s
+PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V
+8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw
+8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g==
+-----END CERTIFICATE-----
+</ca>
+<cert>
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            be:8b:8f:9b:b2:f9:6b:8b:12:b5:6e:d1:f2:a3:dc:f4
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=aran
+        Validity
+            Not Before: Nov  7 10:59:12 2019 GMT
+            Not After : Nov  4 10:59:12 2029 GMT
+        Subject: CN=dbs-hourtrax
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:c1:64:7f:84:7c:1d:b0:45:11:12:22:46:3d:9d:
+                    85:29:c6:8b:5b:20:7a:3c:56:92:9f:d4:02:4a:b6:
+                    3f:1d:08:6b:e9:cd:21:54:24:3e:c7:38:51:db:09:
+                    75:0a:1a:b1:d8:dd:a2:e7:1e:c3:dd:78:ee:6c:d6:
+                    c4:cf:65:3b:0f:42:3d:d5:c0:67:ca:8c:37:55:03:
+                    a5:32:45:58:ed:65:b4:ae:74:0f:99:9a:23:3e:1a:
+                    f7:b4:64:52:86:8f:17:ff:98:d8:d9:b8:82:5f:ba:
+                    22:9b:10:ba:19:0c:36:c9:82:54:99:20:7a:c8:1b:
+                    d6:84:db:39:79:2e:0c:ac:a1:d0:18:ac:e8:47:c3:
+                    41:bf:80:32:d6:2c:b5:e4:2a:bf:cf:61:56:92:90:
+                    6a:df:92:74:52:52:1d:3e:14:b0:fd:55:5a:41:a5:
+                    de:7e:2d:cf:7a:04:a6:44:4a:a9:f2:fe:60:2a:89:
+                    0c:53:a5:69:f8:92:8c:6c:de:24:1a:6c:cc:f9:43:
+                    26:71:9d:cc:f0:d1:3c:75:3f:b6:bf:c5:9a:02:06:
+                    d4:49:f8:3c:e2:58:72:5c:86:9a:dc:0a:61:ef:92:
+                    35:9b:ff:33:86:6b:48:fe:40:b6:e9:a6:9f:1b:25:
+                    12:78:dc:81:83:64:cb:ba:b9:8c:4e:90:52:cc:f9:
+                    80:51
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                A9:A4:B5:C8:AA:D9:EA:BF:59:D3:C4:6E:0C:A1:43:92:E7:DF:0E:EC
+            X509v3 Authority Key Identifier: 
+                keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4
+                DirName:/CN=aran
+                serial:AE:B5:02:1A:71:02:93:94
+
+            X509v3 Extended Key Usage: 
+                TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature
+    Signature Algorithm: sha256WithRSAEncryption
+         0f:e0:45:49:d3:96:90:7d:d7:8f:4d:35:b3:7e:f4:b3:4b:af:
+         4c:97:68:25:d7:3b:48:cc:9b:e4:4b:d5:61:bd:a8:f0:d5:df:
+         60:b0:c1:c0:cc:1a:39:b4:49:b4:dc:39:41:52:1a:10:22:2a:
+         7e:04:64:83:6a:b2:af:76:69:c5:5a:74:e0:26:97:23:df:d7:
+         23:a1:34:e4:35:74:4b:f8:59:47:44:91:6f:31:dc:0f:05:96:
+         f0:76:2d:47:b6:28:cf:f6:a6:9b:ae:32:d0:54:84:0b:d7:f0:
+         cf:b5:e5:ed:19:1a:72:df:db:b9:fb:82:93:e3:ee:aa:09:c0:
+         dd:71:82:d4:9d:c0:6b:82:63:58:fa:0f:5b:5d:c3:f7:86:44:
+         b5:be:21:37:cf:3e:5b:82:b5:e7:46:fe:c3:03:94:a4:49:27:
+         df:ab:f6:79:39:1a:4f:4c:db:0b:4d:bc:72:c8:80:36:16:b0:
+         c0:52:53:52:75:86:9c:04:10:04:fc:8b:be:40:91:61:81:f6:
+         07:6b:a5:89:db:b1:7a:eb:50:19:ad:39:8a:a3:da:bd:f6:ed:
+         d7:70:e7:43:c9:df:3c:28:49:ce:ac:5c:94:1f:b1:54:c3:69:
+         da:f2:f7:36:a4:8e:a3:98:e8:ee:9e:59:03:90:69:08:22:1b:
+         bc:48:b3:b6
+-----BEGIN CERTIFICATE-----
+MIIDQjCCAiqgAwIBAgIRAL6Lj5uy+WuLErVu0fKj3PQwDQYJKoZIhvcNAQELBQAw
+DzENMAsGA1UEAwwEYXJhbjAeFw0xOTExMDcxMDU5MTJaFw0yOTExMDQxMDU5MTJa
+MBcxFTATBgNVBAMMDGRicy1ob3VydHJheDCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAMFkf4R8HbBFERIiRj2dhSnGi1sgejxWkp/UAkq2Px0Ia+nNIVQk
+Psc4UdsJdQoasdjdoucew9147mzWxM9lOw9CPdXAZ8qMN1UDpTJFWO1ltK50D5ma
+Iz4a97RkUoaPF/+Y2Nm4gl+6IpsQuhkMNsmCVJkgesgb1oTbOXkuDKyh0Bis6EfD
+Qb+AMtYsteQqv89hVpKQat+SdFJSHT4UsP1VWkGl3n4tz3oEpkRKqfL+YCqJDFOl
+afiSjGzeJBpszPlDJnGdzPDRPHU/tr/FmgIG1En4POJYclyGmtwKYe+SNZv/M4Zr
+SP5AtummnxslEnjcgYNky7q5jE6QUsz5gFECAwEAAaOBkDCBjTAJBgNVHRMEAjAA
+MB0GA1UdDgQWBBSppLXIqtnqv1nTxG4MoUOS598O7DA/BgNVHSMEODA2gBSpUS+X
+4xXF1ao3HfqKB/GqOsl/1KETpBEwDzENMAsGA1UEAwwEYXJhboIJAK61AhpxApOU
+MBMGA1UdJQQMMAoGCCsGAQUFBwMCMAsGA1UdDwQEAwIHgDANBgkqhkiG9w0BAQsF
+AAOCAQEAD+BFSdOWkH3Xj001s370s0uvTJdoJdc7SMyb5EvVYb2o8NXfYLDBwMwa
+ObRJtNw5QVIaECIqfgRkg2qyr3ZpxVp04CaXI9/XI6E05DV0S/hZR0SRbzHcDwWW
+8HYtR7Yoz/amm64y0FSEC9fwz7Xl7Rkact/bufuCk+PuqgnA3XGC1J3Aa4JjWPoP
+W13D94ZEtb4hN88+W4K150b+wwOUpEkn36v2eTkaT0zbC028csiANhawwFJTUnWG
+nAQQBPyLvkCRYYH2B2uliduxeutQGa05iqPavfbt13DnQ8nfPChJzqxclB+xVMNp
+2vL3NqSOo5jo7p5ZA5BpCCIbvEiztg==
+-----END CERTIFICATE-----
+</cert>
+<key>
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDBZH+EfB2wRRES
+IkY9nYUpxotbIHo8VpKf1AJKtj8dCGvpzSFUJD7HOFHbCXUKGrHY3aLnHsPdeO5s
+1sTPZTsPQj3VwGfKjDdVA6UyRVjtZbSudA+ZmiM+Gve0ZFKGjxf/mNjZuIJfuiKb
+ELoZDDbJglSZIHrIG9aE2zl5LgysodAYrOhHw0G/gDLWLLXkKr/PYVaSkGrfknRS
+Uh0+FLD9VVpBpd5+Lc96BKZESqny/mAqiQxTpWn4koxs3iQabMz5QyZxnczw0Tx1
+P7a/xZoCBtRJ+DziWHJchprcCmHvkjWb/zOGa0j+QLbppp8bJRJ43IGDZMu6uYxO
+kFLM+YBRAgMBAAECggEAMBTyd1f8caTaV63Z1NvjDb3lS+TJP1Mu5Tnqz/R7wJYl
+bl2n2amhShrAjzrMtJRqf0arh9boT5oPfVPwXrgGdQa9JPXPWFaAM0zSt6ryLyPI
+Rk9oyYG/HWPLDjibJAVTrCKuV4M+NtqqW+9OtYeJ35PdwKyImlQBg8qVgYFneUva
+SWu7SoTHxF3hT5RGOnAfkWtI+ep5sdxH7b9ptEkevRznahA0aysnFwaAcPTTQsX0
+E5hdTJzkWJ4hgEgyQCgzZMfJgCgGW/Uz2AxhnZhcPtK0lVEn8y/N0ZzTbWSaTMeu
+5Wp9noVfIP7w7AWWknnVxKzrM4zSbOAysow549+OoQKBgQD8+LHVgikwZd0OTmVC
+9GGaPtx5mMznNoH+DJv01EFd9UAGdg+NJfiRtC6dYAs3rFDprbk7ac5sjgepN229
+vHR7BPmWzZCMcoiMRotnVVyN9eAdZy0lYBqiQ7ZY5JSpg8sW2AQWUYE5BrLkkSI4
+YHuvKJE24SlvFJwDD5BiGN4dnQKBgQDDtTTZK5k3AgFSQj9USdZgJLnd7k2XY3au
+3S3K13IuU4jcJ3kORGMVNBKwUdyGTHC1p3IBaiKj9rYXfU6sz55VNO/AOJgJmSg7
+VWHMuroWplO4jQuNFjbiVMoFCOYft4GuaZZzgjrS8ENJ3LxK81d3Ih+dtS3p1d4x
+4ShHrgUJRQKBgQDm245u6nnsUQmLJMAEekEYIoXR8kAMQRIgZiFtLMb6l/X174gB
+p8VQMr7Xn+6cwASXPJLuRYC8UGFta8gafwFNwxyDItXnVh6G5VoS0zPD2b7NFnt8
+wFeN/X1LYk7I5B1Sm5AfTgI/qH1ZWZmBGYvGLZ9YFeNaG9TEdk+tNkR9gQKBgCrY
+pTVWgji0y61Cq7K8Z56s67RW083tDLLD4Z6jBHB4AWKRkcM53adquxy3D1ynp5Vd
+j2wX3HWhMcR6vpq+6Z8l88dVnJOdYF19F+hGiS8kQvgIiRreXi22+nOXuyn+dvnE
+TBgFzvMXfuPQ27hdBi0i32EbpW2oUPkCnlrzEk8xAoGAcLR9CGVUzUkJ83jpoqoB
+O+hrzY9hLX3+HLnfAJjeNNk5LlSuDJbhjIRc/xAA/SAgayPMWy+7mp9gMFBV6O6n
+9y8ag4sGSXasTBJuFJlQ1S80Ct5igx1aDFGQOjtBXPWGCjuLPJwgLDq0GcSrSf6W
+Z+ygH5b1eq3wkGPVCvgJEqQ=
+-----END PRIVATE KEY-----
+</key>
+comp-lzo
+verb 3
+mute 20
+cipher AES-256-CBC
diff --git a/pointeuse/vpn/DKS-VPN-dhart-hourtrax01.ovpn b/pointeuse/vpn/DKS-VPN-dhart-hourtrax01.ovpn
new file mode 100644 (file)
index 0000000..6c1ca36
--- /dev/null
@@ -0,0 +1,153 @@
+client
+dev tun
+proto udp
+remote vsrv01.dks.lu 1098
+remote arandks.lu 1098
+
+remote-random
+resolv-retry infinite
+nobind
+persist-key
+persist-tun
+mute-replay-warnings
+<ca>
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV
+BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD
+VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X
+8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt
+pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4
+4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H
+vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6
+gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1
+CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ
+f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV
+BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN
+BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h
+wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn
+AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s
+PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V
+8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw
+8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g==
+-----END CERTIFICATE-----
+</ca>
+<cert>
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            77:af:a0:10:be:9e:06:bd:43:fe:d0:5f:c0:3f:79:66
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=aran
+        Validity
+            Not Before: Jan 13 15:13:04 2021 GMT
+            Not After : Jan 11 15:13:04 2031 GMT
+        Subject: CN=dhart-hourtrax01
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:b4:38:00:8e:31:7b:f6:56:cf:5a:ec:8a:96:77:
+                    c1:89:d2:8d:4f:d8:8f:c7:73:05:37:7e:05:81:51:
+                    2e:81:34:3c:5a:2a:42:87:f8:80:d6:9a:4c:6b:80:
+                    c1:50:4a:22:a8:dd:79:89:b3:1c:a6:5f:e4:5e:b6:
+                    02:a0:5f:49:09:03:13:e0:bf:c8:4a:1f:88:45:f7:
+                    58:e9:56:5c:e1:cd:b5:5e:f8:70:24:39:cd:e4:fd:
+                    fc:60:44:5c:68:2c:4d:76:cf:9f:9a:5a:5e:01:8c:
+                    55:aa:76:6c:fe:95:a6:e8:d2:b3:9b:66:25:39:4e:
+                    32:1a:9b:db:79:bf:92:12:06:92:b7:e9:60:cf:d6:
+                    c8:10:f7:d0:c4:3b:7e:32:cb:91:c5:c8:b8:d5:03:
+                    2f:3b:a1:76:2d:3d:76:f2:3d:e9:bf:b2:91:82:6f:
+                    bc:dc:44:a3:93:68:b5:42:a4:fc:49:cc:93:2e:52:
+                    c7:90:5e:f0:0a:e3:f8:55:f9:4f:4f:2b:51:e7:38:
+                    d9:49:a3:1d:a2:c5:de:76:35:24:f7:32:7f:8f:56:
+                    68:33:a0:8d:98:bf:2a:1e:1c:88:4f:64:8a:06:b2:
+                    26:c1:64:56:3b:92:40:5d:37:03:03:0e:10:b9:5e:
+                    2e:e3:02:32:16:c5:74:c4:40:40:4a:fd:31:e1:0d:
+                    9f:1b
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                D3:05:48:E6:F9:CC:20:1B:19:A5:3E:A5:7C:18:31:AA:F5:30:23:FF
+            X509v3 Authority Key Identifier: 
+                keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4
+                DirName:/CN=aran
+                serial:AE:B5:02:1A:71:02:93:94
+
+            X509v3 Extended Key Usage: 
+                TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature
+    Signature Algorithm: sha256WithRSAEncryption
+         8a:6a:80:62:5c:6f:34:b4:c9:94:ff:2e:a2:b1:40:de:28:7f:
+         73:0e:8f:8b:6f:6d:f3:96:30:95:7d:9d:e2:a8:f0:e9:86:2d:
+         72:27:08:d6:51:ba:a7:0f:a6:a9:c8:85:b0:c3:3a:4e:62:c3:
+         3d:22:f9:19:14:41:a6:e0:5d:6c:a7:a4:3a:0e:f5:91:c6:e7:
+         ae:a8:ac:74:ca:c8:df:08:e7:a9:a1:9c:1c:69:ef:f6:de:23:
+         0a:6f:5c:62:7d:3e:30:e1:d1:dc:59:c4:54:e8:69:fc:52:51:
+         d5:22:d7:9e:ba:15:5d:28:a8:00:6b:3f:4c:61:3c:f8:ba:4e:
+         0b:be:15:5f:7c:a0:f7:d9:c0:eb:00:15:6d:59:87:ee:d1:56:
+         c3:9f:3d:eb:ce:c0:aa:5e:d4:08:f1:d4:48:52:92:a5:31:25:
+         1c:57:0c:f2:86:ec:d1:7a:b5:3d:d7:71:17:de:de:e6:2e:08:
+         97:a3:4a:63:1b:a9:0e:00:bd:d9:1f:b8:df:84:55:e0:f1:a9:
+         ce:d7:8e:5b:ca:3d:a5:60:11:c0:f2:11:b8:33:6e:fb:20:57:
+         d2:02:ab:4b:32:61:52:29:7e:b4:fa:1e:e6:35:17:6d:9f:08:
+         a2:c7:f1:f7:1f:e7:fd:23:bd:e2:41:d7:a0:6a:4b:6c:05:76:
+         2b:c7:9f:f1
+-----BEGIN CERTIFICATE-----
+MIIDRTCCAi2gAwIBAgIQd6+gEL6eBr1D/tBfwD95ZjANBgkqhkiG9w0BAQsFADAP
+MQ0wCwYDVQQDDARhcmFuMB4XDTIxMDExMzE1MTMwNFoXDTMxMDExMTE1MTMwNFow
+GzEZMBcGA1UEAwwQZGhhcnQtaG91cnRyYXgwMTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBALQ4AI4xe/ZWz1rsipZ3wYnSjU/Yj8dzBTd+BYFRLoE0PFoq
+Qof4gNaaTGuAwVBKIqjdeYmzHKZf5F62AqBfSQkDE+C/yEofiEX3WOlWXOHNtV74
+cCQ5zeT9/GBEXGgsTXbPn5paXgGMVap2bP6VpujSs5tmJTlOMhqb23m/khIGkrfp
+YM/WyBD30MQ7fjLLkcXIuNUDLzuhdi09dvI96b+ykYJvvNxEo5NotUKk/EnMky5S
+x5Be8Arj+FX5T08rUec42UmjHaLF3nY1JPcyf49WaDOgjZi/Kh4ciE9kigayJsFk
+VjuSQF03AwMOELleLuMCMhbFdMRAQEr9MeENnxsCAwEAAaOBkDCBjTAJBgNVHRME
+AjAAMB0GA1UdDgQWBBTTBUjm+cwgGxmlPqV8GDGq9TAj/zA/BgNVHSMEODA2gBSp
+US+X4xXF1ao3HfqKB/GqOsl/1KETpBEwDzENMAsGA1UEAwwEYXJhboIJAK61Ahpx
+ApOUMBMGA1UdJQQMMAoGCCsGAQUFBwMCMAsGA1UdDwQEAwIHgDANBgkqhkiG9w0B
+AQsFAAOCAQEAimqAYlxvNLTJlP8uorFA3ih/cw6Pi29t85YwlX2d4qjw6YYtcicI
+1lG6pw+mqciFsMM6TmLDPSL5GRRBpuBdbKekOg71kcbnrqisdMrI3wjnqaGcHGnv
+9t4jCm9cYn0+MOHR3FnEVOhp/FJR1SLXnroVXSioAGs/TGE8+LpOC74VX3yg99nA
+6wAVbVmH7tFWw589687Aql7UCPHUSFKSpTElHFcM8obs0Xq1PddxF97e5i4Il6NK
+YxupDgC92R+434RV4PGpzteOW8o9pWARwPIRuDNu+yBX0gKrSzJhUil+tPoe5jUX
+bZ8Iosfx9x/n/SO94kHXoGpLbAV2K8ef8Q==
+-----END CERTIFICATE-----
+</cert>
+<key>
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC0OACOMXv2Vs9a
+7IqWd8GJ0o1P2I/HcwU3fgWBUS6BNDxaKkKH+IDWmkxrgMFQSiKo3XmJsxymX+Re
+tgKgX0kJAxPgv8hKH4hF91jpVlzhzbVe+HAkOc3k/fxgRFxoLE12z5+aWl4BjFWq
+dmz+labo0rObZiU5TjIam9t5v5ISBpK36WDP1sgQ99DEO34yy5HFyLjVAy87oXYt
+PXbyPem/spGCb7zcRKOTaLVCpPxJzJMuUseQXvAK4/hV+U9PK1HnONlJox2ixd52
+NST3Mn+PVmgzoI2YvyoeHIhPZIoGsibBZFY7kkBdNwMDDhC5Xi7jAjIWxXTEQEBK
+/THhDZ8bAgMBAAECggEADs12xjcsTmyM9ZPuQjOt8usXblKEZMZ+zDMOsrN/VV98
+AY/tDQwNURM1abMWrciZFjOy0uuiU8wWjuz2REPvVM0q6c/23JfAcrbBV9EfKfDi
+j91qIJ+a2M8/1oxm5quU5UhifKQlio0DUFAP3c1e+0qrM/1s20sf9G2O1m40ykQa
+k4rIdKdnzXwasYsWnjjrx96En7PmkGkE4V8dk2YUTI7/7fVrI7tKaPjHbOdzVYkH
+45MDsfn6bItUwdiOxP63AY4ThPFU1g/lkfCb8f+wWRJId8Hy5BW9/pVcdMCtRjbA
+4uC++W/Emadskbm2fIsfWzYURDFdhNu7fZe8iu/qoQKBgQDmdm3G8oKj5azcuEnI
+ZluzmgMVQpV0y+J7gqq4Y0VgS3iVApNweLguwUDg7Fu263S2Ec6cxuh75+6w1ofe
+j9gi4SvIpnzcCct+uyfnjryfA+pBtGJz35e6SmBz/YRELC97y4C0HPZAhoeDPavt
+TL2DnCpsNQ/7OLqy9Y3viBR6SwKBgQDIMEwvypkHo9rB8C5ip2lyjyb3BjSNSj5G
+mLEiyNEUMgNFvUms09uuBQhgEzBjI9SiKMplbOJv1OGHW87QNz2wFLHYzekPjHuz
+As6QptNDSNwrWI8PNibQlyFHcDYQjBZgH4ToEUIRLUkxb/UUboA9Z2YWt0IFESUv
+TD7KwcRscQKBgHtm5pkkubcxAEKfm0JnLKsayJPVt1l24qrn6Koa3ccWIlcHrhMH
+UPgYGrlVVja4FSJ4nn1sNIhERJcECHSv6TekAmHKZAkeZYxSgqeG0pEC86iDAkSx
+cPkbYlI5aV1nm3VaHmxTJbifUGiB2VGTSdbzA/Q05X3Lfozc10dvQifJAoGBALNq
+3g2DRc4cI+bnjZsrsg1TkbeZ3yW2ocQB+9hSJVk1TcuGT+7O3jfEGPKKoDZqmZtQ
+db2bbgKOyCbZuKzSpb4XfiHywmwGG6Of42Svr+7A8VsD/wvCG92dZd0yC7Ke6zrx
+ZNvdA9qDPPNLBVtvgg4Giu/XBRundy1B55EvQw1xAoGANOBb6VCblKtG4XBq6Nml
+98+oBZoVBI4q6DvisKAYIBFBcNgneAJyg0gaGwTAT0WwOJKn+swIBXeqoyz4iZBY
+JUm5fJv8vHgPP6g/w1rtXekhQvyJC1fQxcEQskzRPmv/DGh+b5cRW1vnA/Z3PweV
+YdX6gbGaYtPdhVaZbDz+2ks=
+-----END PRIVATE KEY-----
+</key>
+comp-lzo
+verb 3
+mute 20
+cipher AES-256-CBC
diff --git a/pointeuse/vpn/DKS-VPN-dhart-hourtrax02.ovpn b/pointeuse/vpn/DKS-VPN-dhart-hourtrax02.ovpn
new file mode 100644 (file)
index 0000000..159dec3
--- /dev/null
@@ -0,0 +1,153 @@
+client
+dev tun
+proto udp
+remote vsrv01.dks.lu 1098
+remote arandks.lu 1098
+
+remote-random
+resolv-retry infinite
+nobind
+persist-key
+persist-tun
+mute-replay-warnings
+<ca>
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV
+BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD
+VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X
+8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt
+pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4
+4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H
+vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6
+gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1
+CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ
+f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV
+BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN
+BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h
+wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn
+AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s
+PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V
+8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw
+8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g==
+-----END CERTIFICATE-----
+</ca>
+<cert>
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            fb:8e:c6:a9:ef:9e:17:b8:3a:86:ec:04:96:91:18:0b
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=aran
+        Validity
+            Not Before: Jan 13 15:13:10 2021 GMT
+            Not After : Jan 11 15:13:10 2031 GMT
+        Subject: CN=dhart-hourtrax02
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:c1:c4:ea:b8:e1:58:6f:94:cf:6a:ca:da:b3:b4:
+                    b0:90:1c:70:11:62:c6:ea:6c:1a:59:af:f0:e7:41:
+                    92:82:13:4e:51:aa:74:a9:8e:63:bb:4b:cd:f3:31:
+                    36:4e:f9:a1:86:10:5f:91:74:b2:fe:0b:30:bc:a7:
+                    f3:0e:55:71:9e:a0:b6:34:e8:a1:f7:36:bf:91:86:
+                    35:27:f1:ba:ef:e5:09:53:19:62:6c:e1:2a:14:be:
+                    d3:bd:cb:4c:0b:5f:3f:15:b4:9f:97:3e:bd:fe:ab:
+                    79:37:fa:65:1a:c5:c2:ff:31:da:39:51:ea:9f:5d:
+                    80:6b:a9:56:1e:40:87:38:c7:59:59:6d:06:41:d2:
+                    53:11:ee:82:00:e8:b0:cc:a3:7f:8a:17:61:d6:e6:
+                    26:92:2e:0b:2d:24:5e:c5:30:c0:19:fb:0e:b7:5a:
+                    b6:66:93:ad:5e:54:7b:65:f5:ec:1c:1d:b0:c1:df:
+                    f2:bb:c6:57:1f:8d:3d:d1:9e:55:a0:63:a6:09:e6:
+                    2b:8f:11:87:9a:67:a7:8e:7c:91:d4:57:2b:57:f8:
+                    a9:eb:fb:73:2d:37:28:e6:90:23:0f:a8:74:53:b1:
+                    bc:b0:66:2b:15:21:e9:f9:b5:30:62:5c:45:86:95:
+                    2a:17:61:e2:9e:f9:2c:ca:e5:a4:38:c0:1e:5c:da:
+                    10:e1
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                FA:D7:5E:07:2F:91:5A:E7:38:D9:2A:5D:1D:F3:67:90:E9:A5:E0:67
+            X509v3 Authority Key Identifier: 
+                keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4
+                DirName:/CN=aran
+                serial:AE:B5:02:1A:71:02:93:94
+
+            X509v3 Extended Key Usage: 
+                TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature
+    Signature Algorithm: sha256WithRSAEncryption
+         29:35:2e:99:f1:8f:bd:e7:74:a9:4c:62:e4:3d:8c:98:a1:ad:
+         26:0f:05:49:86:62:d0:67:e0:70:eb:e4:85:79:02:68:e6:a3:
+         29:3a:50:41:f5:59:98:14:de:62:12:74:4b:13:0d:02:3b:66:
+         0e:a2:17:dc:7f:95:a3:2a:76:51:49:e9:3a:c7:5a:76:ce:61:
+         74:06:b1:c6:7a:50:c6:a2:46:63:7e:4e:2b:1c:49:e1:25:ec:
+         65:91:2e:13:10:54:c7:f2:36:d1:ed:61:64:a8:b4:72:38:5d:
+         41:3e:fa:dd:79:cc:72:b3:13:4e:bd:9b:2b:85:c3:8d:bf:ba:
+         90:0e:26:61:ab:2c:5e:48:ea:27:f6:3d:5e:49:06:9d:28:68:
+         96:98:46:d1:2e:c9:6d:67:27:ff:0e:a6:43:e9:a2:cc:bb:35:
+         1c:fa:ed:09:f5:3d:fe:97:58:ee:b7:86:0c:38:5a:ff:54:41:
+         b5:39:40:4b:5e:71:c3:bf:09:e7:bb:fe:ba:a0:8b:31:d8:6e:
+         c9:ea:ea:fc:da:85:f7:fd:0c:12:5f:09:7f:75:2b:29:a2:ba:
+         5a:82:f1:ce:93:76:fe:e1:86:a2:d7:69:3a:e4:e6:e2:37:76:
+         54:e6:90:b9:b3:1a:01:77:cf:4b:1f:a1:31:76:95:a1:38:b7:
+         f0:5b:be:d6
+-----BEGIN CERTIFICATE-----
+MIIDRjCCAi6gAwIBAgIRAPuOxqnvnhe4OobsBJaRGAswDQYJKoZIhvcNAQELBQAw
+DzENMAsGA1UEAwwEYXJhbjAeFw0yMTAxMTMxNTEzMTBaFw0zMTAxMTExNTEzMTBa
+MBsxGTAXBgNVBAMMEGRoYXJ0LWhvdXJ0cmF4MDIwggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQDBxOq44VhvlM9qytqztLCQHHARYsbqbBpZr/DnQZKCE05R
+qnSpjmO7S83zMTZO+aGGEF+RdLL+CzC8p/MOVXGeoLY06KH3Nr+RhjUn8brv5QlT
+GWJs4SoUvtO9y0wLXz8VtJ+XPr3+q3k3+mUaxcL/Mdo5UeqfXYBrqVYeQIc4x1lZ
+bQZB0lMR7oIA6LDMo3+KF2HW5iaSLgstJF7FMMAZ+w63WrZmk61eVHtl9ewcHbDB
+3/K7xlcfjT3RnlWgY6YJ5iuPEYeaZ6eOfJHUVytX+Knr+3MtNyjmkCMPqHRTsbyw
+ZisVIen5tTBiXEWGlSoXYeKe+SzK5aQ4wB5c2hDhAgMBAAGjgZAwgY0wCQYDVR0T
+BAIwADAdBgNVHQ4EFgQU+tdeBy+RWuc42SpdHfNnkOml4GcwPwYDVR0jBDgwNoAU
+qVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNVBAMMBGFyYW6CCQCutQIa
+cQKTlDATBgNVHSUEDDAKBggrBgEFBQcDAjALBgNVHQ8EBAMCB4AwDQYJKoZIhvcN
+AQELBQADggEBACk1Lpnxj73ndKlMYuQ9jJihrSYPBUmGYtBn4HDr5IV5Amjmoyk6
+UEH1WZgU3mISdEsTDQI7Zg6iF9x/laMqdlFJ6TrHWnbOYXQGscZ6UMaiRmN+Tisc
+SeEl7GWRLhMQVMfyNtHtYWSotHI4XUE++t15zHKzE069myuFw42/upAOJmGrLF5I
+6if2PV5JBp0oaJaYRtEuyW1nJ/8OpkPposy7NRz67Qn1Pf6XWO63hgw4Wv9UQbU5
+QEteccO/Cee7/rqgizHYbsnq6vzahff9DBJfCX91KymiulqC8c6Tdv7hhqLXaTrk
+5uI3dlTmkLmzGgF3z0sfoTF2laE4t/BbvtY=
+-----END CERTIFICATE-----
+</cert>
+<key>
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDBxOq44VhvlM9q
+ytqztLCQHHARYsbqbBpZr/DnQZKCE05RqnSpjmO7S83zMTZO+aGGEF+RdLL+CzC8
+p/MOVXGeoLY06KH3Nr+RhjUn8brv5QlTGWJs4SoUvtO9y0wLXz8VtJ+XPr3+q3k3
++mUaxcL/Mdo5UeqfXYBrqVYeQIc4x1lZbQZB0lMR7oIA6LDMo3+KF2HW5iaSLgst
+JF7FMMAZ+w63WrZmk61eVHtl9ewcHbDB3/K7xlcfjT3RnlWgY6YJ5iuPEYeaZ6eO
+fJHUVytX+Knr+3MtNyjmkCMPqHRTsbywZisVIen5tTBiXEWGlSoXYeKe+SzK5aQ4
+wB5c2hDhAgMBAAECggEAB4rZtB6ZaaZ6OGbzAmG7KbDhr9uPcJqKoAkYMHg98rA7
+sTQYXG09dpHpz1iQC5zt66EBh1Dqkrbuy7kh3eH3jTwmO4L+ovfPlyOJOCfRpfrd
+VQ285g4RrEMNTOr3581qUDb6q1F25c3Y5xPpEZS3FWXkX6zPnCpwkEBEKONMICqY
+9PSDqUkyB74StXV3InWvIEakNPeSjggEPs/+dLXA9nzoSQBEudTefDRjNp9u/2G7
+RWjaWrfezugIUqSfYUCjc+X2Zqfz1TRIdCbZXu0gQd7BaaDyzsoE1ExIsqNDnGBS
+upEoHttIOSPUZnJaKGuoLrxysFvxFSrdpL1tzpDAHQKBgQDpk7VXHpWzyoZkoO9g
+Cq8ii24aK2+taDoM23mhNAWV76cdmSrvClWcgOv2cNT4V3oWJ5FtrCwWMKz4o1h1
+nmcWNg6gKlpYAxy5CTJq0yZuZLpiUQ83YM2IGLE2HrAPczjE72NPU7DmvvCWjW5o
+oC5R3Oy/vcxznxqQupfToCfqvwKBgQDUXuix3gH8Atr5MctLWJowCm0FEyY9MVJl
+zMaclKjwieB1ZGDHP/vNHozOHRrEuJ+5mP1bqISGTJ8eRsO3E4vlLIMeJcJGqAo9
+DaODpx/CkgAIWCbla8pOYfrspekD3yywagRLcmxjbPBmn8RbRFm8/khvxOmK/3FH
+g97HYDcMXwKBgA08o7A2OYGg3pDhVe95a4dno2u0PnXzTCbiYTgzfIWMuUnCHl7B
+lSxzWevzZP5V5sNOpr0yXqU7SPImP6MawPjPQ3DsNYZ7VqtdzA+lu63R44Yi1dvr
+jnpB+/j3MD8P5o2yi0w5j/Ljqzq89R7UxQs6m+gZ13ZN8/FzwZrqnph9AoGAdZ6P
+EBveS34lWwi6CGPtGZhcowflENUlRp5wjb5EBtzGBR5v/0qvof4+i9VQww1h4UAb
+ak1eAKelJPaaZOYdf/L0N5lADTP6X7ATFNJV48RK4lQ4Tq4xYNIhUDnfYTaUoKxG
+7qZT44ktaBkqfkXP0b2fzs9nbYVmbu5ZT2E5e88CgYBRJGWptWUucPG2PXMr5Shr
+VKLRiS5P4Y1YE503RvheKnlC0AR7At7Hc8gJSvZ+oc4Q7kTnhqkrMu1GaCsHLKA7
+mnY4VH8EQwS2IO3PpwGYISi2Sq8rv8EDAF7C42YtZ03AJhGALIxQhu2bEoOvIg/R
+2GvHapt2pttoDs9yUCanVQ==
+-----END PRIVATE KEY-----
+</key>
+comp-lzo
+verb 3
+mute 20
+cipher AES-256-CBC
diff --git a/pointeuse/vpn/DKS-VPN-dhart-hourtrax03.ovpn b/pointeuse/vpn/DKS-VPN-dhart-hourtrax03.ovpn
new file mode 100644 (file)
index 0000000..298ddd2
--- /dev/null
@@ -0,0 +1,153 @@
+client
+dev tun
+proto udp
+remote vsrv01.dks.lu 1098
+remote arandks.lu 1098
+
+remote-random
+resolv-retry infinite
+nobind
+persist-key
+persist-tun
+mute-replay-warnings
+<ca>
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV
+BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD
+VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X
+8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt
+pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4
+4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H
+vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6
+gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1
+CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ
+f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV
+BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN
+BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h
+wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn
+AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s
+PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V
+8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw
+8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g==
+-----END CERTIFICATE-----
+</ca>
+<cert>
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            12:8c:b0:dc:13:cf:d4:14:63:bc:16:91:d8:1c:b4:a5
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=aran
+        Validity
+            Not Before: Jan 13 15:13:13 2021 GMT
+            Not After : Jan 11 15:13:13 2031 GMT
+        Subject: CN=dhart-hourtrax03
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:c8:38:21:cd:97:b3:5d:e6:34:a9:35:31:17:75:
+                    5c:f4:77:1d:62:85:b9:60:ae:b3:35:8d:16:1c:69:
+                    f0:53:16:0b:42:01:bb:a1:34:38:46:9c:cc:a1:e2:
+                    f2:03:fa:8d:89:4f:58:90:d2:b2:14:ae:3e:01:4e:
+                    cf:54:e3:dd:cf:15:1b:79:01:8c:c7:ca:43:e0:2b:
+                    2c:e1:dd:3e:e5:12:d0:9d:b4:00:ce:2a:e9:cb:fe:
+                    d5:38:4b:24:6a:f8:57:61:bf:a7:0e:61:12:d0:4a:
+                    ed:22:d5:90:e8:c0:68:53:1b:9f:82:28:20:a2:77:
+                    2c:ca:94:55:b8:40:8a:d1:da:43:77:0a:0c:5c:96:
+                    56:98:6e:cc:f7:63:0e:d3:78:41:0c:1f:b0:22:4d:
+                    02:5f:4b:e8:5c:37:40:4e:b7:6e:7d:4a:17:25:9a:
+                    a8:1c:ad:1d:66:7e:36:83:88:62:98:79:fa:12:75:
+                    16:c7:70:9c:d1:cc:11:49:34:b4:71:92:ed:db:e5:
+                    a2:b1:0e:32:13:74:60:56:10:82:ff:8f:98:59:a0:
+                    74:99:ed:3f:ad:49:b0:73:83:84:45:bb:cf:52:be:
+                    df:f7:16:12:fa:98:21:b0:23:ef:1c:44:95:f2:19:
+                    87:b0:2c:35:c0:0b:3a:a3:fd:76:0d:dd:82:82:28:
+                    4b:a5
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                50:DD:89:D0:4B:59:17:A0:8D:07:9C:8F:D7:3D:E5:01:30:3B:6A:50
+            X509v3 Authority Key Identifier: 
+                keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4
+                DirName:/CN=aran
+                serial:AE:B5:02:1A:71:02:93:94
+
+            X509v3 Extended Key Usage: 
+                TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature
+    Signature Algorithm: sha256WithRSAEncryption
+         05:cd:0d:04:05:ed:db:53:97:01:ce:dc:47:37:9d:ce:e9:ad:
+         1a:d4:a0:d6:58:60:a1:86:91:87:57:33:75:3f:d5:c5:12:b6:
+         8e:e3:b2:74:fe:40:ab:4a:90:46:a1:77:d6:ce:75:e4:a9:0e:
+         e8:12:da:c6:f1:8c:0c:ea:62:1e:f0:d9:d2:e8:7d:1f:24:6f:
+         2e:72:ee:ce:20:9f:9e:74:eb:be:d5:1f:7a:7d:ec:33:d1:8a:
+         24:3a:89:64:97:0f:59:18:10:7c:71:84:a6:22:e3:f5:42:25:
+         4c:33:76:96:56:2f:b6:63:85:c8:f1:b9:6b:9e:c1:f0:ad:6b:
+         a2:4d:34:7d:2b:d9:f0:d0:7a:67:0e:1c:38:7a:1d:d8:a4:04:
+         09:58:24:e3:81:ad:0c:5f:6d:fe:15:57:bd:36:14:32:63:c4:
+         6a:dd:dd:bb:59:4a:e4:35:b3:26:6c:ce:81:eb:cd:bd:ce:4b:
+         41:4a:79:86:20:31:a5:da:f5:62:9d:52:04:9e:5d:cc:bd:16:
+         43:25:e8:7c:02:fb:81:dc:7e:b2:91:46:80:97:a5:d7:2f:18:
+         4d:92:4a:b0:1d:ac:c8:f1:cf:30:08:69:8a:53:0c:8d:57:0b:
+         47:83:e2:d6:dd:fe:6e:82:66:d8:86:c4:3e:9d:c6:22:fd:a0:
+         71:60:33:db
+-----BEGIN CERTIFICATE-----
+MIIDRTCCAi2gAwIBAgIQEoyw3BPP1BRjvBaR2By0pTANBgkqhkiG9w0BAQsFADAP
+MQ0wCwYDVQQDDARhcmFuMB4XDTIxMDExMzE1MTMxM1oXDTMxMDExMTE1MTMxM1ow
+GzEZMBcGA1UEAwwQZGhhcnQtaG91cnRyYXgwMzCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAMg4Ic2Xs13mNKk1MRd1XPR3HWKFuWCuszWNFhxp8FMWC0IB
+u6E0OEaczKHi8gP6jYlPWJDSshSuPgFOz1Tj3c8VG3kBjMfKQ+ArLOHdPuUS0J20
+AM4q6cv+1ThLJGr4V2G/pw5hEtBK7SLVkOjAaFMbn4IoIKJ3LMqUVbhAitHaQ3cK
+DFyWVphuzPdjDtN4QQwfsCJNAl9L6Fw3QE63bn1KFyWaqBytHWZ+NoOIYph5+hJ1
+FsdwnNHMEUk0tHGS7dvlorEOMhN0YFYQgv+PmFmgdJntP61JsHODhEW7z1K+3/cW
+EvqYIbAj7xxElfIZh7AsNcALOqP9dg3dgoIoS6UCAwEAAaOBkDCBjTAJBgNVHRME
+AjAAMB0GA1UdDgQWBBRQ3YnQS1kXoI0HnI/XPeUBMDtqUDA/BgNVHSMEODA2gBSp
+US+X4xXF1ao3HfqKB/GqOsl/1KETpBEwDzENMAsGA1UEAwwEYXJhboIJAK61Ahpx
+ApOUMBMGA1UdJQQMMAoGCCsGAQUFBwMCMAsGA1UdDwQEAwIHgDANBgkqhkiG9w0B
+AQsFAAOCAQEABc0NBAXt21OXAc7cRzedzumtGtSg1lhgoYaRh1czdT/VxRK2juOy
+dP5Aq0qQRqF31s515KkO6BLaxvGMDOpiHvDZ0uh9HyRvLnLuziCfnnTrvtUfen3s
+M9GKJDqJZJcPWRgQfHGEpiLj9UIlTDN2llYvtmOFyPG5a57B8K1rok00fSvZ8NB6
+Zw4cOHod2KQECVgk44GtDF9t/hVXvTYUMmPEat3du1lK5DWzJmzOgevNvc5LQUp5
+hiAxpdr1Yp1SBJ5dzL0WQyXofAL7gdx+spFGgJel1y8YTZJKsB2syPHPMAhpilMM
+jVcLR4Pi1t3+boJm2IbEPp3GIv2gcWAz2w==
+-----END CERTIFICATE-----
+</cert>
+<key>
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDIOCHNl7Nd5jSp
+NTEXdVz0dx1ihblgrrM1jRYcafBTFgtCAbuhNDhGnMyh4vID+o2JT1iQ0rIUrj4B
+Ts9U493PFRt5AYzHykPgKyzh3T7lEtCdtADOKunL/tU4SyRq+Fdhv6cOYRLQSu0i
+1ZDowGhTG5+CKCCidyzKlFW4QIrR2kN3CgxcllaYbsz3Yw7TeEEMH7AiTQJfS+hc
+N0BOt259ShclmqgcrR1mfjaDiGKYefoSdRbHcJzRzBFJNLRxku3b5aKxDjITdGBW
+EIL/j5hZoHSZ7T+tSbBzg4RFu89Svt/3FhL6mCGwI+8cRJXyGYewLDXACzqj/XYN
+3YKCKEulAgMBAAECggEAa0gIdM0QQwQSu4fQ4iz0vdkFWcElb3Sseck7S8ZIC30I
+Uznye5IrhUqHK0cbPp6GMEjfv9nlqccjWjgMSARA2bEJo3D9KiBq9jasOen+xWer
+eJT2yYGc/L1zKlK5FMg0qh+zN7U0C3/aSIv+tXhDbiSi927g7azFx1ZsB+otd/tz
+dtG5jJOTTtvuQwjUmp4oJ0ktcGP7E1DV7ru0ifDnhNmmJqWdstkKbIUbpy2T6BUX
+5psZm2q1QVWgnPpTUg/bTF0suSaazsctPqyn1ZwlOkszEYiS5XIyEaR8Ijqh4oFH
+E7Mk0DKh06XRRBqcvpVxlBDOMfPLL+2ccfgNGYPMEQKBgQD9fNEl88wF63TZMLgt
+MzgfWu5UTfulqM4qWHI0ocz2f/nDlKTU+Eid6XEj6u7paIsFOQ5I2ImpxTH0CR7U
+6q5Fnb8/o2VQEw9kMx2AIQFysc6G038eMQ9vKhtckqMXyx5tZr+QOeJyX025pwHr
+dvo4AEISgWjGArP5c5CoicG0DwKBgQDKNCfPLklAamEdKY6vj7m9ZhDPcHZBC2+0
++mWyMvTH59fXsLe9U6RKucu5A1FlM0AcN9SfDc9aih3vRj78vi//fUdq99LJaL7U
+Bv/pOIP6gmdsvA06MtoO3pLGV5IceaLE0YZNEraLfXR0x9gFEup4pYuVNoNzHZ8g
+3et2UUaBCwKBgQDktsYPNFYV0Ujw3qCPR/OPdwArWOGBqzm5w2voSUUh9H5rFadT
+8WGz+Xl4KvW96/HjmINm/tnXMHHN+pyzB7yOW7K/vLIg+dGdWvF3NlCUKBJsXFAJ
+8cI3Twq5ECXPxhmCJH8bpt7Gy27Z3/I/fm5uMO1svQ7H+pBgtwEC0KjRyQKBgDkQ
+NPfcCSIbo2J2euUCu5k+t5nDFCxRDOpXC+IZTUkpHZmqLoBInYHVIzAIRq03pG0S
+OHfWjuDvP3lqKpZrGeKROVlvrNXYMJpni0sG/v/wUz21aEo3VaCCoYtF5V8R2KSQ
+uMUBdfCxq+7VAxqTdwYrOdQXOUuAXYsJ9cxDLZF3AoGBAL8TZn3smo8Cw8TV17jM
+oi0s+RXG6dxakUmGBldyiGAkTOX9dEVeEHArCtUUdqAeJD0fqrL4XOn/qUviCmhg
+tWKxMGfgHaIEi+HCONRrMyPYlTaH/1k0MnsHF8CBrD1TuZPgpjR14xrq/Ie2Bjjm
+fwFio7XUfCla6TSo9d5UXWeW
+-----END PRIVATE KEY-----
+</key>
+comp-lzo
+verb 3
+mute 20
+cipher AES-256-CBC
diff --git a/pointeuse/vpn/DKS-VPN-dks-hourtrax.ovpn b/pointeuse/vpn/DKS-VPN-dks-hourtrax.ovpn
new file mode 100644 (file)
index 0000000..8cd495f
--- /dev/null
@@ -0,0 +1,153 @@
+client
+dev tun
+proto udp
+remote aran.sysaki.com 1098
+remote aran.dks.lu 1098
+
+remote-random
+resolv-retry infinite
+nobind
+persist-key
+persist-tun
+mute-replay-warnings
+<ca>
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV
+BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD
+VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X
+8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt
+pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4
+4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H
+vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6
+gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1
+CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ
+f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV
+BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN
+BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h
+wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn
+AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s
+PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V
+8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw
+8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g==
+-----END CERTIFICATE-----
+</ca>
+<cert>
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            76:24:55:b4:57:ee:a0:c0:7b:e2:b5:a0:5c:3d:80:3d
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=aran
+        Validity
+            Not Before: Feb  6 07:54:45 2018 GMT
+            Not After : Feb  4 07:54:45 2028 GMT
+        Subject: CN=dks-hourtrax
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:b1:67:a4:6b:28:de:50:03:da:b0:48:19:5d:28:
+                    f4:b7:43:68:2c:6d:41:bc:b8:76:ff:b7:93:2f:93:
+                    f5:d1:fc:90:27:6b:1b:f2:84:0d:5e:dc:be:1f:77:
+                    77:bb:66:34:43:ac:7e:35:13:df:90:54:31:e9:67:
+                    44:76:a7:e1:70:61:10:bc:3d:84:0d:75:8d:2c:b3:
+                    06:d0:5a:c0:20:2f:0b:e2:15:5e:3f:38:61:ed:fa:
+                    d8:8e:03:cd:c9:07:94:25:eb:ab:59:4a:7e:92:10:
+                    5d:1a:ee:de:31:35:14:a4:52:f2:79:5c:11:6e:e8:
+                    ef:6c:57:69:a1:94:74:96:b7:e0:dc:ba:a5:b3:b4:
+                    33:65:79:b6:e7:de:aa:1a:d2:c3:9a:7f:6d:73:35:
+                    82:a4:fb:1e:13:2b:c7:96:5c:d9:d9:23:1b:6a:80:
+                    8d:17:22:69:09:88:85:03:be:6e:4b:11:d2:05:a9:
+                    51:7d:bf:a0:a4:e1:55:cb:27:10:4d:3b:fd:b9:cc:
+                    a5:0c:5a:de:6e:95:5c:e9:4e:53:70:df:8f:06:1b:
+                    56:67:46:91:08:39:f4:bb:74:ae:18:90:39:1b:b1:
+                    51:64:5c:bf:58:fb:18:90:0a:ec:ac:68:98:2d:54:
+                    cc:a1:1c:b4:9d:be:6d:ee:16:8a:ed:9a:56:2a:11:
+                    6e:37
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                FE:5D:3F:2A:41:EE:A5:C2:50:D0:9B:CF:89:EB:25:9C:61:3A:67:FF
+            X509v3 Authority Key Identifier: 
+                keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4
+                DirName:/CN=aran
+                serial:AE:B5:02:1A:71:02:93:94
+
+            X509v3 Extended Key Usage: 
+                TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature
+    Signature Algorithm: sha256WithRSAEncryption
+         49:3d:9c:8e:10:37:3e:ba:6d:ac:2f:6e:65:60:01:ed:01:70:
+         49:b5:16:af:29:3b:68:ca:85:58:9f:88:ff:14:5e:ae:03:0d:
+         65:99:9d:0e:6b:66:98:ad:f1:55:9c:75:f1:c7:fb:e6:61:68:
+         d6:69:03:48:4f:08:18:d5:ae:60:55:18:70:b4:ab:63:05:b5:
+         54:c7:f7:d0:8b:86:4b:34:3f:50:5c:6f:be:c1:5a:1b:22:cc:
+         24:59:76:e0:8c:c6:32:37:76:ab:bc:2d:63:27:be:2e:a6:5b:
+         86:90:1d:a5:4d:a6:9a:17:ed:57:76:f7:c7:65:f0:2b:29:84:
+         a8:f3:35:5c:66:4d:f2:38:4f:79:df:b4:c1:07:66:3f:87:d0:
+         13:fc:5b:3b:ea:da:db:ab:32:2e:72:f3:84:be:0d:e9:7e:c6:
+         16:22:a9:b7:28:f5:cf:89:51:11:51:9d:bb:ac:fc:1e:fb:85:
+         27:31:74:bd:6d:64:1b:d5:d6:d8:31:ff:ee:3f:9c:17:04:6c:
+         a3:3a:64:3b:22:88:78:75:3e:37:9d:b1:8b:a2:e8:7a:6f:0f:
+         af:9b:2c:a7:0a:dc:af:4a:f3:e5:3b:6e:97:c4:cf:2e:0e:64:
+         71:2e:c8:51:32:90:9a:53:95:be:a9:d1:bd:ea:cb:9b:0a:9d:
+         03:5b:04:85
+-----BEGIN CERTIFICATE-----
+MIIDQTCCAimgAwIBAgIQdiRVtFfuoMB74rWgXD2APTANBgkqhkiG9w0BAQsFADAP
+MQ0wCwYDVQQDDARhcmFuMB4XDTE4MDIwNjA3NTQ0NVoXDTI4MDIwNDA3NTQ0NVow
+FzEVMBMGA1UEAwwMZGtzLWhvdXJ0cmF4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAsWekayjeUAPasEgZXSj0t0NoLG1BvLh2/7eTL5P10fyQJ2sb8oQN
+Xty+H3d3u2Y0Q6x+NRPfkFQx6WdEdqfhcGEQvD2EDXWNLLMG0FrAIC8L4hVePzhh
+7frYjgPNyQeUJeurWUp+khBdGu7eMTUUpFLyeVwRbujvbFdpoZR0lrfg3Lqls7Qz
+ZXm2596qGtLDmn9tczWCpPseEyvHllzZ2SMbaoCNFyJpCYiFA75uSxHSBalRfb+g
+pOFVyycQTTv9ucylDFrebpVc6U5TcN+PBhtWZ0aRCDn0u3SuGJA5G7FRZFy/WPsY
+kArsrGiYLVTMoRy0nb5t7haK7ZpWKhFuNwIDAQABo4GQMIGNMAkGA1UdEwQCMAAw
+HQYDVR0OBBYEFP5dPypB7qXCUNCbz4nrJZxhOmf/MD8GA1UdIwQ4MDaAFKlRL5fj
+FcXVqjcd+ooH8ao6yX/UoROkETAPMQ0wCwYDVQQDDARhcmFuggkArrUCGnECk5Qw
+EwYDVR0lBAwwCgYIKwYBBQUHAwIwCwYDVR0PBAQDAgeAMA0GCSqGSIb3DQEBCwUA
+A4IBAQBJPZyOEDc+um2sL25lYAHtAXBJtRavKTtoyoVYn4j/FF6uAw1lmZ0Oa2aY
+rfFVnHXxx/vmYWjWaQNITwgY1a5gVRhwtKtjBbVUx/fQi4ZLND9QXG++wVobIswk
+WXbgjMYyN3arvC1jJ74upluGkB2lTaaaF+1XdvfHZfArKYSo8zVcZk3yOE9537TB
+B2Y/h9AT/Fs76trbqzIucvOEvg3pfsYWIqm3KPXPiVERUZ27rPwe+4UnMXS9bWQb
+1dbYMf/uP5wXBGyjOmQ7Ioh4dT43nbGLouh6bw+vmyynCtyvSvPlO26XxM8uDmRx
+LshRMpCaU5W+qdG96subCp0DWwSF
+-----END CERTIFICATE-----
+</cert>
+<key>
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCxZ6RrKN5QA9qw
+SBldKPS3Q2gsbUG8uHb/t5Mvk/XR/JAnaxvyhA1e3L4fd3e7ZjRDrH41E9+QVDHp
+Z0R2p+FwYRC8PYQNdY0sswbQWsAgLwviFV4/OGHt+tiOA83JB5Ql66tZSn6SEF0a
+7t4xNRSkUvJ5XBFu6O9sV2mhlHSWt+DcuqWztDNlebbn3qoa0sOaf21zNYKk+x4T
+K8eWXNnZIxtqgI0XImkJiIUDvm5LEdIFqVF9v6Ck4VXLJxBNO/25zKUMWt5ulVzp
+TlNw348GG1ZnRpEIOfS7dK4YkDkbsVFkXL9Y+xiQCuysaJgtVMyhHLSdvm3uFort
+mlYqEW43AgMBAAECggEAdIXkwtX3H4tIitzwe/Y4tl65/+RLd0+aKeBD9s4yehhv
+/tQlaSc/OP24iyaHKDm7Pm///ZDuGPiUSAAiQeWG969ptJqbL9P0RFXatePFqd38
+6iSq4M+B0zQeJTluYwptTnL6+w0pEXtaDCS1IJEC2+P3i6rjcHvjNsA7i3vdEFji
+Prze6oZ/UoJIGn97V+qePCmcY1raD5SUeHz/tgB1qY3zq9TdjS953pijJKlXgXVM
+pI/WhovKKYFmnbTVsY9WaMXvJz3MTrCosk9LIDdVOIei7m1GI+vQoGS9I3YhFogs
+8qNweEJLLF6wi3tXrur5ZYTIqBYHtrE88RsnfWDqAQKBgQDfdOVTrzoCGVcNPLTK
+nj7qpEfOgJS/1dSRgcH2MGKqPl+fPbqoCXEWKQicAbuVRWKKzvjHon+IvMn1ymgF
+u31uePVtF0adHJP389d5VeeeO7Tl3t50an+k+cPTpRudmpfpUaH+SE7BpXv8V9B+
+eES92r5zhr2xEuVewBIPoyr8twKBgQDLPc3jdsjZpIYheYsP1yDyuFgi8cau7mqw
+4v/KmcyuOAIHlrZB6V+XkNpL0U0gWOdrH4pgEdTKhtu/lycAKNS4AJkJLqE3dQQx
+c3LAdtlQ9NuHoY/SxP2wcZlFEeQsGUpj4azg/bibGh/RNsy5vi6EW8hfrTwvtvfq
+cruGN66agQKBgEwj7bxdGbv7XHEzPTtJPpD/V0RjBcx0FRFbkHbNt+Dgjf6Zrw9w
+4Cq34qod4QgU82Xu7lA/64rxITPyOw2w/CV3a9E3PCVuxnCXktVSUzDUkWg+T7iF
+TWcuf+6O9OD3+0lSOouFoehT9fJfDbj6TBoQ/hIpWFuM38EwWzce1xfzAoGAN9b1
+OGesa0+uoofYUzPSE53eaUtwQSO0IIFdsfZrq/orZJZd4OITp3re3zHUNOz4OBBk
+XlzH0BUZTxxiVMLjHuLbKRCsrqXxzvxfLM36iymbHzqeX1RMNywe5kEyJYOVUrfw
+XaiYDdUxpLOfr/C2qxrkhJT+EkX8+2cmaovl5wECgYEAmO7l3iVoEET9HrxuvinL
+OC600K0iIpNNAIWSywGa4V04WBXrGNMx3SAkxEdQblrSIE1dPxsJnq+clvSyqeo5
+PLi7mSs/XpE7HffjYMhtyzv+UKUCfvbRsjIDH2/Ka6WZZalBw4I0aKcWYvvqACly
+FX4rIxtOEaNSC9J07tCgN1A=
+-----END PRIVATE KEY-----
+</key>
+comp-lzo
+verb 3
+mute 20
+cipher AES-256-CBC
diff --git a/pointeuse/vpn/DKS-VPN-dks-hourtraxtest.ovpn b/pointeuse/vpn/DKS-VPN-dks-hourtraxtest.ovpn
new file mode 100644 (file)
index 0000000..0793f27
--- /dev/null
@@ -0,0 +1,153 @@
+client
+dev tun
+proto udp
+remote vsrv01.dks.lu 1098
+remote arandks.lu 1098
+
+remote-random
+resolv-retry infinite
+nobind
+persist-key
+persist-tun
+mute-replay-warnings
+<ca>
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV
+BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD
+VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X
+8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt
+pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4
+4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H
+vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6
+gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1
+CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ
+f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV
+BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN
+BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h
+wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn
+AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s
+PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V
+8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw
+8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g==
+-----END CERTIFICATE-----
+</ca>
+<cert>
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            1f:72:81:5c:11:93:98:f3:ab:da:e0:8e:19:74:cd:57
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=aran
+        Validity
+            Not Before: Oct 27 08:51:46 2020 GMT
+            Not After : Oct 25 08:51:46 2030 GMT
+        Subject: CN=dks-hourtraxtest
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:a8:62:e0:84:c5:db:87:18:f3:e1:4e:8d:45:e2:
+                    15:d5:36:69:71:df:fa:9b:73:6f:d8:78:6d:f9:7c:
+                    d4:34:06:e4:af:a2:31:41:dc:ec:f0:9f:6e:ce:6c:
+                    33:a5:d0:b0:d2:04:c5:a7:dd:55:aa:55:79:80:2c:
+                    13:5b:89:75:fd:b6:a6:e4:9f:39:8d:40:59:d1:5b:
+                    83:e6:c6:c0:0a:42:89:70:c2:cc:67:ea:61:39:51:
+                    32:36:7c:77:78:4f:99:ec:f0:0e:2f:b7:c7:98:df:
+                    9b:9a:3e:6b:4d:ce:b4:6e:82:21:b5:23:f5:37:12:
+                    2c:62:f2:e1:95:56:af:cb:77:71:ec:e7:86:b6:ed:
+                    95:44:3c:75:c9:7b:33:0a:da:9d:2f:75:9d:9d:5c:
+                    01:f0:8a:99:68:1d:7f:c0:9d:e9:3f:54:50:ce:0e:
+                    15:b9:39:a0:a2:f4:21:ee:ec:50:9a:c2:e2:de:91:
+                    75:77:16:7d:32:c9:32:b8:6b:ae:81:1b:3b:69:bf:
+                    b1:5e:d2:16:10:4b:ad:c3:43:20:96:65:59:ff:a1:
+                    4c:b8:0e:e6:4b:b7:88:17:cf:97:97:a6:c1:67:ff:
+                    a9:82:44:81:06:be:57:75:22:c2:02:d8:55:8d:aa:
+                    85:e5:84:46:7c:a9:67:a0:3a:47:71:04:1a:83:3f:
+                    9a:3d
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                AB:70:9E:30:68:BA:3B:A9:6E:4C:E3:DA:D7:48:7D:3E:F8:77:85:43
+            X509v3 Authority Key Identifier: 
+                keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4
+                DirName:/CN=aran
+                serial:AE:B5:02:1A:71:02:93:94
+
+            X509v3 Extended Key Usage: 
+                TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature
+    Signature Algorithm: sha256WithRSAEncryption
+         6b:ea:b4:0d:1a:2a:4b:fc:80:3f:71:d7:e2:cf:50:23:07:bc:
+         11:36:de:c2:a1:84:de:15:69:46:a1:24:ed:d0:2b:fe:9f:7e:
+         12:46:69:1f:44:78:e7:e7:60:4a:19:82:6c:76:49:4b:76:31:
+         46:7b:d3:6e:6e:b6:a4:93:75:9c:87:af:bf:fa:05:b1:97:d9:
+         c1:a0:6e:68:e3:f4:f2:21:fc:59:48:8e:d3:7e:d5:44:df:e7:
+         49:04:17:6d:93:db:69:7c:90:f4:1a:d5:92:03:cf:53:c1:bf:
+         8f:3b:56:8a:46:9c:03:10:0e:bf:5a:27:2a:06:9d:4e:e5:78:
+         6e:87:00:46:ec:21:4d:a1:bc:fe:e9:c1:9c:f3:b2:95:18:69:
+         e9:61:b8:0a:6c:ee:1d:12:ff:93:b6:3d:b5:ba:ca:52:c7:88:
+         90:50:2d:55:12:84:12:a7:8c:dc:4f:a7:70:51:d0:4d:cb:66:
+         8e:9a:ab:b1:07:88:d8:3f:6d:1c:6b:24:97:4b:80:ee:5d:01:
+         c8:d9:a9:bc:ce:7a:c1:a1:b1:6f:23:28:13:42:e6:0a:2d:ed:
+         dc:62:e8:ad:62:54:e9:23:11:c9:fa:e9:c3:85:fd:39:a9:8b:
+         db:e5:91:99:35:fe:f1:78:b4:4a:a4:ab:67:fe:53:55:00:45:
+         cc:1b:66:ea
+-----BEGIN CERTIFICATE-----
+MIIDRTCCAi2gAwIBAgIQH3KBXBGTmPOr2uCOGXTNVzANBgkqhkiG9w0BAQsFADAP
+MQ0wCwYDVQQDDARhcmFuMB4XDTIwMTAyNzA4NTE0NloXDTMwMTAyNTA4NTE0Nlow
+GzEZMBcGA1UEAwwQZGtzLWhvdXJ0cmF4dGVzdDCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAKhi4ITF24cY8+FOjUXiFdU2aXHf+ptzb9h4bfl81DQG5K+i
+MUHc7PCfbs5sM6XQsNIExafdVapVeYAsE1uJdf22puSfOY1AWdFbg+bGwApCiXDC
+zGfqYTlRMjZ8d3hPmezwDi+3x5jfm5o+a03OtG6CIbUj9TcSLGLy4ZVWr8t3cezn
+hrbtlUQ8dcl7MwranS91nZ1cAfCKmWgdf8Cd6T9UUM4OFbk5oKL0Ie7sUJrC4t6R
+dXcWfTLJMrhrroEbO2m/sV7SFhBLrcNDIJZlWf+hTLgO5ku3iBfPl5emwWf/qYJE
+gQa+V3UiwgLYVY2qheWERnypZ6A6R3EEGoM/mj0CAwEAAaOBkDCBjTAJBgNVHRME
+AjAAMB0GA1UdDgQWBBSrcJ4waLo7qW5M49rXSH0++HeFQzA/BgNVHSMEODA2gBSp
+US+X4xXF1ao3HfqKB/GqOsl/1KETpBEwDzENMAsGA1UEAwwEYXJhboIJAK61Ahpx
+ApOUMBMGA1UdJQQMMAoGCCsGAQUFBwMCMAsGA1UdDwQEAwIHgDANBgkqhkiG9w0B
+AQsFAAOCAQEAa+q0DRoqS/yAP3HX4s9QIwe8ETbewqGE3hVpRqEk7dAr/p9+EkZp
+H0R45+dgShmCbHZJS3YxRnvTbm62pJN1nIevv/oFsZfZwaBuaOP08iH8WUiO037V
+RN/nSQQXbZPbaXyQ9BrVkgPPU8G/jztWikacAxAOv1onKgadTuV4bocARuwhTaG8
+/unBnPOylRhp6WG4CmzuHRL/k7Y9tbrKUseIkFAtVRKEEqeM3E+ncFHQTctmjpqr
+sQeI2D9tHGskl0uA7l0ByNmpvM56waGxbyMoE0LmCi3t3GLorWJU6SMRyfrpw4X9
+OamL2+WRmTX+8Xi0SqSrZ/5TVQBFzBtm6g==
+-----END CERTIFICATE-----
+</cert>
+<key>
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCoYuCExduHGPPh
+To1F4hXVNmlx3/qbc2/YeG35fNQ0BuSvojFB3Ozwn27ObDOl0LDSBMWn3VWqVXmA
+LBNbiXX9tqbknzmNQFnRW4PmxsAKQolwwsxn6mE5UTI2fHd4T5ns8A4vt8eY35ua
+PmtNzrRugiG1I/U3Eixi8uGVVq/Ld3Hs54a27ZVEPHXJezMK2p0vdZ2dXAHwiplo
+HX/Anek/VFDODhW5OaCi9CHu7FCawuLekXV3Fn0yyTK4a66BGztpv7Fe0hYQS63D
+QyCWZVn/oUy4DuZLt4gXz5eXpsFn/6mCRIEGvld1IsIC2FWNqoXlhEZ8qWegOkdx
+BBqDP5o9AgMBAAECggEAaTy6s2BxDiMDMNoGIxnkqUeDaT8hggwIZ9MEcHuaqBVy
+0W3duRsZHl2WQ/6N3ODr0aZX3czP4E/hSsDBLGFh07pW3eXBc003lUfLzOyEUyU4
+frfQRlXOg6MCbdkmVZPyUInLY/lJDnsZ5bGDILLCQ5qi9HHPrKZ4BTNk1w/BeLhf
+Z2CVRMMb3TxDTqozco31dyhz+kBjYK6qVk6mmWnLVLEOTowL3Nblv+titUZ7kqOv
+zbJzPoFV562jQ181hNoF7ANb01K8Kb/Wu3V7ScT9ARrKNC6vUgvjZ61/CwLp+kSM
+oheAU/CEALwHEQqESJ1C9eGuruE0XCmLIRq4CT70xQKBgQDVNstIPpNDZ6mgOK3O
+bcdk+8U042tyTCElpmUMK6yaN4cvdQPy5jjUoSE0pD+4YWGhf5AtlwSDt4pdUY/W
+kgFYBYqjcCa8aL75BLwM6wxR6fRCyBoMThWsX0N9Ep4jqN9J6raiSK+AmANTUucT
+e+r7XIn8sG374gGrxv29Cn7yjwKBgQDKLTHPK+ejV7tmjQYn/RZelvEo6gN59Cnh
+unOgGescM4GVrZoZd+1pV+Zyz0BRY/EbKVojuYQBiax0lKNfwXPvhDmbBNwxLoWL
+7cvUgPOGNlDFqsYyfp2HxYRXt83NZYiSAHGCsZPPyXp1+XpiaCQCPkv+NHXaH+yS
+uO6zf78ccwKBgC7QxzXnt4IXYuFxUIiBBkUgGx8PyGniWWzg6lMPy+hYxPAgq2tM
+LbJSZu4eGnerujoxvkCkZjNdu53d6M1eZbkkDlrwpzC7dyNKbNgRTDU4P4/iTAXj
+p1Kf4Du4OMzvqYebZ9qeRxrfReunymE21lO27/1x59RkvaUwHkrB4Tn1AoGBAK0K
+46/7VyaiZ56No7BEWYoaTU0EhncyOUqfyGlG5cncd9RBozybPhPFDVRE+TrwfKQP
+z7v2A/tA999MfUzvCij+FkQNc92QgPNUU/qNaGH+SUH2Oe9sGa7kqrJdeoOLnMnC
+IWWIUggt3WfuYQarNe7JnUd1ZU2Nt3GZYY03EL7rAoGAfo5Wku2uopyMoXaY22dr
+GsATfARJl8ElzlGZsrDiIc/IgOZ8iW9m09GYhD+rvrQ5JQnMAGp0Kwaywxvbm0iu
+ica5EvlmC+YYHq9ZhVmtrhSDaEkHHcg6uK5/Y1Bde+wSepHFKYuUnNXIXF4K0fDM
+FA8Wa4lSMpexLi/4loLf+gE=
+-----END PRIVATE KEY-----
+</key>
+comp-lzo
+verb 3
+mute 20
+cipher AES-256-CBC
diff --git a/pointeuse/vpn/DKS-VPN-dolvi-pot08.ovpn b/pointeuse/vpn/DKS-VPN-dolvi-pot08.ovpn
new file mode 100644 (file)
index 0000000..16e3792
--- /dev/null
@@ -0,0 +1,153 @@
+client
+dev tun
+proto udp
+remote vsrv01.dks.lu 1098
+remote arandks.lu 1098
+
+remote-random
+resolv-retry infinite
+nobind
+persist-key
+persist-tun
+mute-replay-warnings
+<ca>
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV
+BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD
+VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X
+8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt
+pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4
+4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H
+vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6
+gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1
+CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ
+f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV
+BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN
+BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h
+wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn
+AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s
+PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V
+8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw
+8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g==
+-----END CERTIFICATE-----
+</ca>
+<cert>
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            7a:d0:78:9d:88:12:62:97:b8:d7:c0:47:67:db:94:28
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=aran
+        Validity
+            Not Before: Sep 28 13:31:01 2021 GMT
+            Not After : Sep 26 13:31:01 2031 GMT
+        Subject: CN=dolvi-pot08
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:d4:47:4e:d0:e6:4a:63:c8:3e:c2:8f:a3:d6:e9:
+                    15:79:42:c2:74:0e:23:ed:b4:7c:e4:ed:5f:40:62:
+                    13:03:0c:ed:52:03:ef:87:70:a7:43:53:48:f6:23:
+                    74:22:86:9c:67:cc:cf:04:cf:36:03:fc:ac:a8:ae:
+                    08:64:bb:46:d8:55:67:0d:32:19:ae:ab:49:28:49:
+                    0f:79:41:69:82:5c:5b:d0:49:e3:cb:78:99:d3:2e:
+                    26:88:dd:bc:2d:a0:a6:0d:b5:ef:d7:68:e9:e2:c5:
+                    cd:23:ea:de:81:1f:f9:af:fe:9e:45:58:9e:97:61:
+                    f4:f8:a5:a5:52:5e:b9:84:9f:bf:da:83:17:26:d4:
+                    71:62:cf:7e:5f:52:28:4f:e5:f3:9c:18:06:50:d3:
+                    f1:25:38:05:d9:31:ab:f1:81:ce:7b:57:94:5b:59:
+                    00:0b:12:96:5c:bc:8b:26:59:52:cf:56:82:80:34:
+                    7f:31:11:3f:89:cc:b2:fa:8f:97:1a:5a:a3:a9:06:
+                    c1:2e:42:88:a7:9d:31:1e:a2:63:ce:99:9f:ba:23:
+                    52:27:b1:3b:03:e2:d7:d4:f8:8a:9b:6f:d0:ec:f9:
+                    1d:73:58:b1:1f:ce:27:27:f5:cd:09:74:a2:db:c2:
+                    0b:25:9e:86:a8:9d:5e:3a:df:c3:14:ce:88:e8:f5:
+                    7d:d5
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                BC:01:50:63:6B:2A:B5:A1:43:DB:A9:A2:A2:A8:B2:CD:7C:FA:EE:43
+            X509v3 Authority Key Identifier: 
+                keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4
+                DirName:/CN=aran
+                serial:AE:B5:02:1A:71:02:93:94
+
+            X509v3 Extended Key Usage: 
+                TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature
+    Signature Algorithm: sha256WithRSAEncryption
+         8a:87:6c:ef:0f:34:c2:ec:43:26:6a:7d:2e:78:c0:57:9d:a7:
+         b0:c4:ec:d4:b0:5e:56:98:0b:58:47:f3:db:c0:b1:cd:a7:48:
+         35:67:c8:01:4c:67:fc:73:21:06:ed:34:7c:80:a0:82:12:c9:
+         21:2e:1a:7b:e7:bf:b9:00:f2:d4:f5:e8:77:12:f3:d4:38:de:
+         0c:d7:cc:64:24:a1:66:b5:6a:29:f8:9f:c8:40:f9:c2:ec:3d:
+         8d:5e:34:15:e9:cd:dc:8e:6e:0f:94:c2:95:22:7f:43:ee:2e:
+         26:ec:ea:85:6a:54:5e:b7:53:09:43:55:b1:bc:6f:16:c4:16:
+         88:1e:b1:5a:59:68:44:4f:40:03:c0:ea:fa:eb:ef:51:b0:c2:
+         8d:ad:cc:55:85:7a:33:21:ca:3f:df:8e:e0:c2:b6:7d:64:4e:
+         75:6a:28:f0:e2:6d:57:b8:e5:ca:7a:0e:72:5d:39:49:78:11:
+         e3:bd:34:1e:1f:bb:2d:5d:14:84:f2:5b:4b:18:17:96:d7:b8:
+         57:d3:de:b0:b5:c7:3f:88:68:6f:cd:62:3e:ab:b8:64:64:92:
+         e1:77:66:ed:d6:f5:3b:dd:ac:2c:8c:1e:ce:13:b2:7c:ce:bb:
+         b8:dd:14:02:e2:b8:5d:08:a7:b6:61:4a:c1:05:08:b3:e4:d6:
+         7c:a1:8a:4b
+-----BEGIN CERTIFICATE-----
+MIIDQDCCAiigAwIBAgIQetB4nYgSYpe418BHZ9uUKDANBgkqhkiG9w0BAQsFADAP
+MQ0wCwYDVQQDDARhcmFuMB4XDTIxMDkyODEzMzEwMVoXDTMxMDkyNjEzMzEwMVow
+FjEUMBIGA1UEAwwLZG9sdmktcG90MDgwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQDUR07Q5kpjyD7Cj6PW6RV5QsJ0DiPttHzk7V9AYhMDDO1SA++HcKdD
+U0j2I3QihpxnzM8EzzYD/Kyorghku0bYVWcNMhmuq0koSQ95QWmCXFvQSePLeJnT
+LiaI3bwtoKYNte/XaOnixc0j6t6BH/mv/p5FWJ6XYfT4paVSXrmEn7/agxcm1HFi
+z35fUihP5fOcGAZQ0/ElOAXZMavxgc57V5RbWQALEpZcvIsmWVLPVoKANH8xET+J
+zLL6j5caWqOpBsEuQoinnTEeomPOmZ+6I1InsTsD4tfU+Iqbb9Ds+R1zWLEfzicn
+9c0JdKLbwgslnoaonV4638MUzojo9X3VAgMBAAGjgZAwgY0wCQYDVR0TBAIwADAd
+BgNVHQ4EFgQUvAFQY2sqtaFD26mioqiyzXz67kMwPwYDVR0jBDgwNoAUqVEvl+MV
+xdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNVBAMMBGFyYW6CCQCutQIacQKTlDAT
+BgNVHSUEDDAKBggrBgEFBQcDAjALBgNVHQ8EBAMCB4AwDQYJKoZIhvcNAQELBQAD
+ggEBAIqHbO8PNMLsQyZqfS54wFedp7DE7NSwXlaYC1hH89vAsc2nSDVnyAFMZ/xz
+IQbtNHyAoIISySEuGnvnv7kA8tT16HcS89Q43gzXzGQkoWa1ain4n8hA+cLsPY1e
+NBXpzdyObg+UwpUif0PuLibs6oVqVF63UwlDVbG8bxbEFogesVpZaERPQAPA6vrr
+71Gwwo2tzFWFejMhyj/fjuDCtn1kTnVqKPDibVe45cp6DnJdOUl4EeO9NB4fuy1d
+FITyW0sYF5bXuFfT3rC1xz+IaG/NYj6ruGRkkuF3Zu3W9TvdrCyMHs4TsnzOu7jd
+FALiuF0Ip7ZhSsEFCLPk1nyhiks=
+-----END CERTIFICATE-----
+</cert>
+<key>
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDUR07Q5kpjyD7C
+j6PW6RV5QsJ0DiPttHzk7V9AYhMDDO1SA++HcKdDU0j2I3QihpxnzM8EzzYD/Kyo
+rghku0bYVWcNMhmuq0koSQ95QWmCXFvQSePLeJnTLiaI3bwtoKYNte/XaOnixc0j
+6t6BH/mv/p5FWJ6XYfT4paVSXrmEn7/agxcm1HFiz35fUihP5fOcGAZQ0/ElOAXZ
+Mavxgc57V5RbWQALEpZcvIsmWVLPVoKANH8xET+JzLL6j5caWqOpBsEuQoinnTEe
+omPOmZ+6I1InsTsD4tfU+Iqbb9Ds+R1zWLEfzicn9c0JdKLbwgslnoaonV4638MU
+zojo9X3VAgMBAAECggEAOzdxKyEy20b/CvNa9xaqYNtYt1tCdosE1C/LhIBXYWB3
+y4tBhHzOjB9tmQwm14LJmsMtdOAA53fTCnMR8Fe12Z9pUesJ8wnhLJXE9URkFHOD
+QUV7gEUyVBDpuwBwACJycByyvVqM9C/NnBlm3Ip48rmKmTmxc/Vliv9acPHvuqj7
+n6f1M6FhaCtEhMkVzOy3kd1AtT1fQNXTvIwMcziFkzsXD8zmhkW7NP89zrS3vfjW
+NEkCi6aLKhR+n8+MOrG3CqZdTj5ESGUQcnQ4ZbdJ30sRp7IrpF1YW5QDzfFZHU34
++4Q9SPRg7v339blY4ZWfw9T4nUCt6rrh4l55oFhr+QKBgQDsKhZOHWWunPSBYQuR
+W52LZjrQ5wT2Lu8Yi8V+RRzFQIXxxM8V6QPZ8jO1fYzLmaRFrISBhf3eDd3mitbN
+MUKuOeNJeIy99aGek4Ds/YIc2H26sWdQBl+5m/9DJZQQaO+j9EYIRC3mxiGy7Xjl
+feyplArYNKDG7Pnamr7+ui9HwwKBgQDmG6L23COpvfnz8lnSRSfxCb5dymYl63zQ
+QVrptr5AQ6/32ldNwsdUKzUWGegUWUiKqsEQDwpvgZhASqr7OaODyC1MWTacTv3i
+lynwHDxJ2oxYYe5ZPb5P3RwgeiCMFHmiI8kFe+hBdIYQl3hbRw7NSUGBqzlKfjJa
+4/kiolpihwKBgQDG/Yt/1GtaHuwym8e4ef6cd841OYNHwDI8d4E4LRnZ5s018wQe
+zREuslL5qMlawKHXB087J+DKGtsPp4roqIor7aDixk2ovfCpglYO2mioz43ZIiQQ
+HN7JsXT7ag2BajoJ5wifbHtUyTuZ3ViR3nHsTU558JZMJ1874EnwroaqKwKBgQDI
+zd9Fu8/nZeDFMH2P0EfNwan9oQ3JE5plBlN21sFpxWe/TCuZsVtPKTF3av4rG8sB
+L4exIt8Bdb9Og5p4B9GYw8w77zKH7ysBXNb9MTavYGfPDQ75k7cLbLIJ6WmTtJ58
+juvyvDFvRWdk/TnLtdPF86KVrL0fM8dvp7gWsEVd6wKBgQDo4SpMn4GFtMU9BRwr
+HdNjjHO6keooLykgeHtLiJ4eXZNTp5tmXAGFma7h2gwqQM0802chrpn0kdl0heLL
+kfs3+XncWbJ6PXtDMSPrq0pKQ2TTnoE9ocKy+XmwaU4jC5NwjJdQdCJV+BkHf7MD
+qUvdMuF18PDlDxydnrmzI/Zwug==
+-----END PRIVATE KEY-----
+</key>
+comp-lzo
+verb 3
+mute 20
+cipher AES-256-CBC
diff --git a/pointeuse/vpn/DKS-VPN-elch-hourtrax.ovpn b/pointeuse/vpn/DKS-VPN-elch-hourtrax.ovpn
new file mode 100644 (file)
index 0000000..335ac6c
--- /dev/null
@@ -0,0 +1,153 @@
+client
+dev tun
+proto udp
+remote vsrv01.dks.lu 1098
+remote arandks.lu 1098
+
+remote-random
+resolv-retry infinite
+nobind
+persist-key
+persist-tun
+mute-replay-warnings
+<ca>
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV
+BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD
+VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X
+8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt
+pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4
+4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H
+vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6
+gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1
+CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ
+f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV
+BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN
+BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h
+wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn
+AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s
+PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V
+8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw
+8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g==
+-----END CERTIFICATE-----
+</ca>
+<cert>
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            fe:63:1c:b4:2d:96:58:d5:24:ec:f1:bf:eb:a7:2a:c8
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=aran
+        Validity
+            Not Before: Nov 11 12:45:16 2019 GMT
+            Not After : Nov  8 12:45:16 2029 GMT
+        Subject: CN=elch-hourtrax
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:a9:af:3a:46:7b:91:d2:0e:aa:4a:77:58:be:ea:
+                    69:31:8f:2c:8f:d3:ab:a6:b9:7f:86:f0:69:bd:84:
+                    03:00:e7:db:c9:19:91:12:7e:fc:67:40:a4:a0:d2:
+                    66:04:59:b6:89:8e:0c:e9:96:d3:ed:49:10:af:a0:
+                    23:9f:58:ca:ea:85:a1:4d:f0:27:15:d5:1e:32:64:
+                    5b:12:8f:74:7d:f4:1c:c4:20:42:14:be:7f:3b:ab:
+                    32:b5:2d:06:e1:38:2f:a3:a8:42:1c:89:7e:1d:81:
+                    62:7d:41:8c:38:8f:7e:53:68:b4:65:52:39:de:5d:
+                    ea:cd:f6:05:37:2f:23:12:70:22:a9:af:cc:a0:14:
+                    cf:f7:78:c1:dc:15:27:79:2f:8e:10:97:8f:65:67:
+                    13:4e:ff:9b:e6:7f:4c:cb:2d:08:a6:8f:62:2d:bc:
+                    93:07:90:c8:6b:73:53:1c:94:83:7b:bc:da:a8:dd:
+                    54:11:3f:6d:11:f4:08:b4:dd:47:0a:8c:7b:83:e0:
+                    df:35:64:9e:e6:30:59:c0:c8:c5:91:66:66:90:84:
+                    9f:75:0c:df:24:11:c2:0a:36:ab:25:9a:6c:ce:ee:
+                    1c:69:f6:c3:fa:6c:a6:a8:00:47:0b:6c:90:f1:14:
+                    e8:ae:f1:ed:5e:54:6d:52:e0:48:3b:fc:2c:f2:de:
+                    b6:3b
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                8F:C0:64:75:FA:14:9A:9A:D2:76:E1:D9:E1:CC:97:3C:3E:F7:0E:1D
+            X509v3 Authority Key Identifier: 
+                keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4
+                DirName:/CN=aran
+                serial:AE:B5:02:1A:71:02:93:94
+
+            X509v3 Extended Key Usage: 
+                TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature
+    Signature Algorithm: sha256WithRSAEncryption
+         6d:ec:8a:be:2e:e0:a8:95:42:49:01:7a:2f:f9:af:b9:80:a7:
+         73:c5:5e:06:e6:dc:37:b1:4c:46:62:0e:39:c2:cc:d2:66:3d:
+         8c:49:52:bd:5d:39:a1:ad:79:8a:98:32:85:cb:fd:c3:56:a3:
+         15:25:38:12:aa:f1:f1:5e:6b:84:04:2c:3d:95:ce:2a:43:8d:
+         3a:57:08:b8:47:26:82:61:ab:7b:28:82:03:39:a1:cd:20:33:
+         35:a6:0f:c3:1a:5d:c4:91:88:59:27:d7:29:25:c3:6b:0c:40:
+         37:0d:3b:ce:4f:38:30:4d:86:e6:ba:1e:af:1f:d9:37:be:1e:
+         23:e7:8e:dc:80:ba:01:4f:ad:61:c7:14:6e:e0:63:95:33:56:
+         51:ca:39:b9:eb:a9:02:03:75:ec:10:f0:68:44:38:d2:cf:26:
+         a7:8e:25:e8:1b:c0:d8:4c:fa:29:6d:8f:05:b0:cb:b5:9a:03:
+         d8:4c:db:11:99:db:6b:ba:85:37:ef:c1:08:1b:b7:73:c3:ea:
+         0d:4f:d0:4b:fc:ea:fe:a5:b2:c2:dd:24:3a:a5:b1:6c:f8:2c:
+         91:d9:37:cb:0a:38:d2:b6:79:c1:63:be:72:f7:95:8f:80:aa:
+         0c:ab:21:20:74:c2:a1:8f:ba:9e:15:d3:ba:ea:ee:4b:9b:dc:
+         1f:b7:53:2f
+-----BEGIN CERTIFICATE-----
+MIIDQzCCAiugAwIBAgIRAP5jHLQtlljVJOzxv+unKsgwDQYJKoZIhvcNAQELBQAw
+DzENMAsGA1UEAwwEYXJhbjAeFw0xOTExMTExMjQ1MTZaFw0yOTExMDgxMjQ1MTZa
+MBgxFjAUBgNVBAMMDWVsY2gtaG91cnRyYXgwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQCprzpGe5HSDqpKd1i+6mkxjyyP06umuX+G8Gm9hAMA59vJGZES
+fvxnQKSg0mYEWbaJjgzpltPtSRCvoCOfWMrqhaFN8CcV1R4yZFsSj3R99BzEIEIU
+vn87qzK1LQbhOC+jqEIciX4dgWJ9QYw4j35TaLRlUjneXerN9gU3LyMScCKpr8yg
+FM/3eMHcFSd5L44Ql49lZxNO/5vmf0zLLQimj2ItvJMHkMhrc1MclIN7vNqo3VQR
+P20R9Ai03UcKjHuD4N81ZJ7mMFnAyMWRZmaQhJ91DN8kEcIKNqslmmzO7hxp9sP6
+bKaoAEcLbJDxFOiu8e1eVG1S4Eg7/Czy3rY7AgMBAAGjgZAwgY0wCQYDVR0TBAIw
+ADAdBgNVHQ4EFgQUj8BkdfoUmprSduHZ4cyXPD73Dh0wPwYDVR0jBDgwNoAUqVEv
+l+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNVBAMMBGFyYW6CCQCutQIacQKT
+lDATBgNVHSUEDDAKBggrBgEFBQcDAjALBgNVHQ8EBAMCB4AwDQYJKoZIhvcNAQEL
+BQADggEBAG3sir4u4KiVQkkBei/5r7mAp3PFXgbm3DexTEZiDjnCzNJmPYxJUr1d
+OaGteYqYMoXL/cNWoxUlOBKq8fFea4QELD2VzipDjTpXCLhHJoJhq3soggM5oc0g
+MzWmD8MaXcSRiFkn1yklw2sMQDcNO85PODBNhua6Hq8f2Te+HiPnjtyAugFPrWHH
+FG7gY5UzVlHKObnrqQIDdewQ8GhEONLPJqeOJegbwNhM+iltjwWwy7WaA9hM2xGZ
+22u6hTfvwQgbt3PD6g1P0Ev86v6lssLdJDqlsWz4LJHZN8sKONK2ecFjvnL3lY+A
+qgyrISB0wqGPup4V07rq7kub3B+3Uy8=
+-----END CERTIFICATE-----
+</cert>
+<key>
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCprzpGe5HSDqpK
+d1i+6mkxjyyP06umuX+G8Gm9hAMA59vJGZESfvxnQKSg0mYEWbaJjgzpltPtSRCv
+oCOfWMrqhaFN8CcV1R4yZFsSj3R99BzEIEIUvn87qzK1LQbhOC+jqEIciX4dgWJ9
+QYw4j35TaLRlUjneXerN9gU3LyMScCKpr8ygFM/3eMHcFSd5L44Ql49lZxNO/5vm
+f0zLLQimj2ItvJMHkMhrc1MclIN7vNqo3VQRP20R9Ai03UcKjHuD4N81ZJ7mMFnA
+yMWRZmaQhJ91DN8kEcIKNqslmmzO7hxp9sP6bKaoAEcLbJDxFOiu8e1eVG1S4Eg7
+/Czy3rY7AgMBAAECggEBAIiLIgjPrQLsnCn6KebPeMDRpplCSrGKOc3bLiu7zDLx
+YNJNiYjpuLBZu2BSjpdXneTI8ykRHw6lqhC5e5DhgcAAslGmO7181qTUTtj7qVEl
+m/RSxPouZPIeDFrwlcWsUeGPJ0wRc/PIRvnmQjDNf2kdK3URGtIOn0EHhSDoBH/z
+fisgOgbe96+/isEPPSDAHwXIy63uAg0+Vv/a2pJ37NkZlACD2kIkNJiXNHN/S1Qk
+Q4GDXoq7HeEmiT3jCxeuI+w4bEncIvlhsMUIWNtfhM3a3n9V9qnUT8nURSjJNRKs
+TbdUXh6rv9e7G757xuMLzfkHCwFzT4lBX1V+aljPL+ECgYEA3xqQj7LEkOo9yXI2
+8D47lh1Pq6Fbm71mHUYzsR9BvJXR+lYo2XO5/UbUU2sqRbG1iDNi3F0JE1Yum9ak
+h91ektFGUi1+dcc+UG6auRGO/u49op66yjCZWr5jr+Ta6f7XGc/aMxU2+0Zv3saR
+Og+qR+IFrA5cBpIEvRGgtV05kisCgYEAwrRCmwMatet0A/CFVn8qAeloeWZ0srtA
+kqOvMQbBOnps1DkcIZXTuNfqLn/ZZnnBYiYlQpy73A4Rjs6eXwT63QL9JgRRxCUB
+Vht4u39W8Lx8tA+VlJ/Yh52C+mmxL8ursJ6xkNs4Xa5kmZmhHYmui1I06K96B7Gz
+9r3ihMv7NDECgYBu0zhaWXgxcFqO9fB6eL+Kuza3UCk8fOH7ysKkyp0R++5Zh3E1
+S7ppKUURxxsxkaxWYwhJ5OE8PMRcX0xNvVZcYh6ndbfq87VtqPOs2R8KXfg6DtVE
+2M1k+Ux1tJ5WPGRHiyud0n0EZyHtLQA5Mkzo9krRBDUMgn5eGSKW1R9jDwKBgEHw
+cHo08+/WXMUUyOOBT4W0OZibtTvupLDE1IkjA3+9hGvfJ4LMThbUsM+spsDIzVBj
+IM1NbWXaMeIOYZ5GfnspDvi4D8UAz1INHbdKKfR/sS/98yeRdvB+zKPn9YT9UhkP
+tY0cYRuA+zr1x5XMUhuG7Lo863P9n7gZmMRmnJ2RAoGAelEGMi5Vb3bcOAJHf2nm
+macOP9YCy/gOeaRxyGDSczP4LMZEOmgBrhzbJKFeJHqNnhni4cJZLWj3/ITNdYB6
+97qmmRdCZaT6MWPMSIK6kxsIKROixI4nGyAGQAuz/9x1NDj/nxdBvob3qnocJ3M8
+r5ZtvNbbLxCU4POk2hgBLec=
+-----END PRIVATE KEY-----
+</key>
+comp-lzo
+verb 3
+mute 20
+cipher AES-256-CBC
diff --git a/pointeuse/vpn/DKS-VPN-elch-pothourtrax.ovpn b/pointeuse/vpn/DKS-VPN-elch-pothourtrax.ovpn
new file mode 100644 (file)
index 0000000..2a30ccf
--- /dev/null
@@ -0,0 +1,153 @@
+client
+dev tun
+proto udp
+remote vsrv01.dks.lu 1098
+remote arandks.lu 1098
+
+remote-random
+resolv-retry infinite
+nobind
+persist-key
+persist-tun
+mute-replay-warnings
+<ca>
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV
+BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD
+VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X
+8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt
+pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4
+4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H
+vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6
+gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1
+CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ
+f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV
+BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN
+BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h
+wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn
+AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s
+PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V
+8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw
+8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g==
+-----END CERTIFICATE-----
+</ca>
+<cert>
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            c4:c0:c3:8d:67:2c:9b:42:0f:10:ef:f5:fc:54:16:00
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=aran
+        Validity
+            Not Before: Oct 13 06:25:55 2020 GMT
+            Not After : Oct 11 06:25:55 2030 GMT
+        Subject: CN=elch-pothourtrax
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:a3:b7:b9:00:85:3a:35:67:08:ba:25:1a:a9:99:
+                    ed:f7:80:68:a7:2f:db:61:7f:3c:60:c3:21:98:7e:
+                    ab:37:ea:73:84:a0:11:ce:8d:cd:35:24:99:aa:00:
+                    fc:98:5e:8a:30:7a:7d:5a:bc:b7:94:ee:a0:7d:2a:
+                    42:30:ee:63:bd:99:29:82:09:75:17:c1:c0:99:33:
+                    82:0b:ed:cd:0c:cd:ec:f5:70:c8:f9:2d:fe:ec:5f:
+                    d4:88:85:00:84:2c:22:ae:05:10:c6:df:65:1b:f0:
+                    34:e3:fc:0b:c2:e3:01:86:04:af:96:6f:b2:ab:4f:
+                    9a:3f:43:6e:48:5e:9f:cd:2c:3d:6a:49:93:4e:94:
+                    c3:be:e3:55:af:3e:9c:ac:1c:8b:9c:e9:9a:38:4f:
+                    85:88:6f:71:94:f9:cc:ec:1b:d8:4c:36:57:89:42:
+                    b3:99:af:9a:33:95:8a:1f:5c:b2:bd:0d:2b:7a:e6:
+                    fc:43:fc:a8:f2:d0:31:11:4f:66:c7:09:b7:14:ab:
+                    a9:aa:97:13:a1:39:f3:0e:6f:c6:a3:ea:dd:ed:32:
+                    d3:55:db:49:20:5c:ff:42:68:52:bc:7e:1c:51:20:
+                    09:c7:90:e4:d8:95:87:31:3a:18:95:10:7f:12:99:
+                    f0:10:6c:a2:cf:1c:a3:74:8b:3a:4a:81:c7:ef:ff:
+                    44:83
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                45:F5:93:99:6D:CF:E9:ED:79:92:4B:5E:5B:C9:6E:F0:53:CC:6E:3C
+            X509v3 Authority Key Identifier: 
+                keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4
+                DirName:/CN=aran
+                serial:AE:B5:02:1A:71:02:93:94
+
+            X509v3 Extended Key Usage: 
+                TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature
+    Signature Algorithm: sha256WithRSAEncryption
+         81:fb:51:14:fc:fe:00:99:ef:da:46:94:ec:0b:72:74:4a:26:
+         af:c8:1a:1c:03:bb:f7:d8:fb:d9:b3:be:73:e7:49:b0:96:e9:
+         2b:4b:85:5d:91:e5:fd:49:b7:10:f0:8b:da:18:3d:a0:99:1e:
+         4a:44:a0:4d:89:94:1a:28:cb:79:d4:85:f4:3a:20:1c:66:51:
+         43:fc:46:e5:dd:e7:45:f7:48:90:61:9d:28:2b:2b:37:f8:c2:
+         de:16:80:24:57:bd:89:7e:07:b8:b6:be:30:5e:da:3a:24:5e:
+         1f:3d:a0:09:89:ee:bf:b4:db:0f:dc:ab:a6:1b:85:05:2f:d9:
+         08:0c:3f:bc:14:05:49:01:9c:a9:7c:13:5b:e0:f6:ed:59:e5:
+         3f:11:d6:8d:fb:b7:8d:07:a0:6a:9e:dc:52:90:5b:eb:18:1d:
+         9e:d9:90:6d:42:e8:9b:3f:e4:73:b7:a5:c1:01:ce:8a:52:aa:
+         8c:e4:d9:e2:9a:0b:38:9a:8f:22:99:80:a4:2a:fe:05:2a:28:
+         19:74:96:c5:d7:b6:75:51:7e:f2:80:ea:df:78:55:f0:65:99:
+         0e:e1:13:8b:4f:13:f6:49:0f:61:bd:74:c4:7b:1d:86:49:81:
+         8b:b5:82:7e:01:ec:ea:96:ad:3f:04:95:6e:c1:43:0c:e7:37:
+         d7:b5:d8:c3
+-----BEGIN CERTIFICATE-----
+MIIDRjCCAi6gAwIBAgIRAMTAw41nLJtCDxDv9fxUFgAwDQYJKoZIhvcNAQELBQAw
+DzENMAsGA1UEAwwEYXJhbjAeFw0yMDEwMTMwNjI1NTVaFw0zMDEwMTEwNjI1NTVa
+MBsxGTAXBgNVBAMMEGVsY2gtcG90aG91cnRyYXgwggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQCjt7kAhTo1Zwi6JRqpme33gGinL9thfzxgwyGYfqs36nOE
+oBHOjc01JJmqAPyYXoowen1avLeU7qB9KkIw7mO9mSmCCXUXwcCZM4IL7c0Mzez1
+cMj5Lf7sX9SIhQCELCKuBRDG32Ub8DTj/AvC4wGGBK+Wb7KrT5o/Q25IXp/NLD1q
+SZNOlMO+41WvPpysHIuc6Zo4T4WIb3GU+czsG9hMNleJQrOZr5ozlYofXLK9DSt6
+5vxD/Kjy0DERT2bHCbcUq6mqlxOhOfMOb8aj6t3tMtNV20kgXP9CaFK8fhxRIAnH
+kOTYlYcxOhiVEH8SmfAQbKLPHKN0izpKgcfv/0SDAgMBAAGjgZAwgY0wCQYDVR0T
+BAIwADAdBgNVHQ4EFgQURfWTmW3P6e15kkteW8lu8FPMbjwwPwYDVR0jBDgwNoAU
+qVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNVBAMMBGFyYW6CCQCutQIa
+cQKTlDATBgNVHSUEDDAKBggrBgEFBQcDAjALBgNVHQ8EBAMCB4AwDQYJKoZIhvcN
+AQELBQADggEBAIH7URT8/gCZ79pGlOwLcnRKJq/IGhwDu/fY+9mzvnPnSbCW6StL
+hV2R5f1JtxDwi9oYPaCZHkpEoE2JlBooy3nUhfQ6IBxmUUP8RuXd50X3SJBhnSgr
+Kzf4wt4WgCRXvYl+B7i2vjBe2jokXh89oAmJ7r+02w/cq6YbhQUv2QgMP7wUBUkB
+nKl8E1vg9u1Z5T8R1o37t40HoGqe3FKQW+sYHZ7ZkG1C6Js/5HO3pcEBzopSqozk
+2eKaCziajyKZgKQq/gUqKBl0lsXXtnVRfvKA6t94VfBlmQ7hE4tPE/ZJD2G9dMR7
+HYZJgYu1gn4B7OqWrT8ElW7BQwznN9e12MM=
+-----END CERTIFICATE-----
+</cert>
+<key>
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCjt7kAhTo1Zwi6
+JRqpme33gGinL9thfzxgwyGYfqs36nOEoBHOjc01JJmqAPyYXoowen1avLeU7qB9
+KkIw7mO9mSmCCXUXwcCZM4IL7c0Mzez1cMj5Lf7sX9SIhQCELCKuBRDG32Ub8DTj
+/AvC4wGGBK+Wb7KrT5o/Q25IXp/NLD1qSZNOlMO+41WvPpysHIuc6Zo4T4WIb3GU
++czsG9hMNleJQrOZr5ozlYofXLK9DSt65vxD/Kjy0DERT2bHCbcUq6mqlxOhOfMO
+b8aj6t3tMtNV20kgXP9CaFK8fhxRIAnHkOTYlYcxOhiVEH8SmfAQbKLPHKN0izpK
+gcfv/0SDAgMBAAECggEAe4fjFdtw4l6OHTZl+dbl0byYOp5HoDdLLY/Ox6u8MYK8
+CzRke0BPuGuXbskzzxx2lMG32EFRHBU6D3dVXmph4+uvgCj2qyhM1MwisjGKaMDw
+rPmfCzWDhoOAcEo664AJ4th7ojNprT0AC45gqXpz6dWbT52UaOK1dkrA6eZMGZi0
+xTTxbVCp1PY7QCxi66hr7uhAuvp5NLoDyjTKRC/Ml8Vf5523A3Ibc/IGFAwexhZD
+0x9RxLvOJCvS5Dy9IPrwNhK/+cQGCcyijZQ6/+3Q1AFtUfLe7kZGklPXdr/uauuz
+yWVHHEzGO1doERAJgyfTmNBUzvu+iHsQw/StpWATAQKBgQDVDGzY4dJnC+8SHUsN
+gGjCKl1lJb8Sy1t334bho6u/mEbflAUPeqWFMon5pNbQdKG+tsEwTDwif1tqEnwt
+96sVM+Lc3q00JErlaTZfGGS2KjmVdeT2YoPb2tnPodz/79OXOW83jItom0nn7R0r
+obGfPNy22dERgA5pYAiivnzpwQKBgQDEuUyGuf0KwqEu5tL68bQETW2ScAMjJwCc
+aKFf4ilqspRIlXLTZsaUkvnEEln4A79KtyXIIvYHkxO+2LmEOAlsijiJ+EeuJxNq
+EtDuQjmAZFEmVVU7mD85Kk+vj4HYrpGwzrawAw43hGvcKnX1QYAcOa7ZymgRCZyQ
+pN3r+j3XQwKBgQDFtTwloJryyd5YPxrxMqME3O/C995zgIgnnCW9q3es25GZ1fFE
+Rhromtfz9gbrd/DJ3Ss2uOhtUybwLqtStS3tBTOYqISviKaAcrzkTuzXKCQ8ESYj
+h5S6KERNLPa8BEGlasVNFX4h20ogkqipXupIzeA9R7F+vgmhvF8HOCMPgQKBgB2W
+hSUKWj3BEj8cpoTpz5qKDr3krQQffJ8JuaPTP0l1/ImCONgE8D8ub/SGkhOUdLQH
+Id6dK4XuIB0nOZfiWcCCdYiC2D0gUXI1zEjZmw5tiCsM0Jn7Bx9Q9tU/71aowu7l
+2GJWw0+kUhi2JjGyHVOhdWP6ZnaRjIPQ2DQC2kRDAoGAHFAz8gOYRuOrQ5g52GZB
+PxytRUmK4G7euqZK9hhjaMEP1Rk5QNdlnXRQc/87atG91j7bWAV+CrohqQtNWYFu
+5i932D2qcqneRTeVknzWF/jWcFhrZ/56TOdx04mqshLpPQWDTlVSJUExGl+zhE8A
+doCIXeDtmRHnpn6JX+np+to=
+-----END PRIVATE KEY-----
+</key>
+comp-lzo
+verb 3
+mute 20
+cipher AES-256-CBC
diff --git a/pointeuse/vpn/DKS-VPN-lanx-pot01.ovpn b/pointeuse/vpn/DKS-VPN-lanx-pot01.ovpn
new file mode 100644 (file)
index 0000000..fe4e38c
--- /dev/null
@@ -0,0 +1,153 @@
+client
+dev tun
+proto udp
+remote vsrv01.dks.lu 1098
+remote arandks.lu 1098
+
+remote-random
+resolv-retry infinite
+nobind
+persist-key
+persist-tun
+mute-replay-warnings
+<ca>
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV
+BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD
+VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X
+8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt
+pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4
+4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H
+vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6
+gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1
+CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ
+f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV
+BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN
+BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h
+wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn
+AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s
+PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V
+8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw
+8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g==
+-----END CERTIFICATE-----
+</ca>
+<cert>
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            13:b3:4f:08:ae:61:af:ff:68:f2:2c:16:89:63:8c:59
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=aran
+        Validity
+            Not Before: Mar  6 09:41:06 2022 GMT
+            Not After : Mar  3 09:41:06 2032 GMT
+        Subject: CN=lanx-pot01
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:b8:3e:f0:7f:21:b2:da:ce:37:1c:63:03:83:b5:
+                    3f:92:8a:6e:eb:da:af:82:ef:72:4d:e0:d5:dc:6c:
+                    58:65:40:10:a7:a3:03:eb:53:c9:a2:e1:57:79:63:
+                    8c:1f:a7:b9:4e:ed:d0:e6:94:c8:2a:0e:e0:e3:65:
+                    0f:8d:b1:1a:04:6c:31:20:4c:f1:50:74:68:e3:cc:
+                    a2:4e:93:ff:b2:e9:95:d5:1e:66:4a:14:72:19:3f:
+                    ab:0b:b9:d1:71:35:95:03:e7:a4:0c:2c:93:1f:1a:
+                    6f:c3:81:df:93:ca:66:fc:32:60:81:88:74:f7:ae:
+                    d1:a6:93:9a:ca:70:da:42:7e:34:5d:74:34:87:aa:
+                    f0:74:0f:47:cd:d9:5c:06:33:f7:3d:1a:4b:b8:51:
+                    52:d2:1d:27:95:03:17:12:9c:8e:5f:87:e3:27:c1:
+                    9a:60:fb:58:9d:c0:82:22:16:94:75:f8:ee:a4:22:
+                    92:b0:e0:a7:7c:67:69:5e:3b:14:92:84:26:c5:2c:
+                    d5:a1:86:e3:fb:99:e0:4b:88:bb:c5:53:19:2d:e6:
+                    fb:e4:91:bd:ba:46:9c:50:dc:58:61:4e:e0:51:24:
+                    ae:65:3b:83:e8:79:e5:82:7f:80:52:f1:10:d8:32:
+                    51:10:40:69:0f:68:b2:ff:c8:30:1b:ea:c9:b1:4e:
+                    8f:c5
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                97:DA:B9:3C:39:7A:18:30:69:76:6B:FB:1B:82:8C:57:C3:B5:89:88
+            X509v3 Authority Key Identifier: 
+                keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4
+                DirName:/CN=aran
+                serial:AE:B5:02:1A:71:02:93:94
+
+            X509v3 Extended Key Usage: 
+                TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature
+    Signature Algorithm: sha256WithRSAEncryption
+         5a:06:61:0c:e3:cf:3f:ee:5c:bf:20:93:0a:76:72:61:fb:2a:
+         04:ce:98:6b:03:3b:1f:2a:d5:cb:97:10:0a:a1:78:fd:7f:c9:
+         39:f1:fc:2f:03:1f:51:b7:5d:fd:f1:d2:8c:d4:7f:6d:07:5a:
+         cf:59:43:1b:8f:ed:e6:af:56:ba:f4:a4:93:07:19:f5:a7:52:
+         ae:09:65:70:e1:16:dc:36:f4:80:cf:bc:07:37:5d:5e:19:77:
+         8b:4b:79:ca:76:9a:3a:c7:97:c9:4b:d8:34:68:f0:af:ce:f0:
+         81:65:bc:a3:d9:79:47:4c:c8:f2:87:77:32:a1:2d:74:e0:d3:
+         3e:35:09:9b:a5:65:0c:3e:e7:d0:5f:3b:c5:a7:76:72:3e:d1:
+         ad:3d:9d:20:92:fe:d1:ae:69:af:15:56:07:b4:9c:9b:6e:51:
+         f2:0b:7a:68:33:1a:e1:c6:7d:ab:3c:c2:04:46:6e:f8:40:f9:
+         f6:dd:b0:2b:6a:b1:51:6e:78:f3:1c:29:10:a3:b3:81:f8:c7:
+         ce:82:ab:22:0d:64:d7:5a:8c:ec:f0:dc:2a:1b:f5:4f:23:0b:
+         b1:6c:46:ec:bc:87:ba:9e:04:f2:84:b5:fd:40:f4:03:0f:b7:
+         03:ce:6f:37:7e:34:01:36:3f:55:d7:73:af:81:5f:c9:c2:e6:
+         9f:fc:12:c1
+-----BEGIN CERTIFICATE-----
+MIIDPzCCAiegAwIBAgIQE7NPCK5hr/9o8iwWiWOMWTANBgkqhkiG9w0BAQsFADAP
+MQ0wCwYDVQQDDARhcmFuMB4XDTIyMDMwNjA5NDEwNloXDTMyMDMwMzA5NDEwNlow
+FTETMBEGA1UEAwwKbGFueC1wb3QwMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALg+8H8hstrONxxjA4O1P5KKbuvar4Lvck3g1dxsWGVAEKejA+tTyaLh
+V3ljjB+nuU7t0OaUyCoO4ONlD42xGgRsMSBM8VB0aOPMok6T/7LpldUeZkoUchk/
+qwu50XE1lQPnpAwskx8ab8OB35PKZvwyYIGIdPeu0aaTmspw2kJ+NF10NIeq8HQP
+R83ZXAYz9z0aS7hRUtIdJ5UDFxKcjl+H4yfBmmD7WJ3AgiIWlHX47qQikrDgp3xn
+aV47FJKEJsUs1aGG4/uZ4EuIu8VTGS3m++SRvbpGnFDcWGFO4FEkrmU7g+h55YJ/
+gFLxENgyURBAaQ9osv/IMBvqybFOj8UCAwEAAaOBkDCBjTAJBgNVHRMEAjAAMB0G
+A1UdDgQWBBSX2rk8OXoYMGl2a/sbgoxXw7WJiDA/BgNVHSMEODA2gBSpUS+X4xXF
+1ao3HfqKB/GqOsl/1KETpBEwDzENMAsGA1UEAwwEYXJhboIJAK61AhpxApOUMBMG
+A1UdJQQMMAoGCCsGAQUFBwMCMAsGA1UdDwQEAwIHgDANBgkqhkiG9w0BAQsFAAOC
+AQEAWgZhDOPPP+5cvyCTCnZyYfsqBM6YawM7HyrVy5cQCqF4/X/JOfH8LwMfUbdd
+/fHSjNR/bQdaz1lDG4/t5q9WuvSkkwcZ9adSrgllcOEW3Db0gM+8BzddXhl3i0t5
+ynaaOseXyUvYNGjwr87wgWW8o9l5R0zI8od3MqEtdODTPjUJm6VlDD7n0F87xad2
+cj7RrT2dIJL+0a5prxVWB7Scm25R8gt6aDMa4cZ9qzzCBEZu+ED59t2wK2qxUW54
+8xwpEKOzgfjHzoKrIg1k11qM7PDcKhv1TyMLsWxG7LyHup4E8oS1/UD0Aw+3A85v
+N340ATY/Vddzr4FfycLmn/wSwQ==
+-----END CERTIFICATE-----
+</cert>
+<key>
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC4PvB/IbLazjcc
+YwODtT+Sim7r2q+C73JN4NXcbFhlQBCnowPrU8mi4Vd5Y4wfp7lO7dDmlMgqDuDj
+ZQ+NsRoEbDEgTPFQdGjjzKJOk/+y6ZXVHmZKFHIZP6sLudFxNZUD56QMLJMfGm/D
+gd+Tymb8MmCBiHT3rtGmk5rKcNpCfjRddDSHqvB0D0fN2VwGM/c9Gku4UVLSHSeV
+AxcSnI5fh+MnwZpg+1idwIIiFpR1+O6kIpKw4Kd8Z2leOxSShCbFLNWhhuP7meBL
+iLvFUxkt5vvkkb26RpxQ3FhhTuBRJK5lO4PoeeWCf4BS8RDYMlEQQGkPaLL/yDAb
+6smxTo/FAgMBAAECggEAetDJs5UdCinIJs4Bu7wIAoDw65s8v4UppqwnIuW+DtAj
+yfsqU6XolQCtNKec8kT1i52PUQUAYLjGRA5LzeGuPCB6ptNjUIQonyD7WHHjUrnO
+POAkw2DZpecA97IH4PUcvhudCNh1wZf3xFVAWd3jxF04Y2A4yBnqeqWN20Ba3VLs
+MK9jX8WhMhRbAFBnPOq3wBlp1aROHY2HIKt2EseG8UrwjT33M+wLeVXFoCxygNO8
+2WDJYVGkOT4dstznxtJUxCexhOsRpwxRkb41wNlnBzvAJzmmG9+MGkuQfkcBGfDm
+NmGl9JwMz+V1mXe1O5w+MgEtwevOIBppdNbHyPjOgQKBgQDw34STdGVVUSo5TmbM
+/qlmoFaOUX0QDVanmq3Fp3w24PDKaAw5R67MuAHMfccVfS48Ahi0K4PAtDRiupu4
+cVh626FyJS3E2Y77zxmYC3ZL4FyYGtUXK9yVG56uPMqHib4VisCiYLxz1TUv+pBg
+zj6P5QAAaHc1+O1jWRBpAegM1QKBgQDD0QiIqt0+1M6YQzXOCki0z4dh2b4xh4Rc
+Jg6hXvObsDmhbSxYrzzGX0Yp55I5x/0Afn5xkjm4gZuWFhOVWSUKWWXB8gN07zaL
+wOpX2bLwV4t+vQKZd8XswcEBjST2Gkjcz2rJlbLRQPvx9WgFME2W6rmVUoPV9WyE
+Z/+Jw+UvMQKBgQDdRqi3AQ16FAbzABgmJ6gdVBxPv4JhNa+uZsVONy9ABuKNPopE
+MJrfDAbzAXTbQ9UuYUqqcPMnGySosf8NsGp06sDkaE0kciwNHVLIv3bb+290d+nb
+0HpiLC5YqBXx71LE3WNbh/x3eJzUx5zMoYsNi3S160HgPh5tzsrpfEvdRQKBgQCv
+pHN0K1czAa2idD7x5tWaob/87FQmlzkJcvWSl9oJn4PCIWwyzFTGVzVXZykJfTKa
+W9xNQO1Xa6JEeN7uCr0n0FJvKgchv2R87PkG/fX8kXpFn4KSaBX4LT9ThehOe/s5
+XS+bTBTOj+yt9wNsDAy8vyTiJNaud2r0RVi4mSedMQKBgQCHgciRzkIuvfYv0K0g
+I1nxr3lp0Y9Tnic/Y8NHHJMfyy4SIj/0H0T6fNP7OJidSnlo5nyX7LRBeCZnNHrT
+VzufV2yCvvKepj+X6BUn3W5QGJsmbZZ9Zw/ZLP2waqMNlMosiDcnBQsO4Lw4/Rs/
+SH6toGlJqIj7iD/GEyHwgdw5Yg==
+-----END PRIVATE KEY-----
+</key>
+comp-lzo
+verb 3
+mute 20
+cipher AES-256-CBC
diff --git a/pointeuse/vpn/DKS-VPN-ldin-hourtrax.ovpn b/pointeuse/vpn/DKS-VPN-ldin-hourtrax.ovpn
new file mode 100644 (file)
index 0000000..bf06068
--- /dev/null
@@ -0,0 +1,153 @@
+client
+dev tun
+proto udp
+remote vsrv01.dks.lu 1098
+remote arandks.lu 1098
+
+remote-random
+resolv-retry infinite
+nobind
+persist-key
+persist-tun
+mute-replay-warnings
+<ca>
+-----BEGIN CERTIFICATE-----
+MIIDHjCCAgagAwIBAgIJAK61AhpxApOUMA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV
+BAMMBGFyYW4wHhcNMTcxMjE4MTM0MTIyWhcNMjcxMjE2MTM0MTIyWjAPMQ0wCwYD
+VQQDDARhcmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1TydPk4X
+8YyPjXI0htiMsM9C5jP0iH/Hgl7w+t0NL6fvcJhwy8BntJ/FRlS/GFoszmH+0zSt
+pVeymgEwSQ2SrZixSkln2XhbTIH/NUEHosdllECJgj83W0Kpbtms8Cs6/FfhvMB4
+4o/GnN/mkmA9kslguStksV2vQh98Os9rw5gEKM5qFYO5FYUZIIrcsLgyzztPpw4H
+vhrAzxuuu+zg9cOGAihlWV+CSlQJDZyC9hH9xal8UsTlYn9HFqVjr39k7OJg0WC6
+gyjQ92nzqEw49Jkb3NMAarF0zPcP25WV97Aq7EDZV/G8LZbg4p+xCrkz2iUJttu1
+CZjhS9uNsvIAYQIDAQABo30wezAdBgNVHQ4EFgQUqVEvl+MVxdWqNx36igfxqjrJ
+f9QwPwYDVR0jBDgwNoAUqVEvl+MVxdWqNx36igfxqjrJf9ShE6QRMA8xDTALBgNV
+BAMMBGFyYW6CCQCutQIacQKTlDAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN
+BgkqhkiG9w0BAQsFAAOCAQEAysh4aGsnv4CebGvzZ9mZlmK5o4JTj4bqRw8sFe4h
+wW/bZ0ggMnnvNZF1VJJgO/UQQq2gIiOw7zLrlSmPHIhRPkQspemk6uU0m2h6K9rn
+AnX3qeVP5dXbZsqr1jI1/aCzxSW5hu6WUfR3Q+u1pGm9HePhrRJj0djW8Kd7UO+s
+PfpIN9gbfLoLnAfCJIc3BccBoD5IqU4s7vleekQGCJHloT5S3MefiIUg7d8leW4V
+8PiCohkgHwMOZy3ACy1ZPuT92x+7JCaNV56X7iT3GZhkyQ4tSKu3UpMFkz8obYKw
+8RrNsXXBRWgnuakkMY6wHJJZBPJn+qDrWbO7nxVTOqY22g==
+-----END CERTIFICATE-----
+</ca>
+<cert>
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            69:24:03:c7:c4:fb:5d:0e:9c:75:98:ca:31:79:79:40
+    Signature Algorithm: sha256WithRSAEncryption
+        Issuer: CN=aran
+        Validity
+            Not Before: Jan 31 15:14:25 2021 GMT
+            Not After : Jan 29 15:14:25 2031 GMT
+        Subject: CN=ldin-hourtrax
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+                Public-Key: (2048 bit)
+                Modulus:
+                    00:c7:e7:3b:52:90:cd:d1:c3:d6:a1:b3:f5:dd:c8:
+                    3b:e5:44:7c:24:11:2c:3d:9c:17:97:00:2d:a7:9b:
+                    36:e9:11:74:a1:ff:1e:f8:78:7d:08:54:98:50:71:
+                    b4:bb:fc:15:7c:d1:ea:c3:64:03:a8:52:ac:26:d1:
+                    b2:83:52:40:83:1d:67:c7:35:9c:e2:4a:7b:42:ca:
+                    69:b9:64:1c:78:ab:a9:41:81:1f:3c:e0:6e:94:1b:
+                    01:7c:e3:67:48:d5:97:45:71:e3:b8:ea:13:82:c2:
+                    f4:89:ec:a4:19:09:59:5b:d4:2b:80:0b:f6:59:6e:
+                    de:a5:4c:c7:13:cf:9f:fb:f2:a2:7c:bd:69:43:de:
+                    bb:a5:5d:04:02:99:e1:79:40:b9:e4:f7:f6:c9:e7:
+                    93:07:16:c2:bd:87:c6:1d:b0:97:c6:15:bc:0f:0d:
+                    22:2a:a0:91:d7:5e:10:39:61:02:77:ad:61:d8:15:
+                    47:d2:37:05:56:64:71:c5:a1:3f:af:dc:62:06:3e:
+                    81:9d:ab:57:b6:ac:96:a2:7a:ee:a7:3c:5b:18:dd:
+                    cc:13:4f:32:9f:0c:3c:88:f5:5b:ef:8d:ae:5e:3a:
+                    fb:ff:c2:2d:58:49:4f:47:41:ef:84:d0:75:84:99:
+                    73:93:e8:54:ca:a9:ec:65:6b:13:54:bc:76:dd:cf:
+                    07:e3
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            X509v3 Subject Key Identifier: 
+                5D:14:14:8F:4C:8E:19:D1:1D:42:A5:D5:D1:5D:59:BC:1F:4D:F9:ED
+            X509v3 Authority Key Identifier: 
+                keyid:A9:51:2F:97:E3:15:C5:D5:AA:37:1D:FA:8A:07:F1:AA:3A:C9:7F:D4
+                DirName:/CN=aran
+                serial:AE:B5:02:1A:71:02:93:94
+
+            X509v3 Extended Key Usage: 
+                TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature
+    Signature Algorithm: sha256WithRSAEncryption
+         ce:24:bd:c0:65:52:83:45:96:62:f7:14:27:31:87:6c:92:21:
+         f2:e8:7a:23:ca:3d:a8:d3:3d:86:08:5c:b0:53:60:d3:13:d6:
+         e4:8f:cf:69:b2:f2:d0:dc:87:88:e8:9a:21:22:26:19:ed:a1:
+         40:e9:95:83:43:81:41:0f:e4:22:ab:b1:df:8e:c5:74:3b:85:
+         57:f5:9e:a9:b8:71:6d:29:fe:be:54:bb:06:9d:9d:00:72:df:
+         74:3c:11:1b:6b:89:06:7a:97:dc:0e:67:80:09:9a:50:6b:69:
+         08:20:6e:86:d7:f8:49:d9:cd:21:8e:b7:a2:9c:ef:25:d5:51:
+         b5:96:36:e1:29:b3:c5:0a:8e:c7:8e:b9:c3:38:70:01:ab:f4:
+         0b:97:ae:e2:20:09:35:fc:77:0c:0f:e2:35:ca:78:19:3c:d9:
+         3d:a7:8b:f4:63:0b:ce:91:40:e8:36:af:83:88:81:76:02:0e:
+         75:5c:85:7c:f1:25:6f:fb:8a:f3:e7:d2:3f:c0:d0:14:8c:62:
+         fe:e5:5c:83:16:47:4f:7a:7b:46:8a:e5:fe:cc:12:b6:60:9a:
+         5e:08:4e:64:f5:6d:a6:7f:b2:8c:9a:1a:95:86:22:0d:29:88:
+         45:dd:ef:6b:90:48:49:ff:92:30:c8:d0:d0:c2:80:2b:eb:c5:
+         bc:98:3d:ca
+-----BEGIN CERTIFICATE-----
+MIIDQjCCAiqgAwIBAgIQaSQDx8T7XQ6cdZjKMXl5QDANBgkqhkiG9w0BAQsFADAP
+MQ0wCwYDVQQDDARhcmFuMB4XDTIxMDEzMTE1MTQyNVoXDTMxMDEyOTE1MTQyNVow
+GDEWMBQGA1UEAwwNbGRpbi1ob3VydHJheDCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAMfnO1KQzdHD1qGz9d3IO+VEfCQRLD2cF5cALaebNukRdKH/Hvh4
+fQhUmFBxtLv8FXzR6sNkA6hSrCbRsoNSQIMdZ8c1nOJKe0LKablkHHirqUGBHzzg
+bpQbAXzjZ0jVl0Vx47jqE4LC9InspBkJWVvUK4AL9llu3qVMxxPPn/vyony9aUPe
+u6VdBAKZ4XlAueT39snnkwcWwr2Hxh2wl8YVvA8NIiqgkddeEDlhAnetYdgVR9I3
+BVZkccWhP6/cYgY+gZ2rV7aslqJ67qc8WxjdzBNPMp8MPIj1W++Nrl46+//CLVhJ
+T0dB74TQdYSZc5PoVMqp7GVrE1S8dt3PB+MCAwEAAaOBkDCBjTAJBgNVHRMEAjAA
+MB0GA1UdDgQWBBRdFBSPTI4Z0R1CpdXRXVm8H0357TA/BgNVHSMEODA2gBSpUS+X
+4xXF1ao3HfqKB/GqOsl/1KETpBEwDzENMAsGA1UEAwwEYXJhboIJAK61AhpxApOU
+MBMGA1UdJQQMMAoGCCsGAQUFBwMCMAsGA1UdDwQEAwIHgDANBgkqhkiG9w0BAQsF
+AAOCAQEAziS9wGVSg0WWYvcUJzGHbJIh8uh6I8o9qNM9hghcsFNg0xPW5I/PabLy
+0NyHiOiaISImGe2hQOmVg0OBQQ/kIqux347FdDuFV/WeqbhxbSn+vlS7Bp2dAHLf
+dDwRG2uJBnqX3A5ngAmaUGtpCCBuhtf4SdnNIY63opzvJdVRtZY24SmzxQqOx465
+wzhwAav0C5eu4iAJNfx3DA/iNcp4GTzZPaeL9GMLzpFA6Davg4iBdgIOdVyFfPEl
+b/uK8+fSP8DQFIxi/uVcgxZHT3p7Rorl/swStmCaXghOZPVtpn+yjJoalYYiDSmI
+Rd3va5BISf+SMMjQ0MKAK+vFvJg9yg==
+-----END CERTIFICATE-----
+</cert>
+<key>
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDH5ztSkM3Rw9ah
+s/XdyDvlRHwkESw9nBeXAC2nmzbpEXSh/x74eH0IVJhQcbS7/BV80erDZAOoUqwm
+0bKDUkCDHWfHNZziSntCymm5ZBx4q6lBgR884G6UGwF842dI1ZdFceO46hOCwvSJ
+7KQZCVlb1CuAC/ZZbt6lTMcTz5/78qJ8vWlD3rulXQQCmeF5QLnk9/bJ55MHFsK9
+h8YdsJfGFbwPDSIqoJHXXhA5YQJ3rWHYFUfSNwVWZHHFoT+v3GIGPoGdq1e2rJai
+eu6nPFsY3cwTTzKfDDyI9Vvvja5eOvv/wi1YSU9HQe+E0HWEmXOT6FTKqexlaxNU
+vHbdzwfjAgMBAAECggEATht8Y2Nu+CJED8SoMbMWLBvZQaJwHdaKpRaNwCp2hxSp
+9M4hRMaXXBTpuqzjCHyTzMScrSG8CB3dZAGVdZhC2rg3n2/ET+r4RH2gV67VLRUt
+ugmAsiGjMz1mFG0qIxxJ0fmRF+RmITaZo/aRm7K6dpXtNUf3RrR6TC42rvf2M9PF
+0C+ksWAfC0ZtWl3WqcF2/86WbwZR8MxAffmuXHDb+eADdKmbtrgw7Fq0QRzENGF2
+aP7HZ+Nk9GUU89a7wuIcctErp0DHGFn9bhuWrVQyXsgc1p+F0Ul8/9+u7YKyNyRJ
+2Eu5VV0rq1MXPv1n97lN1JTIx2qNkUa2wx5TsRI3CQKBgQD3AS24ZM/eKbg1m0sX
+5glj1H+Fjb+tZG+QD5vU9XhZLECKY11Zg5pSwtR5Ya0bGBevCxnMr4yvCaFfAqLp
+dUw/HU7TOw1bGmep+/u3FNKDntue0Ibd7gbwvfrTXxPHTuf2ABfLLEFaSAeVWC2F
+6jh7qnm0skgGEPkXZPwChezUlwKBgQDPLu18iRLMxgnpjuUgQWMi/E9kIefODPZN
+rgKIUIbHZWrPT4+rN5sW2xOvdStjUWl2bsGXwsso4maVyWKIjw+rDauGbpHOfeL+
+TfiQ6If5+jVoFmGN9S3SdmKMCA6nlr4Dqdp0PHYoE/wS1UOK3omU7hg+0eDde+bS
+YSt8snCUlQKBgFupFE5ZGspWsQUzm6pCszlYofntoDO4Ea5kHG/qp75vrYOtW/bb
+32jW5AInPRXQ2vkaJXjPrGVILZoUYGBCJwlE1vuL7mjgY5ew6rgGAhjV2qoUt/ej
+XO/5kBrgLXbI0Ut4vVuoEJhwImBJWJtZT5yUppVnk1Ks+cK0ttA44qoBAoGBAKxY
+eDvxds8bKqG8OcPEQOiYhJ5iSgcw5y8lQnwMqKF0Lw63O2cNgZjYsx5w1J/w2E8p
+wScyZnfjJb0SYkIA5+K+I2JX1ji0pcAwMkaw+HQs/IJSo+JIA08hJccg6LfmgLhh
+chThOtUKEtXDzETX7BEUotyXEHyOFiwJovg/I8GlAoGBALKaEk1+zBXlqnZ4a2Mr
+omaCR6dL2UydLqhaW3zTfnkHarx4K6LHDEZscyANyKXRikJdAuyqw0skMONjq1g6
+Ek8X3mAShBmlurTezjsUFsZq7QwUUZLqds+f/5plfgvOscDS6RQg6YZOtunpuXw8
+gbzvRh8eAvn58Bl1R8kMqVt5
+-----END PRIVATE KEY-----
+</key>
+comp-lzo
+verb 3
+mute 20
+cipher AES-256-CBC