commit 9a772066c344a3f99eadd4cb2e7bbb72084cd064
Author: Tomáš <unknown@unknown>
Date:   Sat Dec 12 11:08:02 2020 +0100

    working webpack

diff --git a/docker/php-fpm/Dockerfile b/docker/php-fpm/Dockerfile
index 56fc328..e87a396 100644
--- a/docker/php-fpm/Dockerfile
+++ b/docker/php-fpm/Dockerfile
@@ -6,5 +6,7 @@ RUN apk update; \
 	pecl install mongodb && \
 	docker-php-ext-enable mongodb; \
 	apk del --purge autoconf openssl-dev g++ make;
+RUN add apk npm; \
+    npm install --global webpack webpack-cli;
 RUN echo "**** install PHP Composer ****\n" && \
     curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
\ No newline at end of file
diff --git a/docker/php-fpm/dev/Dockerfile b/docker/php-fpm/dev/Dockerfile
index 3d52589..5dd2efe 100644
--- a/docker/php-fpm/dev/Dockerfile
+++ b/docker/php-fpm/dev/Dockerfile
@@ -9,7 +9,9 @@ RUN apk update; \
     pecl install mongodb && \
     docker-php-ext-enable mongodb; \
     apk del --purge autoconf openssl-dev g++ make;
-RUN apk add npm;
+RUN apk add npm; \
+    npm install --global webpack webpack-cli; \
+    npm install;
 RUN echo "**** install PHP Composer ****\n" && \
     curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
 RUN rm -rf /usr/local/etc/php/conf.d/docker-php-ext-igbinary.ini;
diff --git a/scripts/dev/build.sh b/scripts/dev/build.sh
index 3562bbb..1d17681 100755
--- a/scripts/dev/build.sh
+++ b/scripts/dev/build.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 #Build development environment
 docker-compose -f docker-compose.yml -f docker-compose-dev.yml up --build -d
-
+echo "================= BUILDING DONE ==================="
 cat << "EOF"
  ______  ______  __    __  ______ ______  ______  ______  ______       __  __   __  ______  ______ ______  __      __
 /\  ___\/\  __ \/\ "-./  \/\  == /\  __ \/\  ___\/\  ___\/\  == \     /\ \/\ "-.\ \/\  ___\/\__  _/\  __ \/\ \    /\ \
@@ -12,7 +12,7 @@ EOF
 docker-compose exec php-fpm composer config extra.symfony.allow-contrib true --no-interaction --working-dir=/var/www/symfony
 docker-compose exec php-fpm composer update --no-interaction --working-dir=/var/www/symfony
 docker-compose exec php-fpm composer install --no-interaction --working-dir=/var/www/symfony
-
+echo "================= COMPOSER INSTALL DONE ==================="
 cat << "EOF"
  ________    ________   _____ ______           ___   ________    ________   _________   ________   ___        ___
 |\   ___  \ |\   __  \ |\   _ \  _   \        |\  \ |\   ___  \ |\   ____\ |\___   ___\|\   __  \ |\  \      |\  \
@@ -24,4 +24,6 @@ cat << "EOF"
                                                                    \|_________|
 EOF
 docker-compose exec php-fpm /bin/sh -c 'cd /var/www/symfony && npm install'
-docker-compose exec -T crawler /bin/sh -c "cd /src && python docker_prepare_structure.py && echo '-all' | python force_update_datasets.py"
\ No newline at end of file
+echo "================= NPM INSTALL DONE ==================="
+docker-compose exec -T crawler /bin/sh -c "cd /src && python docker_prepare_structure.py && echo '-all' | python force_update_datasets.py"
+echo "================= LOADING DATASETS DONE ==================="
\ No newline at end of file
diff --git a/website/package-lock.json b/website/package-lock.json
index 1ef5aa2..c02b74a 100644
--- a/website/package-lock.json
+++ b/website/package-lock.json
@@ -141,6 +141,32 @@
       "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
       "dev": true
     },
+    "babel-polyfill": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+      "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "core-js": "^2.5.0",
+        "regenerator-runtime": "^0.10.5"
+      }
+    },
+    "babel-runtime": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "requires": {
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
+      },
+      "dependencies": {
+        "regenerator-runtime": {
+          "version": "0.11.1",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+          "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+        }
+      }
+    },
     "balanced-match": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@@ -263,6 +289,11 @@
       "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
       "dev": true
     },
+    "core-js": {
+      "version": "2.6.12",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
+      "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
+    },
     "cross-spawn": {
       "version": "7.0.2",
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz",
@@ -1333,6 +1364,11 @@
         "read-pkg": "^2.0.0"
       }
     },
+    "regenerator-runtime": {
+      "version": "0.10.5",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+      "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
+    },
     "regexpp": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
@@ -1680,6 +1716,11 @@
         "spdx-expression-parse": "^3.0.0"
       }
     },
+    "whatwg-fetch": {
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.5.0.tgz",
+      "integrity": "sha512-jXkLtsR42xhXg7akoDKvKWE40eJeI+2KZqcp2h3NsOrRnDvtWX36KcKl30dy+hxECivdk2BVUHVNrPtoMBUx6A=="
+    },
     "which": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
diff --git a/website/package.json b/website/package.json
index 134298b..e455bcf 100644
--- a/website/package.json
+++ b/website/package.json
@@ -5,7 +5,10 @@
   "directories": {
     "test": "tests"
   },
-  "dependencies": {},
+  "dependencies": {
+    "babel-polyfill": "^6.26.0",
+    "whatwg-fetch": "^3.5.0"
+  },
   "devDependencies": {
     "eslint": "^7.0.0",
     "eslint-config-standard": "^14.1.1",
@@ -16,7 +19,8 @@
     "eslint-plugin-standard": "^4.0.1"
   },
   "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1"
+    "test": "echo \"Error: no test specified\" && exit 1",
+    "build": "webpack"
   },
   "author": "",
   "license": "ISC"
diff --git a/website/public/js/cache-handler.js b/website/public/js/cache-handler.js
deleted file mode 100644
index 3c1f66c..0000000
--- a/website/public/js/cache-handler.js
+++ /dev/null
@@ -1,26 +0,0 @@
-const cache = {}
-export const updateCache = (key, value, cache_ = cache) => {
-  if (typeof value === 'object') {
-    if (!(key in cache_)) {
-      cache_[key] = {}
-    }
-    const keys = Object.keys(value)
-    if (!keys.length) {
-      return undefined
-    }
-    keys.forEach((key_) => {
-      cache_[key][key_] = updateCache(key_, value[key_], cache_[key])
-    })
-  } else if (Array.isArray(value)) {
-    cache_[key] = value.map((item) => {
-      updateCache()
-    })
-  } else {
-    cache_[key] = value
-  }
-  return cache_
-}
-export const getCachedData = (key) => {
-  return cache[key]
-}
-export default cache
diff --git a/website/public/js/index.bundle.js b/website/public/js/index.bundle.js
new file mode 100644
index 0000000..8c2a1a5
--- /dev/null
+++ b/website/public/js/index.bundle.js
@@ -0,0 +1 @@
+var js;js=(()=>{var e={6157:e=>{var t,a,n=null,o=null,s=49.7248,p=13.3521,r=17;let l,i,c;var u,d=!1,m=[],h=[];let g=0;const y={};var b=[];let f=!1,v=0;const w={},x={};let k={};const C={coord:{lat:0,lng:0},_popup:null},N=async(e,t,a,n)=>{const o=new Headers,s=new Request(e+"/"+t+"/"+a+"/"+n,{method:"GET",headers:o});return(await fetch(s)).json()};async function j(e,t,n){ie();for(let o=e+t;o>=0&&o<=23;o+=t)m[o]||(m[o]={}),b.forEach((async e=>{m[o][e]||(m[o][e]=await N(a,e,n,o))}));ce()}const P=async(e,t,n=1e3)=>{pe(),a=e,l=t;const o=[];m[i]={};b.forEach((e=>{o.push((async e=>{e in w||(w[e]=await(async(e,t)=>{const a=new Headers,n=new Request(e+"/"+t,{method:"GET",headers:a});return(await fetch(n)).json()})(t,e));const n=await N(a,e,W(),i);m[i][e]=n})(e))})),ie(n),await Promise.all(o).then((()=>{ce(0),O(w),I(m[i]),j(i,1,W()),j(i,-1,W())}))},I=e=>{const a=e,o=[];let s=0;Object.keys(k).length&&(Object.keys(k).forEach((function(e){k[e][0].bindPopup(k[e][1])})),k={}),Object.keys(a).forEach((e=>{const p=a[e];if(s=Math.max(s,p.max),null!=p){const e=p.items.map((e=>{const{x:t,y:a,number:n}=e,o=t+""+a,s=x[o];return!k[o]&&n&&(s[0]=s[0].unbindPopup(),k[o]=s),[t,a,n]}));o.push(...e)}else null!=n&&t.removeLayer(n)})),null!=n&&t.removeLayer(n),o.length&&(n=L.heatLayer(o,{max:s,minOpacity:.5,radius:35,blur:30}).addTo(t)),Y()},O=e=>{null!=o&&t.removeLayer(o),o=L.layerGroup(),Object.keys(e).forEach((t=>{for(var a in e[t]){const{x:n,y:s,name:p}=e[t][a],r=G(n,s,1,`popup-${t}`).setContent(H(y[t],p,0,0,1,1)),l=L.circle([n,s],{radius:2,fillOpacity:.8,color:"#004fb3",fillColor:"#004fb3",bubblingMouseEvents:!0}).bindPopup(r);x[n+""+s]=[l,r],o.addLayer(l)}})),o.setZIndex(-1).addTo(t)},S=(e=null)=>{i=null!==e?e:parseInt($('#dropdown-time input[type="radio"]:checked').val())},T=(e=null)=>{const t=$("#date");c=new Date(e||t.val()),t.val(W()),$("#player-date span").html(`${c.getDate()}. ${c.getMonth()+1}. ${c.getFullYear()}`),m=[]},D=e=>{C._popup.setContent(e),C._popup.openOn(t)},E=(e,t)=>({previousButton:'<button type="button" id="btn-popup-previous-page" onclick="js.setPreviousPageInPopup()"></button>',pagesList:`<p id="pages">${e} z ${t}</p>`,nextButton:'<button type="button" id="btn-popup-next-page" class="next" onclick="js.setNextPageInPopup()"></button>'}),M=()=>{$("#btn-popup-previous-page").prop("disabled",!0),$("#btn-popup-next-page").prop("disabled",!0),$(".popup-pagination").hide()},_=e=>`<div class="popup-pagination">${e?e.reduce(((e,t)=>e+t),""):""}</div>`,B=()=>{const e=Object.keys(h);return 1===e.length?h[e[0]].items.length:e.length},z=e=>{const t=Object.keys(h);return h[t[e]]},G=(e,t,a,n)=>L.popup({autoPan:!1,className:n}).setLatLng([e/a,t/a]),H=(e,t,a,n,o,s)=>{const p=`\n    <strong>${e}</strong>\n    <div id="place-name">${t}</div>`,r=`\n    <div id="place-intesity">\n      <span id="current-number">${a}</span>\n      <span id="sum-number">${n&&n!==Number(a)?"/"+n:""}</span>\n    </div>`,{previousButton:l,nextButton:i,pagesList:c}=E(o,s);return`\n  ${p}\n  ${r}\n  ${_(s>1?[l,c,i]:null)}\n  `},A=()=>Object.keys(h).length>1,F=e=>{const t=$(".leaflet-popup");t.removeClass((function(e,t){return(t.match(/(^|\s)popup-\S+/g)||[]).join(" ")})),t.addClass("popup-"+e)},R=e=>{h=[],g=0;const a=40075016.686*Math.cos(s)/Math.pow(2,t.getZoom())*25/256;let n=0,o=0,p=0,r=0;const l={},c={lng:e.latlng.lng,lat:e.latlng.lat};Object.keys(m[i]).forEach((t=>{m[i][t].items.forEach((s=>{e.latlng.distanceTo(new L.LatLng(s.x,s.y))<a&&(o+=s.x,p+=s.y,h[n]={place:s.place,number:s.number,datasetName:t},r+=parseInt(s.number),n++,l[t]=!0)}))})),h=h.reduce(((e,t)=>(e[t.datasetName]||(e[t.datasetName]={items:[],number:0,datasetName:t.datasetName}),e[t.datasetName].items.push(t),e[t.datasetName].number+=Number(t.number),e)),{});const u=Object.keys(l).length;if(u)if(1===u){const e=z(0),t=e.items,{place:a,number:s}=t[g];C._popup&&ee(C.coord,c)?F(e.datasetName):(C._popup=G(o,p,n,`popup-${e.datasetName}`),C.coord=c),D(H(y[e.datasetName],a,s,r,1,t.length)),1===t.length&&M()}else{const{datasetName:e,number:t}=z(g);C._popup&&ee(C.coord,c)?F(e):(C._popup=G(o,p,n,`popup-${e}`),C.coord=c),D(((e,t,a,n)=>{const o=`<strong id="dataset-name">${n}</strong>`,s=`<div id="place-intesity"><span id="current-number">${e}</span></div>`,{previousButton:p,nextButton:r,pagesList:l}=E(1,a);return`\n  ${o}\n  ${s}\n  ${_([p,l,r])}\n  `})(t,0,B(),y[e]))}else t._popup&&($("#sum-number").text(""),$("#current-number").html(0),M())},V=e=>{const t=A()?z(e):z(0).items[e],a=A()?z(g):z(0).items[g],n=$("#dataset-name");n&&n.html(y[a.datasetName]),$("#place-name").html(a.place?a.place:a.datasetName),$("#current-number").html(a.number),$("#pages").html(g+1+" z "+B()),$(".leaflet-popup").removeClass(`popup-${t.datasetName}`).addClass(`popup-${a.datasetName}`)},Y=()=>{const{_popup:e}=t;e&&R({latlng:e.getLatLng()})},Z=async()=>{v||(i=(i+23)%24,K(i),f||23!==i?I(m[i]):(X(-1),await P(a,l)),Y())},q=async()=>{v||(i=(i+1)%24,K(i),f||0!==i?I(m[i]):(X(1),await P(a,l)),Y())},J=e=>{K(e),I(m[i])},K=e=>{$("#player-time").removeAttr("style"),S(e),ae(),ne(),Q(),Y()},Q=()=>{window.history.pushState("",document.title,window.location.origin+window.location.pathname+`?date=${W()}&time=${i}${b.reduce(((e,t)=>e+"&type[]="+t),"")}`)},U=(e,t=!1)=>(t&&e<10?"0":"")+e+":00",W=()=>`${c.getFullYear()}-${(()=>{const e=c.getMonth()+1;return e>9?`${e}`:`0${e}`})()}-${(()=>{const e=c.getDate();return e>9?`${e}`:`0${e}`})()}`,X=e=>{c.setDate(c.getDate()+e),T(c)},ee=(e,t)=>e.lat===t.lat&&e.lng===t.lng,te=(e,t)=>{let a;return function(){const n=this,o=arguments;clearTimeout(a),a=setTimeout((()=>e.apply(n,o)),t)}},ae=()=>{$(`#time_${i}`).prop("checked",!0),$("#dropdownMenuButtonTime").html(U(i,!0))},ne=()=>{$("#player-time > span").text(U(i)),$("#player-time").attr("class","time hour-"+i)},oe=()=>{$("#date").change((function(){T($(this).val()),P(a,l,0),Q()})),$('#dropdown-time input[type="radio"]').each((function(){$(this).change((function(){K(parseInt($(this).val())),I(m[i])}))})),$('#dropdown-dataset input[type="checkbox"]').each((function(){$(this).change(te((()=>se(this)),1e3))}))},se=async e=>{$(e).prop("checked")?await P(a,l,0):(pe(),m.forEach(((t,a)=>{Object.keys(t).forEach((t=>{t===$(e).val()&&delete m[a][t]})),I(m[i])}))),Y(),Q()},pe=()=>{b=[],$("#dropdown-dataset .dropdown-item").each((function(){const e=$(this).find("input"),t=e[0].value;e[0].checked&&b.push(t),y[t]=$(e).data("dataset-display-name")}))},re=async e=>{let t=!1;$("#dropdown-dataset .dropdown-item").each((function(){const a=$(this).find("input");a[0].value in e?(t=!0,$(this).removeClass("disabled")):($(this).addClass("disabled"),$(a).prop("checked",!1))})),$("#btn-update-heatmap").prop("disabled",!t)},le=(e,t)=>{setTimeout((()=>{e(v),v&&le(e,t)}),t)},ie=(e=1e3)=>{v++,le((()=>le((e=>ue(e)),e)))},ce=(e=1e3)=>{v--,le((()=>le((e=>ue(e)))),e)},ue=e=>{e?de():me()},de=()=>{$("#player-time > .spinner-border").removeClass("d-none"),$("#player-time > span").text("")},me=()=>{$("#player-time > .spinner-border").addClass("d-none"),ne()};e.exports={initDatepicker:e=>{var t="";$.ajax({type:"GET",url:e,success:function(e){t=String(e).split(",")}}).then((function(){$("#date").datepicker({format:"yyyy-mm-dd",language:"cs",beforeShowDay:function(e){return t.indexOf((e=>{var t=String(e.getDate()),a=String(e.getMonth()+1);return 1===t.length&&(t="0"+t),1===a.length&&(a="0"+a),e.getFullYear()+"-"+a+"-"+t})(e))<0?{enabled:!1,tooltip:"Žádná data"}:{enabled:!0}},autoclose:!0})}))},initLocationsMenu:()=>{const e=$(".locations"),t="show";$(window).width()<=480?e.removeClass(t):e.addClass(t)},initMap:()=>{s=localStorage.getItem("lat")||s,p=localStorage.getItem("lng")||p,r=localStorage.getItem("zoom")||r,t=L.map("heatmap").setView([s,p],r),L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:"",maxZoom:19}).addTo(t),t.on("click",(function(e){R(e)}))},onDocumentReady:function(){$("#dropdown-dataset").on("click",(function(e){e.stopPropagation()})),$("#btn-update-heatmap").prop("name",""),S(),T(),oe(),$(document).keydown((function(e){const{which:t}=e;37===t?(Z(),e.preventDefault()):39===t&&(q(),e.preventDefault())}))},checkDataSetsAvailability:e=>{$.ajax({type:"POST",url:e+"/"+W(),success:function(e){re(e)}})},loadCurrentTimeHeatmap:P,dragTimeline:()=>{const e=$("#player-time"),t=e.offset().left-e.parent().offset().left;if(t>=0&&t<=e.parent().width()){const a=Math.round(t/26);a!==i&&(e.attr("class","time hour-"+a),$("#player-time span").html(U(a)),J(a))}},setPreviousPageInPopup:()=>{const e=B(),t=g;g=(g+e-1)%e,V(t)},setNextPageInPopup:()=>{const e=B(),t=g;g=(g+1)%e,V(t)},previous:Z,next:q,toggleDayLock:()=>{f=!f,$("#player-date").toggleClass("lock")},changeAnimationState:()=>{const e=$("#animate-btn");(d=!d)?(e.removeClass("play").addClass("pause"),u=setInterval((function(){q()}),800)):(clearTimeout(u),e.removeClass("pause").addClass("play"))},onChangeHour:J,setMapView:function(e,a,n){localStorage.setItem("lat",e),localStorage.setItem("lng",a),localStorage.setItem("zoom",n),t.setView([e,a],n)}}}},t={};return function a(n){if(t[n])return t[n].exports;var o=t[n]={exports:{}};return e[n](o,o.exports,a),o.exports}(6157)})();
\ No newline at end of file
diff --git a/website/public/js/index.bundle.js.LICENSE.txt b/website/public/js/index.bundle.js.LICENSE.txt
new file mode 100644
index 0000000..7cbde4f
--- /dev/null
+++ b/website/public/js/index.bundle.js.LICENSE.txt
@@ -0,0 +1,3 @@
+/*!**********************************!*\
+  !*** ./public/js/zcu-heatmap.js ***!
+  \**********************************/
diff --git a/website/public/js/index.js b/website/public/js/index.js
new file mode 100644
index 0000000..0b2c62a
--- /dev/null
+++ b/website/public/js/index.js
@@ -0,0 +1,902 @@
+/* global L */
+/* global $ */
+
+var mymap
+var heatmapLayer = null
+var markersLayer = null
+
+// values for arrow keys
+const arrowKeyLEFT = 37
+const arrowKeyRIGHT = 39
+
+var startX = 49.7248
+var startY = 13.3521
+var startZoom = 17
+
+var dataSourceRoute
+let positionsSourceRoute
+
+let currentTime
+
+let currentDate
+
+var timer
+var isAnimationRunning = false
+var data = []
+
+//
+// info = {
+//  DATASETNAME: {
+//    items: Array,
+//    number: Number,
+//    datasetName: String
+// }
+// }
+//
+var info = []
+let currentPageInPopup = 0
+
+// dictionary for names of datasets
+const datasetDictNameDisplayName = {}
+var datasetSelected = []
+
+// data only for one day
+let lockedDay = false
+
+// loading information for async operations
+let loading = 0
+
+// default loader showup delay
+const defaultLoaderDelay = 1000
+
+// marks for all datasets
+const dataSourceMarks = {}
+
+const globalMarkersHolder = {}
+// all marker from which popup was removed
+// contains: {key:[L.circle,L.pupup]}
+// key: x and y, x + '' + y string
+let globalMarkersChanged = {}
+
+const globalPopup = {
+  coord: {
+    lat: 0,
+    lng: 0
+  },
+  _popup: null
+}
+
+
+
+
+function onDocumentReady() {
+  $('#dropdown-dataset').on('click', function (e) {
+    e.stopPropagation()
+  })
+
+  $('#btn-update-heatmap').prop('name', '')
+  changeCurrentTime()
+  changeCurrentDate()
+  onValueChangeRegister()
+  onArrowLeftRightKeysDownRegister()
+}
+
+
+
+
+/* ------------ DATA FETCHERS ------------ */
+
+const fetchByNameDate = async (baseRoute, name, date, currentTime) => {
+  const headers = new Headers()
+  const myRequest = new Request(baseRoute + '/' + name + '/' + date + '/' + currentTime, {
+    method: 'GET',
+    headers: headers
+  })
+  const beforeJson = await fetch(myRequest)
+
+  return beforeJson.json()
+}
+
+const fetchDataSourceMarks = async (positionRoute, datasetName) => {
+  const headers = new Headers()
+  const myRequest = new Request(positionRoute + '/' + datasetName, {
+    method: 'GET',
+    headers: headers
+  })
+  const beforeJson = await fetch(myRequest)
+
+  return beforeJson.json()
+}
+
+async function preload(time, change, date) {
+  loadingY()
+
+  for (let nTime = time + change; nTime >= 0 && nTime <= 23; nTime = nTime + change) {
+    if (!data[nTime]) {
+      data[nTime] = {}
+    }
+
+    datasetSelected.forEach(async (datasetName) => {
+      if (!data[nTime][datasetName]) {
+        data[nTime][datasetName] = await fetchByNameDate(dataSourceRoute, datasetName, date, nTime)
+      }
+    })
+  }
+
+  loadingN()
+}
+
+/**
+ * Load and display heatmap layer for current data
+ * 
+ * @param {string} opendataRoute route to dataset source
+ * @param {string} positionsRoute  route to dataset postitions source
+ */
+const loadCurrentTimeHeatmap = async (opendataRoute, positionsRoute, loaderDelay = defaultLoaderDelay) => {
+  loadCheckboxDatasetNameData()
+
+  dataSourceRoute = opendataRoute
+  positionsSourceRoute = positionsRoute
+  const allPromises = []
+  data[currentTime] = {}
+
+  const dataSelectedHandler = async (datasetName) => {
+    if (!(datasetName in dataSourceMarks)) {
+      dataSourceMarks[datasetName] = await fetchDataSourceMarks(positionsRoute, datasetName)
+    }
+
+    const datasetData = await fetchByNameDate(dataSourceRoute, datasetName, currentDateToString(), currentTime)
+    data[currentTime][datasetName] = datasetData
+  }
+  datasetSelected.forEach((datasetName) => {
+    allPromises.push(dataSelectedHandler(datasetName))
+  })
+
+  loadingY(loaderDelay)
+
+  await Promise.all(allPromises).then(
+    () => {
+      loadingN(0)
+      drawMapMarkers(dataSourceMarks)
+      drawHeatmap(data[currentTime])
+
+      preload(currentTime, 1, currentDateToString())
+      preload(currentTime, -1, currentDateToString())
+    }
+  )
+}
+
+/**
+ * Checks dataset availibility
+ * @param {string} route authority for datasets availibility checks
+ */
+const checkDataSetsAvailability = (route) => {
+  $.ajax({
+    type: 'POST',
+    // Todo it might be good idea to change db collections format
+    url: route + '/' + currentDateToString(),
+    success: function (result) {
+      updateAvailableDataSets(result)
+    }
+  })
+}
+
+
+
+
+/* ------------ MAP ------------ */
+
+/**
+ * Initialize leaflet map on start position which can be default or set based on user action
+ */
+const initMap = () => {
+  startX = localStorage.getItem('lat') || startX
+  startY = localStorage.getItem('lng') || startY
+  startZoom = localStorage.getItem('zoom') || startZoom
+
+  mymap = L.map('heatmap').setView([startX, startY], startZoom)
+
+  L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
+    attribution: '',
+    maxZoom: 19
+  }).addTo(mymap)
+
+  mymap.on('click', function (e) { showInfo(e) })
+}
+
+function setMapView(latitude, longitude, zoom) {
+  localStorage.setItem('lat', latitude)
+  localStorage.setItem('lng', longitude)
+  localStorage.setItem('zoom', zoom)
+
+  mymap.setView([latitude, longitude], zoom)
+}
+
+const drawHeatmap = (dataRaw) => {
+  const dataDict = dataRaw
+  const mergedPoints = []
+  let max = 0
+
+  if (Object.keys(globalMarkersChanged).length) {
+    Object.keys(globalMarkersChanged).forEach(function (key) {
+      globalMarkersChanged[key][0].bindPopup(globalMarkersChanged[key][1])
+    })
+    globalMarkersChanged = {}
+  }
+
+  Object.keys(dataDict).forEach((key) => {
+    const data = dataDict[key]
+    max = Math.max(max, data.max)
+
+    if (data != null) {
+      // Bind back popups for markers (we dont know if there is any data for this marker or not)
+      const points = data.items.map((point) => {
+        const { x, y, number } = point
+        const key = x + '' + y
+        const holder = globalMarkersHolder[key]
+        if (!globalMarkersChanged[key] && number) {
+          // There is data for this marker => unbind popup with zero value
+          holder[0] = holder[0].unbindPopup()
+          globalMarkersChanged[key] = holder
+        }
+
+        return [x, y, number]
+      })
+      mergedPoints.push(...points)
+    } else {
+      if (heatmapLayer != null) {
+        mymap.removeLayer(heatmapLayer)
+      }
+    }
+  })
+
+  if (heatmapLayer != null) {
+    mymap.removeLayer(heatmapLayer)
+  }
+
+  if (mergedPoints.length) {
+    heatmapLayer = L.heatLayer(mergedPoints, { max: max, minOpacity: 0.5, radius: 35, blur: 30 }).addTo(mymap)
+  }
+
+  // timto vyresen bug #8191 - TODO: znamena to, ze muzeme smazat volani updatePopup() ve funkcich, kde se nejdriv vola drawHeatmap() a pak updatePopup()?
+  updatePopup()
+}
+
+const drawMapMarkers = (data) => {
+  if (markersLayer != null) {
+    mymap.removeLayer(markersLayer)
+  }
+
+  markersLayer = L.layerGroup()
+
+  Object.keys(data).forEach(key_ => {
+    for (var key in data[key_]) {
+      const { x, y, name } = data[key_][key]
+      const pop =
+        prepareLayerPopUp(x, y, 1, `popup-${key_}`)
+          .setContent(getPopupContent(datasetDictNameDisplayName[key_], name, 0, 0, 1, 1))
+      const newCircle =
+        L.circle([x, y], { radius: 2, fillOpacity: 0.8, color: '#004fb3', fillColor: '#004fb3', bubblingMouseEvents: true })
+          .bindPopup(pop)
+      globalMarkersHolder[x + '' + y] = [newCircle, pop] // add new marker to global holders
+      markersLayer.addLayer(
+        newCircle
+      )
+    }
+  })
+
+  markersLayer.setZIndex(-1).addTo(mymap)
+}
+
+
+
+
+/* ------------ GUI ------------ */
+
+const changeCurrentTime = (time = null) => {
+  if (time !== null) {
+    currentTime = time
+  } else {
+    currentTime = parseInt($('#dropdown-time input[type="radio"]:checked').val())
+  }
+}
+
+const changeCurrentDate = (date = null) => {
+  const dateInput = $('#date')
+  currentDate = new Date(date ? date : dateInput.val())
+
+  dateInput.val(currentDateToString())
+  $('#player-date span').html(`${currentDate.getDate()}. ${currentDate.getMonth() + 1}. ${currentDate.getFullYear()}`)
+
+  data = []
+}
+
+const toggleDayLock = () => {
+  lockedDay = !lockedDay
+  $('#player-date').toggleClass('lock')
+}
+
+
+
+
+/* ------------ POPUPs ------------ */
+
+const setGlobalPopupContent = (content) => {
+  globalPopup._popup.setContent(content)
+  globalPopup._popup.openOn(mymap)
+}
+
+const getPaginationButtonsInPopup = (currentPage, countPages) => ({
+  previousButton: '<button type="button" id="btn-popup-previous-page" onclick="js.setPreviousPageInPopup()"></button>',
+  pagesList: `<p id="pages">${currentPage} z ${countPages}</p>`,
+  nextButton: '<button type="button" id="btn-popup-next-page" class="next" onclick="js.setNextPageInPopup()"></button>'
+})
+
+const disablePopupPaginationButtons = () => {
+  $('#btn-popup-previous-page').prop('disabled', true)
+  $('#btn-popup-next-page').prop('disabled', true)
+  $('.popup-pagination').hide()
+}
+
+const generatePopupPaginationButtons = (controls) => {
+  return `<div class="popup-pagination">${controls ? controls.reduce((sum, item) => sum + item, '') : ''}</div>`
+}
+
+const getCountPagesInPopup = () => {
+  const infoKeys = Object.keys(info)
+
+  if (infoKeys.length === 1) {
+    // return number of records in one dataset (one dataset in area)
+    return info[infoKeys[0]].items.length
+  }
+  // return number of datasets (agregation of all datasets in area)
+  return infoKeys.length
+}
+
+const getPopupDataOnPage = (pageInPopup) => {
+  const keys = Object.keys(info)
+  return info[keys[pageInPopup]]
+}
+
+const setPreviousPageInPopup = () => {
+  const countPagesInPopup = getCountPagesInPopup()
+  const page = currentPageInPopup
+
+  currentPageInPopup = (currentPageInPopup + countPagesInPopup - 1) % countPagesInPopup
+  setPageContentInPopup(page)
+}
+
+const setNextPageInPopup = () => {
+  const countPagesInPopup = getCountPagesInPopup()
+  const page = currentPageInPopup
+
+  currentPageInPopup = (currentPageInPopup + 1) % countPagesInPopup
+  setPageContentInPopup(page)
+}
+
+const genMultipleDatasetsPopUp = (sum, currentPage, countPages, datasetName) => {
+  const popupHeader = `<strong id="dataset-name">${datasetName}</strong>`
+  const popupData = `<div id="place-intesity"><span id="current-number">${sum}</span></div>`
+  const { previousButton, nextButton, pagesList } = getPaginationButtonsInPopup(currentPage, countPages)
+
+  return `
+  ${popupHeader}
+  ${popupData}
+  ${generatePopupPaginationButtons([previousButton, pagesList, nextButton])}
+  `
+}
+
+const prepareLayerPopUp = (lat, lng, num, className) => L.popup({
+  autoPan: false,
+  className: className
+}).setLatLng([lat / num, lng / num])
+
+const getPopupContent = (datasetName, placeName, currentCount, sum, currentPage, countPages) => {
+  const popupHeader = `
+    <strong>${datasetName}</strong>
+    <div id="place-name">${placeName}</div>`
+  const popupData = `
+    <div id="place-intesity">
+      <span id="current-number">${currentCount}</span>
+      <span id="sum-number">${(sum && sum !== Number(currentCount)) ? '/' + sum : ''}</span>
+    </div>`
+  const { previousButton, nextButton, pagesList } = getPaginationButtonsInPopup(currentPage, countPages)
+
+  return `
+  ${popupHeader}
+  ${popupData}
+  ${generatePopupPaginationButtons(countPages > 1 ? [previousButton, pagesList, nextButton] : null)}
+  `
+}
+
+const areMultipleDatasetsInRadius = () => {
+  return Object.keys(info).length > 1
+}
+
+const setPopupDatasetClassName = (datasetName) => {
+  const popup = $('.leaflet-popup')
+
+  popup.removeClass(function (index, css) {
+    return (css.match(/(^|\s)popup-\S+/g) || []).join(' ');
+  })
+  popup.addClass('popup-' + datasetName)
+}
+
+const showInfo = (e) => {
+  info = []
+  currentPageInPopup = 0
+
+  // https://wiki.openstreetmap.org/wiki/Zoom_levels
+  // Todo change to variable - it is used in heatmap init
+  const stile = 40075016.686 * Math.cos(startX) / Math.pow(2, mymap.getZoom())
+  const radius = 25 * stile / 256
+
+  let i = 0
+  let lat = 0
+  let lng = 0
+
+  let total = 0
+
+  const datasetsInRadius = {}
+  const eventCoord = {
+    lng: e.latlng.lng,
+    lat: e.latlng.lat
+  }
+
+  Object.keys(data[currentTime]).forEach(key => {
+    const namedData = data[currentTime][key]
+
+    namedData.items.forEach(element => {
+      if (e.latlng.distanceTo(new L.LatLng(element.x, element.y)) < radius) {
+        lat += element.x
+        lng += element.y
+        info[i] = { place: element.place, number: element.number, datasetName: key }
+        total += parseInt(element.number)
+        i++
+        datasetsInRadius[key] = true
+      }
+    })
+  })
+
+  // Process info for more then one dataset
+  info = info.reduce((acc, item) => {
+    if (!acc[item.datasetName]) {
+      acc[item.datasetName] = {
+        items: [],
+        number: 0,
+        datasetName: item.datasetName
+      }
+    }
+
+    acc[item.datasetName].items.push(item)
+    acc[item.datasetName].number += Number(item.number)
+    return acc
+  }, {})
+
+  const countDatasets = Object.keys(datasetsInRadius).length
+
+  if (!countDatasets) {
+    if (mymap._popup) {
+      $('#sum-number').text('')
+      $('#current-number').html(0)
+      disablePopupPaginationButtons()
+    }
+
+    return
+  }
+
+  if (countDatasets === 1) {
+    const markersInRadius = getPopupDataOnPage(0)
+    const popupPagesData = markersInRadius.items
+    const { place, number } = popupPagesData[currentPageInPopup]
+
+    if (!globalPopup._popup || !areCoordsIdentical(globalPopup.coord, eventCoord)) {
+      globalPopup._popup = prepareLayerPopUp(lat, lng, i, `popup-${markersInRadius.datasetName}`)
+      globalPopup.coord = eventCoord
+    }
+    else {
+      setPopupDatasetClassName(markersInRadius.datasetName)
+    }
+
+    setGlobalPopupContent(getPopupContent(datasetDictNameDisplayName[markersInRadius.datasetName], place, number, total, 1, popupPagesData.length))
+
+    if (popupPagesData.length === 1) {
+      disablePopupPaginationButtons()
+    }
+  } else {
+    const { datasetName, number } = getPopupDataOnPage(currentPageInPopup)
+
+    if (!globalPopup._popup || !areCoordsIdentical(globalPopup.coord, eventCoord)) {
+      globalPopup._popup = prepareLayerPopUp(lat, lng, i, `popup-${datasetName}`)
+      globalPopup.coord = eventCoord
+    }
+    else {
+      setPopupDatasetClassName(datasetName)
+    }
+
+    setGlobalPopupContent(genMultipleDatasetsPopUp(number, 1, getCountPagesInPopup(), datasetDictNameDisplayName[datasetName]))
+  }
+}
+
+const setPageContentInPopup = (page) => {
+  const previousPageData = areMultipleDatasetsInRadius() ? getPopupDataOnPage(page) : getPopupDataOnPage(0).items[page]
+  const currentPageData = areMultipleDatasetsInRadius() ? getPopupDataOnPage(currentPageInPopup) : getPopupDataOnPage(0).items[currentPageInPopup]
+  const datasetName = $('#dataset-name')
+
+  if (datasetName) {
+    datasetName.html(datasetDictNameDisplayName[currentPageData.datasetName])
+  }
+
+  $('#place-name').html(currentPageData.place ? currentPageData.place : currentPageData.datasetName)
+  $('#current-number').html(currentPageData.number)
+  $('#pages').html(currentPageInPopup + 1 + ' z ' + getCountPagesInPopup())
+
+  $('.leaflet-popup').removeClass(`popup-${previousPageData.datasetName}`).addClass(`popup-${currentPageData.datasetName}`)
+}
+
+const updatePopup = () => {
+  const { _popup } = mymap
+
+  if (_popup) {
+    showInfo({
+      latlng: _popup.getLatLng()
+    })
+  }
+}
+
+
+
+
+/* ------------ ANIMATION ------------ */
+
+/**
+ * Change animation start from playing to stopped or the other way round
+ */
+const changeAnimationState = () => {
+  const btnAnimate = $('#animate-btn')
+
+  isAnimationRunning = !isAnimationRunning
+
+  if (isAnimationRunning) {
+    btnAnimate.removeClass('play').addClass('pause')
+    timer = setInterval(function () { next() }, 800)
+  } else {
+    clearTimeout(timer)
+    btnAnimate.removeClass('pause').addClass('play')
+  }
+}
+
+const previous = async () => {
+  if (loading) {
+    return
+  }
+
+  currentTime = (currentTime + 23) % 24
+  changeHour(currentTime)
+
+  if (!lockedDay && currentTime === 23) {
+    addDayToCurrentDate(-1)
+    await loadCurrentTimeHeatmap(dataSourceRoute, positionsSourceRoute)
+  } else {
+    drawHeatmap(data[currentTime])
+  }
+
+  updatePopup()
+}
+
+const next = async () => {
+  if (loading) {
+    return
+  }
+
+  currentTime = (currentTime + 1) % 24
+  changeHour(currentTime)
+
+  if (!lockedDay && currentTime === 0) {
+    addDayToCurrentDate(1)
+    await loadCurrentTimeHeatmap(dataSourceRoute, positionsSourceRoute)
+  } else {
+    drawHeatmap(data[currentTime])
+  }
+
+  updatePopup()
+}
+
+const onChangeHour = (hour) => {
+  changeHour(hour)
+  drawHeatmap(data[currentTime])
+}
+
+const changeHour = (hour) => {
+  $('#player-time').removeAttr('style')
+  changeCurrentTime(hour)
+  updateHeaderControls()
+  setTimeline()
+  changeUrlParameters()
+  updatePopup()
+}
+
+const dragTimeline = () => {
+  const hourElemWidthPx = 26
+
+  const elem = $('#player-time')
+  const offset = elem.offset().left - elem.parent().offset().left
+
+  if (offset >= 0 && offset <= elem.parent().width()) {
+    const hour = Math.round(offset / hourElemWidthPx)
+
+    if (hour !== currentTime) {
+      elem.attr('class', 'time hour-' + hour)
+      $('#player-time span').html(formatTime(hour))
+
+      onChangeHour(hour)
+    }
+  }
+}
+
+const onArrowLeftRightKeysDownRegister = () => {
+  $(document).keydown(function (e) {
+    const { which } = e
+
+    if (which === arrowKeyLEFT) {
+      previous()
+      e.preventDefault()
+    } else if (which === arrowKeyRIGHT) {
+      next()
+      e.preventDefault()
+    }
+  })
+}
+
+/**
+ * Change browser url based on animation step.
+ */
+const changeUrlParameters = () => {
+  window.history.pushState(
+    '',
+    document.title,
+    window.location.origin + window.location.pathname + `?date=${currentDateToString()}&time=${currentTime}${datasetSelected.reduce((acc, current) => acc + '&type[]=' + current, '')}`
+  )
+}
+
+
+
+
+/* ------------ UTILS ------------ */
+
+const formatTime = (hours, twoDigitsHours = false) => {
+  return ((twoDigitsHours && hours < 10) ? '0' : '') + hours + ':00';
+}
+
+const formatDate = (date) => {
+  var day = String(date.getDate())
+  var month = String(date.getMonth() + 1)
+
+  if (day.length === 1) {
+    day = '0' + day
+  }
+
+  if (month.length === 1) {
+    month = '0' + month
+  }
+
+  // return YYYY-MM-DD
+  return date.getFullYear() + '-' + month + '-' + day
+}
+
+const currentDayToString = () => {
+  const day = currentDate.getDate()
+  return day > 9 ? `${day}` : `0${day}`
+}
+
+const currentMonthToString = () => {
+  const month = currentDate.getMonth() + 1
+  return month > 9 ? `${month}` : `0${month}`
+}
+
+const currentDateToString = () => `${currentDate.getFullYear()}-${currentMonthToString()}-${currentDayToString()}`
+
+const addDayToCurrentDate = (day) => {
+  currentDate.setDate(currentDate.getDate() + day)
+  changeCurrentDate(currentDate)
+}
+
+const areCoordsIdentical = (first, second) => {
+  return first.lat === second.lat && first.lng === second.lng
+}
+
+const debounce = (func, delay) => {
+  let inDebounce
+  return function () {
+    const context = this
+    const args = arguments
+    clearTimeout(inDebounce)
+    inDebounce = setTimeout(() => func.apply(context, args), delay)
+  }
+}
+
+
+
+
+/* ------------ GUI ------------ */
+
+const updateHeaderControls = () => {
+  $(`#time_${currentTime}`).prop('checked', true)
+  $('#dropdownMenuButtonTime').html(formatTime(currentTime, true))
+}
+
+const initDatepicker = (availableDatesSource) => {
+  var availableDates = ''
+
+  $.ajax({
+    type: 'GET',
+    url: availableDatesSource,
+    success: function (result) {
+      availableDates = String(result).split(',')
+    }
+  }).then(function () {
+    $('#date').datepicker({
+      format: 'yyyy-mm-dd',
+      language: 'cs',
+      beforeShowDay: function (date) {
+        if (availableDates.indexOf(formatDate(date)) < 0) {
+          return { enabled: false, tooltip: 'Žádná data' }
+        } else {
+          return { enabled: true }
+        }
+      },
+      autoclose: true
+    })
+  })
+}
+
+const initLocationsMenu = () => {
+  const elmLocationsList = $('.locations')
+  const locationsDisplayClass = 'show'
+
+  if ($(window).width() <= 480) {
+    elmLocationsList.removeClass(locationsDisplayClass)
+  } else {
+    elmLocationsList.addClass(locationsDisplayClass)
+  }
+}
+
+const setTimeline = () => {
+  $('#player-time > span').text(formatTime(currentTime))
+  $('#player-time').attr('class', 'time hour-' + currentTime)
+}
+
+const onValueChangeRegister = () => {
+  $('#date').change(function () {
+    changeCurrentDate($(this).val())
+    loadCurrentTimeHeatmap(dataSourceRoute, positionsSourceRoute, 0)
+    changeUrlParameters()
+  })
+
+  $('#dropdown-time input[type="radio"]').each(function () {
+    $(this).change(function () {
+      changeHour(parseInt($(this).val()))
+      drawHeatmap(data[currentTime])
+    })
+  })
+
+  $('#dropdown-dataset input[type="checkbox"]').each(function () {
+    $(this).change(
+      debounce(() => onCheckboxClicked(this), 1000)
+    )
+  })
+}
+
+const onCheckboxClicked = async (checkbox) => {
+  if ($(checkbox).prop('checked')) {
+    await loadCurrentTimeHeatmap(dataSourceRoute, positionsSourceRoute, 0)
+  } else {
+    loadCheckboxDatasetNameData()
+
+    data.forEach((item, index) => {
+      Object.keys(item).forEach(datasetName => {
+        if (datasetName === $(checkbox).val()) {
+          delete data[index][datasetName]
+        }
+      })
+
+      drawHeatmap(data[currentTime])
+    })
+  }
+
+  updatePopup()
+  changeUrlParameters()
+}
+
+const loadCheckboxDatasetNameData = () => {
+  datasetSelected = []
+
+  $('#dropdown-dataset .dropdown-item').each(function () {
+    const input = $(this).find('input')
+    const inputVal = input[0].value
+
+    if (input[0].checked) {
+      datasetSelected.push(inputVal)
+    }
+
+    datasetDictNameDisplayName[inputVal] = $(input).data('dataset-display-name')
+  })
+}
+
+const updateAvailableDataSets = async (available) => {
+  let leastOneOptionEnabled = false
+
+  $('#dropdown-dataset .dropdown-item').each(function () {
+    const input = $(this).find('input')
+
+    if (!(input[0].value in available)) {
+      $(this).addClass('disabled')
+      $(input).prop('checked', false)
+    } else {
+      leastOneOptionEnabled = true
+      $(this).removeClass('disabled')
+    }
+  })
+
+  $('#btn-update-heatmap').prop('disabled', !leastOneOptionEnabled)
+}
+
+
+
+
+/* ------------ GUI LOADING ------------ */
+
+const loadingCallbackNested = (func, delay) => {
+  setTimeout(() => {
+    func(loading)
+    if (loading) {
+      loadingCallbackNested(func, delay)
+    }
+  }, delay)
+}
+
+const loadingY = (delay = defaultLoaderDelay) => {
+  loading++
+  // check after nms if there is something that is loading
+  loadingCallbackNested(() => loadingCallbackNested((isLoading) => loadingTimeline(isLoading), delay))
+}
+
+const loadingN = (delay = defaultLoaderDelay) => {
+  loading--
+  loadingCallbackNested(() => loadingCallbackNested((isLoading) => loadingTimeline(isLoading)), delay)
+}
+
+const loadingTimeline = (isLoading) => {
+  if (isLoading) {
+    loadingYTimeline()
+  } else {
+    loadingNTimeline()
+  }
+}
+
+const loadingYTimeline = () => {
+  $('#player-time > .spinner-border').removeClass('d-none')
+  $('#player-time > span').text('')
+}
+
+const loadingNTimeline = () => {
+  $('#player-time > .spinner-border').addClass('d-none')
+  setTimeline()
+}
+module.exports = {
+  initDatepicker,
+  initLocationsMenu,
+  initMap,
+  onDocumentReady,
+  checkDataSetsAvailability,
+  loadCurrentTimeHeatmap,
+  dragTimeline,
+  setPreviousPageInPopup,
+  setNextPageInPopup,
+  previous,
+  next,
+  toggleDayLock,
+  changeAnimationState,
+  onChangeHour,
+  setMapView
+}
\ No newline at end of file
diff --git a/website/public/js/polyfills.bundle.js b/website/public/js/polyfills.bundle.js
new file mode 100644
index 0000000..3e6d79b
--- /dev/null
+++ b/website/public/js/polyfills.bundle.js
@@ -0,0 +1 @@
+var js;js=(()=>{var t={6124:(t,r,e)=>{"use strict";if(e(1934),e(5666),e(7694),e.g._babelPolyfill)throw new Error("only one instance of babel-polyfill is allowed");function n(t,r,e){t[r]||Object.defineProperty(t,r,{writable:!0,configurable:!0,value:e})}e.g._babelPolyfill=!0,n(String.prototype,"padLeft","".padStart),n(String.prototype,"padRight","".padEnd),"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach((function(t){[][t]&&n(Array,t,Function.call.bind([][t]))}))},7694:(t,r,e)=>{e(1761),t.exports=e(5645).RegExp.escape},4963:t=>{t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},3365:(t,r,e)=>{var n=e(2032);t.exports=function(t,r){if("number"!=typeof t&&"Number"!=n(t))throw TypeError(r);return+t}},7722:(t,r,e)=>{var n=e(6314)("unscopables"),i=Array.prototype;null==i[n]&&e(7728)(i,n,{}),t.exports=function(t){i[n][t]=!0}},6793:(t,r,e)=>{"use strict";var n=e(4496)(!0);t.exports=function(t,r,e){return r+(e?n(t,r).length:1)}},3328:t=>{t.exports=function(t,r,e,n){if(!(t instanceof r)||void 0!==n&&n in t)throw TypeError(e+": incorrect invocation!");return t}},7007:(t,r,e)=>{var n=e(5286);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},5216:(t,r,e)=>{"use strict";var n=e(508),i=e(2337),o=e(875);t.exports=[].copyWithin||function(t,r){var e=n(this),u=o(e.length),a=i(t,u),s=i(r,u),c=arguments.length>2?arguments[2]:void 0,f=Math.min((void 0===c?u:i(c,u))-s,u-a),l=1;for(s<a&&a<s+f&&(l=-1,s+=f-1,a+=f-1);f-- >0;)s in e?e[a]=e[s]:delete e[a],a+=l,s+=l;return e}},6852:(t,r,e)=>{"use strict";var n=e(508),i=e(2337),o=e(875);t.exports=function(t){for(var r=n(this),e=o(r.length),u=arguments.length,a=i(u>1?arguments[1]:void 0,e),s=u>2?arguments[2]:void 0,c=void 0===s?e:i(s,e);c>a;)r[a++]=t;return r}},9490:(t,r,e)=>{var n=e(3531);t.exports=function(t,r){var e=[];return n(t,!1,e.push,e,r),e}},9315:(t,r,e)=>{var n=e(2110),i=e(875),o=e(2337);t.exports=function(t){return function(r,e,u){var a,s=n(r),c=i(s.length),f=o(u,c);if(t&&e!=e){for(;c>f;)if((a=s[f++])!=a)return!0}else for(;c>f;f++)if((t||f in s)&&s[f]===e)return t||f||0;return!t&&-1}}},50:(t,r,e)=>{var n=e(741),i=e(9797),o=e(508),u=e(875),a=e(6886);t.exports=function(t,r){var e=1==t,s=2==t,c=3==t,f=4==t,l=6==t,h=5==t||l,p=r||a;return function(r,a,v){for(var d,y,g=o(r),b=i(g),m=n(a,v,3),w=u(b.length),x=0,S=e?p(r,w):s?p(r,0):void 0;w>x;x++)if((h||x in b)&&(y=m(d=b[x],x,g),t))if(e)S[x]=y;else if(y)switch(t){case 3:return!0;case 5:return d;case 6:return x;case 2:S.push(d)}else if(f)return!1;return l?-1:c||f?f:S}}},7628:(t,r,e)=>{var n=e(4963),i=e(508),o=e(9797),u=e(875);t.exports=function(t,r,e,a,s){n(r);var c=i(t),f=o(c),l=u(c.length),h=s?l-1:0,p=s?-1:1;if(e<2)for(;;){if(h in f){a=f[h],h+=p;break}if(h+=p,s?h<0:l<=h)throw TypeError("Reduce of empty array with no initial value")}for(;s?h>=0:l>h;h+=p)h in f&&(a=r(a,f[h],h,c));return a}},2736:(t,r,e)=>{var n=e(5286),i=e(4302),o=e(6314)("species");t.exports=function(t){var r;return i(t)&&("function"!=typeof(r=t.constructor)||r!==Array&&!i(r.prototype)||(r=void 0),n(r)&&null===(r=r[o])&&(r=void 0)),void 0===r?Array:r}},6886:(t,r,e)=>{var n=e(2736);t.exports=function(t,r){return new(n(t))(r)}},4398:(t,r,e)=>{"use strict";var n=e(4963),i=e(5286),o=e(7242),u=[].slice,a={},s=function(t,r,e){if(!(r in a)){for(var n=[],i=0;i<r;i++)n[i]="a["+i+"]";a[r]=Function("F,a","return new F("+n.join(",")+")")}return a[r](t,e)};t.exports=Function.bind||function(t){var r=n(this),e=u.call(arguments,1),a=function(){var n=e.concat(u.call(arguments));return this instanceof a?s(r,n.length,n):o(r,n,t)};return i(r.prototype)&&(a.prototype=r.prototype),a}},1488:(t,r,e)=>{var n=e(2032),i=e(6314)("toStringTag"),o="Arguments"==n(function(){return arguments}());t.exports=function(t){var r,e,u;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(e=function(t,r){try{return t[r]}catch(t){}}(r=Object(t),i))?e:o?n(r):"Object"==(u=n(r))&&"function"==typeof r.callee?"Arguments":u}},2032:t=>{var r={}.toString;t.exports=function(t){return r.call(t).slice(8,-1)}},9824:(t,r,e)=>{"use strict";var n=e(9275).f,i=e(2503),o=e(4408),u=e(741),a=e(3328),s=e(3531),c=e(2923),f=e(5436),l=e(2974),h=e(7057),p=e(4728).fastKey,v=e(1616),d=h?"_s":"size",y=function(t,r){var e,n=p(r);if("F"!==n)return t._i[n];for(e=t._f;e;e=e.n)if(e.k==r)return e};t.exports={getConstructor:function(t,r,e,c){var f=t((function(t,n){a(t,f,r,"_i"),t._t=r,t._i=i(null),t._f=void 0,t._l=void 0,t[d]=0,null!=n&&s(n,e,t[c],t)}));return o(f.prototype,{clear:function(){for(var t=v(this,r),e=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete e[n.i];t._f=t._l=void 0,t[d]=0},delete:function(t){var e=v(this,r),n=y(e,t);if(n){var i=n.n,o=n.p;delete e._i[n.i],n.r=!0,o&&(o.n=i),i&&(i.p=o),e._f==n&&(e._f=i),e._l==n&&(e._l=o),e[d]--}return!!n},forEach:function(t){v(this,r);for(var e,n=u(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(n(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!y(v(this,r),t)}}),h&&n(f.prototype,"size",{get:function(){return v(this,r)[d]}}),f},def:function(t,r,e){var n,i,o=y(t,r);return o?o.v=e:(t._l=o={i:i=p(r,!0),k:r,v:e,p:n=t._l,n:void 0,r:!1},t._f||(t._f=o),n&&(n.n=o),t[d]++,"F"!==i&&(t._i[i]=o)),t},getEntry:y,setStrong:function(t,r,e){c(t,r,(function(t,e){this._t=v(t,r),this._k=e,this._l=void 0}),(function(){for(var t=this,r=t._k,e=t._l;e&&e.r;)e=e.p;return t._t&&(t._l=e=e?e.n:t._t._f)?f(0,"keys"==r?e.k:"values"==r?e.v:[e.k,e.v]):(t._t=void 0,f(1))}),e?"entries":"values",!e,!0),l(r)}}},6132:(t,r,e)=>{var n=e(1488),i=e(9490);t.exports=function(t){return function(){if(n(this)!=t)throw TypeError(t+"#toJSON isn't generic");return i(this)}}},3657:(t,r,e)=>{"use strict";var n=e(4408),i=e(4728).getWeak,o=e(7007),u=e(5286),a=e(3328),s=e(3531),c=e(50),f=e(9181),l=e(1616),h=c(5),p=c(6),v=0,d=function(t){return t._l||(t._l=new y)},y=function(){this.a=[]},g=function(t,r){return h(t.a,(function(t){return t[0]===r}))};y.prototype={get:function(t){var r=g(this,t);if(r)return r[1]},has:function(t){return!!g(this,t)},set:function(t,r){var e=g(this,t);e?e[1]=r:this.a.push([t,r])},delete:function(t){var r=p(this.a,(function(r){return r[0]===t}));return~r&&this.a.splice(r,1),!!~r}},t.exports={getConstructor:function(t,r,e,o){var c=t((function(t,n){a(t,c,r,"_i"),t._t=r,t._i=v++,t._l=void 0,null!=n&&s(n,e,t[o],t)}));return n(c.prototype,{delete:function(t){if(!u(t))return!1;var e=i(t);return!0===e?d(l(this,r)).delete(t):e&&f(e,this._i)&&delete e[this._i]},has:function(t){if(!u(t))return!1;var e=i(t);return!0===e?d(l(this,r)).has(t):e&&f(e,this._i)}}),c},def:function(t,r,e){var n=i(o(r),!0);return!0===n?d(t).set(r,e):n[t._i]=e,t},ufstore:d}},5795:(t,r,e)=>{"use strict";var n=e(3816),i=e(2985),o=e(7234),u=e(4408),a=e(4728),s=e(3531),c=e(3328),f=e(5286),l=e(4253),h=e(7462),p=e(2943),v=e(266);t.exports=function(t,r,e,d,y,g){var b=n[t],m=b,w=y?"set":"add",x=m&&m.prototype,S={},_=function(t){var r=x[t];o(x,t,"delete"==t||"has"==t?function(t){return!(g&&!f(t))&&r.call(this,0===t?0:t)}:"get"==t?function(t){return g&&!f(t)?void 0:r.call(this,0===t?0:t)}:"add"==t?function(t){return r.call(this,0===t?0:t),this}:function(t,e){return r.call(this,0===t?0:t,e),this})};if("function"==typeof m&&(g||x.forEach&&!l((function(){(new m).entries().next()})))){var E=new m,O=E[w](g?{}:-0,1)!=E,P=l((function(){E.has(1)})),A=h((function(t){new m(t)})),M=!g&&l((function(){for(var t=new m,r=5;r--;)t[w](r,r);return!t.has(-0)}));A||((m=r((function(r,e){c(r,m,t);var n=v(new b,r,m);return null!=e&&s(e,y,n[w],n),n}))).prototype=x,x.constructor=m),(P||M)&&(_("delete"),_("has"),y&&_("get")),(M||O)&&_(w),g&&x.clear&&delete x.clear}else m=d.getConstructor(r,t,y,w),u(m.prototype,e),a.NEED=!0;return p(m,t),S[t]=m,i(i.G+i.W+i.F*(m!=b),S),g||d.setStrong(m,t,y),m}},5645:t=>{var r=t.exports={version:"2.6.12"};"number"==typeof __e&&(__e=r)},2811:(t,r,e)=>{"use strict";var n=e(9275),i=e(681);t.exports=function(t,r,e){r in t?n.f(t,r,i(0,e)):t[r]=e}},741:(t,r,e)=>{var n=e(4963);t.exports=function(t,r,e){if(n(t),void 0===r)return t;switch(e){case 1:return function(e){return t.call(r,e)};case 2:return function(e,n){return t.call(r,e,n)};case 3:return function(e,n,i){return t.call(r,e,n,i)}}return function(){return t.apply(r,arguments)}}},3537:(t,r,e)=>{"use strict";var n=e(4253),i=Date.prototype.getTime,o=Date.prototype.toISOString,u=function(t){return t>9?t:"0"+t};t.exports=n((function(){return"0385-07-25T07:06:39.999Z"!=o.call(new Date(-50000000000001))}))||!n((function(){o.call(new Date(NaN))}))?function(){if(!isFinite(i.call(this)))throw RangeError("Invalid time value");var t=this,r=t.getUTCFullYear(),e=t.getUTCMilliseconds(),n=r<0?"-":r>9999?"+":"";return n+("00000"+Math.abs(r)).slice(n?-6:-4)+"-"+u(t.getUTCMonth()+1)+"-"+u(t.getUTCDate())+"T"+u(t.getUTCHours())+":"+u(t.getUTCMinutes())+":"+u(t.getUTCSeconds())+"."+(e>99?e:"0"+u(e))+"Z"}:o},870:(t,r,e)=>{"use strict";var n=e(7007),i=e(1689),o="number";t.exports=function(t){if("string"!==t&&t!==o&&"default"!==t)throw TypeError("Incorrect hint");return i(n(this),t!=o)}},1355:t=>{t.exports=function(t){if(null==t)throw TypeError("Can't call method on  "+t);return t}},7057:(t,r,e)=>{t.exports=!e(4253)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},2457:(t,r,e)=>{var n=e(5286),i=e(3816).document,o=n(i)&&n(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},4430:t=>{t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},5541:(t,r,e)=>{var n=e(7184),i=e(4548),o=e(4682);t.exports=function(t){var r=n(t),e=i.f;if(e)for(var u,a=e(t),s=o.f,c=0;a.length>c;)s.call(t,u=a[c++])&&r.push(u);return r}},2985:(t,r,e)=>{var n=e(3816),i=e(5645),o=e(7728),u=e(7234),a=e(741),s=function(t,r,e){var c,f,l,h,p=t&s.F,v=t&s.G,d=t&s.S,y=t&s.P,g=t&s.B,b=v?n:d?n[r]||(n[r]={}):(n[r]||{}).prototype,m=v?i:i[r]||(i[r]={}),w=m.prototype||(m.prototype={});for(c in v&&(e=r),e)l=((f=!p&&b&&void 0!==b[c])?b:e)[c],h=g&&f?a(l,n):y&&"function"==typeof l?a(Function.call,l):l,b&&u(b,c,l,t&s.U),m[c]!=l&&o(m,c,h),y&&w[c]!=l&&(w[c]=l)};n.core=i,s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,t.exports=s},8852:(t,r,e)=>{var n=e(6314)("match");t.exports=function(t){var r=/./;try{"/./"[t](r)}catch(e){try{return r[n]=!1,!"/./"[t](r)}catch(t){}}return!0}},4253:t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},8082:(t,r,e)=>{"use strict";e(8269);var n=e(7234),i=e(7728),o=e(4253),u=e(1355),a=e(6314),s=e(1165),c=a("species"),f=!o((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")})),l=function(){var t=/(?:)/,r=t.exec;t.exec=function(){return r.apply(this,arguments)};var e="ab".split(t);return 2===e.length&&"a"===e[0]&&"b"===e[1]}();t.exports=function(t,r,e){var h=a(t),p=!o((function(){var r={};return r[h]=function(){return 7},7!=""[t](r)})),v=p?!o((function(){var r=!1,e=/a/;return e.exec=function(){return r=!0,null},"split"===t&&(e.constructor={},e.constructor[c]=function(){return e}),e[h](""),!r})):void 0;if(!p||!v||"replace"===t&&!f||"split"===t&&!l){var d=/./[h],y=e(u,h,""[t],(function(t,r,e,n,i){return r.exec===s?p&&!i?{done:!0,value:d.call(r,e,n)}:{done:!0,value:t.call(e,r,n)}:{done:!1}})),g=y[0],b=y[1];n(String.prototype,t,g),i(RegExp.prototype,h,2==r?function(t,r){return b.call(t,this,r)}:function(t){return b.call(t,this)})}}},3218:(t,r,e)=>{"use strict";var n=e(7007);t.exports=function(){var t=n(this),r="";return t.global&&(r+="g"),t.ignoreCase&&(r+="i"),t.multiline&&(r+="m"),t.unicode&&(r+="u"),t.sticky&&(r+="y"),r}},3325:(t,r,e)=>{"use strict";var n=e(4302),i=e(5286),o=e(875),u=e(741),a=e(6314)("isConcatSpreadable");t.exports=function t(r,e,s,c,f,l,h,p){for(var v,d,y=f,g=0,b=!!h&&u(h,p,3);g<c;){if(g in s){if(v=b?b(s[g],g,e):s[g],d=!1,i(v)&&(d=void 0!==(d=v[a])?!!d:n(v)),d&&l>0)y=t(r,e,v,o(v.length),y,l-1)-1;else{if(y>=9007199254740991)throw TypeError();r[y]=v}y++}g++}return y}},3531:(t,r,e)=>{var n=e(741),i=e(8851),o=e(6555),u=e(7007),a=e(875),s=e(9002),c={},f={},l=t.exports=function(t,r,e,l,h){var p,v,d,y,g=h?function(){return t}:s(t),b=n(e,l,r?2:1),m=0;if("function"!=typeof g)throw TypeError(t+" is not iterable!");if(o(g)){for(p=a(t.length);p>m;m++)if((y=r?b(u(v=t[m])[0],v[1]):b(t[m]))===c||y===f)return y}else for(d=g.call(t);!(v=d.next()).done;)if((y=i(d,b,v.value,r))===c||y===f)return y};l.BREAK=c,l.RETURN=f},18:(t,r,e)=>{t.exports=e(3825)("native-function-to-string",Function.toString)},3816:t=>{var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},9181:t=>{var r={}.hasOwnProperty;t.exports=function(t,e){return r.call(t,e)}},7728:(t,r,e)=>{var n=e(9275),i=e(681);t.exports=e(7057)?function(t,r,e){return n.f(t,r,i(1,e))}:function(t,r,e){return t[r]=e,t}},639:(t,r,e)=>{var n=e(3816).document;t.exports=n&&n.documentElement},1734:(t,r,e)=>{t.exports=!e(7057)&&!e(4253)((function(){return 7!=Object.defineProperty(e(2457)("div"),"a",{get:function(){return 7}}).a}))},266:(t,r,e)=>{var n=e(5286),i=e(7375).set;t.exports=function(t,r,e){var o,u=r.constructor;return u!==e&&"function"==typeof u&&(o=u.prototype)!==e.prototype&&n(o)&&i&&i(t,o),t}},7242:t=>{t.exports=function(t,r,e){var n=void 0===e;switch(r.length){case 0:return n?t():t.call(e);case 1:return n?t(r[0]):t.call(e,r[0]);case 2:return n?t(r[0],r[1]):t.call(e,r[0],r[1]);case 3:return n?t(r[0],r[1],r[2]):t.call(e,r[0],r[1],r[2]);case 4:return n?t(r[0],r[1],r[2],r[3]):t.call(e,r[0],r[1],r[2],r[3])}return t.apply(e,r)}},9797:(t,r,e)=>{var n=e(2032);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==n(t)?t.split(""):Object(t)}},6555:(t,r,e)=>{var n=e(2803),i=e(6314)("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(n.Array===t||o[i]===t)}},4302:(t,r,e)=>{var n=e(2032);t.exports=Array.isArray||function(t){return"Array"==n(t)}},8367:(t,r,e)=>{var n=e(5286),i=Math.floor;t.exports=function(t){return!n(t)&&isFinite(t)&&i(t)===t}},5286:t=>{t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},5364:(t,r,e)=>{var n=e(5286),i=e(2032),o=e(6314)("match");t.exports=function(t){var r;return n(t)&&(void 0!==(r=t[o])?!!r:"RegExp"==i(t))}},8851:(t,r,e)=>{var n=e(7007);t.exports=function(t,r,e,i){try{return i?r(n(e)[0],e[1]):r(e)}catch(r){var o=t.return;throw void 0!==o&&n(o.call(t)),r}}},9988:(t,r,e)=>{"use strict";var n=e(2503),i=e(681),o=e(2943),u={};e(7728)(u,e(6314)("iterator"),(function(){return this})),t.exports=function(t,r,e){t.prototype=n(u,{next:i(1,e)}),o(t,r+" Iterator")}},2923:(t,r,e)=>{"use strict";var n=e(4461),i=e(2985),o=e(7234),u=e(7728),a=e(2803),s=e(9988),c=e(2943),f=e(468),l=e(6314)("iterator"),h=!([].keys&&"next"in[].keys()),p="keys",v="values",d=function(){return this};t.exports=function(t,r,e,y,g,b,m){s(e,r,y);var w,x,S,_=function(t){if(!h&&t in A)return A[t];switch(t){case p:case v:return function(){return new e(this,t)}}return function(){return new e(this,t)}},E=r+" Iterator",O=g==v,P=!1,A=t.prototype,M=A[l]||A["@@iterator"]||g&&A[g],F=M||_(g),j=g?O?_("entries"):F:void 0,T="Array"==r&&A.entries||M;if(T&&(S=f(T.call(new t)))!==Object.prototype&&S.next&&(c(S,E,!0),n||"function"==typeof S[l]||u(S,l,d)),O&&M&&M.name!==v&&(P=!0,F=function(){return M.call(this)}),n&&!m||!h&&!P&&A[l]||u(A,l,F),a[r]=F,a[E]=d,g)if(w={values:O?F:_(v),keys:b?F:_(p),entries:j},m)for(x in w)x in A||o(A,x,w[x]);else i(i.P+i.F*(h||P),r,w);return w}},7462:(t,r,e)=>{var n=e(6314)("iterator"),i=!1;try{var o=[7][n]();o.return=function(){i=!0},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,r){if(!r&&!i)return!1;var e=!1;try{var o=[7],u=o[n]();u.next=function(){return{done:e=!0}},o[n]=function(){return u},t(o)}catch(t){}return e}},5436:t=>{t.exports=function(t,r){return{value:r,done:!!t}}},2803:t=>{t.exports={}},4461:t=>{t.exports=!1},3086:t=>{var r=Math.expm1;t.exports=!r||r(10)>22025.465794806718||r(10)<22025.465794806718||-2e-17!=r(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Math.exp(t)-1}:r},4934:(t,r,e)=>{var n=e(1801),i=Math.pow,o=i(2,-52),u=i(2,-23),a=i(2,127)*(2-u),s=i(2,-126);t.exports=Math.fround||function(t){var r,e,i=Math.abs(t),c=n(t);return i<s?c*(i/s/u+1/o-1/o)*s*u:(e=(r=(1+u/o)*i)-(r-i))>a||e!=e?c*(1/0):c*e}},6206:t=>{t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:Math.log(1+t)}},8757:t=>{t.exports=Math.scale||function(t,r,e,n,i){return 0===arguments.length||t!=t||r!=r||e!=e||n!=n||i!=i?NaN:t===1/0||t===-1/0?t:(t-r)*(i-n)/(e-r)+n}},1801:t=>{t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},4728:(t,r,e)=>{var n=e(3953)("meta"),i=e(5286),o=e(9181),u=e(9275).f,a=0,s=Object.isExtensible||function(){return!0},c=!e(4253)((function(){return s(Object.preventExtensions({}))})),f=function(t){u(t,n,{value:{i:"O"+ ++a,w:{}}})},l=t.exports={KEY:n,NEED:!1,fastKey:function(t,r){if(!i(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,n)){if(!s(t))return"F";if(!r)return"E";f(t)}return t[n].i},getWeak:function(t,r){if(!o(t,n)){if(!s(t))return!0;if(!r)return!1;f(t)}return t[n].w},onFreeze:function(t){return c&&l.NEED&&s(t)&&!o(t,n)&&f(t),t}}},133:(t,r,e)=>{var n=e(8416),i=e(2985),o=e(3825)("metadata"),u=o.store||(o.store=new(e(147))),a=function(t,r,e){var i=u.get(t);if(!i){if(!e)return;u.set(t,i=new n)}var o=i.get(r);if(!o){if(!e)return;i.set(r,o=new n)}return o};t.exports={store:u,map:a,has:function(t,r,e){var n=a(r,e,!1);return void 0!==n&&n.has(t)},get:function(t,r,e){var n=a(r,e,!1);return void 0===n?void 0:n.get(t)},set:function(t,r,e,n){a(e,n,!0).set(t,r)},keys:function(t,r){var e=a(t,r,!1),n=[];return e&&e.forEach((function(t,r){n.push(r)})),n},key:function(t){return void 0===t||"symbol"==typeof t?t:String(t)},exp:function(t){i(i.S,"Reflect",t)}}},4351:(t,r,e)=>{var n=e(3816),i=e(4193).set,o=n.MutationObserver||n.WebKitMutationObserver,u=n.process,a=n.Promise,s="process"==e(2032)(u);t.exports=function(){var t,r,e,c=function(){var n,i;for(s&&(n=u.domain)&&n.exit();t;){i=t.fn,t=t.next;try{i()}catch(n){throw t?e():r=void 0,n}}r=void 0,n&&n.enter()};if(s)e=function(){u.nextTick(c)};else if(!o||n.navigator&&n.navigator.standalone)if(a&&a.resolve){var f=a.resolve(void 0);e=function(){f.then(c)}}else e=function(){i.call(n,c)};else{var l=!0,h=document.createTextNode("");new o(c).observe(h,{characterData:!0}),e=function(){h.data=l=!l}}return function(n){var i={fn:n,next:void 0};r&&(r.next=i),t||(t=i,e()),r=i}}},3499:(t,r,e)=>{"use strict";var n=e(4963);function i(t){var r,e;this.promise=new t((function(t,n){if(void 0!==r||void 0!==e)throw TypeError("Bad Promise constructor");r=t,e=n})),this.resolve=n(r),this.reject=n(e)}t.exports.f=function(t){return new i(t)}},5345:(t,r,e)=>{"use strict";var n=e(7057),i=e(7184),o=e(4548),u=e(4682),a=e(508),s=e(9797),c=Object.assign;t.exports=!c||e(4253)((function(){var t={},r={},e=Symbol(),n="abcdefghijklmnopqrst";return t[e]=7,n.split("").forEach((function(t){r[t]=t})),7!=c({},t)[e]||Object.keys(c({},r)).join("")!=n}))?function(t,r){for(var e=a(t),c=arguments.length,f=1,l=o.f,h=u.f;c>f;)for(var p,v=s(arguments[f++]),d=l?i(v).concat(l(v)):i(v),y=d.length,g=0;y>g;)p=d[g++],n&&!h.call(v,p)||(e[p]=v[p]);return e}:c},2503:(t,r,e)=>{var n=e(7007),i=e(5588),o=e(4430),u=e(9335)("IE_PROTO"),a=function(){},s=function(){var t,r=e(2457)("iframe"),n=o.length;for(r.style.display="none",e(639).appendChild(r),r.src="javascript:",(t=r.contentWindow.document).open(),t.write("<script>document.F=Object<\/script>"),t.close(),s=t.F;n--;)delete s.prototype[o[n]];return s()};t.exports=Object.create||function(t,r){var e;return null!==t?(a.prototype=n(t),e=new a,a.prototype=null,e[u]=t):e=s(),void 0===r?e:i(e,r)}},9275:(t,r,e)=>{var n=e(7007),i=e(1734),o=e(1689),u=Object.defineProperty;r.f=e(7057)?Object.defineProperty:function(t,r,e){if(n(t),r=o(r,!0),n(e),i)try{return u(t,r,e)}catch(t){}if("get"in e||"set"in e)throw TypeError("Accessors not supported!");return"value"in e&&(t[r]=e.value),t}},5588:(t,r,e)=>{var n=e(9275),i=e(7007),o=e(7184);t.exports=e(7057)?Object.defineProperties:function(t,r){i(t);for(var e,u=o(r),a=u.length,s=0;a>s;)n.f(t,e=u[s++],r[e]);return t}},1670:(t,r,e)=>{"use strict";t.exports=e(4461)||!e(4253)((function(){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete e(3816)[t]}))},8693:(t,r,e)=>{var n=e(4682),i=e(681),o=e(2110),u=e(1689),a=e(9181),s=e(1734),c=Object.getOwnPropertyDescriptor;r.f=e(7057)?c:function(t,r){if(t=o(t),r=u(r,!0),s)try{return c(t,r)}catch(t){}if(a(t,r))return i(!n.f.call(t,r),t[r])}},9327:(t,r,e)=>{var n=e(2110),i=e(616).f,o={}.toString,u="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return u&&"[object Window]"==o.call(t)?function(t){try{return i(t)}catch(t){return u.slice()}}(t):i(n(t))}},616:(t,r,e)=>{var n=e(189),i=e(4430).concat("length","prototype");r.f=Object.getOwnPropertyNames||function(t){return n(t,i)}},4548:(t,r)=>{r.f=Object.getOwnPropertySymbols},468:(t,r,e)=>{var n=e(9181),i=e(508),o=e(9335)("IE_PROTO"),u=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),n(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?u:null}},189:(t,r,e)=>{var n=e(9181),i=e(2110),o=e(9315)(!1),u=e(9335)("IE_PROTO");t.exports=function(t,r){var e,a=i(t),s=0,c=[];for(e in a)e!=u&&n(a,e)&&c.push(e);for(;r.length>s;)n(a,e=r[s++])&&(~o(c,e)||c.push(e));return c}},7184:(t,r,e)=>{var n=e(189),i=e(4430);t.exports=Object.keys||function(t){return n(t,i)}},4682:(t,r)=>{r.f={}.propertyIsEnumerable},3160:(t,r,e)=>{var n=e(2985),i=e(5645),o=e(4253);t.exports=function(t,r){var e=(i.Object||{})[t]||Object[t],u={};u[t]=r(e),n(n.S+n.F*o((function(){e(1)})),"Object",u)}},1131:(t,r,e)=>{var n=e(7057),i=e(7184),o=e(2110),u=e(4682).f;t.exports=function(t){return function(r){for(var e,a=o(r),s=i(a),c=s.length,f=0,l=[];c>f;)e=s[f++],n&&!u.call(a,e)||l.push(t?[e,a[e]]:a[e]);return l}}},7643:(t,r,e)=>{var n=e(616),i=e(4548),o=e(7007),u=e(3816).Reflect;t.exports=u&&u.ownKeys||function(t){var r=n.f(o(t)),e=i.f;return e?r.concat(e(t)):r}},7743:(t,r,e)=>{var n=e(3816).parseFloat,i=e(9599).trim;t.exports=1/n(e(4644)+"-0")!=-1/0?function(t){var r=i(String(t),3),e=n(r);return 0===e&&"-"==r.charAt(0)?-0:e}:n},5960:(t,r,e)=>{var n=e(3816).parseInt,i=e(9599).trim,o=e(4644),u=/^[-+]?0[xX]/;t.exports=8!==n(o+"08")||22!==n(o+"0x16")?function(t,r){var e=i(String(t),3);return n(e,r>>>0||(u.test(e)?16:10))}:n},188:t=>{t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},94:(t,r,e)=>{var n=e(7007),i=e(5286),o=e(3499);t.exports=function(t,r){if(n(t),i(r)&&r.constructor===t)return r;var e=o.f(t);return(0,e.resolve)(r),e.promise}},681:t=>{t.exports=function(t,r){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:r}}},4408:(t,r,e)=>{var n=e(7234);t.exports=function(t,r,e){for(var i in r)n(t,i,r[i],e);return t}},7234:(t,r,e)=>{var n=e(3816),i=e(7728),o=e(9181),u=e(3953)("src"),a=e(18),s="toString",c=(""+a).split(s);e(5645).inspectSource=function(t){return a.call(t)},(t.exports=function(t,r,e,a){var s="function"==typeof e;s&&(o(e,"name")||i(e,"name",r)),t[r]!==e&&(s&&(o(e,u)||i(e,u,t[r]?""+t[r]:c.join(String(r)))),t===n?t[r]=e:a?t[r]?t[r]=e:i(t,r,e):(delete t[r],i(t,r,e)))})(Function.prototype,s,(function(){return"function"==typeof this&&this[u]||a.call(this)}))},7787:(t,r,e)=>{"use strict";var n=e(1488),i=RegExp.prototype.exec;t.exports=function(t,r){var e=t.exec;if("function"==typeof e){var o=e.call(t,r);if("object"!=typeof o)throw new TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==n(t))throw new TypeError("RegExp#exec called on incompatible receiver");return i.call(t,r)}},1165:(t,r,e)=>{"use strict";var n,i,o=e(3218),u=RegExp.prototype.exec,a=String.prototype.replace,s=u,c=(n=/a/,i=/b*/g,u.call(n,"a"),u.call(i,"a"),0!==n.lastIndex||0!==i.lastIndex),f=void 0!==/()??/.exec("")[1];(c||f)&&(s=function(t){var r,e,n,i,s=this;return f&&(e=new RegExp("^"+s.source+"$(?!\\s)",o.call(s))),c&&(r=s.lastIndex),n=u.call(s,t),c&&n&&(s.lastIndex=s.global?n.index+n[0].length:r),f&&n&&n.length>1&&a.call(n[0],e,(function(){for(i=1;i<arguments.length-2;i++)void 0===arguments[i]&&(n[i]=void 0)})),n}),t.exports=s},5496:t=>{t.exports=function(t,r){var e=r===Object(r)?function(t){return r[t]}:r;return function(r){return String(r).replace(t,e)}}},7195:t=>{t.exports=Object.is||function(t,r){return t===r?0!==t||1/t==1/r:t!=t&&r!=r}},1024:(t,r,e)=>{"use strict";var n=e(2985),i=e(4963),o=e(741),u=e(3531);t.exports=function(t){n(n.S,t,{from:function(t){var r,e,n,a,s=arguments[1];return i(this),(r=void 0!==s)&&i(s),null==t?new this:(e=[],r?(n=0,a=o(s,arguments[2],2),u(t,!1,(function(t){e.push(a(t,n++))}))):u(t,!1,e.push,e),new this(e))}})}},4881:(t,r,e)=>{"use strict";var n=e(2985);t.exports=function(t){n(n.S,t,{of:function(){for(var t=arguments.length,r=new Array(t);t--;)r[t]=arguments[t];return new this(r)}})}},7375:(t,r,e)=>{var n=e(5286),i=e(7007),o=function(t,r){if(i(t),!n(r)&&null!==r)throw TypeError(r+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,r,n){try{(n=e(741)(Function.call,e(8693).f(Object.prototype,"__proto__").set,2))(t,[]),r=!(t instanceof Array)}catch(t){r=!0}return function(t,e){return o(t,e),r?t.__proto__=e:n(t,e),t}}({},!1):void 0),check:o}},2974:(t,r,e)=>{"use strict";var n=e(3816),i=e(9275),o=e(7057),u=e(6314)("species");t.exports=function(t){var r=n[t];o&&r&&!r[u]&&i.f(r,u,{configurable:!0,get:function(){return this}})}},2943:(t,r,e)=>{var n=e(9275).f,i=e(9181),o=e(6314)("toStringTag");t.exports=function(t,r,e){t&&!i(t=e?t:t.prototype,o)&&n(t,o,{configurable:!0,value:r})}},9335:(t,r,e)=>{var n=e(3825)("keys"),i=e(3953);t.exports=function(t){return n[t]||(n[t]=i(t))}},3825:(t,r,e)=>{var n=e(5645),i=e(3816),o="__core-js_shared__",u=i[o]||(i[o]={});(t.exports=function(t,r){return u[t]||(u[t]=void 0!==r?r:{})})("versions",[]).push({version:n.version,mode:e(4461)?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},8364:(t,r,e)=>{var n=e(7007),i=e(4963),o=e(6314)("species");t.exports=function(t,r){var e,u=n(t).constructor;return void 0===u||null==(e=n(u)[o])?r:i(e)}},7717:(t,r,e)=>{"use strict";var n=e(4253);t.exports=function(t,r){return!!t&&n((function(){r?t.call(null,(function(){}),1):t.call(null)}))}},4496:(t,r,e)=>{var n=e(1467),i=e(1355);t.exports=function(t){return function(r,e){var o,u,a=String(i(r)),s=n(e),c=a.length;return s<0||s>=c?t?"":void 0:(o=a.charCodeAt(s))<55296||o>56319||s+1===c||(u=a.charCodeAt(s+1))<56320||u>57343?t?a.charAt(s):o:t?a.slice(s,s+2):u-56320+(o-55296<<10)+65536}}},2094:(t,r,e)=>{var n=e(5364),i=e(1355);t.exports=function(t,r,e){if(n(r))throw TypeError("String#"+e+" doesn't accept regex!");return String(i(t))}},9395:(t,r,e)=>{var n=e(2985),i=e(4253),o=e(1355),u=/"/g,a=function(t,r,e,n){var i=String(o(t)),a="<"+r;return""!==e&&(a+=" "+e+'="'+String(n).replace(u,"&quot;")+'"'),a+">"+i+"</"+r+">"};t.exports=function(t,r){var e={};e[t]=r(a),n(n.P+n.F*i((function(){var r=""[t]('"');return r!==r.toLowerCase()||r.split('"').length>3})),"String",e)}},5442:(t,r,e)=>{var n=e(875),i=e(8595),o=e(1355);t.exports=function(t,r,e,u){var a=String(o(t)),s=a.length,c=void 0===e?" ":String(e),f=n(r);if(f<=s||""==c)return a;var l=f-s,h=i.call(c,Math.ceil(l/c.length));return h.length>l&&(h=h.slice(0,l)),u?h+a:a+h}},8595:(t,r,e)=>{"use strict";var n=e(1467),i=e(1355);t.exports=function(t){var r=String(i(this)),e="",o=n(t);if(o<0||o==1/0)throw RangeError("Count can't be negative");for(;o>0;(o>>>=1)&&(r+=r))1&o&&(e+=r);return e}},9599:(t,r,e)=>{var n=e(2985),i=e(1355),o=e(4253),u=e(4644),a="["+u+"]",s=RegExp("^"+a+a+"*"),c=RegExp(a+a+"*$"),f=function(t,r,e){var i={},a=o((function(){return!!u[t]()||"​"!="​"[t]()})),s=i[t]=a?r(l):u[t];e&&(i[e]=s),n(n.P+n.F*a,"String",i)},l=f.trim=function(t,r){return t=String(i(t)),1&r&&(t=t.replace(s,"")),2&r&&(t=t.replace(c,"")),t};t.exports=f},4644:t=>{t.exports="\t\n\v\f\r   ᠎             　\u2028\u2029\ufeff"},4193:(t,r,e)=>{var n,i,o,u=e(741),a=e(7242),s=e(639),c=e(2457),f=e(3816),l=f.process,h=f.setImmediate,p=f.clearImmediate,v=f.MessageChannel,d=f.Dispatch,y=0,g={},b=function(){var t=+this;if(g.hasOwnProperty(t)){var r=g[t];delete g[t],r()}},m=function(t){b.call(t.data)};h&&p||(h=function(t){for(var r=[],e=1;arguments.length>e;)r.push(arguments[e++]);return g[++y]=function(){a("function"==typeof t?t:Function(t),r)},n(y),y},p=function(t){delete g[t]},"process"==e(2032)(l)?n=function(t){l.nextTick(u(b,t,1))}:d&&d.now?n=function(t){d.now(u(b,t,1))}:v?(o=(i=new v).port2,i.port1.onmessage=m,n=u(o.postMessage,o,1)):f.addEventListener&&"function"==typeof postMessage&&!f.importScripts?(n=function(t){f.postMessage(t+"","*")},f.addEventListener("message",m,!1)):n="onreadystatechange"in c("script")?function(t){s.appendChild(c("script")).onreadystatechange=function(){s.removeChild(this),b.call(t)}}:function(t){setTimeout(u(b,t,1),0)}),t.exports={set:h,clear:p}},2337:(t,r,e)=>{var n=e(1467),i=Math.max,o=Math.min;t.exports=function(t,r){return(t=n(t))<0?i(t+r,0):o(t,r)}},4843:(t,r,e)=>{var n=e(1467),i=e(875);t.exports=function(t){if(void 0===t)return 0;var r=n(t),e=i(r);if(r!==e)throw RangeError("Wrong length!");return e}},1467:t=>{var r=Math.ceil,e=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?e:r)(t)}},2110:(t,r,e)=>{var n=e(9797),i=e(1355);t.exports=function(t){return n(i(t))}},875:(t,r,e)=>{var n=e(1467),i=Math.min;t.exports=function(t){return t>0?i(n(t),9007199254740991):0}},508:(t,r,e)=>{var n=e(1355);t.exports=function(t){return Object(n(t))}},1689:(t,r,e)=>{var n=e(5286);t.exports=function(t,r){if(!n(t))return t;var e,i;if(r&&"function"==typeof(e=t.toString)&&!n(i=e.call(t)))return i;if("function"==typeof(e=t.valueOf)&&!n(i=e.call(t)))return i;if(!r&&"function"==typeof(e=t.toString)&&!n(i=e.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},8440:(t,r,e)=>{"use strict";if(e(7057)){var n=e(4461),i=e(3816),o=e(4253),u=e(2985),a=e(9383),s=e(1125),c=e(741),f=e(3328),l=e(681),h=e(7728),p=e(4408),v=e(1467),d=e(875),y=e(4843),g=e(2337),b=e(1689),m=e(9181),w=e(1488),x=e(5286),S=e(508),_=e(6555),E=e(2503),O=e(468),P=e(616).f,A=e(9002),M=e(3953),F=e(6314),j=e(50),T=e(9315),I=e(8364),R=e(6997),N=e(2803),L=e(7462),k=e(2974),D=e(6852),B=e(5216),U=e(9275),C=e(8693),G=U.f,W=C.f,V=i.RangeError,z=i.TypeError,q=i.Uint8Array,H="ArrayBuffer",$="SharedArrayBuffer",Y="BYTES_PER_ELEMENT",J=Array.prototype,K=s.ArrayBuffer,X=s.DataView,Z=j(0),Q=j(2),tt=j(3),rt=j(4),et=j(5),nt=j(6),it=T(!0),ot=T(!1),ut=R.values,at=R.keys,st=R.entries,ct=J.lastIndexOf,ft=J.reduce,lt=J.reduceRight,ht=J.join,pt=J.sort,vt=J.slice,dt=J.toString,yt=J.toLocaleString,gt=F("iterator"),bt=F("toStringTag"),mt=M("typed_constructor"),wt=M("def_constructor"),xt=a.CONSTR,St=a.TYPED,_t=a.VIEW,Et="Wrong length!",Ot=j(1,(function(t,r){return jt(I(t,t[wt]),r)})),Pt=o((function(){return 1===new q(new Uint16Array([1]).buffer)[0]})),At=!!q&&!!q.prototype.set&&o((function(){new q(1).set({})})),Mt=function(t,r){var e=v(t);if(e<0||e%r)throw V("Wrong offset!");return e},Ft=function(t){if(x(t)&&St in t)return t;throw z(t+" is not a typed array!")},jt=function(t,r){if(!x(t)||!(mt in t))throw z("It is not a typed array constructor!");return new t(r)},Tt=function(t,r){return It(I(t,t[wt]),r)},It=function(t,r){for(var e=0,n=r.length,i=jt(t,n);n>e;)i[e]=r[e++];return i},Rt=function(t,r,e){G(t,r,{get:function(){return this._d[e]}})},Nt=function(t){var r,e,n,i,o,u,a=S(t),s=arguments.length,f=s>1?arguments[1]:void 0,l=void 0!==f,h=A(a);if(null!=h&&!_(h)){for(u=h.call(a),n=[],r=0;!(o=u.next()).done;r++)n.push(o.value);a=n}for(l&&s>2&&(f=c(f,arguments[2],2)),r=0,e=d(a.length),i=jt(this,e);e>r;r++)i[r]=l?f(a[r],r):a[r];return i},Lt=function(){for(var t=0,r=arguments.length,e=jt(this,r);r>t;)e[t]=arguments[t++];return e},kt=!!q&&o((function(){yt.call(new q(1))})),Dt=function(){return yt.apply(kt?vt.call(Ft(this)):Ft(this),arguments)},Bt={copyWithin:function(t,r){return B.call(Ft(this),t,r,arguments.length>2?arguments[2]:void 0)},every:function(t){return rt(Ft(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return D.apply(Ft(this),arguments)},filter:function(t){return Tt(this,Q(Ft(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return et(Ft(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return nt(Ft(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){Z(Ft(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return ot(Ft(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return it(Ft(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return ht.apply(Ft(this),arguments)},lastIndexOf:function(t){return ct.apply(Ft(this),arguments)},map:function(t){return Ot(Ft(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return ft.apply(Ft(this),arguments)},reduceRight:function(t){return lt.apply(Ft(this),arguments)},reverse:function(){for(var t,r=this,e=Ft(r).length,n=Math.floor(e/2),i=0;i<n;)t=r[i],r[i++]=r[--e],r[e]=t;return r},some:function(t){return tt(Ft(this),t,arguments.length>1?arguments[1]:void 0)},sort:function(t){return pt.call(Ft(this),t)},subarray:function(t,r){var e=Ft(this),n=e.length,i=g(t,n);return new(I(e,e[wt]))(e.buffer,e.byteOffset+i*e.BYTES_PER_ELEMENT,d((void 0===r?n:g(r,n))-i))}},Ut=function(t,r){return Tt(this,vt.call(Ft(this),t,r))},Ct=function(t){Ft(this);var r=Mt(arguments[1],1),e=this.length,n=S(t),i=d(n.length),o=0;if(i+r>e)throw V(Et);for(;o<i;)this[r+o]=n[o++]},Gt={entries:function(){return st.call(Ft(this))},keys:function(){return at.call(Ft(this))},values:function(){return ut.call(Ft(this))}},Wt=function(t,r){return x(t)&&t[St]&&"symbol"!=typeof r&&r in t&&String(+r)==String(r)},Vt=function(t,r){return Wt(t,r=b(r,!0))?l(2,t[r]):W(t,r)},zt=function(t,r,e){return!(Wt(t,r=b(r,!0))&&x(e)&&m(e,"value"))||m(e,"get")||m(e,"set")||e.configurable||m(e,"writable")&&!e.writable||m(e,"enumerable")&&!e.enumerable?G(t,r,e):(t[r]=e.value,t)};xt||(C.f=Vt,U.f=zt),u(u.S+u.F*!xt,"Object",{getOwnPropertyDescriptor:Vt,defineProperty:zt}),o((function(){dt.call({})}))&&(dt=yt=function(){return ht.call(this)});var qt=p({},Bt);p(qt,Gt),h(qt,gt,Gt.values),p(qt,{slice:Ut,set:Ct,constructor:function(){},toString:dt,toLocaleString:Dt}),Rt(qt,"buffer","b"),Rt(qt,"byteOffset","o"),Rt(qt,"byteLength","l"),Rt(qt,"length","e"),G(qt,bt,{get:function(){return this[St]}}),t.exports=function(t,r,e,s){var c=t+((s=!!s)?"Clamped":"")+"Array",l="get"+t,p="set"+t,v=i[c],g=v||{},b=v&&O(v),m=!v||!a.ABV,S={},_=v&&v.prototype,A=function(t,e){G(t,e,{get:function(){return function(t,e){var n=t._d;return n.v[l](e*r+n.o,Pt)}(this,e)},set:function(t){return function(t,e,n){var i=t._d;s&&(n=(n=Math.round(n))<0?0:n>255?255:255&n),i.v[p](e*r+i.o,n,Pt)}(this,e,t)},enumerable:!0})};m?(v=e((function(t,e,n,i){f(t,v,c,"_d");var o,u,a,s,l=0,p=0;if(x(e)){if(!(e instanceof K||(s=w(e))==H||s==$))return St in e?It(v,e):Nt.call(v,e);o=e,p=Mt(n,r);var g=e.byteLength;if(void 0===i){if(g%r)throw V(Et);if((u=g-p)<0)throw V(Et)}else if((u=d(i)*r)+p>g)throw V(Et);a=u/r}else a=y(e),o=new K(u=a*r);for(h(t,"_d",{b:o,o:p,l:u,e:a,v:new X(o)});l<a;)A(t,l++)})),_=v.prototype=E(qt),h(_,"constructor",v)):o((function(){v(1)}))&&o((function(){new v(-1)}))&&L((function(t){new v,new v(null),new v(1.5),new v(t)}),!0)||(v=e((function(t,e,n,i){var o;return f(t,v,c),x(e)?e instanceof K||(o=w(e))==H||o==$?void 0!==i?new g(e,Mt(n,r),i):void 0!==n?new g(e,Mt(n,r)):new g(e):St in e?It(v,e):Nt.call(v,e):new g(y(e))})),Z(b!==Function.prototype?P(g).concat(P(b)):P(g),(function(t){t in v||h(v,t,g[t])})),v.prototype=_,n||(_.constructor=v));var M=_[gt],F=!!M&&("values"==M.name||null==M.name),j=Gt.values;h(v,mt,!0),h(_,St,c),h(_,_t,!0),h(_,wt,v),(s?new v(1)[bt]==c:bt in _)||G(_,bt,{get:function(){return c}}),S[c]=v,u(u.G+u.W+u.F*(v!=g),S),u(u.S,c,{BYTES_PER_ELEMENT:r}),u(u.S+u.F*o((function(){g.of.call(v,1)})),c,{from:Nt,of:Lt}),Y in _||h(_,Y,r),u(u.P,c,Bt),k(c),u(u.P+u.F*At,c,{set:Ct}),u(u.P+u.F*!F,c,Gt),n||_.toString==dt||(_.toString=dt),u(u.P+u.F*o((function(){new v(1).slice()})),c,{slice:Ut}),u(u.P+u.F*(o((function(){return[1,2].toLocaleString()!=new v([1,2]).toLocaleString()}))||!o((function(){_.toLocaleString.call([1,2])}))),c,{toLocaleString:Dt}),N[c]=F?M:j,n||F||h(_,gt,j)}}else t.exports=function(){}},1125:(t,r,e)=>{"use strict";var n=e(3816),i=e(7057),o=e(4461),u=e(9383),a=e(7728),s=e(4408),c=e(4253),f=e(3328),l=e(1467),h=e(875),p=e(4843),v=e(616).f,d=e(9275).f,y=e(6852),g=e(2943),b="ArrayBuffer",m="DataView",w="Wrong index!",x=n.ArrayBuffer,S=n.DataView,_=n.Math,E=n.RangeError,O=n.Infinity,P=x,A=_.abs,M=_.pow,F=_.floor,j=_.log,T=_.LN2,I="buffer",R="byteLength",N="byteOffset",L=i?"_b":I,k=i?"_l":R,D=i?"_o":N;function B(t,r,e){var n,i,o,u=new Array(e),a=8*e-r-1,s=(1<<a)-1,c=s>>1,f=23===r?M(2,-24)-M(2,-77):0,l=0,h=t<0||0===t&&1/t<0?1:0;for((t=A(t))!=t||t===O?(i=t!=t?1:0,n=s):(n=F(j(t)/T),t*(o=M(2,-n))<1&&(n--,o*=2),(t+=n+c>=1?f/o:f*M(2,1-c))*o>=2&&(n++,o/=2),n+c>=s?(i=0,n=s):n+c>=1?(i=(t*o-1)*M(2,r),n+=c):(i=t*M(2,c-1)*M(2,r),n=0));r>=8;u[l++]=255&i,i/=256,r-=8);for(n=n<<r|i,a+=r;a>0;u[l++]=255&n,n/=256,a-=8);return u[--l]|=128*h,u}function U(t,r,e){var n,i=8*e-r-1,o=(1<<i)-1,u=o>>1,a=i-7,s=e-1,c=t[s--],f=127&c;for(c>>=7;a>0;f=256*f+t[s],s--,a-=8);for(n=f&(1<<-a)-1,f>>=-a,a+=r;a>0;n=256*n+t[s],s--,a-=8);if(0===f)f=1-u;else{if(f===o)return n?NaN:c?-O:O;n+=M(2,r),f-=u}return(c?-1:1)*n*M(2,f-r)}function C(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function G(t){return[255&t]}function W(t){return[255&t,t>>8&255]}function V(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function z(t){return B(t,52,8)}function q(t){return B(t,23,4)}function H(t,r,e){d(t.prototype,r,{get:function(){return this[e]}})}function $(t,r,e,n){var i=p(+e);if(i+r>t[k])throw E(w);var o=t[L]._b,u=i+t[D],a=o.slice(u,u+r);return n?a:a.reverse()}function Y(t,r,e,n,i,o){var u=p(+e);if(u+r>t[k])throw E(w);for(var a=t[L]._b,s=u+t[D],c=n(+i),f=0;f<r;f++)a[s+f]=c[o?f:r-f-1]}if(u.ABV){if(!c((function(){x(1)}))||!c((function(){new x(-1)}))||c((function(){return new x,new x(1.5),new x(NaN),x.name!=b}))){for(var J,K=(x=function(t){return f(this,x),new P(p(t))}).prototype=P.prototype,X=v(P),Z=0;X.length>Z;)(J=X[Z++])in x||a(x,J,P[J]);o||(K.constructor=x)}var Q=new S(new x(2)),tt=S.prototype.setInt8;Q.setInt8(0,2147483648),Q.setInt8(1,2147483649),!Q.getInt8(0)&&Q.getInt8(1)||s(S.prototype,{setInt8:function(t,r){tt.call(this,t,r<<24>>24)},setUint8:function(t,r){tt.call(this,t,r<<24>>24)}},!0)}else x=function(t){f(this,x,b);var r=p(t);this._b=y.call(new Array(r),0),this[k]=r},S=function(t,r,e){f(this,S,m),f(t,x,m);var n=t[k],i=l(r);if(i<0||i>n)throw E("Wrong offset!");if(i+(e=void 0===e?n-i:h(e))>n)throw E("Wrong length!");this[L]=t,this[D]=i,this[k]=e},i&&(H(x,R,"_l"),H(S,I,"_b"),H(S,R,"_l"),H(S,N,"_o")),s(S.prototype,{getInt8:function(t){return $(this,1,t)[0]<<24>>24},getUint8:function(t){return $(this,1,t)[0]},getInt16:function(t){var r=$(this,2,t,arguments[1]);return(r[1]<<8|r[0])<<16>>16},getUint16:function(t){var r=$(this,2,t,arguments[1]);return r[1]<<8|r[0]},getInt32:function(t){return C($(this,4,t,arguments[1]))},getUint32:function(t){return C($(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return U($(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return U($(this,8,t,arguments[1]),52,8)},setInt8:function(t,r){Y(this,1,t,G,r)},setUint8:function(t,r){Y(this,1,t,G,r)},setInt16:function(t,r){Y(this,2,t,W,r,arguments[2])},setUint16:function(t,r){Y(this,2,t,W,r,arguments[2])},setInt32:function(t,r){Y(this,4,t,V,r,arguments[2])},setUint32:function(t,r){Y(this,4,t,V,r,arguments[2])},setFloat32:function(t,r){Y(this,4,t,q,r,arguments[2])},setFloat64:function(t,r){Y(this,8,t,z,r,arguments[2])}});g(x,b),g(S,m),a(S.prototype,u.VIEW,!0),r.ArrayBuffer=x,r.DataView=S},9383:(t,r,e)=>{for(var n,i=e(3816),o=e(7728),u=e(3953),a=u("typed_array"),s=u("view"),c=!(!i.ArrayBuffer||!i.DataView),f=c,l=0,h="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");l<9;)(n=i[h[l++]])?(o(n.prototype,a,!0),o(n.prototype,s,!0)):f=!1;t.exports={ABV:c,CONSTR:f,TYPED:a,VIEW:s}},3953:t=>{var r=0,e=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++r+e).toString(36))}},575:(t,r,e)=>{var n=e(3816).navigator;t.exports=n&&n.userAgent||""},1616:(t,r,e)=>{var n=e(5286);t.exports=function(t,r){if(!n(t)||t._t!==r)throw TypeError("Incompatible receiver, "+r+" required!");return t}},6074:(t,r,e)=>{var n=e(3816),i=e(5645),o=e(4461),u=e(8787),a=e(9275).f;t.exports=function(t){var r=i.Symbol||(i.Symbol=o?{}:n.Symbol||{});"_"==t.charAt(0)||t in r||a(r,t,{value:u.f(t)})}},8787:(t,r,e)=>{r.f=e(6314)},6314:(t,r,e)=>{var n=e(3825)("wks"),i=e(3953),o=e(3816).Symbol,u="function"==typeof o;(t.exports=function(t){return n[t]||(n[t]=u&&o[t]||(u?o:i)("Symbol."+t))}).store=n},9002:(t,r,e)=>{var n=e(1488),i=e(6314)("iterator"),o=e(2803);t.exports=e(5645).getIteratorMethod=function(t){if(null!=t)return t[i]||t["@@iterator"]||o[n(t)]}},1761:(t,r,e)=>{var n=e(2985),i=e(5496)(/[\\^$*+?.()|[\]{}]/g,"\\$&");n(n.S,"RegExp",{escape:function(t){return i(t)}})},2e3:(t,r,e)=>{var n=e(2985);n(n.P,"Array",{copyWithin:e(5216)}),e(7722)("copyWithin")},5745:(t,r,e)=>{"use strict";var n=e(2985),i=e(50)(4);n(n.P+n.F*!e(7717)([].every,!0),"Array",{every:function(t){return i(this,t,arguments[1])}})},8977:(t,r,e)=>{var n=e(2985);n(n.P,"Array",{fill:e(6852)}),e(7722)("fill")},8837:(t,r,e)=>{"use strict";var n=e(2985),i=e(50)(2);n(n.P+n.F*!e(7717)([].filter,!0),"Array",{filter:function(t){return i(this,t,arguments[1])}})},4899:(t,r,e)=>{"use strict";var n=e(2985),i=e(50)(6),o="findIndex",u=!0;o in[]&&Array(1)[o]((function(){u=!1})),n(n.P+n.F*u,"Array",{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),e(7722)(o)},2310:(t,r,e)=>{"use strict";var n=e(2985),i=e(50)(5),o="find",u=!0;o in[]&&Array(1).find((function(){u=!1})),n(n.P+n.F*u,"Array",{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),e(7722)(o)},4336:(t,r,e)=>{"use strict";var n=e(2985),i=e(50)(0),o=e(7717)([].forEach,!0);n(n.P+n.F*!o,"Array",{forEach:function(t){return i(this,t,arguments[1])}})},522:(t,r,e)=>{"use strict";var n=e(741),i=e(2985),o=e(508),u=e(8851),a=e(6555),s=e(875),c=e(2811),f=e(9002);i(i.S+i.F*!e(7462)((function(t){Array.from(t)})),"Array",{from:function(t){var r,e,i,l,h=o(t),p="function"==typeof this?this:Array,v=arguments.length,d=v>1?arguments[1]:void 0,y=void 0!==d,g=0,b=f(h);if(y&&(d=n(d,v>2?arguments[2]:void 0,2)),null==b||p==Array&&a(b))for(e=new p(r=s(h.length));r>g;g++)c(e,g,y?d(h[g],g):h[g]);else for(l=b.call(h),e=new p;!(i=l.next()).done;g++)c(e,g,y?u(l,d,[i.value,g],!0):i.value);return e.length=g,e}})},3369:(t,r,e)=>{"use strict";var n=e(2985),i=e(9315)(!1),o=[].indexOf,u=!!o&&1/[1].indexOf(1,-0)<0;n(n.P+n.F*(u||!e(7717)(o)),"Array",{indexOf:function(t){return u?o.apply(this,arguments)||0:i(this,t,arguments[1])}})},774:(t,r,e)=>{var n=e(2985);n(n.S,"Array",{isArray:e(4302)})},6997:(t,r,e)=>{"use strict";var n=e(7722),i=e(5436),o=e(2803),u=e(2110);t.exports=e(2923)(Array,"Array",(function(t,r){this._t=u(t),this._i=0,this._k=r}),(function(){var t=this._t,r=this._k,e=this._i++;return!t||e>=t.length?(this._t=void 0,i(1)):i(0,"keys"==r?e:"values"==r?t[e]:[e,t[e]])}),"values"),o.Arguments=o.Array,n("keys"),n("values"),n("entries")},7842:(t,r,e)=>{"use strict";var n=e(2985),i=e(2110),o=[].join;n(n.P+n.F*(e(9797)!=Object||!e(7717)(o)),"Array",{join:function(t){return o.call(i(this),void 0===t?",":t)}})},9564:(t,r,e)=>{"use strict";var n=e(2985),i=e(2110),o=e(1467),u=e(875),a=[].lastIndexOf,s=!!a&&1/[1].lastIndexOf(1,-0)<0;n(n.P+n.F*(s||!e(7717)(a)),"Array",{lastIndexOf:function(t){if(s)return a.apply(this,arguments)||0;var r=i(this),e=u(r.length),n=e-1;for(arguments.length>1&&(n=Math.min(n,o(arguments[1]))),n<0&&(n=e+n);n>=0;n--)if(n in r&&r[n]===t)return n||0;return-1}})},1802:(t,r,e)=>{"use strict";var n=e(2985),i=e(50)(1);n(n.P+n.F*!e(7717)([].map,!0),"Array",{map:function(t){return i(this,t,arguments[1])}})},8295:(t,r,e)=>{"use strict";var n=e(2985),i=e(2811);n(n.S+n.F*e(4253)((function(){function t(){}return!(Array.of.call(t)instanceof t)})),"Array",{of:function(){for(var t=0,r=arguments.length,e=new("function"==typeof this?this:Array)(r);r>t;)i(e,t,arguments[t++]);return e.length=r,e}})},3750:(t,r,e)=>{"use strict";var n=e(2985),i=e(7628);n(n.P+n.F*!e(7717)([].reduceRight,!0),"Array",{reduceRight:function(t){return i(this,t,arguments.length,arguments[1],!0)}})},3057:(t,r,e)=>{"use strict";var n=e(2985),i=e(7628);n(n.P+n.F*!e(7717)([].reduce,!0),"Array",{reduce:function(t){return i(this,t,arguments.length,arguments[1],!1)}})},110:(t,r,e)=>{"use strict";var n=e(2985),i=e(639),o=e(2032),u=e(2337),a=e(875),s=[].slice;n(n.P+n.F*e(4253)((function(){i&&s.call(i)})),"Array",{slice:function(t,r){var e=a(this.length),n=o(this);if(r=void 0===r?e:r,"Array"==n)return s.call(this,t,r);for(var i=u(t,e),c=u(r,e),f=a(c-i),l=new Array(f),h=0;h<f;h++)l[h]="String"==n?this.charAt(i+h):this[i+h];return l}})},6773:(t,r,e)=>{"use strict";var n=e(2985),i=e(50)(3);n(n.P+n.F*!e(7717)([].some,!0),"Array",{some:function(t){return i(this,t,arguments[1])}})},75:(t,r,e)=>{"use strict";var n=e(2985),i=e(4963),o=e(508),u=e(4253),a=[].sort,s=[1,2,3];n(n.P+n.F*(u((function(){s.sort(void 0)}))||!u((function(){s.sort(null)}))||!e(7717)(a)),"Array",{sort:function(t){return void 0===t?a.call(o(this)):a.call(o(this),i(t))}})},1842:(t,r,e)=>{e(2974)("Array")},1822:(t,r,e)=>{var n=e(2985);n(n.S,"Date",{now:function(){return(new Date).getTime()}})},1031:(t,r,e)=>{var n=e(2985),i=e(3537);n(n.P+n.F*(Date.prototype.toISOString!==i),"Date",{toISOString:i})},9977:(t,r,e)=>{"use strict";var n=e(2985),i=e(508),o=e(1689);n(n.P+n.F*e(4253)((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})})),"Date",{toJSON:function(t){var r=i(this),e=o(r);return"number"!=typeof e||isFinite(e)?r.toISOString():null}})},1560:(t,r,e)=>{var n=e(6314)("toPrimitive"),i=Date.prototype;n in i||e(7728)(i,n,e(870))},6331:(t,r,e)=>{var n=Date.prototype,i="Invalid Date",o=n.toString,u=n.getTime;new Date(NaN)+""!=i&&e(7234)(n,"toString",(function(){var t=u.call(this);return t==t?o.call(this):i}))},9730:(t,r,e)=>{var n=e(2985);n(n.P,"Function",{bind:e(4398)})},8377:(t,r,e)=>{"use strict";var n=e(5286),i=e(468),o=e(6314)("hasInstance"),u=Function.prototype;o in u||e(9275).f(u,o,{value:function(t){if("function"!=typeof this||!n(t))return!1;if(!n(this.prototype))return t instanceof this;for(;t=i(t);)if(this.prototype===t)return!0;return!1}})},6059:(t,r,e)=>{var n=e(9275).f,i=Function.prototype,o=/^\s*function ([^ (]*)/,u="name";u in i||e(7057)&&n(i,u,{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(t){return""}}})},8416:(t,r,e)=>{"use strict";var n=e(9824),i=e(1616),o="Map";t.exports=e(5795)(o,(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{get:function(t){var r=n.getEntry(i(this,o),t);return r&&r.v},set:function(t,r){return n.def(i(this,o),0===t?0:t,r)}},n,!0)},6503:(t,r,e)=>{var n=e(2985),i=e(6206),o=Math.sqrt,u=Math.acosh;n(n.S+n.F*!(u&&710==Math.floor(u(Number.MAX_VALUE))&&u(1/0)==1/0),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:i(t-1+o(t-1)*o(t+1))}})},6786:(t,r,e)=>{var n=e(2985),i=Math.asinh;n(n.S+n.F*!(i&&1/i(0)>0),"Math",{asinh:function t(r){return isFinite(r=+r)&&0!=r?r<0?-t(-r):Math.log(r+Math.sqrt(r*r+1)):r}})},932:(t,r,e)=>{var n=e(2985),i=Math.atanh;n(n.S+n.F*!(i&&1/i(-0)<0),"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},7526:(t,r,e)=>{var n=e(2985),i=e(1801);n(n.S,"Math",{cbrt:function(t){return i(t=+t)*Math.pow(Math.abs(t),1/3)}})},1591:(t,r,e)=>{var n=e(2985);n(n.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},9073:(t,r,e)=>{var n=e(2985),i=Math.exp;n(n.S,"Math",{cosh:function(t){return(i(t=+t)+i(-t))/2}})},347:(t,r,e)=>{var n=e(2985),i=e(3086);n(n.S+n.F*(i!=Math.expm1),"Math",{expm1:i})},579:(t,r,e)=>{var n=e(2985);n(n.S,"Math",{fround:e(4934)})},4669:(t,r,e)=>{var n=e(2985),i=Math.abs;n(n.S,"Math",{hypot:function(t,r){for(var e,n,o=0,u=0,a=arguments.length,s=0;u<a;)s<(e=i(arguments[u++]))?(o=o*(n=s/e)*n+1,s=e):o+=e>0?(n=e/s)*n:e;return s===1/0?1/0:s*Math.sqrt(o)}})},7710:(t,r,e)=>{var n=e(2985),i=Math.imul;n(n.S+n.F*e(4253)((function(){return-5!=i(4294967295,5)||2!=i.length})),"Math",{imul:function(t,r){var e=65535,n=+t,i=+r,o=e&n,u=e&i;return 0|o*u+((e&n>>>16)*u+o*(e&i>>>16)<<16>>>0)}})},5789:(t,r,e)=>{var n=e(2985);n(n.S,"Math",{log10:function(t){return Math.log(t)*Math.LOG10E}})},3514:(t,r,e)=>{var n=e(2985);n(n.S,"Math",{log1p:e(6206)})},9978:(t,r,e)=>{var n=e(2985);n(n.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},8472:(t,r,e)=>{var n=e(2985);n(n.S,"Math",{sign:e(1801)})},6946:(t,r,e)=>{var n=e(2985),i=e(3086),o=Math.exp;n(n.S+n.F*e(4253)((function(){return-2e-17!=!Math.sinh(-2e-17)})),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(i(t)-i(-t))/2:(o(t-1)-o(-t-1))*(Math.E/2)}})},5068:(t,r,e)=>{var n=e(2985),i=e(3086),o=Math.exp;n(n.S,"Math",{tanh:function(t){var r=i(t=+t),e=i(-t);return r==1/0?1:e==1/0?-1:(r-e)/(o(t)+o(-t))}})},413:(t,r,e)=>{var n=e(2985);n(n.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},1246:(t,r,e)=>{"use strict";var n=e(3816),i=e(9181),o=e(2032),u=e(266),a=e(1689),s=e(4253),c=e(616).f,f=e(8693).f,l=e(9275).f,h=e(9599).trim,p="Number",v=n.Number,d=v,y=v.prototype,g=o(e(2503)(y))==p,b="trim"in String.prototype,m=function(t){var r=a(t,!1);if("string"==typeof r&&r.length>2){var e,n,i,o=(r=b?r.trim():h(r,3)).charCodeAt(0);if(43===o||45===o){if(88===(e=r.charCodeAt(2))||120===e)return NaN}else if(48===o){switch(r.charCodeAt(1)){case 66:case 98:n=2,i=49;break;case 79:case 111:n=8,i=55;break;default:return+r}for(var u,s=r.slice(2),c=0,f=s.length;c<f;c++)if((u=s.charCodeAt(c))<48||u>i)return NaN;return parseInt(s,n)}}return+r};if(!v(" 0o1")||!v("0b1")||v("+0x1")){v=function(t){var r=arguments.length<1?0:t,e=this;return e instanceof v&&(g?s((function(){y.valueOf.call(e)})):o(e)!=p)?u(new d(m(r)),e,v):m(r)};for(var w,x=e(7057)?c(d):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),S=0;x.length>S;S++)i(d,w=x[S])&&!i(v,w)&&l(v,w,f(d,w));v.prototype=y,y.constructor=v,e(7234)(n,p,v)}},5972:(t,r,e)=>{var n=e(2985);n(n.S,"Number",{EPSILON:Math.pow(2,-52)})},3403:(t,r,e)=>{var n=e(2985),i=e(3816).isFinite;n(n.S,"Number",{isFinite:function(t){return"number"==typeof t&&i(t)}})},2516:(t,r,e)=>{var n=e(2985);n(n.S,"Number",{isInteger:e(8367)})},9371:(t,r,e)=>{var n=e(2985);n(n.S,"Number",{isNaN:function(t){return t!=t}})},6479:(t,r,e)=>{var n=e(2985),i=e(8367),o=Math.abs;n(n.S,"Number",{isSafeInteger:function(t){return i(t)&&o(t)<=9007199254740991}})},1736:(t,r,e)=>{var n=e(2985);n(n.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},1889:(t,r,e)=>{var n=e(2985);n(n.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},5177:(t,r,e)=>{var n=e(2985),i=e(7743);n(n.S+n.F*(Number.parseFloat!=i),"Number",{parseFloat:i})},6943:(t,r,e)=>{var n=e(2985),i=e(5960);n(n.S+n.F*(Number.parseInt!=i),"Number",{parseInt:i})},726:(t,r,e)=>{"use strict";var n=e(2985),i=e(1467),o=e(3365),u=e(8595),a=1..toFixed,s=Math.floor,c=[0,0,0,0,0,0],f="Number.toFixed: incorrect invocation!",l="0",h=function(t,r){for(var e=-1,n=r;++e<6;)n+=t*c[e],c[e]=n%1e7,n=s(n/1e7)},p=function(t){for(var r=6,e=0;--r>=0;)e+=c[r],c[r]=s(e/t),e=e%t*1e7},v=function(){for(var t=6,r="";--t>=0;)if(""!==r||0===t||0!==c[t]){var e=String(c[t]);r=""===r?e:r+u.call(l,7-e.length)+e}return r},d=function(t,r,e){return 0===r?e:r%2==1?d(t,r-1,e*t):d(t*t,r/2,e)};n(n.P+n.F*(!!a&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!e(4253)((function(){a.call({})}))),"Number",{toFixed:function(t){var r,e,n,a,s=o(this,f),c=i(t),y="",g=l;if(c<0||c>20)throw RangeError(f);if(s!=s)return"NaN";if(s<=-1e21||s>=1e21)return String(s);if(s<0&&(y="-",s=-s),s>1e-21)if(e=(r=function(t){for(var r=0,e=t;e>=4096;)r+=12,e/=4096;for(;e>=2;)r+=1,e/=2;return r}(s*d(2,69,1))-69)<0?s*d(2,-r,1):s/d(2,r,1),e*=4503599627370496,(r=52-r)>0){for(h(0,e),n=c;n>=7;)h(1e7,0),n-=7;for(h(d(10,n,1),0),n=r-1;n>=23;)p(1<<23),n-=23;p(1<<n),h(1,1),p(2),g=v()}else h(0,e),h(1<<-r,0),g=v()+u.call(l,c);return c>0?y+((a=g.length)<=c?"0."+u.call(l,c-a)+g:g.slice(0,a-c)+"."+g.slice(a-c)):y+g}})},1901:(t,r,e)=>{"use strict";var n=e(2985),i=e(4253),o=e(3365),u=1..toPrecision;n(n.P+n.F*(i((function(){return"1"!==u.call(1,void 0)}))||!i((function(){u.call({})}))),"Number",{toPrecision:function(t){var r=o(this,"Number#toPrecision: incorrect invocation!");return void 0===t?u.call(r):u.call(r,t)}})},5115:(t,r,e)=>{var n=e(2985);n(n.S+n.F,"Object",{assign:e(5345)})},8132:(t,r,e)=>{var n=e(2985);n(n.S,"Object",{create:e(2503)})},7470:(t,r,e)=>{var n=e(2985);n(n.S+n.F*!e(7057),"Object",{defineProperties:e(5588)})},8388:(t,r,e)=>{var n=e(2985);n(n.S+n.F*!e(7057),"Object",{defineProperty:e(9275).f})},9375:(t,r,e)=>{var n=e(5286),i=e(4728).onFreeze;e(3160)("freeze",(function(t){return function(r){return t&&n(r)?t(i(r)):r}}))},4882:(t,r,e)=>{var n=e(2110),i=e(8693).f;e(3160)("getOwnPropertyDescriptor",(function(){return function(t,r){return i(n(t),r)}}))},9622:(t,r,e)=>{e(3160)("getOwnPropertyNames",(function(){return e(9327).f}))},1520:(t,r,e)=>{var n=e(508),i=e(468);e(3160)("getPrototypeOf",(function(){return function(t){return i(n(t))}}))},9892:(t,r,e)=>{var n=e(5286);e(3160)("isExtensible",(function(t){return function(r){return!!n(r)&&(!t||t(r))}}))},4157:(t,r,e)=>{var n=e(5286);e(3160)("isFrozen",(function(t){return function(r){return!n(r)||!!t&&t(r)}}))},5095:(t,r,e)=>{var n=e(5286);e(3160)("isSealed",(function(t){return function(r){return!n(r)||!!t&&t(r)}}))},9176:(t,r,e)=>{var n=e(2985);n(n.S,"Object",{is:e(7195)})},7476:(t,r,e)=>{var n=e(508),i=e(7184);e(3160)("keys",(function(){return function(t){return i(n(t))}}))},4672:(t,r,e)=>{var n=e(5286),i=e(4728).onFreeze;e(3160)("preventExtensions",(function(t){return function(r){return t&&n(r)?t(i(r)):r}}))},3533:(t,r,e)=>{var n=e(5286),i=e(4728).onFreeze;e(3160)("seal",(function(t){return function(r){return t&&n(r)?t(i(r)):r}}))},8838:(t,r,e)=>{var n=e(2985);n(n.S,"Object",{setPrototypeOf:e(7375).set})},6253:(t,r,e)=>{"use strict";var n=e(1488),i={};i[e(6314)("toStringTag")]="z",i+""!="[object z]"&&e(7234)(Object.prototype,"toString",(function(){return"[object "+n(this)+"]"}),!0)},4299:(t,r,e)=>{var n=e(2985),i=e(7743);n(n.G+n.F*(parseFloat!=i),{parseFloat:i})},1084:(t,r,e)=>{var n=e(2985),i=e(5960);n(n.G+n.F*(parseInt!=i),{parseInt:i})},851:(t,r,e)=>{"use strict";var n,i,o,u,a=e(4461),s=e(3816),c=e(741),f=e(1488),l=e(2985),h=e(5286),p=e(4963),v=e(3328),d=e(3531),y=e(8364),g=e(4193).set,b=e(4351)(),m=e(3499),w=e(188),x=e(575),S=e(94),_="Promise",E=s.TypeError,O=s.process,P=O&&O.versions,A=P&&P.v8||"",M=s.Promise,F="process"==f(O),j=function(){},T=i=m.f,I=!!function(){try{var t=M.resolve(1),r=(t.constructor={})[e(6314)("species")]=function(t){t(j,j)};return(F||"function"==typeof PromiseRejectionEvent)&&t.then(j)instanceof r&&0!==A.indexOf("6.6")&&-1===x.indexOf("Chrome/66")}catch(t){}}(),R=function(t){var r;return!(!h(t)||"function"!=typeof(r=t.then))&&r},N=function(t,r){if(!t._n){t._n=!0;var e=t._c;b((function(){for(var n=t._v,i=1==t._s,o=0,u=function(r){var e,o,u,a=i?r.ok:r.fail,s=r.resolve,c=r.reject,f=r.domain;try{a?(i||(2==t._h&&D(t),t._h=1),!0===a?e=n:(f&&f.enter(),e=a(n),f&&(f.exit(),u=!0)),e===r.promise?c(E("Promise-chain cycle")):(o=R(e))?o.call(e,s,c):s(e)):c(n)}catch(t){f&&!u&&f.exit(),c(t)}};e.length>o;)u(e[o++]);t._c=[],t._n=!1,r&&!t._h&&L(t)}))}},L=function(t){g.call(s,(function(){var r,e,n,i=t._v,o=k(t);if(o&&(r=w((function(){F?O.emit("unhandledRejection",i,t):(e=s.onunhandledrejection)?e({promise:t,reason:i}):(n=s.console)&&n.error&&n.error("Unhandled promise rejection",i)})),t._h=F||k(t)?2:1),t._a=void 0,o&&r.e)throw r.v}))},k=function(t){return 1!==t._h&&0===(t._a||t._c).length},D=function(t){g.call(s,(function(){var r;F?O.emit("rejectionHandled",t):(r=s.onrejectionhandled)&&r({promise:t,reason:t._v})}))},B=function(t){var r=this;r._d||(r._d=!0,(r=r._w||r)._v=t,r._s=2,r._a||(r._a=r._c.slice()),N(r,!0))},U=function(t){var r,e=this;if(!e._d){e._d=!0,e=e._w||e;try{if(e===t)throw E("Promise can't be resolved itself");(r=R(t))?b((function(){var n={_w:e,_d:!1};try{r.call(t,c(U,n,1),c(B,n,1))}catch(t){B.call(n,t)}})):(e._v=t,e._s=1,N(e,!1))}catch(t){B.call({_w:e,_d:!1},t)}}};I||(M=function(t){v(this,M,_,"_h"),p(t),n.call(this);try{t(c(U,this,1),c(B,this,1))}catch(t){B.call(this,t)}},(n=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=e(4408)(M.prototype,{then:function(t,r){var e=T(y(this,M));return e.ok="function"!=typeof t||t,e.fail="function"==typeof r&&r,e.domain=F?O.domain:void 0,this._c.push(e),this._a&&this._a.push(e),this._s&&N(this,!1),e.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new n;this.promise=t,this.resolve=c(U,t,1),this.reject=c(B,t,1)},m.f=T=function(t){return t===M||t===u?new o(t):i(t)}),l(l.G+l.W+l.F*!I,{Promise:M}),e(2943)(M,_),e(2974)(_),u=e(5645).Promise,l(l.S+l.F*!I,_,{reject:function(t){var r=T(this);return(0,r.reject)(t),r.promise}}),l(l.S+l.F*(a||!I),_,{resolve:function(t){return S(a&&this===u?M:this,t)}}),l(l.S+l.F*!(I&&e(7462)((function(t){M.all(t).catch(j)}))),_,{all:function(t){var r=this,e=T(r),n=e.resolve,i=e.reject,o=w((function(){var e=[],o=0,u=1;d(t,!1,(function(t){var a=o++,s=!1;e.push(void 0),u++,r.resolve(t).then((function(t){s||(s=!0,e[a]=t,--u||n(e))}),i)})),--u||n(e)}));return o.e&&i(o.v),e.promise},race:function(t){var r=this,e=T(r),n=e.reject,i=w((function(){d(t,!1,(function(t){r.resolve(t).then(e.resolve,n)}))}));return i.e&&n(i.v),e.promise}})},1572:(t,r,e)=>{var n=e(2985),i=e(4963),o=e(7007),u=(e(3816).Reflect||{}).apply,a=Function.apply;n(n.S+n.F*!e(4253)((function(){u((function(){}))})),"Reflect",{apply:function(t,r,e){var n=i(t),s=o(e);return u?u(n,r,s):a.call(n,r,s)}})},2139:(t,r,e)=>{var n=e(2985),i=e(2503),o=e(4963),u=e(7007),a=e(5286),s=e(4253),c=e(4398),f=(e(3816).Reflect||{}).construct,l=s((function(){function t(){}return!(f((function(){}),[],t)instanceof t)})),h=!s((function(){f((function(){}))}));n(n.S+n.F*(l||h),"Reflect",{construct:function(t,r){o(t),u(r);var e=arguments.length<3?t:o(arguments[2]);if(h&&!l)return f(t,r,e);if(t==e){switch(r.length){case 0:return new t;case 1:return new t(r[0]);case 2:return new t(r[0],r[1]);case 3:return new t(r[0],r[1],r[2]);case 4:return new t(r[0],r[1],r[2],r[3])}var n=[null];return n.push.apply(n,r),new(c.apply(t,n))}var s=e.prototype,p=i(a(s)?s:Object.prototype),v=Function.apply.call(t,p,r);return a(v)?v:p}})},685:(t,r,e)=>{var n=e(9275),i=e(2985),o=e(7007),u=e(1689);i(i.S+i.F*e(4253)((function(){Reflect.defineProperty(n.f({},1,{value:1}),1,{value:2})})),"Reflect",{defineProperty:function(t,r,e){o(t),r=u(r,!0),o(e);try{return n.f(t,r,e),!0}catch(t){return!1}}})},5535:(t,r,e)=>{var n=e(2985),i=e(8693).f,o=e(7007);n(n.S,"Reflect",{deleteProperty:function(t,r){var e=i(o(t),r);return!(e&&!e.configurable)&&delete t[r]}})},7347:(t,r,e)=>{"use strict";var n=e(2985),i=e(7007),o=function(t){this._t=i(t),this._i=0;var r,e=this._k=[];for(r in t)e.push(r)};e(9988)(o,"Object",(function(){var t,r=this,e=r._k;do{if(r._i>=e.length)return{value:void 0,done:!0}}while(!((t=e[r._i++])in r._t));return{value:t,done:!1}})),n(n.S,"Reflect",{enumerate:function(t){return new o(t)}})},6633:(t,r,e)=>{var n=e(8693),i=e(2985),o=e(7007);i(i.S,"Reflect",{getOwnPropertyDescriptor:function(t,r){return n.f(o(t),r)}})},8989:(t,r,e)=>{var n=e(2985),i=e(468),o=e(7007);n(n.S,"Reflect",{getPrototypeOf:function(t){return i(o(t))}})},3049:(t,r,e)=>{var n=e(8693),i=e(468),o=e(9181),u=e(2985),a=e(5286),s=e(7007);u(u.S,"Reflect",{get:function t(r,e){var u,c,f=arguments.length<3?r:arguments[2];return s(r)===f?r[e]:(u=n.f(r,e))?o(u,"value")?u.value:void 0!==u.get?u.get.call(f):void 0:a(c=i(r))?t(c,e,f):void 0}})},8270:(t,r,e)=>{var n=e(2985);n(n.S,"Reflect",{has:function(t,r){return r in t}})},4510:(t,r,e)=>{var n=e(2985),i=e(7007),o=Object.isExtensible;n(n.S,"Reflect",{isExtensible:function(t){return i(t),!o||o(t)}})},3984:(t,r,e)=>{var n=e(2985);n(n.S,"Reflect",{ownKeys:e(7643)})},5769:(t,r,e)=>{var n=e(2985),i=e(7007),o=Object.preventExtensions;n(n.S,"Reflect",{preventExtensions:function(t){i(t);try{return o&&o(t),!0}catch(t){return!1}}})},6014:(t,r,e)=>{var n=e(2985),i=e(7375);i&&n(n.S,"Reflect",{setPrototypeOf:function(t,r){i.check(t,r);try{return i.set(t,r),!0}catch(t){return!1}}})},55:(t,r,e)=>{var n=e(9275),i=e(8693),o=e(468),u=e(9181),a=e(2985),s=e(681),c=e(7007),f=e(5286);a(a.S,"Reflect",{set:function t(r,e,a){var l,h,p=arguments.length<4?r:arguments[3],v=i.f(c(r),e);if(!v){if(f(h=o(r)))return t(h,e,a,p);v=s(0)}if(u(v,"value")){if(!1===v.writable||!f(p))return!1;if(l=i.f(p,e)){if(l.get||l.set||!1===l.writable)return!1;l.value=a,n.f(p,e,l)}else n.f(p,e,s(0,a));return!0}return void 0!==v.set&&(v.set.call(p,a),!0)}})},3946:(t,r,e)=>{var n=e(3816),i=e(266),o=e(9275).f,u=e(616).f,a=e(5364),s=e(3218),c=n.RegExp,f=c,l=c.prototype,h=/a/g,p=/a/g,v=new c(h)!==h;if(e(7057)&&(!v||e(4253)((function(){return p[e(6314)("match")]=!1,c(h)!=h||c(p)==p||"/a/i"!=c(h,"i")})))){c=function(t,r){var e=this instanceof c,n=a(t),o=void 0===r;return!e&&n&&t.constructor===c&&o?t:i(v?new f(n&&!o?t.source:t,r):f((n=t instanceof c)?t.source:t,n&&o?s.call(t):r),e?this:l,c)};for(var d=function(t){t in c||o(c,t,{configurable:!0,get:function(){return f[t]},set:function(r){f[t]=r}})},y=u(f),g=0;y.length>g;)d(y[g++]);l.constructor=c,c.prototype=l,e(7234)(n,"RegExp",c)}e(2974)("RegExp")},8269:(t,r,e)=>{"use strict";var n=e(1165);e(2985)({target:"RegExp",proto:!0,forced:n!==/./.exec},{exec:n})},6774:(t,r,e)=>{e(7057)&&"g"!=/./g.flags&&e(9275).f(RegExp.prototype,"flags",{configurable:!0,get:e(3218)})},1466:(t,r,e)=>{"use strict";var n=e(7007),i=e(875),o=e(6793),u=e(7787);e(8082)("match",1,(function(t,r,e,a){return[function(e){var n=t(this),i=null==e?void 0:e[r];return void 0!==i?i.call(e,n):new RegExp(e)[r](String(n))},function(t){var r=a(e,t,this);if(r.done)return r.value;var s=n(t),c=String(this);if(!s.global)return u(s,c);var f=s.unicode;s.lastIndex=0;for(var l,h=[],p=0;null!==(l=u(s,c));){var v=String(l[0]);h[p]=v,""===v&&(s.lastIndex=o(c,i(s.lastIndex),f)),p++}return 0===p?null:h}]}))},9357:(t,r,e)=>{"use strict";var n=e(7007),i=e(508),o=e(875),u=e(1467),a=e(6793),s=e(7787),c=Math.max,f=Math.min,l=Math.floor,h=/\$([$&`']|\d\d?|<[^>]*>)/g,p=/\$([$&`']|\d\d?)/g;e(8082)("replace",2,(function(t,r,e,v){return[function(n,i){var o=t(this),u=null==n?void 0:n[r];return void 0!==u?u.call(n,o,i):e.call(String(o),n,i)},function(t,r){var i=v(e,t,this,r);if(i.done)return i.value;var l=n(t),h=String(this),p="function"==typeof r;p||(r=String(r));var y=l.global;if(y){var g=l.unicode;l.lastIndex=0}for(var b=[];;){var m=s(l,h);if(null===m)break;if(b.push(m),!y)break;""===String(m[0])&&(l.lastIndex=a(h,o(l.lastIndex),g))}for(var w,x="",S=0,_=0;_<b.length;_++){m=b[_];for(var E=String(m[0]),O=c(f(u(m.index),h.length),0),P=[],A=1;A<m.length;A++)P.push(void 0===(w=m[A])?w:String(w));var M=m.groups;if(p){var F=[E].concat(P,O,h);void 0!==M&&F.push(M);var j=String(r.apply(void 0,F))}else j=d(E,h,O,P,M,r);O>=S&&(x+=h.slice(S,O)+j,S=O+E.length)}return x+h.slice(S)}];function d(t,r,n,o,u,a){var s=n+t.length,c=o.length,f=p;return void 0!==u&&(u=i(u),f=h),e.call(a,f,(function(e,i){var a;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return r.slice(0,n);case"'":return r.slice(s);case"<":a=u[i.slice(1,-1)];break;default:var f=+i;if(0===f)return e;if(f>c){var h=l(f/10);return 0===h?e:h<=c?void 0===o[h-1]?i.charAt(1):o[h-1]+i.charAt(1):e}a=o[f-1]}return void 0===a?"":a}))}}))},6142:(t,r,e)=>{"use strict";var n=e(7007),i=e(7195),o=e(7787);e(8082)("search",1,(function(t,r,e,u){return[function(e){var n=t(this),i=null==e?void 0:e[r];return void 0!==i?i.call(e,n):new RegExp(e)[r](String(n))},function(t){var r=u(e,t,this);if(r.done)return r.value;var a=n(t),s=String(this),c=a.lastIndex;i(c,0)||(a.lastIndex=0);var f=o(a,s);return i(a.lastIndex,c)||(a.lastIndex=c),null===f?-1:f.index}]}))},1876:(t,r,e)=>{"use strict";var n=e(5364),i=e(7007),o=e(8364),u=e(6793),a=e(875),s=e(7787),c=e(1165),f=e(4253),l=Math.min,h=[].push,p=4294967295,v=!f((function(){RegExp(p,"y")}));e(8082)("split",2,(function(t,r,e,f){var d;return d="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,r){var i=String(this);if(void 0===t&&0===r)return[];if(!n(t))return e.call(i,t,r);for(var o,u,a,s=[],f=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),l=0,v=void 0===r?p:r>>>0,d=new RegExp(t.source,f+"g");(o=c.call(d,i))&&!((u=d.lastIndex)>l&&(s.push(i.slice(l,o.index)),o.length>1&&o.index<i.length&&h.apply(s,o.slice(1)),a=o[0].length,l=u,s.length>=v));)d.lastIndex===o.index&&d.lastIndex++;return l===i.length?!a&&d.test("")||s.push(""):s.push(i.slice(l)),s.length>v?s.slice(0,v):s}:"0".split(void 0,0).length?function(t,r){return void 0===t&&0===r?[]:e.call(this,t,r)}:e,[function(e,n){var i=t(this),o=null==e?void 0:e[r];return void 0!==o?o.call(e,i,n):d.call(String(i),e,n)},function(t,r){var n=f(d,t,this,r,d!==e);if(n.done)return n.value;var c=i(t),h=String(this),y=o(c,RegExp),g=c.unicode,b=(c.ignoreCase?"i":"")+(c.multiline?"m":"")+(c.unicode?"u":"")+(v?"y":"g"),m=new y(v?c:"^(?:"+c.source+")",b),w=void 0===r?p:r>>>0;if(0===w)return[];if(0===h.length)return null===s(m,h)?[h]:[];for(var x=0,S=0,_=[];S<h.length;){m.lastIndex=v?S:0;var E,O=s(m,v?h:h.slice(S));if(null===O||(E=l(a(m.lastIndex+(v?0:S)),h.length))===x)S=u(h,S,g);else{if(_.push(h.slice(x,S)),_.length===w)return _;for(var P=1;P<=O.length-1;P++)if(_.push(O[P]),_.length===w)return _;S=x=E}}return _.push(h.slice(x)),_}]}))},6108:(t,r,e)=>{"use strict";e(6774);var n=e(7007),i=e(3218),o=e(7057),u="toString",a=/./.toString,s=function(t){e(7234)(RegExp.prototype,u,t,!0)};e(4253)((function(){return"/a/b"!=a.call({source:"a",flags:"b"})}))?s((function(){var t=n(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?i.call(t):void 0)})):a.name!=u&&s((function(){return a.call(this)}))},8184:(t,r,e)=>{"use strict";var n=e(9824),i=e(1616);t.exports=e(5795)("Set",(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(t){return n.def(i(this,"Set"),t=0===t?0:t,t)}},n)},856:(t,r,e)=>{"use strict";e(9395)("anchor",(function(t){return function(r){return t(this,"a","name",r)}}))},703:(t,r,e)=>{"use strict";e(9395)("big",(function(t){return function(){return t(this,"big","","")}}))},1539:(t,r,e)=>{"use strict";e(9395)("blink",(function(t){return function(){return t(this,"blink","","")}}))},5292:(t,r,e)=>{"use strict";e(9395)("bold",(function(t){return function(){return t(this,"b","","")}}))},9539:(t,r,e)=>{"use strict";var n=e(2985),i=e(4496)(!1);n(n.P,"String",{codePointAt:function(t){return i(this,t)}})},6620:(t,r,e)=>{"use strict";var n=e(2985),i=e(875),o=e(2094),u="endsWith",a="".endsWith;n(n.P+n.F*e(8852)(u),"String",{endsWith:function(t){var r=o(this,t,u),e=arguments.length>1?arguments[1]:void 0,n=i(r.length),s=void 0===e?n:Math.min(i(e),n),c=String(t);return a?a.call(r,c,s):r.slice(s-c.length,s)===c}})},6629:(t,r,e)=>{"use strict";e(9395)("fixed",(function(t){return function(){return t(this,"tt","","")}}))},3694:(t,r,e)=>{"use strict";e(9395)("fontcolor",(function(t){return function(r){return t(this,"font","color",r)}}))},7648:(t,r,e)=>{"use strict";e(9395)("fontsize",(function(t){return function(r){return t(this,"font","size",r)}}))},191:(t,r,e)=>{var n=e(2985),i=e(2337),o=String.fromCharCode,u=String.fromCodePoint;n(n.S+n.F*(!!u&&1!=u.length),"String",{fromCodePoint:function(t){for(var r,e=[],n=arguments.length,u=0;n>u;){if(r=+arguments[u++],i(r,1114111)!==r)throw RangeError(r+" is not a valid code point");e.push(r<65536?o(r):o(55296+((r-=65536)>>10),r%1024+56320))}return e.join("")}})},2850:(t,r,e)=>{"use strict";var n=e(2985),i=e(2094),o="includes";n(n.P+n.F*e(8852)(o),"String",{includes:function(t){return!!~i(this,t,o).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},7795:(t,r,e)=>{"use strict";e(9395)("italics",(function(t){return function(){return t(this,"i","","")}}))},9115:(t,r,e)=>{"use strict";var n=e(4496)(!0);e(2923)(String,"String",(function(t){this._t=String(t),this._i=0}),(function(){var t,r=this._t,e=this._i;return e>=r.length?{value:void 0,done:!0}:(t=n(r,e),this._i+=t.length,{value:t,done:!1})}))},4531:(t,r,e)=>{"use strict";e(9395)("link",(function(t){return function(r){return t(this,"a","href",r)}}))},8306:(t,r,e)=>{var n=e(2985),i=e(2110),o=e(875);n(n.S,"String",{raw:function(t){for(var r=i(t.raw),e=o(r.length),n=arguments.length,u=[],a=0;e>a;)u.push(String(r[a++])),a<n&&u.push(String(arguments[a]));return u.join("")}})},823:(t,r,e)=>{var n=e(2985);n(n.P,"String",{repeat:e(8595)})},3605:(t,r,e)=>{"use strict";e(9395)("small",(function(t){return function(){return t(this,"small","","")}}))},7732:(t,r,e)=>{"use strict";var n=e(2985),i=e(875),o=e(2094),u="startsWith",a="".startsWith;n(n.P+n.F*e(8852)(u),"String",{startsWith:function(t){var r=o(this,t,u),e=i(Math.min(arguments.length>1?arguments[1]:void 0,r.length)),n=String(t);return a?a.call(r,n,e):r.slice(e,e+n.length)===n}})},6780:(t,r,e)=>{"use strict";e(9395)("strike",(function(t){return function(){return t(this,"strike","","")}}))},9937:(t,r,e)=>{"use strict";e(9395)("sub",(function(t){return function(){return t(this,"sub","","")}}))},511:(t,r,e)=>{"use strict";e(9395)("sup",(function(t){return function(){return t(this,"sup","","")}}))},4564:(t,r,e)=>{"use strict";e(9599)("trim",(function(t){return function(){return t(this,3)}}))},5767:(t,r,e)=>{"use strict";var n=e(3816),i=e(9181),o=e(7057),u=e(2985),a=e(7234),s=e(4728).KEY,c=e(4253),f=e(3825),l=e(2943),h=e(3953),p=e(6314),v=e(8787),d=e(6074),y=e(5541),g=e(4302),b=e(7007),m=e(5286),w=e(508),x=e(2110),S=e(1689),_=e(681),E=e(2503),O=e(9327),P=e(8693),A=e(4548),M=e(9275),F=e(7184),j=P.f,T=M.f,I=O.f,R=n.Symbol,N=n.JSON,L=N&&N.stringify,k=p("_hidden"),D=p("toPrimitive"),B={}.propertyIsEnumerable,U=f("symbol-registry"),C=f("symbols"),G=f("op-symbols"),W=Object.prototype,V="function"==typeof R&&!!A.f,z=n.QObject,q=!z||!z.prototype||!z.prototype.findChild,H=o&&c((function(){return 7!=E(T({},"a",{get:function(){return T(this,"a",{value:7}).a}})).a}))?function(t,r,e){var n=j(W,r);n&&delete W[r],T(t,r,e),n&&t!==W&&T(W,r,n)}:T,$=function(t){var r=C[t]=E(R.prototype);return r._k=t,r},Y=V&&"symbol"==typeof R.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof R},J=function(t,r,e){return t===W&&J(G,r,e),b(t),r=S(r,!0),b(e),i(C,r)?(e.enumerable?(i(t,k)&&t[k][r]&&(t[k][r]=!1),e=E(e,{enumerable:_(0,!1)})):(i(t,k)||T(t,k,_(1,{})),t[k][r]=!0),H(t,r,e)):T(t,r,e)},K=function(t,r){b(t);for(var e,n=y(r=x(r)),i=0,o=n.length;o>i;)J(t,e=n[i++],r[e]);return t},X=function(t){var r=B.call(this,t=S(t,!0));return!(this===W&&i(C,t)&&!i(G,t))&&(!(r||!i(this,t)||!i(C,t)||i(this,k)&&this[k][t])||r)},Z=function(t,r){if(t=x(t),r=S(r,!0),t!==W||!i(C,r)||i(G,r)){var e=j(t,r);return!e||!i(C,r)||i(t,k)&&t[k][r]||(e.enumerable=!0),e}},Q=function(t){for(var r,e=I(x(t)),n=[],o=0;e.length>o;)i(C,r=e[o++])||r==k||r==s||n.push(r);return n},tt=function(t){for(var r,e=t===W,n=I(e?G:x(t)),o=[],u=0;n.length>u;)!i(C,r=n[u++])||e&&!i(W,r)||o.push(C[r]);return o};V||(a((R=function(){if(this instanceof R)throw TypeError("Symbol is not a constructor!");var t=h(arguments.length>0?arguments[0]:void 0),r=function(e){this===W&&r.call(G,e),i(this,k)&&i(this[k],t)&&(this[k][t]=!1),H(this,t,_(1,e))};return o&&q&&H(W,t,{configurable:!0,set:r}),$(t)}).prototype,"toString",(function(){return this._k})),P.f=Z,M.f=J,e(616).f=O.f=Q,e(4682).f=X,A.f=tt,o&&!e(4461)&&a(W,"propertyIsEnumerable",X,!0),v.f=function(t){return $(p(t))}),u(u.G+u.W+u.F*!V,{Symbol:R});for(var rt="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),et=0;rt.length>et;)p(rt[et++]);for(var nt=F(p.store),it=0;nt.length>it;)d(nt[it++]);u(u.S+u.F*!V,"Symbol",{for:function(t){return i(U,t+="")?U[t]:U[t]=R(t)},keyFor:function(t){if(!Y(t))throw TypeError(t+" is not a symbol!");for(var r in U)if(U[r]===t)return r},useSetter:function(){q=!0},useSimple:function(){q=!1}}),u(u.S+u.F*!V,"Object",{create:function(t,r){return void 0===r?E(t):K(E(t),r)},defineProperty:J,defineProperties:K,getOwnPropertyDescriptor:Z,getOwnPropertyNames:Q,getOwnPropertySymbols:tt});var ot=c((function(){A.f(1)}));u(u.S+u.F*ot,"Object",{getOwnPropertySymbols:function(t){return A.f(w(t))}}),N&&u(u.S+u.F*(!V||c((function(){var t=R();return"[null]"!=L([t])||"{}"!=L({a:t})||"{}"!=L(Object(t))}))),"JSON",{stringify:function(t){for(var r,e,n=[t],i=1;arguments.length>i;)n.push(arguments[i++]);if(e=r=n[1],(m(r)||void 0!==t)&&!Y(t))return g(r)||(r=function(t,r){if("function"==typeof e&&(r=e.call(this,t,r)),!Y(r))return r}),n[1]=r,L.apply(N,n)}}),R.prototype[D]||e(7728)(R.prototype,D,R.prototype.valueOf),l(R,"Symbol"),l(Math,"Math",!0),l(n.JSON,"JSON",!0)},142:(t,r,e)=>{"use strict";var n=e(2985),i=e(9383),o=e(1125),u=e(7007),a=e(2337),s=e(875),c=e(5286),f=e(3816).ArrayBuffer,l=e(8364),h=o.ArrayBuffer,p=o.DataView,v=i.ABV&&f.isView,d=h.prototype.slice,y=i.VIEW,g="ArrayBuffer";n(n.G+n.W+n.F*(f!==h),{ArrayBuffer:h}),n(n.S+n.F*!i.CONSTR,g,{isView:function(t){return v&&v(t)||c(t)&&y in t}}),n(n.P+n.U+n.F*e(4253)((function(){return!new h(2).slice(1,void 0).byteLength})),g,{slice:function(t,r){if(void 0!==d&&void 0===r)return d.call(u(this),t);for(var e=u(this).byteLength,n=a(t,e),i=a(void 0===r?e:r,e),o=new(l(this,h))(s(i-n)),c=new p(this),f=new p(o),v=0;n<i;)f.setUint8(v++,c.getUint8(n++));return o}}),e(2974)(g)},1786:(t,r,e)=>{var n=e(2985);n(n.G+n.W+n.F*!e(9383).ABV,{DataView:e(1125).DataView})},162:(t,r,e)=>{e(8440)("Float32",4,(function(t){return function(r,e,n){return t(this,r,e,n)}}))},3834:(t,r,e)=>{e(8440)("Float64",8,(function(t){return function(r,e,n){return t(this,r,e,n)}}))},4821:(t,r,e)=>{e(8440)("Int16",2,(function(t){return function(r,e,n){return t(this,r,e,n)}}))},1303:(t,r,e)=>{e(8440)("Int32",4,(function(t){return function(r,e,n){return t(this,r,e,n)}}))},5368:(t,r,e)=>{e(8440)("Int8",1,(function(t){return function(r,e,n){return t(this,r,e,n)}}))},9103:(t,r,e)=>{e(8440)("Uint16",2,(function(t){return function(r,e,n){return t(this,r,e,n)}}))},3318:(t,r,e)=>{e(8440)("Uint32",4,(function(t){return function(r,e,n){return t(this,r,e,n)}}))},6964:(t,r,e)=>{e(8440)("Uint8",1,(function(t){return function(r,e,n){return t(this,r,e,n)}}))},2152:(t,r,e)=>{e(8440)("Uint8",1,(function(t){return function(r,e,n){return t(this,r,e,n)}}),!0)},147:(t,r,e)=>{"use strict";var n,i=e(3816),o=e(50)(0),u=e(7234),a=e(4728),s=e(5345),c=e(3657),f=e(5286),l=e(1616),h=e(1616),p=!i.ActiveXObject&&"ActiveXObject"in i,v="WeakMap",d=a.getWeak,y=Object.isExtensible,g=c.ufstore,b=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},m={get:function(t){if(f(t)){var r=d(t);return!0===r?g(l(this,v)).get(t):r?r[this._i]:void 0}},set:function(t,r){return c.def(l(this,v),t,r)}},w=t.exports=e(5795)(v,b,m,c,!0,!0);h&&p&&(s((n=c.getConstructor(b,v)).prototype,m),a.NEED=!0,o(["delete","has","get","set"],(function(t){var r=w.prototype,e=r[t];u(r,t,(function(r,i){if(f(r)&&!y(r)){this._f||(this._f=new n);var o=this._f[t](r,i);return"set"==t?this:o}return e.call(this,r,i)}))})))},9192:(t,r,e)=>{"use strict";var n=e(3657),i=e(1616),o="WeakSet";e(5795)(o,(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(t){return n.def(i(this,o),t,!0)}},n,!1,!0)},1268:(t,r,e)=>{"use strict";var n=e(2985),i=e(3325),o=e(508),u=e(875),a=e(4963),s=e(6886);n(n.P,"Array",{flatMap:function(t){var r,e,n=o(this);return a(t),r=u(n.length),e=s(n,0),i(e,n,n,r,0,1,t,arguments[1]),e}}),e(7722)("flatMap")},4692:(t,r,e)=>{"use strict";var n=e(2985),i=e(3325),o=e(508),u=e(875),a=e(1467),s=e(6886);n(n.P,"Array",{flatten:function(){var t=arguments[0],r=o(this),e=u(r.length),n=s(r,0);return i(n,r,r,e,0,void 0===t?1:a(t)),n}}),e(7722)("flatten")},2773:(t,r,e)=>{"use strict";var n=e(2985),i=e(9315)(!0);n(n.P,"Array",{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),e(7722)("includes")},8267:(t,r,e)=>{var n=e(2985),i=e(4351)(),o=e(3816).process,u="process"==e(2032)(o);n(n.G,{asap:function(t){var r=u&&o.domain;i(r?r.bind(t):t)}})},2559:(t,r,e)=>{var n=e(2985),i=e(2032);n(n.S,"Error",{isError:function(t){return"Error"===i(t)}})},5575:(t,r,e)=>{var n=e(2985);n(n.G,{global:e(3816)})},525:(t,r,e)=>{e(1024)("Map")},8211:(t,r,e)=>{e(4881)("Map")},7698:(t,r,e)=>{var n=e(2985);n(n.P+n.R,"Map",{toJSON:e(6132)("Map")})},8865:(t,r,e)=>{var n=e(2985);n(n.S,"Math",{clamp:function(t,r,e){return Math.min(e,Math.max(r,t))}})},368:(t,r,e)=>{var n=e(2985);n(n.S,"Math",{DEG_PER_RAD:Math.PI/180})},6427:(t,r,e)=>{var n=e(2985),i=180/Math.PI;n(n.S,"Math",{degrees:function(t){return t*i}})},286:(t,r,e)=>{var n=e(2985),i=e(8757),o=e(4934);n(n.S,"Math",{fscale:function(t,r,e,n,u){return o(i(t,r,e,n,u))}})},2816:(t,r,e)=>{var n=e(2985);n(n.S,"Math",{iaddh:function(t,r,e,n){var i=t>>>0,o=e>>>0;return(r>>>0)+(n>>>0)+((i&o|(i|o)&~(i+o>>>0))>>>31)|0}})},2082:(t,r,e)=>{var n=e(2985);n(n.S,"Math",{imulh:function(t,r){var e=65535,n=+t,i=+r,o=n&e,u=i&e,a=n>>16,s=i>>16,c=(a*u>>>0)+(o*u>>>16);return a*s+(c>>16)+((o*s>>>0)+(c&e)>>16)}})},5986:(t,r,e)=>{var n=e(2985);n(n.S,"Math",{isubh:function(t,r,e,n){var i=t>>>0,o=e>>>0;return(r>>>0)-(n>>>0)-((~i&o|~(i^o)&i-o>>>0)>>>31)|0}})},6308:(t,r,e)=>{var n=e(2985);n(n.S,"Math",{RAD_PER_DEG:180/Math.PI})},9221:(t,r,e)=>{var n=e(2985),i=Math.PI/180;n(n.S,"Math",{radians:function(t){return t*i}})},3570:(t,r,e)=>{var n=e(2985);n(n.S,"Math",{scale:e(8757)})},3776:(t,r,e)=>{var n=e(2985);n(n.S,"Math",{signbit:function(t){return(t=+t)!=t?t:0==t?1/t==1/0:t>0}})},6754:(t,r,e)=>{var n=e(2985);n(n.S,"Math",{umulh:function(t,r){var e=65535,n=+t,i=+r,o=n&e,u=i&e,a=n>>>16,s=i>>>16,c=(a*u>>>0)+(o*u>>>16);return a*s+(c>>>16)+((o*s>>>0)+(c&e)>>>16)}})},8646:(t,r,e)=>{"use strict";var n=e(2985),i=e(508),o=e(4963),u=e(9275);e(7057)&&n(n.P+e(1670),"Object",{__defineGetter__:function(t,r){u.f(i(this),t,{get:o(r),enumerable:!0,configurable:!0})}})},2658:(t,r,e)=>{"use strict";var n=e(2985),i=e(508),o=e(4963),u=e(9275);e(7057)&&n(n.P+e(1670),"Object",{__defineSetter__:function(t,r){u.f(i(this),t,{set:o(r),enumerable:!0,configurable:!0})}})},3276:(t,r,e)=>{var n=e(2985),i=e(1131)(!0);n(n.S,"Object",{entries:function(t){return i(t)}})},8351:(t,r,e)=>{var n=e(2985),i=e(7643),o=e(2110),u=e(8693),a=e(2811);n(n.S,"Object",{getOwnPropertyDescriptors:function(t){for(var r,e,n=o(t),s=u.f,c=i(n),f={},l=0;c.length>l;)void 0!==(e=s(n,r=c[l++]))&&a(f,r,e);return f}})},6917:(t,r,e)=>{"use strict";var n=e(2985),i=e(508),o=e(1689),u=e(468),a=e(8693).f;e(7057)&&n(n.P+e(1670),"Object",{__lookupGetter__:function(t){var r,e=i(this),n=o(t,!0);do{if(r=a(e,n))return r.get}while(e=u(e))}})},372:(t,r,e)=>{"use strict";var n=e(2985),i=e(508),o=e(1689),u=e(468),a=e(8693).f;e(7057)&&n(n.P+e(1670),"Object",{__lookupSetter__:function(t){var r,e=i(this),n=o(t,!0);do{if(r=a(e,n))return r.set}while(e=u(e))}})},6409:(t,r,e)=>{var n=e(2985),i=e(1131)(!1);n(n.S,"Object",{values:function(t){return i(t)}})},6534:(t,r,e)=>{"use strict";var n=e(2985),i=e(3816),o=e(5645),u=e(4351)(),a=e(6314)("observable"),s=e(4963),c=e(7007),f=e(3328),l=e(4408),h=e(7728),p=e(3531),v=p.RETURN,d=function(t){return null==t?void 0:s(t)},y=function(t){var r=t._c;r&&(t._c=void 0,r())},g=function(t){return void 0===t._o},b=function(t){g(t)||(t._o=void 0,y(t))},m=function(t,r){c(t),this._c=void 0,this._o=t,t=new w(this);try{var e=r(t),n=e;null!=e&&("function"==typeof e.unsubscribe?e=function(){n.unsubscribe()}:s(e),this._c=e)}catch(r){return void t.error(r)}g(this)&&y(this)};m.prototype=l({},{unsubscribe:function(){b(this)}});var w=function(t){this._s=t};w.prototype=l({},{next:function(t){var r=this._s;if(!g(r)){var e=r._o;try{var n=d(e.next);if(n)return n.call(e,t)}catch(t){try{b(r)}finally{throw t}}}},error:function(t){var r=this._s;if(g(r))throw t;var e=r._o;r._o=void 0;try{var n=d(e.error);if(!n)throw t;t=n.call(e,t)}catch(t){try{y(r)}finally{throw t}}return y(r),t},complete:function(t){var r=this._s;if(!g(r)){var e=r._o;r._o=void 0;try{var n=d(e.complete);t=n?n.call(e,t):void 0}catch(t){try{y(r)}finally{throw t}}return y(r),t}}});var x=function(t){f(this,x,"Observable","_f")._f=s(t)};l(x.prototype,{subscribe:function(t){return new m(t,this._f)},forEach:function(t){var r=this;return new(o.Promise||i.Promise)((function(e,n){s(t);var i=r.subscribe({next:function(r){try{return t(r)}catch(t){n(t),i.unsubscribe()}},error:n,complete:e})}))}}),l(x,{from:function(t){var r="function"==typeof this?this:x,e=d(c(t)[a]);if(e){var n=c(e.call(t));return n.constructor===r?n:new r((function(t){return n.subscribe(t)}))}return new r((function(r){var e=!1;return u((function(){if(!e){try{if(p(t,!1,(function(t){if(r.next(t),e)return v}))===v)return}catch(t){if(e)throw t;return void r.error(t)}r.complete()}})),function(){e=!0}}))},of:function(){for(var t=0,r=arguments.length,e=new Array(r);t<r;)e[t]=arguments[t++];return new("function"==typeof this?this:x)((function(t){var r=!1;return u((function(){if(!r){for(var n=0;n<e.length;++n)if(t.next(e[n]),r)return;t.complete()}})),function(){r=!0}}))}}),h(x.prototype,a,(function(){return this})),n(n.G,{Observable:x}),e(2974)("Observable")},9865:(t,r,e)=>{"use strict";var n=e(2985),i=e(5645),o=e(3816),u=e(8364),a=e(94);n(n.P+n.R,"Promise",{finally:function(t){var r=u(this,i.Promise||o.Promise),e="function"==typeof t;return this.then(e?function(e){return a(r,t()).then((function(){return e}))}:t,e?function(e){return a(r,t()).then((function(){throw e}))}:t)}})},1898:(t,r,e)=>{"use strict";var n=e(2985),i=e(3499),o=e(188);n(n.S,"Promise",{try:function(t){var r=i.f(this),e=o(t);return(e.e?r.reject:r.resolve)(e.v),r.promise}})},3364:(t,r,e)=>{var n=e(133),i=e(7007),o=n.key,u=n.set;n.exp({defineMetadata:function(t,r,e,n){u(t,r,i(e),o(n))}})},1432:(t,r,e)=>{var n=e(133),i=e(7007),o=n.key,u=n.map,a=n.store;n.exp({deleteMetadata:function(t,r){var e=arguments.length<3?void 0:o(arguments[2]),n=u(i(r),e,!1);if(void 0===n||!n.delete(t))return!1;if(n.size)return!0;var s=a.get(r);return s.delete(e),!!s.size||a.delete(r)}})},4416:(t,r,e)=>{var n=e(8184),i=e(9490),o=e(133),u=e(7007),a=e(468),s=o.keys,c=o.key,f=function(t,r){var e=s(t,r),o=a(t);if(null===o)return e;var u=f(o,r);return u.length?e.length?i(new n(e.concat(u))):u:e};o.exp({getMetadataKeys:function(t){return f(u(t),arguments.length<2?void 0:c(arguments[1]))}})},6562:(t,r,e)=>{var n=e(133),i=e(7007),o=e(468),u=n.has,a=n.get,s=n.key,c=function(t,r,e){if(u(t,r,e))return a(t,r,e);var n=o(r);return null!==n?c(t,n,e):void 0};n.exp({getMetadata:function(t,r){return c(t,i(r),arguments.length<3?void 0:s(arguments[2]))}})},2213:(t,r,e)=>{var n=e(133),i=e(7007),o=n.keys,u=n.key;n.exp({getOwnMetadataKeys:function(t){return o(i(t),arguments.length<2?void 0:u(arguments[1]))}})},8681:(t,r,e)=>{var n=e(133),i=e(7007),o=n.get,u=n.key;n.exp({getOwnMetadata:function(t,r){return o(t,i(r),arguments.length<3?void 0:u(arguments[2]))}})},3471:(t,r,e)=>{var n=e(133),i=e(7007),o=e(468),u=n.has,a=n.key,s=function(t,r,e){if(u(t,r,e))return!0;var n=o(r);return null!==n&&s(t,n,e)};n.exp({hasMetadata:function(t,r){return s(t,i(r),arguments.length<3?void 0:a(arguments[2]))}})},4329:(t,r,e)=>{var n=e(133),i=e(7007),o=n.has,u=n.key;n.exp({hasOwnMetadata:function(t,r){return o(t,i(r),arguments.length<3?void 0:u(arguments[2]))}})},5159:(t,r,e)=>{var n=e(133),i=e(7007),o=e(4963),u=n.key,a=n.set;n.exp({metadata:function(t,r){return function(e,n){a(t,r,(void 0!==n?i:o)(e),u(n))}}})},9467:(t,r,e)=>{e(1024)("Set")},4837:(t,r,e)=>{e(4881)("Set")},8739:(t,r,e)=>{var n=e(2985);n(n.P+n.R,"Set",{toJSON:e(6132)("Set")})},7220:(t,r,e)=>{"use strict";var n=e(2985),i=e(4496)(!0),o=e(4253)((function(){return"𠮷"!=="𠮷".at(0)}));n(n.P+n.F*o,"String",{at:function(t){return i(this,t)}})},4208:(t,r,e)=>{"use strict";var n=e(2985),i=e(1355),o=e(875),u=e(5364),a=e(3218),s=RegExp.prototype,c=function(t,r){this._r=t,this._s=r};e(9988)(c,"RegExp String",(function(){var t=this._r.exec(this._s);return{value:t,done:null===t}})),n(n.P,"String",{matchAll:function(t){if(i(this),!u(t))throw TypeError(t+" is not a regexp!");var r=String(this),e="flags"in s?String(t.flags):a.call(t),n=new RegExp(t.source,~e.indexOf("g")?e:"g"+e);return n.lastIndex=o(t.lastIndex),new c(n,r)}})},2770:(t,r,e)=>{"use strict";var n=e(2985),i=e(5442),o=e(575),u=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(o);n(n.P+n.F*u,"String",{padEnd:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!1)}})},1784:(t,r,e)=>{"use strict";var n=e(2985),i=e(5442),o=e(575),u=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(o);n(n.P+n.F*u,"String",{padStart:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},5869:(t,r,e)=>{"use strict";e(9599)("trimLeft",(function(t){return function(){return t(this,1)}}),"trimStart")},4325:(t,r,e)=>{"use strict";e(9599)("trimRight",(function(t){return function(){return t(this,2)}}),"trimEnd")},9665:(t,r,e)=>{e(6074)("asyncIterator")},9593:(t,r,e)=>{e(6074)("observable")},8967:(t,r,e)=>{var n=e(2985);n(n.S,"System",{global:e(3816)})},4188:(t,r,e)=>{e(1024)("WeakMap")},7594:(t,r,e)=>{e(4881)("WeakMap")},3495:(t,r,e)=>{e(1024)("WeakSet")},9550:(t,r,e)=>{e(4881)("WeakSet")},1181:(t,r,e)=>{for(var n=e(6997),i=e(7184),o=e(7234),u=e(3816),a=e(7728),s=e(2803),c=e(6314),f=c("iterator"),l=c("toStringTag"),h=s.Array,p={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},v=i(p),d=0;d<v.length;d++){var y,g=v[d],b=p[g],m=u[g],w=m&&m.prototype;if(w&&(w[f]||a(w,f,h),w[l]||a(w,l,g),s[g]=h,b))for(y in n)w[y]||o(w,y,n[y],!0)}},4633:(t,r,e)=>{var n=e(2985),i=e(4193);n(n.G+n.B,{setImmediate:i.set,clearImmediate:i.clear})},2564:(t,r,e)=>{var n=e(3816),i=e(2985),o=e(575),u=[].slice,a=/MSIE .\./.test(o),s=function(t){return function(r,e){var n=arguments.length>2,i=!!n&&u.call(arguments,2);return t(n?function(){("function"==typeof r?r:Function(r)).apply(this,i)}:r,e)}};i(i.G+i.B+i.F*a,{setTimeout:s(n.setTimeout),setInterval:s(n.setInterval)})},1934:(t,r,e)=>{e(5767),e(8132),e(8388),e(7470),e(4882),e(1520),e(7476),e(9622),e(9375),e(3533),e(4672),e(4157),e(5095),e(9892),e(5115),e(9176),e(8838),e(6253),e(9730),e(6059),e(8377),e(1084),e(4299),e(1246),e(726),e(1901),e(5972),e(3403),e(2516),e(9371),e(6479),e(1736),e(1889),e(5177),e(6943),e(6503),e(6786),e(932),e(7526),e(1591),e(9073),e(347),e(579),e(4669),e(7710),e(5789),e(3514),e(9978),e(8472),e(6946),e(5068),e(413),e(191),e(8306),e(4564),e(9115),e(9539),e(6620),e(2850),e(823),e(7732),e(856),e(703),e(1539),e(5292),e(6629),e(3694),e(7648),e(7795),e(4531),e(3605),e(6780),e(9937),e(511),e(1822),e(9977),e(1031),e(6331),e(1560),e(774),e(522),e(8295),e(7842),e(110),e(75),e(4336),e(1802),e(8837),e(6773),e(5745),e(3057),e(3750),e(3369),e(9564),e(2e3),e(8977),e(2310),e(4899),e(1842),e(6997),e(3946),e(8269),e(6108),e(6774),e(1466),e(9357),e(6142),e(1876),e(851),e(8416),e(8184),e(147),e(9192),e(142),e(1786),e(5368),e(6964),e(2152),e(4821),e(9103),e(1303),e(3318),e(162),e(3834),e(1572),e(2139),e(685),e(5535),e(7347),e(3049),e(6633),e(8989),e(8270),e(4510),e(3984),e(5769),e(55),e(6014),e(2773),e(1268),e(4692),e(7220),e(1784),e(2770),e(5869),e(4325),e(4208),e(9665),e(9593),e(8351),e(6409),e(3276),e(8646),e(2658),e(6917),e(372),e(7698),e(8739),e(8211),e(4837),e(7594),e(9550),e(525),e(9467),e(4188),e(3495),e(5575),e(8967),e(2559),e(8865),e(368),e(6427),e(286),e(2816),e(5986),e(2082),e(6308),e(9221),e(3570),e(6754),e(3776),e(9865),e(1898),e(3364),e(1432),e(6562),e(4416),e(8681),e(2213),e(3471),e(4329),e(5159),e(8267),e(6534),e(2564),e(4633),e(1181),t.exports=e(5645)},5666:function(t,r,e){!function(r){"use strict";var e,n=Object.prototype,i=n.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},u=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",s=o.toStringTag||"@@toStringTag",c=r.regeneratorRuntime;if(c)t.exports=c;else{(c=r.regeneratorRuntime=t.exports).wrap=m;var f="suspendedStart",l="suspendedYield",h="executing",p="completed",v={},d={};d[u]=function(){return this};var y=Object.getPrototypeOf,g=y&&y(y(j([])));g&&g!==n&&i.call(g,u)&&(d=g);var b=_.prototype=x.prototype=Object.create(d);S.prototype=b.constructor=_,_.constructor=S,_[s]=S.displayName="GeneratorFunction",c.isGeneratorFunction=function(t){var r="function"==typeof t&&t.constructor;return!!r&&(r===S||"GeneratorFunction"===(r.displayName||r.name))},c.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,_):(t.__proto__=_,s in t||(t[s]="GeneratorFunction")),t.prototype=Object.create(b),t},c.awrap=function(t){return{__await:t}},E(O.prototype),O.prototype[a]=function(){return this},c.AsyncIterator=O,c.async=function(t,r,e,n){var i=new O(m(t,r,e,n));return c.isGeneratorFunction(r)?i:i.next().then((function(t){return t.done?t.value:i.next()}))},E(b),b[s]="Generator",b[u]=function(){return this},b.toString=function(){return"[object Generator]"},c.keys=function(t){var r=[];for(var e in t)r.push(e);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},c.values=j,F.prototype={constructor:F,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(M),!t)for(var r in this)"t"===r.charAt(0)&&i.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function n(n,i){return a.type="throw",a.arg=t,r.next=n,i&&(r.method="next",r.arg=e),!!i}for(var o=this.tryEntries.length-1;o>=0;--o){var u=this.tryEntries[o],a=u.completion;if("root"===u.tryLoc)return n("end");if(u.tryLoc<=this.prev){var s=i.call(u,"catchLoc"),c=i.call(u,"finallyLoc");if(s&&c){if(this.prev<u.catchLoc)return n(u.catchLoc,!0);if(this.prev<u.finallyLoc)return n(u.finallyLoc)}else if(s){if(this.prev<u.catchLoc)return n(u.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<u.finallyLoc)return n(u.finallyLoc)}}}},abrupt:function(t,r){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc<=this.prev&&i.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var o=n;break}}o&&("break"===t||"continue"===t)&&o.tryLoc<=r&&r<=o.finallyLoc&&(o=null);var u=o?o.completion:{};return u.type=t,u.arg=r,o?(this.method="next",this.next=o.finallyLoc,v):this.complete(u)},complete:function(t,r){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&r&&(this.next=r),v},finish:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),M(e),v}},catch:function(t){for(var r=this.tryEntries.length-1;r>=0;--r){var e=this.tryEntries[r];if(e.tryLoc===t){var n=e.completion;if("throw"===n.type){var i=n.arg;M(e)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:j(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}}}function m(t,r,e,n){var i=r&&r.prototype instanceof x?r:x,o=Object.create(i.prototype),u=new F(n||[]);return o._invoke=function(t,r,e){var n=f;return function(i,o){if(n===h)throw new Error("Generator is already running");if(n===p){if("throw"===i)throw o;return T()}for(e.method=i,e.arg=o;;){var u=e.delegate;if(u){var a=P(u,e);if(a){if(a===v)continue;return a}}if("next"===e.method)e.sent=e._sent=e.arg;else if("throw"===e.method){if(n===f)throw n=p,e.arg;e.dispatchException(e.arg)}else"return"===e.method&&e.abrupt("return",e.arg);n=h;var s=w(t,r,e);if("normal"===s.type){if(n=e.done?p:l,s.arg===v)continue;return{value:s.arg,done:e.done}}"throw"===s.type&&(n=p,e.method="throw",e.arg=s.arg)}}}(t,e,u),o}function w(t,r,e){try{return{type:"normal",arg:t.call(r,e)}}catch(t){return{type:"throw",arg:t}}}function x(){}function S(){}function _(){}function E(t){["next","throw","return"].forEach((function(r){t[r]=function(t){return this._invoke(r,t)}}))}function O(t){function e(r,n,o,u){var a=w(t[r],t,n);if("throw"!==a.type){var s=a.arg,c=s.value;return c&&"object"==typeof c&&i.call(c,"__await")?Promise.resolve(c.__await).then((function(t){e("next",t,o,u)}),(function(t){e("throw",t,o,u)})):Promise.resolve(c).then((function(t){s.value=t,o(s)}),u)}u(a.arg)}var n;"object"==typeof r.process&&r.process.domain&&(e=r.process.domain.bind(e)),this._invoke=function(t,r){function i(){return new Promise((function(n,i){e(t,r,n,i)}))}return n=n?n.then(i,i):i()}}function P(t,r){var n=t.iterator[r.method];if(n===e){if(r.delegate=null,"throw"===r.method){if(t.iterator.return&&(r.method="return",r.arg=e,P(t,r),"throw"===r.method))return v;r.method="throw",r.arg=new TypeError("The iterator does not provide a 'throw' method")}return v}var i=w(n,t.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,v;var o=i.arg;return o?o.done?(r[t.resultName]=o.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,v):o:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function A(t){var r={tryLoc:t[0]};1 in t&&(r.catchLoc=t[1]),2 in t&&(r.finallyLoc=t[2],r.afterLoc=t[3]),this.tryEntries.push(r)}function M(t){var r=t.completion||{};r.type="normal",delete r.arg,t.completion=r}function F(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(A,this),this.reset(!0)}function j(t){if(t){var r=t[u];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function r(){for(;++n<t.length;)if(i.call(t,n))return r.value=t[n],r.done=!1,r;return r.value=e,r.done=!0,r};return o.next=o}}return{next:T}}function T(){return{value:e,done:!0}}}("object"==typeof e.g?e.g:"object"==typeof window?window:"object"==typeof self?self:this)},2570:(t,r,e)=>{"use strict";e.r(r),e(6124);var n="undefined"!=typeof globalThis&&globalThis||"undefined"!=typeof self&&self||void 0!==n&&n,i="URLSearchParams"in n,o="Symbol"in n&&"iterator"in Symbol,u="FileReader"in n&&"Blob"in n&&function(){try{return new Blob,!0}catch(t){return!1}}(),a="FormData"in n,s="ArrayBuffer"in n;if(s)var c=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],f=ArrayBuffer.isView||function(t){return t&&c.indexOf(Object.prototype.toString.call(t))>-1};function l(t){if("string"!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(t)||""===t)throw new TypeError("Invalid character in header field name");return t.toLowerCase()}function h(t){return"string"!=typeof t&&(t=String(t)),t}function p(t){var r={next:function(){var r=t.shift();return{done:void 0===r,value:r}}};return o&&(r[Symbol.iterator]=function(){return r}),r}function v(t){this.map={},t instanceof v?t.forEach((function(t,r){this.append(r,t)}),this):Array.isArray(t)?t.forEach((function(t){this.append(t[0],t[1])}),this):t&&Object.getOwnPropertyNames(t).forEach((function(r){this.append(r,t[r])}),this)}function d(t){if(t.bodyUsed)return Promise.reject(new TypeError("Already read"));t.bodyUsed=!0}function y(t){return new Promise((function(r,e){t.onload=function(){r(t.result)},t.onerror=function(){e(t.error)}}))}function g(t){var r=new FileReader,e=y(r);return r.readAsArrayBuffer(t),e}function b(t){if(t.slice)return t.slice(0);var r=new Uint8Array(t.byteLength);return r.set(new Uint8Array(t)),r.buffer}function m(){return this.bodyUsed=!1,this._initBody=function(t){var r;this.bodyUsed=this.bodyUsed,this._bodyInit=t,t?"string"==typeof t?this._bodyText=t:u&&Blob.prototype.isPrototypeOf(t)?this._bodyBlob=t:a&&FormData.prototype.isPrototypeOf(t)?this._bodyFormData=t:i&&URLSearchParams.prototype.isPrototypeOf(t)?this._bodyText=t.toString():s&&u&&(r=t)&&DataView.prototype.isPrototypeOf(r)?(this._bodyArrayBuffer=b(t.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):s&&(ArrayBuffer.prototype.isPrototypeOf(t)||f(t))?this._bodyArrayBuffer=b(t):this._bodyText=t=Object.prototype.toString.call(t):this._bodyText="",this.headers.get("content-type")||("string"==typeof t?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):i&&URLSearchParams.prototype.isPrototypeOf(t)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},u&&(this.blob=function(){var t=d(this);if(t)return t;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?d(this)||(ArrayBuffer.isView(this._bodyArrayBuffer)?Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset,this._bodyArrayBuffer.byteOffset+this._bodyArrayBuffer.byteLength)):Promise.resolve(this._bodyArrayBuffer)):this.blob().then(g)}),this.text=function(){var t,r,e,n=d(this);if(n)return n;if(this._bodyBlob)return t=this._bodyBlob,e=y(r=new FileReader),r.readAsText(t),e;if(this._bodyArrayBuffer)return Promise.resolve(function(t){for(var r=new Uint8Array(t),e=new Array(r.length),n=0;n<r.length;n++)e[n]=String.fromCharCode(r[n]);return e.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},a&&(this.formData=function(){return this.text().then(S)}),this.json=function(){return this.text().then(JSON.parse)},this}v.prototype.append=function(t,r){t=l(t),r=h(r);var e=this.map[t];this.map[t]=e?e+", "+r:r},v.prototype.delete=function(t){delete this.map[l(t)]},v.prototype.get=function(t){return t=l(t),this.has(t)?this.map[t]:null},v.prototype.has=function(t){return this.map.hasOwnProperty(l(t))},v.prototype.set=function(t,r){this.map[l(t)]=h(r)},v.prototype.forEach=function(t,r){for(var e in this.map)this.map.hasOwnProperty(e)&&t.call(r,this.map[e],e,this)},v.prototype.keys=function(){var t=[];return this.forEach((function(r,e){t.push(e)})),p(t)},v.prototype.values=function(){var t=[];return this.forEach((function(r){t.push(r)})),p(t)},v.prototype.entries=function(){var t=[];return this.forEach((function(r,e){t.push([e,r])})),p(t)},o&&(v.prototype[Symbol.iterator]=v.prototype.entries);var w=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];function x(t,r){if(!(this instanceof x))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');var e,n,i=(r=r||{}).body;if(t instanceof x){if(t.bodyUsed)throw new TypeError("Already read");this.url=t.url,this.credentials=t.credentials,r.headers||(this.headers=new v(t.headers)),this.method=t.method,this.mode=t.mode,this.signal=t.signal,i||null==t._bodyInit||(i=t._bodyInit,t.bodyUsed=!0)}else this.url=String(t);if(this.credentials=r.credentials||this.credentials||"same-origin",!r.headers&&this.headers||(this.headers=new v(r.headers)),this.method=(n=(e=r.method||this.method||"GET").toUpperCase(),w.indexOf(n)>-1?n:e),this.mode=r.mode||this.mode||null,this.signal=r.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&i)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(i),!("GET"!==this.method&&"HEAD"!==this.method||"no-store"!==r.cache&&"no-cache"!==r.cache)){var o=/([?&])_=[^&]*/;o.test(this.url)?this.url=this.url.replace(o,"$1_="+(new Date).getTime()):this.url+=(/\?/.test(this.url)?"&":"?")+"_="+(new Date).getTime()}}function S(t){var r=new FormData;return t.trim().split("&").forEach((function(t){if(t){var e=t.split("="),n=e.shift().replace(/\+/g," "),i=e.join("=").replace(/\+/g," ");r.append(decodeURIComponent(n),decodeURIComponent(i))}})),r}function _(t,r){if(!(this instanceof _))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');r||(r={}),this.type="default",this.status=void 0===r.status?200:r.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in r?r.statusText:"",this.headers=new v(r.headers),this.url=r.url||"",this._initBody(t)}x.prototype.clone=function(){return new x(this,{body:this._bodyInit})},m.call(x.prototype),m.call(_.prototype),_.prototype.clone=function(){return new _(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new v(this.headers),url:this.url})},_.error=function(){var t=new _(null,{status:0,statusText:""});return t.type="error",t};var E=[301,302,303,307,308];_.redirect=function(t,r){if(-1===E.indexOf(r))throw new RangeError("Invalid status code");return new _(null,{status:r,headers:{location:t}})};var O=n.DOMException;try{new O}catch(t){(O=function(t,r){this.message=t,this.name=r;var e=Error(t);this.stack=e.stack}).prototype=Object.create(Error.prototype),O.prototype.constructor=O}function P(t,r){return new Promise((function(e,i){var o=new x(t,r);if(o.signal&&o.signal.aborted)return i(new O("Aborted","AbortError"));var a=new XMLHttpRequest;function c(){a.abort()}a.onload=function(){var t,r,n={status:a.status,statusText:a.statusText,headers:(t=a.getAllResponseHeaders()||"",r=new v,t.replace(/\r?\n[\t ]+/g," ").split("\r").map((function(t){return 0===t.indexOf("\n")?t.substr(1,t.length):t})).forEach((function(t){var e=t.split(":"),n=e.shift().trim();if(n){var i=e.join(":").trim();r.append(n,i)}})),r)};n.url="responseURL"in a?a.responseURL:n.headers.get("X-Request-URL");var i="response"in a?a.response:a.responseText;setTimeout((function(){e(new _(i,n))}),0)},a.onerror=function(){setTimeout((function(){i(new TypeError("Network request failed"))}),0)},a.ontimeout=function(){setTimeout((function(){i(new TypeError("Network request failed"))}),0)},a.onabort=function(){setTimeout((function(){i(new O("Aborted","AbortError"))}),0)},a.open(o.method,function(t){try{return""===t&&n.location.href?n.location.href:t}catch(r){return t}}(o.url),!0),"include"===o.credentials?a.withCredentials=!0:"omit"===o.credentials&&(a.withCredentials=!1),"responseType"in a&&(u?a.responseType="blob":s&&o.headers.get("Content-Type")&&-1!==o.headers.get("Content-Type").indexOf("application/octet-stream")&&(a.responseType="arraybuffer")),!r||"object"!=typeof r.headers||r.headers instanceof v?o.headers.forEach((function(t,r){a.setRequestHeader(r,t)})):Object.getOwnPropertyNames(r.headers).forEach((function(t){a.setRequestHeader(t,h(r.headers[t]))})),o.signal&&(o.signal.addEventListener("abort",c),a.onreadystatechange=function(){4===a.readyState&&o.signal.removeEventListener("abort",c)}),a.send(void 0===o._bodyInit?null:o._bodyInit)}))}P.polyfill=!0,n.fetch||(n.fetch=P,n.Headers=v,n.Request=x,n.Response=_)}},r={};function e(n){if(r[n])return r[n].exports;var i=r[n]={exports:{}};return t[n].call(i.exports,i,i.exports,e),i.exports}return e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e(2570)})();
\ No newline at end of file
diff --git a/website/public/js/polyfills.bundle.js.LICENSE.txt b/website/public/js/polyfills.bundle.js.LICENSE.txt
new file mode 100644
index 0000000..e2e1c44
--- /dev/null
+++ b/website/public/js/polyfills.bundle.js.LICENSE.txt
@@ -0,0 +1,1331 @@
+/*!********************************!*\
+  !*** ./public/js/polyfills.js ***!
+  \********************************/
+
+/*!**************************************!*\
+  !*** ./node_modules/core-js/shim.js ***!
+  \**************************************/
+
+/*!********************************************!*\
+  !*** ./node_modules/whatwg-fetch/fetch.js ***!
+  \********************************************/
+
+/*!**********************************************!*\
+  !*** ./node_modules/core-js/modules/_cof.js ***!
+  \**********************************************/
+
+/*!**********************************************!*\
+  !*** ./node_modules/core-js/modules/_ctx.js ***!
+  \**********************************************/
+
+/*!**********************************************!*\
+  !*** ./node_modules/core-js/modules/_has.js ***!
+  \**********************************************/
+
+/*!**********************************************!*\
+  !*** ./node_modules/core-js/modules/_uid.js ***!
+  \**********************************************/
+
+/*!**********************************************!*\
+  !*** ./node_modules/core-js/modules/_wks.js ***!
+  \**********************************************/
+
+/*!***********************************************!*\
+  !*** ./node_modules/core-js/modules/_bind.js ***!
+  \***********************************************/
+
+/*!***********************************************!*\
+  !*** ./node_modules/core-js/modules/_core.js ***!
+  \***********************************************/
+
+/*!***********************************************!*\
+  !*** ./node_modules/core-js/modules/_hide.js ***!
+  \***********************************************/
+
+/*!***********************************************!*\
+  !*** ./node_modules/core-js/modules/_html.js ***!
+  \***********************************************/
+
+/*!***********************************************!*\
+  !*** ./node_modules/core-js/modules/_meta.js ***!
+  \***********************************************/
+
+/*!***********************************************!*\
+  !*** ./node_modules/core-js/modules/_task.js ***!
+  \***********************************************/
+
+/*!************************************************!*\
+  !*** ./node_modules/core-js/modules/_fails.js ***!
+  \************************************************/
+
+/*!************************************************!*\
+  !*** ./node_modules/core-js/modules/_flags.js ***!
+  \************************************************/
+
+/*!************************************************!*\
+  !*** ./node_modules/core-js/modules/_typed.js ***!
+  \************************************************/
+
+/*!*************************************************!*\
+  !*** ./node_modules/core-js/modules/_export.js ***!
+  \*************************************************/
+
+/*!*************************************************!*\
+  !*** ./node_modules/core-js/modules/_for-of.js ***!
+  \*************************************************/
+
+/*!*************************************************!*\
+  !*** ./node_modules/core-js/modules/_global.js ***!
+  \*************************************************/
+
+/*!*************************************************!*\
+  !*** ./node_modules/core-js/modules/_invoke.js ***!
+  \*************************************************/
+
+/*!*************************************************!*\
+  !*** ./node_modules/core-js/modules/_shared.js ***!
+  \*************************************************/
+
+/*!*************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.map.js ***!
+  \*************************************************/
+
+/*!*************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.set.js ***!
+  \*************************************************/
+
+/*!**************************************************!*\
+  !*** ./node_modules/babel-polyfill/lib/index.js ***!
+  \**************************************************/
+
+/*!**************************************************!*\
+  !*** ./node_modules/core-js/fn/regexp/escape.js ***!
+  \**************************************************/
+
+/*!**************************************************!*\
+  !*** ./node_modules/core-js/modules/_classof.js ***!
+  \**************************************************/
+
+/*!**************************************************!*\
+  !*** ./node_modules/core-js/modules/_defined.js ***!
+  \**************************************************/
+
+/*!**************************************************!*\
+  !*** ./node_modules/core-js/modules/_iobject.js ***!
+  \**************************************************/
+
+/*!**************************************************!*\
+  !*** ./node_modules/core-js/modules/_library.js ***!
+  \**************************************************/
+
+/*!**************************************************!*\
+  !*** ./node_modules/core-js/modules/_perform.js ***!
+  \**************************************************/
+
+/*!**************************************************!*\
+  !*** ./node_modules/core-js/modules/_wks-ext.js ***!
+  \**************************************************/
+
+/*!**************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.asap.js ***!
+  \**************************************************/
+
+/*!***************************************************!*\
+  !*** ./node_modules/core-js/modules/_is-array.js ***!
+  \***************************************************/
+
+/*!***************************************************!*\
+  !*** ./node_modules/core-js/modules/_metadata.js ***!
+  \***************************************************/
+
+/*!***************************************************!*\
+  !*** ./node_modules/core-js/modules/_own-keys.js ***!
+  \***************************************************/
+
+/*!***************************************************!*\
+  !*** ./node_modules/core-js/modules/_redefine.js ***!
+  \***************************************************/
+
+/*!***************************************************!*\
+  !*** ./node_modules/core-js/modules/_replacer.js ***!
+  \***************************************************/
+
+/*!***************************************************!*\
+  !*** ./node_modules/core-js/modules/_to-index.js ***!
+  \***************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/_an-object.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/_enum-keys.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/_is-object.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/_is-regexp.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/_iter-call.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/_iter-step.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/_iterators.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/_math-sign.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/_microtask.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/_object-dp.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/_parse-int.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/_set-proto.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/_string-at.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/_string-ws.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/_to-length.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/_to-object.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.symbol.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.global.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.map.of.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.set.of.js ***!
+  \****************************************************/
+
+/*!****************************************************!*\
+  !*** ./node_modules/core-js/modules/web.timers.js ***!
+  \****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_a-function.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_array-fill.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_collection.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_dom-create.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_fix-re-wks.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_is-integer.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_math-expm1.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_math-log1p.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_math-scale.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_object-dps.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_object-gpo.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_object-pie.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_object-sap.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_same-value.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_shared-key.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_string-pad.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_to-integer.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_to-iobject.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_user-agent.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/_wks-define.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.promise.js ***!
+  \*****************************************************/
+
+/*!*****************************************************!*\
+  !*** ./node_modules/regenerator-runtime/runtime.js ***!
+  \*****************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/_an-instance.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/_descriptors.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/_iter-create.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/_iter-define.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/_iter-detect.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/_math-fround.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/_object-gopd.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/_object-gopn.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/_object-gops.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/_object-keys.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/_parse-float.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/_regexp-exec.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/_set-species.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/_string-html.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/_string-trim.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/_typed-array.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.of.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.date.now.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.weak-map.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.weak-set.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.map.from.js ***!
+  \******************************************************/
+
+/*!******************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.set.from.js ***!
+  \******************************************************/
+
+/*!*******************************************************!*\
+  !*** ./node_modules/core-js/modules/_array-reduce.js ***!
+  \*******************************************************/
+
+/*!*******************************************************!*\
+  !*** ./node_modules/core-js/modules/_redefine-all.js ***!
+  \*******************************************************/
+
+/*!*******************************************************!*\
+  !*** ./node_modules/core-js/modules/_to-primitive.js ***!
+  \*******************************************************/
+
+/*!*******************************************************!*\
+  !*** ./node_modules/core-js/modules/_typed-buffer.js ***!
+  \*******************************************************/
+
+/*!*******************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.map.js ***!
+  \*******************************************************/
+
+/*!*******************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.math.cbrt.js ***!
+  \*******************************************************/
+
+/*!*******************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.math.cosh.js ***!
+  \*******************************************************/
+
+/*!*******************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.math.imul.js ***!
+  \*******************************************************/
+
+/*!*******************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.math.log2.js ***!
+  \*******************************************************/
+
+/*!*******************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.math.sign.js ***!
+  \*******************************************************/
+
+/*!*******************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.math.sinh.js ***!
+  \*******************************************************/
+
+/*!*******************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.math.tanh.js ***!
+  \*******************************************************/
+
+/*!*******************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.object.is.js ***!
+  \*******************************************************/
+
+/*!*******************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.parse-int.js ***!
+  \*******************************************************/
+
+/*!*******************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.string.at.js ***!
+  \*******************************************************/
+
+/*!*******************************************************!*\
+  !*** ./node_modules/core-js/modules/web.immediate.js ***!
+  \*******************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/_array-methods.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/_enum-bug-keys.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/_is-array-iter.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/_object-assign.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/_object-create.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/_property-desc.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/_strict-method.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/_string-repeat.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.fill.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.find.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.from.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.join.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.some.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.sort.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.math.acosh.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.math.asinh.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.math.atanh.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.math.clz32.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.math.expm1.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.math.hypot.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.math.log10.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.math.log1p.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.math.trunc.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.big.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.raw.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.sub.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.sup.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.math.clamp.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.math.iaddh.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.math.imulh.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.math.isubh.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.math.scale.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.math.umulh.js ***!
+  \********************************************************/
+
+/*!********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.observable.js ***!
+  \********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/_a-number-value.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/_array-includes.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/_ie8-dom-define.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/_string-context.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.every.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.slice.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.math.fround.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.object.keys.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.object.seal.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.parse-float.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.reflect.get.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.reflect.has.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.reflect.set.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.regexp.exec.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.bold.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.link.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.trim.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.map.to-json.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.math.fscale.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.promise.try.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.set.to-json.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.weak-map.of.js ***!
+  \*********************************************************/
+
+/*!*********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.weak-set.of.js ***!
+  \*********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/_collection-weak.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/_create-property.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/_fails-is-regexp.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/_object-gopn-ext.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/_object-to-array.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/_promise-resolve.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.filter.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.reduce.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.date.to-json.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.regexp.flags.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.regexp.match.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.regexp.split.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.blink.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.fixed.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.small.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.math.degrees.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.math.radians.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.math.signbit.js ***!
+  \**********************************************************/
+
+/*!**********************************************************!*\
+  !*** ./node_modules/core-js/modules/web.dom.iterable.js ***!
+  \**********************************************************/
+
+/*!***********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.species.js ***!
+  \***********************************************************/
+
+/*!***********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.function.bind.js ***!
+  \***********************************************************/
+
+/*!***********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.function.name.js ***!
+  \***********************************************************/
+
+/*!***********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.number.is-nan.js ***!
+  \***********************************************************/
+
+/*!***********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.object.assign.js ***!
+  \***********************************************************/
+
+/*!***********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.object.create.js ***!
+  \***********************************************************/
+
+/*!***********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.object.freeze.js ***!
+  \***********************************************************/
+
+/*!***********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.reflect.apply.js ***!
+  \***********************************************************/
+
+/*!***********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.regexp.search.js ***!
+  \***********************************************************/
+
+/*!***********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.anchor.js ***!
+  \***********************************************************/
+
+/*!***********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.repeat.js ***!
+  \***********************************************************/
+
+/*!***********************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.strike.js ***!
+  \***********************************************************/
+
+/*!***********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.array.flatten.js ***!
+  \***********************************************************/
+
+/*!***********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.object.values.js ***!
+  \***********************************************************/
+
+/*!***********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.system.global.js ***!
+  \***********************************************************/
+
+/*!***********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.weak-map.from.js ***!
+  \***********************************************************/
+
+/*!***********************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.weak-set.from.js ***!
+  \***********************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/_array-copy-within.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/_collection-strong.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/_date-to-primitive.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/_object-forced-pam.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/_set-collection-of.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/_set-to-string-tag.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/_to-absolute-index.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/core.regexp.escape.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.for-each.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.index-of.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.is-array.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.iterator.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.date.to-string.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.number.epsilon.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.regexp.replace.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.italics.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.array.flat-map.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.array.includes.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.error.is-error.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.object.entries.js ***!
+  \************************************************************/
+
+/*!************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.string.pad-end.js ***!
+  \************************************************************/
+
+/*!*************************************************************!*\
+  !*** ./node_modules/core-js/modules/_add-to-unscopables.js ***!
+  \*************************************************************/
+
+/*!*************************************************************!*\
+  !*** ./node_modules/core-js/modules/_collection-to-json.js ***!
+  \*************************************************************/
+
+/*!*************************************************************!*\
+  !*** ./node_modules/core-js/modules/_date-to-iso-string.js ***!
+  \*************************************************************/
+
+/*!*************************************************************!*\
+  !*** ./node_modules/core-js/modules/_flatten-into-array.js ***!
+  \*************************************************************/
+
+/*!*************************************************************!*\
+  !*** ./node_modules/core-js/modules/_function-to-string.js ***!
+  \*************************************************************/
+
+/*!*************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.number.to-fixed.js ***!
+  \*************************************************************/
+
+/*!*************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.fontsize.js ***!
+  \*************************************************************/
+
+/*!*************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.includes.js ***!
+  \*************************************************************/
+
+/*!*************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.iterator.js ***!
+  \*************************************************************/
+
+/*!*************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.typed.data-view.js ***!
+  \*************************************************************/
+
+/*!*************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.promise.finally.js ***!
+  \*************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/_array-from-iterable.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/_inherit-if-required.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/_set-collection-from.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/_species-constructor.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/_validate-collection.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.find-index.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.number.is-finite.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.number.parse-int.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.object.is-frozen.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.object.is-sealed.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.object.to-string.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.reflect.own-keys.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.regexp.to-string.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.ends-with.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.fontcolor.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.typed.int8-array.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.math.deg-per-rad.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.math.rad-per-deg.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.reflect.metadata.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.string.match-all.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.string.pad-start.js ***!
+  \**************************************************************/
+
+/*!**************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.string.trim-left.js ***!
+  \**************************************************************/
+
+/*!***************************************************************!*\
+  !*** ./node_modules/core-js/modules/_advance-string-index.js ***!
+  \***************************************************************/
+
+/*!***************************************************************!*\
+  !*** ./node_modules/core-js/modules/_array-species-create.js ***!
+  \***************************************************************/
+
+/*!***************************************************************!*\
+  !*** ./node_modules/core-js/modules/_object-keys-internal.js ***!
+  \***************************************************************/
+
+/*!***************************************************************!*\
+  !*** ./node_modules/core-js/modules/_regexp-exec-abstract.js ***!
+  \***************************************************************/
+
+/*!***************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.copy-within.js ***!
+  \***************************************************************/
+
+/*!***************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.date.to-primitive.js ***!
+  \***************************************************************/
+
+/*!***************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.number.is-integer.js ***!
+  \***************************************************************/
+
+/*!***************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.reflect.construct.js ***!
+  \***************************************************************/
+
+/*!***************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.reflect.enumerate.js ***!
+  \***************************************************************/
+
+/*!***************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.typed.int16-array.js ***!
+  \***************************************************************/
+
+/*!***************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.typed.int32-array.js ***!
+  \***************************************************************/
+
+/*!***************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.typed.uint8-array.js ***!
+  \***************************************************************/
+
+/*!***************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.string.trim-right.js ***!
+  \***************************************************************/
+
+/*!***************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.symbol.observable.js ***!
+  \***************************************************************/
+
+/*!****************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.reduce-right.js ***!
+  \****************************************************************/
+
+/*!****************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.date.to-iso-string.js ***!
+  \****************************************************************/
+
+/*!****************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.number.constructor.js ***!
+  \****************************************************************/
+
+/*!****************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.number.parse-float.js ***!
+  \****************************************************************/
+
+/*!****************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.regexp.constructor.js ***!
+  \****************************************************************/
+
+/*!****************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.starts-with.js ***!
+  \****************************************************************/
+
+/*!****************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.typed.array-buffer.js ***!
+  \****************************************************************/
+
+/*!****************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.typed.uint16-array.js ***!
+  \****************************************************************/
+
+/*!****************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.typed.uint32-array.js ***!
+  \****************************************************************/
+
+/*!*****************************************************************!*\
+  !*** ./node_modules/core-js/modules/_new-promise-capability.js ***!
+  \*****************************************************************/
+
+/*!*****************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.array.last-index-of.js ***!
+  \*****************************************************************/
+
+/*!*****************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.number.to-precision.js ***!
+  \*****************************************************************/
+
+/*!*****************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.typed.float32-array.js ***!
+  \*****************************************************************/
+
+/*!*****************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.typed.float64-array.js ***!
+  \*****************************************************************/
+
+/*!******************************************************************!*\
+  !*** ./node_modules/core-js/modules/core.get-iterator-method.js ***!
+  \******************************************************************/
+
+/*!******************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.object.is-extensible.js ***!
+  \******************************************************************/
+
+/*!******************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.code-point-at.js ***!
+  \******************************************************************/
+
+/*!******************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.object.define-getter.js ***!
+  \******************************************************************/
+
+/*!******************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.object.define-setter.js ***!
+  \******************************************************************/
+
+/*!******************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.object.lookup-getter.js ***!
+  \******************************************************************/
+
+/*!******************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.object.lookup-setter.js ***!
+  \******************************************************************/
+
+/*!******************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.reflect.get-metadata.js ***!
+  \******************************************************************/
+
+/*!******************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.reflect.has-metadata.js ***!
+  \******************************************************************/
+
+/*!*******************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.function.has-instance.js ***!
+  \*******************************************************************/
+
+/*!*******************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.reflect.is-extensible.js ***!
+  \*******************************************************************/
+
+/*!*******************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.symbol.async-iterator.js ***!
+  \*******************************************************************/
+
+/*!********************************************************************!*\
+  !*** ./node_modules/core-js/modules/_array-species-constructor.js ***!
+  \********************************************************************/
+
+/*!********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.number.is-safe-integer.js ***!
+  \********************************************************************/
+
+/*!********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.object.define-property.js ***!
+  \********************************************************************/
+
+/*!********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.string.from-code-point.js ***!
+  \********************************************************************/
+
+/*!*********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.number.max-safe-integer.js ***!
+  \*********************************************************************/
+
+/*!*********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.number.min-safe-integer.js ***!
+  \*********************************************************************/
+
+/*!*********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.object.get-prototype-of.js ***!
+  \*********************************************************************/
+
+/*!*********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.object.set-prototype-of.js ***!
+  \*********************************************************************/
+
+/*!*********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.reflect.define-property.js ***!
+  \*********************************************************************/
+
+/*!*********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.reflect.delete-property.js ***!
+  \*********************************************************************/
+
+/*!*********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.reflect.define-metadata.js ***!
+  \*********************************************************************/
+
+/*!*********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.reflect.delete-metadata.js ***!
+  \*********************************************************************/
+
+/*!**********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.object.define-properties.js ***!
+  \**********************************************************************/
+
+/*!**********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.reflect.get-prototype-of.js ***!
+  \**********************************************************************/
+
+/*!**********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.reflect.set-prototype-of.js ***!
+  \**********************************************************************/
+
+/*!**********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.reflect.get-own-metadata.js ***!
+  \**********************************************************************/
+
+/*!**********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.reflect.has-own-metadata.js ***!
+  \**********************************************************************/
+
+/*!***********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.object.prevent-extensions.js ***!
+  \***********************************************************************/
+
+/*!***********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.typed.uint8-clamped-array.js ***!
+  \***********************************************************************/
+
+/*!***********************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.reflect.get-metadata-keys.js ***!
+  \***********************************************************************/
+
+/*!************************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.reflect.prevent-extensions.js ***!
+  \************************************************************************/
+
+/*!***************************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.object.get-own-property-names.js ***!
+  \***************************************************************************/
+
+/*!***************************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js ***!
+  \***************************************************************************/
+
+/*!********************************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.object.get-own-property-descriptor.js ***!
+  \********************************************************************************/
+
+/*!*********************************************************************************!*\
+  !*** ./node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js ***!
+  \*********************************************************************************/
+
+/*!*********************************************************************************!*\
+  !*** ./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js ***!
+  \*********************************************************************************/
diff --git a/website/public/js/polyfills.js b/website/public/js/polyfills.js
new file mode 100644
index 0000000..92cd477
--- /dev/null
+++ b/website/public/js/polyfills.js
@@ -0,0 +1,2 @@
+import 'babel-polyfill';
+import 'whatwg-fetch';
\ No newline at end of file
diff --git a/website/public/js/zcu-heatmap.js b/website/public/js/zcu-heatmap.js
deleted file mode 100644
index b12c204..0000000
--- a/website/public/js/zcu-heatmap.js
+++ /dev/null
@@ -1,886 +0,0 @@
-/* global L */
-/* global $ */
-
-var mymap
-var heatmapLayer = null
-var markersLayer = null
-
-// values for arrow keys
-const arrowKeyLEFT = 37
-const arrowKeyRIGHT = 39
-
-var startX = 49.7248
-var startY = 13.3521
-var startZoom = 17
-
-var dataSourceRoute
-let positionsSourceRoute
-
-let currentTime
-
-let currentDate
-
-var timer
-var isAnimationRunning = false
-var data = []
-
-//
-// info = {
-//  DATASETNAME: {
-//    items: Array,
-//    number: Number,
-//    datasetName: String
-// }
-// }
-//
-var info = []
-let currentPageInPopup = 0
-
-// dictionary for names of datasets
-const datasetDictNameDisplayName = {}
-var datasetSelected = []
-
-// data only for one day
-let lockedDay = false
-
-// loading information for async operations
-let loading = 0
-
-// default loader showup delay
-const defaultLoaderDelay = 1000
-
-// marks for all datasets
-const dataSourceMarks = {}
-
-const globalMarkersHolder = {}
-// all marker from which popup was removed
-// contains: {key:[L.circle,L.pupup]}
-// key: x and y, x + '' + y string
-let globalMarkersChanged = {}
-
-const globalPopup = {
-  coord: {
-    lat: 0,
-    lng: 0
-  },
-  _popup: null
-}
-
-
-
-
-function onDocumentReady () {
-  $('#dropdown-dataset').on('click', function (e) {
-    e.stopPropagation()
-  })
-
-  $('#btn-update-heatmap').prop('name', '')
-  changeCurrentTime()
-  changeCurrentDate()
-  onValueChangeRegister()
-  onArrowLeftRightKeysDownRegister()
-}
-
-
-
-
-/* ------------ DATA FETCHERS ------------ */
-
-const fetchByNameDate = async (baseRoute, name, date, currentTime) => {
-  const headers = new Headers()
-  const myRequest = new Request(baseRoute + '/' + name + '/' + date + '/' + currentTime, {
-    method: 'GET',
-    headers: headers
-  })
-  const beforeJson = await fetch(myRequest)
-
-  return beforeJson.json()
-}
-
-const fetchDataSourceMarks = async (positionRoute, datasetName) => {
-  const headers = new Headers()
-  const myRequest = new Request(positionRoute + '/' + datasetName, {
-    method: 'GET',
-    headers: headers
-  })
-  const beforeJson = await fetch(myRequest)
-
-  return beforeJson.json()
-}
-
-async function preload (time, change, date) {
-  loadingY()
-
-  for (let nTime = time + change; nTime >= 0 && nTime <= 23; nTime = nTime + change) {
-    if (!data[nTime]) {
-      data[nTime] = {}
-    }
-
-    datasetSelected.forEach(async (datasetName) => {
-      if (!data[nTime][datasetName]) {
-        data[nTime][datasetName] = await fetchByNameDate(dataSourceRoute, datasetName, date, nTime)
-      }
-    })
-  }
-
-  loadingN()
-}
-
-/**
- * Load and display heatmap layer for current data
- * 
- * @param {string} opendataRoute route to dataset source
- * @param {string} positionsRoute  route to dataset postitions source
- */
-async function loadCurrentTimeHeatmap (opendataRoute, positionsRoute, loaderDelay = defaultLoaderDelay) {
-  loadCheckboxDatasetNameData()
-
-  dataSourceRoute = opendataRoute
-  positionsSourceRoute = positionsRoute
-  const allPromises = []
-  data[currentTime] = {}
-
-  const dataSelectedHandler = async (datasetName) => {
-    if (!(datasetName in dataSourceMarks)) {
-      dataSourceMarks[datasetName] = await fetchDataSourceMarks(positionsRoute, datasetName)
-    }
-
-    const datasetData = await fetchByNameDate(dataSourceRoute, datasetName, currentDateToString(), currentTime)
-    data[currentTime][datasetName] = datasetData
-  }
-  datasetSelected.forEach((datasetName) => {
-    allPromises.push(dataSelectedHandler(datasetName))
-  })
-
-  loadingY(loaderDelay)
-
-  await Promise.all(allPromises).then(
-    () => {
-      loadingN(0)
-      drawMapMarkers(dataSourceMarks)
-      drawHeatmap(data[currentTime])
-      
-      preload(currentTime, 1, currentDateToString())
-      preload(currentTime, -1, currentDateToString())
-    }
-  )
-}
-
-/**
- * Checks dataset availibility
- * @param {string} route authority for datasets availibility checks
- */
-function checkDataSetsAvailability (route) {
-  $.ajax({
-    type: 'POST',
-    // Todo it might be good idea to change db collections format
-    url: route + '/' + currentDateToString(),
-    success: function (result) {
-      updateAvailableDataSets(result)
-    }
-  })
-}
-
-
-
-
-/* ------------ MAP ------------ */
-
-/**
- * Initialize leaflet map on start position which can be default or set based on user action
- */
-function initMap () {
-  startX = localStorage.getItem('lat') || startX
-  startY = localStorage.getItem('lng') || startY
-  startZoom = localStorage.getItem('zoom') || startZoom
-
-  mymap = L.map('heatmap').setView([startX, startY], startZoom)
-
-  L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
-    attribution: '',
-    maxZoom: 19
-  }).addTo(mymap)
-
-  mymap.on('click', function (e) { showInfo(e) })
-}
-
-function setMapView (latitude, longitude, zoom) {
-  localStorage.setItem('lat', latitude)
-  localStorage.setItem('lng', longitude)
-  localStorage.setItem('zoom', zoom)
-
-  mymap.setView([latitude, longitude], zoom)
-}
-
-function drawHeatmap (dataRaw) {
-  // Todo still switched
-  const dataDict = dataRaw
-  const mergedPoints = []
-  let max = 0
-
-  if (Object.keys(globalMarkersChanged).length) {
-    Object.keys(globalMarkersChanged).forEach(function (key) {
-      globalMarkersChanged[key][0].bindPopup(globalMarkersChanged[key][1])
-    })
-    globalMarkersChanged = {}
-  }
-
-  Object.keys(dataDict).forEach((key) => {
-    const data = dataDict[key]
-    max = Math.max(max, data.max)
-
-    if (data != null) {
-    // Bind back popups for markers (we dont know if there is any data for this marker or not)
-      const points = data.items.map((point) => {
-        const { x, y, number } = point
-        const key = x + '' + y
-        const holder = globalMarkersHolder[key]
-        if (!globalMarkersChanged[key] && number) {
-          // There is data for this marker => unbind popup with zero value
-          holder[0] = holder[0].unbindPopup()
-          globalMarkersChanged[key] = holder
-        }
-
-        return [x, y, number]
-      })
-      mergedPoints.push(...points)
-    } else {
-      if (heatmapLayer != null) {
-        mymap.removeLayer(heatmapLayer)
-      }
-    }
-  })
-
-  if (heatmapLayer != null) {
-    mymap.removeLayer(heatmapLayer)
-  }
-
-  if (mergedPoints.length) {
-    heatmapLayer = L.heatLayer(mergedPoints, { max: max, minOpacity: 0.5, radius: 35, blur: 30 }).addTo(mymap)
-  }
-
-  // timto vyresen bug #8191 - TODO: znamena to, ze muzeme smazat volani updatePopup() ve funkcich, kde se nejdriv vola drawHeatmap() a pak updatePopup()?
-  updatePopup()
-}
-
-function drawMapMarkers (data) {
-  if (markersLayer != null) {
-    mymap.removeLayer(markersLayer)
-  }
-
-  markersLayer = L.layerGroup()
-
-  Object.keys(data).forEach(key_ => {
-    for (var key in data[key_]) {
-      const { x, y, name } = data[key_][key]
-      const pop =
-          prepareLayerPopUp(x, y, 1, `popup-${key_}`)
-            .setContent(getPopupContent(datasetDictNameDisplayName[key_], name, 0, 0, 1, 1))
-      const newCircle =
-        L.circle([x, y], { radius: 2, fillOpacity: 0.8, color: '#004fb3', fillColor: '#004fb3', bubblingMouseEvents: true })
-          .bindPopup(pop)
-      globalMarkersHolder[x + '' + y] = [newCircle, pop] // add new marker to global holders
-      markersLayer.addLayer(
-        newCircle
-      )
-    }
-  })
-
-  markersLayer.setZIndex(-1).addTo(mymap)
-}
-
-
-
-
-/* ------------ GUI ------------ */
-
-const changeCurrentTime = (time = null) => {
-  if (time !== null) {
-    currentTime = time
-  } else {
-    currentTime = parseInt($('#dropdown-time input[type="radio"]:checked').val())
-  }
-}
-
-const changeCurrentDate = (date = null) => {
-  const dateInput = $('#date')
-  currentDate = new Date(date ? date : dateInput.val())
-
-  dateInput.val(currentDateToString())
-  $('#player-date span').html(`${currentDate.getDate()}. ${currentDate.getMonth() + 1}. ${currentDate.getFullYear()}`)
-
-  data = []
-}
-
-const toggleDayLock = () => {
-  lockedDay = !lockedDay
-  $('#player-date').toggleClass('lock')
-}
-
-
-
-
-/* ------------ POPUPs ------------ */
-
-const setGlobalPopupContent = (content) => {
-  globalPopup._popup.setContent(content)
-  globalPopup._popup.openOn(mymap)
-}
-
-const getPaginationButtonsInPopup = (currentPage, countPages) => ({
-  previousButton: '<button type="button" id="btn-popup-previous-page" onclick="setPreviousPageInPopup()"></button>',
-  pagesList: `<p id="pages">${currentPage} z ${countPages}</p>`,
-  nextButton: '<button type="button" id="btn-popup-next-page" class="next" onclick="setNextPageInPopup()"></button>'
-})
-
-const disablePopupPaginationButtons = () => {
-  $('#btn-popup-previous-page').prop('disabled', true)
-  $('#btn-popup-next-page').prop('disabled', true)
-  $('.popup-pagination').hide()
-}
-
-const generatePopupPaginationButtons = (controls) => {
-  return `<div class="popup-pagination">${controls ? controls.reduce((sum, item) => sum + item, '') : ''}</div>`
-}
-
-const getCountPagesInPopup = () => {
-  const infoKeys = Object.keys(info)
-
-  if (infoKeys.length === 1) {
-    // return number of records in one dataset (one dataset in area)
-    return info[infoKeys[0]].items.length
-  }
-  // return number of datasets (agregation of all datasets in area)
-  return infoKeys.length
-}
-
-const getPopupDataOnPage = (pageInPopup) => {
-  const keys = Object.keys(info)
-  return info[keys[pageInPopup]]
-}
-
-function setPreviousPageInPopup () {
-  const countPagesInPopup = getCountPagesInPopup()
-  const page = currentPageInPopup
-
-  currentPageInPopup = (currentPageInPopup + countPagesInPopup - 1) % countPagesInPopup
-  setPageContentInPopup(page)
-}
-
-function setNextPageInPopup () {
-  const countPagesInPopup = getCountPagesInPopup()
-  const page = currentPageInPopup
-
-  currentPageInPopup = (currentPageInPopup + 1) % countPagesInPopup
-  setPageContentInPopup(page)
-}
-
-const genMultipleDatasetsPopUp = (sum, currentPage, countPages, datasetName) => {
-  const popupHeader = `<strong id="dataset-name">${datasetName}</strong>`
-  const popupData = `<div id="place-intesity"><span id="current-number">${sum}</span></div>`
-  const { previousButton, nextButton, pagesList } = getPaginationButtonsInPopup(currentPage, countPages)
-
-  return `
-  ${popupHeader}
-  ${popupData}
-  ${generatePopupPaginationButtons([previousButton, pagesList, nextButton])}
-  `
-}
-
-const prepareLayerPopUp = (lat, lng, num, className) => L.popup({
-  autoPan: false,
-  className: className
-}).setLatLng([lat / num, lng / num])
-
-const getPopupContent = (datasetName, placeName, currentCount, sum, currentPage, countPages) => {
-  const popupHeader = `
-    <strong>${datasetName}</strong>
-    <div id="place-name">${placeName}</div>`
-  const popupData = `
-    <div id="place-intesity">
-      <span id="current-number">${currentCount}</span>
-      <span id="sum-number">${(sum && sum !== Number(currentCount)) ? '/' + sum : ''}</span>
-    </div>`
-  const { previousButton, nextButton, pagesList } = getPaginationButtonsInPopup(currentPage, countPages)
-
-  return `
-  ${popupHeader}
-  ${popupData}
-  ${generatePopupPaginationButtons(countPages > 1 ? [previousButton, pagesList, nextButton] : null)}
-  `
-}
-
-const areMultipleDatasetsInRadius = () => {
-  return Object.keys(info).length > 1
-}
-
-const setPopupDatasetClassName = (datasetName) => {
-  const popup = $('.leaflet-popup')
-
-  popup.removeClass(function (index, css) {
-    return (css.match(/(^|\s)popup-\S+/g) || []).join(' ');
-  })
-  popup.addClass('popup-' + datasetName)
-}
-
-function showInfo (e) {
-  info = []
-  currentPageInPopup = 0
-
-  // https://wiki.openstreetmap.org/wiki/Zoom_levels
-  // Todo change to variable - it is used in heatmap init
-  const stile = 40075016.686 * Math.cos(startX) / Math.pow(2, mymap.getZoom())
-  const radius = 25 * stile / 256
-
-  let i = 0
-  let lat = 0
-  let lng = 0
-
-  let total = 0
-
-  const datasetsInRadius = {}
-  const eventCoord = {
-    lng: e.latlng.lng,
-    lat: e.latlng.lat
-  }
-
-  Object.keys(data[currentTime]).forEach(key => {
-    const namedData = data[currentTime][key]
-
-    namedData.items.forEach(element => {
-      if (e.latlng.distanceTo(new L.LatLng(element.x, element.y)) < radius) {
-        lat += element.x
-        lng += element.y
-        info[i] = { place: element.place, number: element.number, datasetName: key }
-        total += parseInt(element.number)
-        i++
-        datasetsInRadius[key] = true
-      }
-    })
-  })
-
-  // Process info for more then one dataset
-  info = info.reduce((acc, item) => {
-    if (!acc[item.datasetName]) {
-      acc[item.datasetName] = {
-        items: [],
-        number: 0,
-        datasetName: item.datasetName
-      }
-    }
-
-    acc[item.datasetName].items.push(item)
-    acc[item.datasetName].number += Number(item.number)
-    return acc
-  }, {})
-
-  const countDatasets = Object.keys(datasetsInRadius).length
-
-  if (!countDatasets) {
-    if (mymap._popup) {
-      $('#sum-number').text('')
-      $('#current-number').html(0)
-      disablePopupPaginationButtons()
-    }
-
-    return
-  }
-
-  if (countDatasets === 1) {
-    const markersInRadius = getPopupDataOnPage(0)
-    const popupPagesData = markersInRadius.items
-    const { place, number } = popupPagesData[currentPageInPopup]
-
-    if (!globalPopup._popup || !areCoordsIdentical(globalPopup.coord, eventCoord)) {
-      globalPopup._popup = prepareLayerPopUp(lat, lng, i, `popup-${markersInRadius.datasetName}`)
-      globalPopup.coord = eventCoord
-    }
-    else {
-      setPopupDatasetClassName(markersInRadius.datasetName)
-    }
-
-    setGlobalPopupContent(getPopupContent(datasetDictNameDisplayName[markersInRadius.datasetName], place, number, total, 1, popupPagesData.length))
-
-    if (popupPagesData.length === 1) {
-      disablePopupPaginationButtons()
-    }
-  } else {
-    const { datasetName, number } = getPopupDataOnPage(currentPageInPopup)
-
-    if (!globalPopup._popup || !areCoordsIdentical(globalPopup.coord, eventCoord)) {
-      globalPopup._popup = prepareLayerPopUp(lat, lng, i, `popup-${datasetName}`)
-      globalPopup.coord = eventCoord
-    }
-    else {
-      setPopupDatasetClassName(datasetName)
-    }
-
-    setGlobalPopupContent(genMultipleDatasetsPopUp(number, 1, getCountPagesInPopup(), datasetDictNameDisplayName[datasetName]))
-  }
-}
-
-function setPageContentInPopup (page) {
-  const previousPageData = areMultipleDatasetsInRadius() ? getPopupDataOnPage(page) : getPopupDataOnPage(0).items[page]
-  const currentPageData = areMultipleDatasetsInRadius() ? getPopupDataOnPage(currentPageInPopup) : getPopupDataOnPage(0).items[currentPageInPopup]
-  const datasetName = $('#dataset-name')
-
-  if (datasetName) {
-    datasetName.html(datasetDictNameDisplayName[currentPageData.datasetName])
-  }
-
-  $('#place-name').html(currentPageData.place ? currentPageData.place : currentPageData.datasetName)
-  $('#current-number').html(currentPageData.number)
-  $('#pages').html(currentPageInPopup + 1 + ' z ' + getCountPagesInPopup())
-
-  $('.leaflet-popup').removeClass(`popup-${previousPageData.datasetName}`).addClass(`popup-${currentPageData.datasetName}`)
-}
-
-const updatePopup = () => {
-  const { _popup } = mymap
-
-  if (_popup) {
-    showInfo({
-      latlng: _popup.getLatLng()
-    })
-  }
-}
-
-
-
-
-/* ------------ ANIMATION ------------ */
-
-/**
- * Change animation start from playing to stopped or the other way round
- */
-function changeAnimationState () {
-  const btnAnimate = $('#animate-btn')
-
-  isAnimationRunning = !isAnimationRunning
-
-  if (isAnimationRunning) {
-    btnAnimate.removeClass('play').addClass('pause')
-    timer = setInterval(function () { next() }, 800)
-  } else {
-    clearTimeout(timer)
-    btnAnimate.removeClass('pause').addClass('play')
-  }
-}
-
-async function previous () {
-  if (loading) {
-    return
-  }
-
-  currentTime = (currentTime + 23) % 24
-  changeHour(currentTime)
-  
-  if (!lockedDay && currentTime === 23) {
-    addDayToCurrentDate(-1)
-    await loadCurrentTimeHeatmap(dataSourceRoute, positionsSourceRoute)
-  } else {
-    drawHeatmap(data[currentTime])
-  }
-
-  updatePopup()
-}
-
-async function next () {
-  if (loading) {
-    return
-  }
-
-  currentTime = (currentTime + 1) % 24
-  changeHour(currentTime)
-
-  if (!lockedDay && currentTime === 0) {
-    addDayToCurrentDate(1)
-    await loadCurrentTimeHeatmap(dataSourceRoute, positionsSourceRoute)
-  } else {
-    drawHeatmap(data[currentTime])
-  }
-
-  updatePopup()
-}
-
-const onChangeHour = (hour) => {
-  changeHour(hour)
-  drawHeatmap(data[currentTime])
-}
-
-const changeHour = (hour) => {
-  $('#player-time').removeAttr('style')
-  changeCurrentTime(hour)
-  updateHeaderControls()
-  setTimeline()
-  changeUrlParameters()
-  updatePopup()
-}
-
-const dragTimeline = () => {
-  const hourElemWidthPx = 26
-
-  const elem = $('#player-time')
-  const offset = elem.offset().left - elem.parent().offset().left
-
-  if (offset >= 0 && offset <= elem.parent().width()) {
-    const hour = Math.round(offset / hourElemWidthPx)
-
-    if (hour !== currentTime) {
-      elem.attr('class', 'time hour-' + hour)
-      $('#player-time span').html(formatTime(hour))
-
-      onChangeHour(hour)
-    }
-  }
-}
-
-const onArrowLeftRightKeysDownRegister = () => {
-  $(document).keydown(function (e) {
-    const { which } = e
-    
-    if (which === arrowKeyLEFT) {
-      previous()
-      e.preventDefault()
-    } else if (which === arrowKeyRIGHT) {
-      next()
-      e.preventDefault()
-    }
-  })
-}
-
-/**
- * Change browser url based on animation step.
- */
-const changeUrlParameters = () => {
-  window.history.pushState(
-    '',
-    document.title,
-    window.location.origin + window.location.pathname + `?date=${currentDateToString()}&time=${currentTime}${datasetSelected.reduce((acc, current) => acc + '&type[]=' + current, '')}`
-  )
-}
-
-
-
-
-/* ------------ UTILS ------------ */
-
-const formatTime = (hours, twoDigitsHours = false) => {
-  return ((twoDigitsHours && hours < 10) ? '0' : '') + hours + ':00';
-}
-
-const formatDate = (date) => {
-  var day = String(date.getDate())
-  var month = String(date.getMonth() + 1)
-
-  if (day.length === 1) {
-    day = '0' + day
-  }
-
-  if (month.length === 1) {
-    month = '0' + month
-  }
-
-  // return YYYY-MM-DD
-  return date.getFullYear() + '-' + month + '-' + day
-}
-
-const currentDayToString = () => {
-  const day = currentDate.getDate()
-  return day > 9 ? `${day}` : `0${day}`
-}
-
-const currentMonthToString = () => {
-  const month = currentDate.getMonth() + 1
-  return month > 9 ? `${month}` : `0${month}`
-}
-
-const currentDateToString = () => `${currentDate.getFullYear()}-${currentMonthToString()}-${currentDayToString()}`
-
-const addDayToCurrentDate = (day) => {
-  currentDate.setDate(currentDate.getDate() + day)
-  changeCurrentDate(currentDate)
-}
-
-const areCoordsIdentical = (first, second) => {
-  return first.lat === second.lat && first.lng === second.lng
-}
-
-const debounce = (func, delay) => {
-  let inDebounce
-  return function () {
-    const context = this
-    const args = arguments
-    clearTimeout(inDebounce)
-    inDebounce = setTimeout(() => func.apply(context, args), delay)
-  }
-}
-
-
-
-
-/* ------------ GUI ------------ */
-
-const updateHeaderControls = () => {
-  $(`#time_${currentTime}`).prop('checked', true)
-  $('#dropdownMenuButtonTime').html(formatTime(currentTime, true))
-}
-
-function initDatepicker (availableDatesSource) {
-  var availableDates = ''
-
-  $.ajax({
-    type: 'GET',
-    url: availableDatesSource,
-    success: function (result) {
-      availableDates = String(result).split(',')
-    }
-  }).then(function () {
-    $('#date').datepicker({
-      format: 'yyyy-mm-dd',
-      language: 'cs',
-      beforeShowDay: function (date) {
-        if (availableDates.indexOf(formatDate(date)) < 0) {
-          return { enabled: false, tooltip: 'Žádná data' }
-        } else {
-          return { enabled: true }
-        }
-      },
-      autoclose: true
-    })
-  })
-}
-
-function initLocationsMenu () {
-  const elmLocationsList = $('.locations')
-  const locationsDisplayClass = 'show'
-
-  if ($(window).width() <= 480) {
-    elmLocationsList.removeClass(locationsDisplayClass)
-  } else {
-    elmLocationsList.addClass(locationsDisplayClass)
-  }
-}
-
-const setTimeline = () => {
-  $('#player-time > span').text(formatTime(currentTime))
-  $('#player-time').attr('class', 'time hour-' + currentTime)
-}
-
-const onValueChangeRegister = () => {
-  $('#date').change(function () {
-    changeCurrentDate($(this).val())
-    loadCurrentTimeHeatmap(dataSourceRoute, positionsSourceRoute, 0)
-    changeUrlParameters()
-  })
-
-  $('#dropdown-time input[type="radio"]').each(function () {
-    $(this).change(function () {
-      changeHour(parseInt($(this).val()))
-      drawHeatmap(data[currentTime])
-    })
-  })
-
-  $('#dropdown-dataset input[type="checkbox"]').each(function () {
-    $(this).change(
-      debounce(() => onCheckboxClicked(this), 1000)
-    )
-  })
-}
-
-const onCheckboxClicked = async (checkbox) => {
-  if ($(checkbox).prop('checked')) {
-    await loadCurrentTimeHeatmap(dataSourceRoute, positionsSourceRoute, 0)
-  } else {
-    loadCheckboxDatasetNameData()
-
-    data.forEach((item, index) => {
-      Object.keys(item).forEach(datasetName => {
-        if (datasetName === $(checkbox).val()) {
-          delete data[index][datasetName]
-        }
-      })
-
-      drawHeatmap(data[currentTime])
-    })
-  }
-
-  updatePopup()
-  changeUrlParameters()
-}
-
-const loadCheckboxDatasetNameData = () => {
-  datasetSelected = []
-
-  $('#dropdown-dataset .dropdown-item').each(function () {
-    const input = $(this).find('input')
-    const inputVal = input[0].value
-
-    if (input[0].checked) {
-      datasetSelected.push(inputVal)
-    }
-
-    datasetDictNameDisplayName[inputVal] = $(input).data('dataset-display-name')
-  })
-}
-
-function updateAvailableDataSets (available) {
-  let leastOneOptionEnabled = false
-
-  $('#dropdown-dataset .dropdown-item').each(function () {
-    const input = $(this).find('input')
-
-    if (!(input[0].value in available)) {
-      $(this).addClass('disabled')
-      $(input).prop('checked', false)
-    } else {
-      leastOneOptionEnabled = true
-      $(this).removeClass('disabled')
-    }
-  })
-
-  $('#btn-update-heatmap').prop('disabled', !leastOneOptionEnabled)
-}
-
-
-
-
-/* ------------ GUI LOADING ------------ */
-
-const loadingCallbackNested = (func, delay) => {
-  setTimeout(() => {
-    func(loading)
-    if (loading) {
-      loadingCallbackNested(func, delay)
-    }
-  }, delay)
-}
-
-const loadingY = (delay = defaultLoaderDelay) => {
-  loading++
-  // check after nms if there is something that is loading
-  loadingCallbackNested(() => loadingCallbackNested((isLoading) => loadingTimeline(isLoading), delay))
-}
-
-const loadingN = (delay = defaultLoaderDelay) => {
-  loading--
-  loadingCallbackNested(() => loadingCallbackNested((isLoading) => loadingTimeline(isLoading)), delay)
-}
-
-const loadingTimeline = (isLoading) => {
-  if (isLoading) {
-    loadingYTimeline()
-  } else {
-    loadingNTimeline()
-  }
-}
-
-const loadingYTimeline = () => {
-  $('#player-time > .spinner-border').removeClass('d-none')
-  $('#player-time > span').text('')
-}
-
-const loadingNTimeline = () => {
-  $('#player-time > .spinner-border').addClass('d-none')
-  setTimeline()
-}
\ No newline at end of file
diff --git a/website/templates/heatmap-locations.html.twig b/website/templates/heatmap-locations.html.twig
index 359b06d..248e7ff 100644
--- a/website/templates/heatmap-locations.html.twig
+++ b/website/templates/heatmap-locations.html.twig
@@ -1,13 +1,13 @@
 <ul>
-  <li onclick="setMapView(49.7248, 13.3521, 17)">Kampus ZČU</li>
-  <li onclick="setMapView(49.7367263, 13.3709177, 18)">FPE &ndash; Fakulta pedagogická</li>
-  <li onclick="setMapView(49.7474950, 13.3748308, 18)">FPR &ndash; Fakulta právnická</li>
-  <li onclick="setMapView(49.7450169, 13.3702668, 18)">FZS &ndash; Fakulta zdravotnických studií</li>
-  <li onclick="setMapView(50.0762590, 12.3640213, 17)">FEK &ndash; pracoviště Cheb</li>
-  <li onclick="setMapView(49.7236785, 13.3353118, 18)">NTC &ndash; výzkumné centrum</li>
-  <li onclick="setMapView(49.9590236, 13.1597114, 18)">Zámek ZČU &ndash; Nečtiny</li>
-  <li onclick="setMapView(49.7345564, 13.3585038, 18)">Koleje Borská</li>
-  <li onclick="setMapView(49.7250373, 13.3696772, 18)">Koleje Bory</li>
-  <li onclick="setMapView(49.7600000, 13.3723463, 18)">Koleje Lochotín</li>
-  <li onclick="setMapView(49.7293726, 13.3589237, 15)">Oblast s&nbsp;koloběžkami</li>
+  <li onclick="js.setMapView(49.7248, 13.3521, 17)">Kampus ZČU</li>
+  <li onclick="js.setMapView(49.7367263, 13.3709177, 18)">FPE &ndash; Fakulta pedagogická</li>
+  <li onclick="js.setMapView(49.7474950, 13.3748308, 18)">FPR &ndash; Fakulta právnická</li>
+  <li onclick="js.setMapView(49.7450169, 13.3702668, 18)">FZS &ndash; Fakulta zdravotnických studií</li>
+  <li onclick="js.setMapView(50.0762590, 12.3640213, 17)">FEK &ndash; pracoviště Cheb</li>
+  <li onclick="js.setMapView(49.7236785, 13.3353118, 18)">NTC &ndash; výzkumné centrum</li>
+  <li onclick="js.setMapView(49.9590236, 13.1597114, 18)">Zámek ZČU &ndash; Nečtiny</li>
+  <li onclick="js.setMapView(49.7345564, 13.3585038, 18)">Koleje Borská</li>
+  <li onclick="js.setMapView(49.7250373, 13.3696772, 18)">Koleje Bory</li>
+  <li onclick="js.setMapView(49.7600000, 13.3723463, 18)">Koleje Lochotín</li>
+  <li onclick="js.setMapView(49.7293726, 13.3589237, 15)">Oblast s&nbsp;koloběžkami</li>
 </ul>
\ No newline at end of file
diff --git a/website/templates/heatmap.html.twig b/website/templates/heatmap.html.twig
index 49bb8a7..f103aba 100644
--- a/website/templates/heatmap.html.twig
+++ b/website/templates/heatmap.html.twig
@@ -36,7 +36,7 @@
                     'maxlength' : '10',
                     'placeholder' : 'YYYY-MM-DD',
                     'autocomplete' : 'off',
-                    'onchange' : 'checkDataSetsAvailability("' ~ path('available') ~ '")'
+                    'onchange' : 'js.checkDataSetsAvailability("' ~ path('available') ~ '")'
                   }
                 })
               }}
@@ -111,13 +111,13 @@
   </div>
 
   <div class="player">
-    <div class="prev-btn" onclick="previous()"></div>
-    <div class="animate-btn play" id="animate-btn" onclick="changeAnimationState()"></div>
-    <div class="next-btn" onclick="next()"></div>
+    <div class="prev-btn" onclick="js.previous()"></div>
+    <div class="animate-btn play" id="animate-btn" onclick="js.changeAnimationState()"></div>
+    <div class="next-btn" onclick="js.next()"></div>
 
     <div class="timeline-wrapper">
       {% if form.vars.value.date %}
-      <div class="date" id="player-date" onclick="toggleDayLock()" title="Animovat pouze v rámci jednoho dne">
+      <div class="date" id="player-date" onclick="js.toggleDayLock()" title="Animovat pouze v rámci jednoho dne">
         <span>{{ form.vars.value.date|date('j. n. Y') }}</span>
         <div class="lock-btn"></div>
       </div>
@@ -132,7 +132,7 @@
         </div>
 
         {% for i in 0..23 %}
-        <div class="hour" title="{{ i }}:00" onclick="onChangeHour('{{ i }}')"></div>
+        <div class="hour" title="{{ i }}:00" onclick="js.onChangeHour('{{ i }}')"></div>
         {% endfor %}
 
         <div class="end-dot"></div>
@@ -152,23 +152,23 @@
     <script src="{{ asset('js/vendor/bootstrap-datepicker.cs.min.js') }}"></script>
     <script src="{{ asset('js/vendor/leaflet.js') }}"></script>
     <script src="{{ asset('js/vendor/leaflet-heat.js') }}"></script>
-    <script src="{{ asset('js/zcu-heatmap.js') }}"></script>
+    <script src="{{ asset('js/index.bundle.js') }}"></script>
     <script>
-      initDatepicker("{{ path('dates') }}");
-      initLocationsMenu();
-      initMap();
+      js.initDatepicker("{{ path('dates') }}");
+      js.initLocationsMenu();
+      js.initMap();
 
       $(document).ready(function() {
-        onDocumentReady();
-        checkDataSetsAvailability("{{ path('available') }}")
+        js.onDocumentReady();
+        js.checkDataSetsAvailability("{{ path('available') }}")
         {% if submitted %}
-        loadCurrentTimeHeatmap("{{ path('opendata') }}", "{{ path('positions') }}");
+        js.loadCurrentTimeHeatmap("{{ path('opendata') }}", "{{ path('positions') }}");
         {% endif %}
-        $('#player-time').draggable({ containment: 'parent', axis: 'x', drag: function(event, ui) { dragTimeline() }, cursor: 'ew-resize' })
+        $('#player-time').draggable({ containment: 'parent', axis: 'x', drag: function(event, ui) { js.dragTimeline() }, cursor: 'ew-resize' })
       });
       
       $(window).resize(function() {
-        initLocationsMenu();
+        js.initLocationsMenu();
       });
   </script>
 {% endblock %}
diff --git a/website/webpack.config.js b/website/webpack.config.js
new file mode 100644
index 0000000..a153750
--- /dev/null
+++ b/website/webpack.config.js
@@ -0,0 +1,15 @@
+const path = require('path');
+module.exports = {
+    entry: {
+        index: "./public/js/index.js",
+        polyfills: './public/js/polyfills.js',
+    },
+    optimization: {
+        minimize: true
+    },
+    output: {
+        filename: '[name].bundle.js',
+        path: path.resolve(__dirname, 'public/js'),
+        library: 'js'
+    },
+}
\ No newline at end of file
