From c3628c096df4b0d943385f610d95bc2dae92a4d8 Mon Sep 17 00:00:00 2001
From: Mael Gaonach <mael.gaonach@esrf.fr>
Date: Mon, 6 Nov 2023 16:46:58 +0100
Subject: [PATCH] Resolve "Implement new landing page"

---
 .eslintignore                                 |     7 +
 .gitignore                                    |    81 +-
 .gitlab-ci.yml                                |    46 +-
 .gitlab/validate.yml                          |     8 +
 .prettierignore                               |     1 +
 .prettierrc                                   |     3 +
 .vscode/settings.json                         |    27 +
 Dockerfile                                    |    15 -
 LICENSE                                       |    21 -
 Readme.md                                     |    79 +-
 apps/doi-landing-page/.eslintignore           |     4 +
 apps/doi-landing-page/.eslintrc.cjs           |    26 +
 apps/doi-landing-page/.gitignore              |    24 +
 apps/doi-landing-page/.prettierignore         |    25 +
 apps/doi-landing-page/.prettierrc             |     3 +
 apps/doi-landing-page/index.html              |    13 +
 apps/doi-landing-page/package.json            |    41 +
 apps/doi-landing-page/pnpm-lock.yaml          |  4820 +++++
 .../doi-landing-page/public/esrf-white.png    |   Bin
 apps/doi-landing-page/public/favicon.ico      |   Bin 0 -> 2958 bytes
 apps/doi-landing-page/src/App.scss            |    19 +
 apps/doi-landing-page/src/App.tsx             |    19 +
 apps/doi-landing-page/src/config/config.ts    |     3 +
 apps/doi-landing-page/src/hooks/path.ts       |    22 +
 .../src/landingPage/LandingPage.tsx           |    13 +
 .../src/landingPage/LandingPageContainer.tsx  |    21 +
 apps/doi-landing-page/src/main.tsx            |     9 +
 apps/doi-landing-page/src/routes.tsx          |    20 +
 .../src/routing/AppRouter.tsx                 |    17 +
 .../src/routing/PageNotFound.tsx              |     5 +
 apps/doi-landing-page/src/vite-env.d.ts       |     1 +
 apps/doi-landing-page/tsconfig.json           |    14 +
 apps/doi-landing-page/tsconfig.node.json      |     9 +
 apps/doi-landing-page/vite.config.ts          |    12 +
 build.sh                                      |     1 -
 myHttpd.conf                                  |   544 -
 package.json                                  |    18 +
 packages/doi/.eslintignore                    |     4 +
 packages/doi/.eslintrc.cjs                    |    26 +
 packages/doi/.gitignore                       |    24 +
 packages/doi/.prettierignore                  |     1 +
 packages/doi/.prettierrc                      |     3 +
 packages/doi/package.json                     |    56 +
 packages/doi/src/assets/orcid.png             |   Bin 0 -> 821 bytes
 packages/doi/src/components/CopyValue.tsx     |    59 +
 .../doi/src/components/DOIInfo/DOIBadge.tsx   |    57 +
 .../doi/src/components/DOIInfo/DOICited.tsx   |    54 +
 .../src/components/DOIInfo/DOIDataAccess.tsx  |    72 +
 .../src/components/DOIInfo/DOIDescription.tsx |    14 +
 .../DOIInfo/DOIExperimentReport.tsx           |    18 +
 .../DOIInfo/DOIExperimentReportESRF.tsx       |    81 +
 .../doi/src/components/DOIInfo/DOIInfo.tsx    |    62 +
 .../src/components/DOIInfo/DOIMetatada.tsx    |   143 +
 .../components/DOIInfo/DOIParticipants.tsx    |    70 +
 .../src/components/DOIInfo/DOIReference.tsx   |    72 +
 .../doi/src/components/DOIInfo/DOIRelated.tsx |    32 +
 .../doi/src/components/DOIInfo/DOITitle.tsx   |     5 +
 .../doi/src/components/DOIInfo/DOITypes.tsx   |    37 +
 packages/doi/src/components/DOINotFound.tsx   |     5 +
 .../doi/src/components/FetchAndDisplayDOI.tsx |    41 +
 packages/doi/src/components/Loading.tsx       |    10 +
 packages/doi/src/config/config.ts             |    47 +
 packages/doi/src/constants/doi.ts             |    17 +
 packages/doi/src/fetch/crosscite.ts           |    12 +
 packages/doi/src/fetch/datacite.ts            |    11 +
 packages/doi/src/fetch/fetching.tsx           |   167 +
 packages/doi/src/fetch/icatplus.ts            |    21 +
 packages/doi/src/fetch/opencitation.ts        |    11 +
 packages/doi/src/fetch/userportal.ts          |    11 +
 packages/doi/src/index.tsx                    |     2 +
 packages/doi/src/model/datacite.ts            |    65 +
 packages/doi/src/model/doi.ts                 |    19 +
 packages/doi/src/model/icatplus.ts            |    12 +
 packages/doi/src/model/opencitation.ts        |    10 +
 packages/doi/src/utils/accessibility.ts       |    33 +
 packages/doi/src/utils/datacite.ts            |    87 +
 packages/doi/src/utils/icatplus.ts            |     6 +
 packages/doi/src/utils/userportal.ts          |    41 +
 packages/doi/tsconfig.json                    |    10 +
 packages/doi/tsconfig.node.json               |     9 +
 packages/doi/vite.config.ts                   |    34 +
 pnpm-lock.yaml                                |  5119 +++++
 pnpm-workspace.yaml                           |     3 +
 run.sh                                        |     1 -
 tsconfig.json                                 |    30 +
 www/.htaccess                                 |    22 -
 www/Gruntfile.js                              |   102 -
 www/bower.json                                |    44 -
 www/css/doi.css                               |   371 -
 www/dev.html                                  |    94 -
 www/dev.tpl.html                              |    74 -
 www/googlea9107bd1e2baeb72.html               |     1 -
 www/index.html                                |    93 -
 www/karma.conf.js                             |    74 -
 www/min/components.min.js                     | 17691 ----------------
 www/min/doi.min.js                            |  1123 -
 www/min/output.min.css                        |     6 -
 www/min/precompiled.templates.min.js          |     7 -
 www/package.json                              |    38 -
 www/sitemap.txt                               |   522 -
 www/src/ESRF-DC-142893590.js                  |   137 -
 www/src/ESRF-DC-142915526.js                  |    81 -
 www/src/author.js                             |   120 -
 www/src/beamlineurl.js                        |   116 -
 www/src/citation.js                           |    80 -
 www/src/constants.js                          |     4 -
 www/src/doiData.js                            |    35 -
 www/src/doicontroller.js                      |   308 -
 www/src/doiview.js                            |   215 -
 www/src/event.js                              |    31 -
 www/src/experimentalreportcontroller.js       |    84 -
 www/src/googleMetadataObject.js               |    55 -
 www/src/images/88x31.png                      |   Bin 1468 -> 0 bytes
 www/src/images/ajaxloader.gif                 |   Bin 7364 -> 0 bytes
 www/src/images/esrfLogoBlue.png               |   Bin 28059 -> 0 bytes
 www/src/images/favicon.ico                    |   Bin 15086 -> 0 bytes
 www/src/jsonextractor.js                      |   293 -
 www/src/metadataTableHelper.js                |    66 -
 www/templates/badges_tpl.js                   |    36 -
 www/templates/doinotfound2_tpl.js             |     1 -
 www/templates/doinotfound_tpl.js              |     9 -
 www/templates/experimentalreport_tpl.js       |    49 -
 www/templates/landingpage_tpl.js              |   143 -
 www/templates/metadata_tpl.js                 |   105 -
 www/templates/welcome_tpl.js                  |    72 -
 www/tests/citation.test.js                    |    40 -
 www/tests/doiController.test.js               |    83 -
 www/tests/doiData.test.js                     |    22 -
 www/tests/googleMetadataObject.test.js        |    47 -
 www/tests/jsonExtractor.test.js               |   124 -
 www/tests/readme.txt                          |     4 -
 www/tests/resources/doiLibrary.resource.js    |   180 -
 .../googleMetadataLibrary.resource.js         |    90 -
 .../googleMetadataObject.resource.js          |   239 -
 www/tests/resources/jsonExtractor.resource.js |   289 -
 www/tests/testSamples.js                      |   101 -
 136 files changed, 11980 insertions(+), 24256 deletions(-)
 create mode 100644 .eslintignore
 create mode 100644 .gitlab/validate.yml
 create mode 100644 .prettierignore
 create mode 100644 .prettierrc
 create mode 100644 .vscode/settings.json
 delete mode 100644 Dockerfile
 delete mode 100644 LICENSE
 create mode 100644 apps/doi-landing-page/.eslintignore
 create mode 100644 apps/doi-landing-page/.eslintrc.cjs
 create mode 100644 apps/doi-landing-page/.gitignore
 create mode 100644 apps/doi-landing-page/.prettierignore
 create mode 100644 apps/doi-landing-page/.prettierrc
 create mode 100644 apps/doi-landing-page/index.html
 create mode 100644 apps/doi-landing-page/package.json
 create mode 100644 apps/doi-landing-page/pnpm-lock.yaml
 rename www/src/images/esrflogo.png => apps/doi-landing-page/public/esrf-white.png (100%)
 create mode 100644 apps/doi-landing-page/public/favicon.ico
 create mode 100644 apps/doi-landing-page/src/App.scss
 create mode 100644 apps/doi-landing-page/src/App.tsx
 create mode 100644 apps/doi-landing-page/src/config/config.ts
 create mode 100644 apps/doi-landing-page/src/hooks/path.ts
 create mode 100644 apps/doi-landing-page/src/landingPage/LandingPage.tsx
 create mode 100644 apps/doi-landing-page/src/landingPage/LandingPageContainer.tsx
 create mode 100644 apps/doi-landing-page/src/main.tsx
 create mode 100644 apps/doi-landing-page/src/routes.tsx
 create mode 100644 apps/doi-landing-page/src/routing/AppRouter.tsx
 create mode 100644 apps/doi-landing-page/src/routing/PageNotFound.tsx
 create mode 100644 apps/doi-landing-page/src/vite-env.d.ts
 create mode 100644 apps/doi-landing-page/tsconfig.json
 create mode 100644 apps/doi-landing-page/tsconfig.node.json
 create mode 100644 apps/doi-landing-page/vite.config.ts
 delete mode 100755 build.sh
 delete mode 100644 myHttpd.conf
 create mode 100644 package.json
 create mode 100644 packages/doi/.eslintignore
 create mode 100644 packages/doi/.eslintrc.cjs
 create mode 100644 packages/doi/.gitignore
 create mode 100644 packages/doi/.prettierignore
 create mode 100644 packages/doi/.prettierrc
 create mode 100644 packages/doi/package.json
 create mode 100644 packages/doi/src/assets/orcid.png
 create mode 100644 packages/doi/src/components/CopyValue.tsx
 create mode 100644 packages/doi/src/components/DOIInfo/DOIBadge.tsx
 create mode 100644 packages/doi/src/components/DOIInfo/DOICited.tsx
 create mode 100644 packages/doi/src/components/DOIInfo/DOIDataAccess.tsx
 create mode 100644 packages/doi/src/components/DOIInfo/DOIDescription.tsx
 create mode 100644 packages/doi/src/components/DOIInfo/DOIExperimentReport.tsx
 create mode 100644 packages/doi/src/components/DOIInfo/DOIExperimentReportESRF.tsx
 create mode 100644 packages/doi/src/components/DOIInfo/DOIInfo.tsx
 create mode 100644 packages/doi/src/components/DOIInfo/DOIMetatada.tsx
 create mode 100644 packages/doi/src/components/DOIInfo/DOIParticipants.tsx
 create mode 100644 packages/doi/src/components/DOIInfo/DOIReference.tsx
 create mode 100644 packages/doi/src/components/DOIInfo/DOIRelated.tsx
 create mode 100644 packages/doi/src/components/DOIInfo/DOITitle.tsx
 create mode 100644 packages/doi/src/components/DOIInfo/DOITypes.tsx
 create mode 100644 packages/doi/src/components/DOINotFound.tsx
 create mode 100644 packages/doi/src/components/FetchAndDisplayDOI.tsx
 create mode 100644 packages/doi/src/components/Loading.tsx
 create mode 100644 packages/doi/src/config/config.ts
 create mode 100644 packages/doi/src/constants/doi.ts
 create mode 100644 packages/doi/src/fetch/crosscite.ts
 create mode 100644 packages/doi/src/fetch/datacite.ts
 create mode 100644 packages/doi/src/fetch/fetching.tsx
 create mode 100644 packages/doi/src/fetch/icatplus.ts
 create mode 100644 packages/doi/src/fetch/opencitation.ts
 create mode 100644 packages/doi/src/fetch/userportal.ts
 create mode 100644 packages/doi/src/index.tsx
 create mode 100644 packages/doi/src/model/datacite.ts
 create mode 100644 packages/doi/src/model/doi.ts
 create mode 100644 packages/doi/src/model/icatplus.ts
 create mode 100644 packages/doi/src/model/opencitation.ts
 create mode 100644 packages/doi/src/utils/accessibility.ts
 create mode 100644 packages/doi/src/utils/datacite.ts
 create mode 100644 packages/doi/src/utils/icatplus.ts
 create mode 100644 packages/doi/src/utils/userportal.ts
 create mode 100644 packages/doi/tsconfig.json
 create mode 100644 packages/doi/tsconfig.node.json
 create mode 100644 packages/doi/vite.config.ts
 create mode 100644 pnpm-lock.yaml
 create mode 100644 pnpm-workspace.yaml
 delete mode 100755 run.sh
 create mode 100644 tsconfig.json
 delete mode 100644 www/.htaccess
 delete mode 100644 www/Gruntfile.js
 delete mode 100644 www/bower.json
 delete mode 100644 www/css/doi.css
 delete mode 100644 www/dev.html
 delete mode 100644 www/dev.tpl.html
 delete mode 100644 www/googlea9107bd1e2baeb72.html
 delete mode 100644 www/index.html
 delete mode 100644 www/karma.conf.js
 delete mode 100644 www/min/components.min.js
 delete mode 100644 www/min/doi.min.js
 delete mode 100644 www/min/output.min.css
 delete mode 100644 www/min/precompiled.templates.min.js
 delete mode 100644 www/package.json
 delete mode 100644 www/sitemap.txt
 delete mode 100644 www/src/ESRF-DC-142893590.js
 delete mode 100644 www/src/ESRF-DC-142915526.js
 delete mode 100644 www/src/author.js
 delete mode 100644 www/src/beamlineurl.js
 delete mode 100644 www/src/citation.js
 delete mode 100644 www/src/constants.js
 delete mode 100644 www/src/doiData.js
 delete mode 100644 www/src/doicontroller.js
 delete mode 100644 www/src/doiview.js
 delete mode 100644 www/src/event.js
 delete mode 100644 www/src/experimentalreportcontroller.js
 delete mode 100644 www/src/googleMetadataObject.js
 delete mode 100644 www/src/images/88x31.png
 delete mode 100644 www/src/images/ajaxloader.gif
 delete mode 100644 www/src/images/esrfLogoBlue.png
 delete mode 100644 www/src/images/favicon.ico
 delete mode 100644 www/src/jsonextractor.js
 delete mode 100644 www/src/metadataTableHelper.js
 delete mode 100644 www/templates/badges_tpl.js
 delete mode 100644 www/templates/doinotfound2_tpl.js
 delete mode 100644 www/templates/doinotfound_tpl.js
 delete mode 100644 www/templates/experimentalreport_tpl.js
 delete mode 100644 www/templates/landingpage_tpl.js
 delete mode 100644 www/templates/metadata_tpl.js
 delete mode 100644 www/templates/welcome_tpl.js
 delete mode 100644 www/tests/citation.test.js
 delete mode 100644 www/tests/doiController.test.js
 delete mode 100644 www/tests/doiData.test.js
 delete mode 100644 www/tests/googleMetadataObject.test.js
 delete mode 100644 www/tests/jsonExtractor.test.js
 delete mode 100644 www/tests/readme.txt
 delete mode 100644 www/tests/resources/doiLibrary.resource.js
 delete mode 100644 www/tests/resources/googleMetadataLibrary.resource.js
 delete mode 100644 www/tests/resources/googleMetadataObject.resource.js
 delete mode 100644 www/tests/resources/jsonExtractor.resource.js
 delete mode 100644 www/tests/testSamples.js

diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 0000000..9c1eaae
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,7 @@
+/dist*/
+/node_modules/
+.eslintrc.cjs
+eslint.shared.js
+vite.config.ts
+/apps/
+/packages/
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 175bbc7..6c9dce2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,60 +1,25 @@
-npm-debug.log
-node_modules/
-bower_components/
-.metadata
-bin/
-tmp/
-*.tmp
-*.bak
-*.swp
-*~.nib
-local.properties
-.loadpath
-.recommenders
-package-lock.json
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+.vite
+
+# Editor directories and files
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
 
-# External tool builders
-.externalToolBuilders/
 
-# Locally stored "Eclipse launch configurations"
-*.launch
-
-# PyDev specific (Python IDE for Eclipse)
-*.pydevproject
-
-# CDT-specific (C/C++ Development Tooling)
-.cproject
-
-# Java annotation processor (APT)
-.factorypath
-
-# PDT-specific (PHP Development Tools)
-.buildpath
-
-# sbteclipse plugin
-.target
-
-# Tern plugin
-.tern-project
-
-# TeXlipse plugin
-.texlipse
-
-# STS (Spring Tool Suite)
-.springBeans
-
-# Code Recommenders
-.recommenders/
-
-# Scala IDE specific (Scala & Java development for Eclipse)
-.cache-main
-.scala_dependencies
-.worksheet
-
-# eclipse project file
-.settings/
-.classpath
-.project
-
-# reports generated by grunt plato module
-www/reports/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 52bb5e9..c0d8367 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,34 +1,18 @@
-image: docker:latest
-
 stages:
-  - build
-  - deploy
+  - validate
 
-build:
-  stage: build
-  script:
-    - docker login -u "$DOCKER_USER" -p "$DOCKER_PASS" "$DOCKER_REGISTRY"
-    - docker build --pull -t "$DOCKER_REGISTRY/$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" .
-    - docker image tag "$DOCKER_REGISTRY/$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" "$DOCKER_REGISTRY/$CI_REGISTRY_IMAGE:latest"
-    - docker push "$DOCKER_REGISTRY/$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
-    - docker push "$DOCKER_REGISTRY/$CI_REGISTRY_IMAGE:latest"
-  except:
-    - master
+.pnpm:
+  image: node:16-alpine
+  cache: &cache
+    key: '$CI_COMMIT_REF_SLUG'
+    paths:
+      - .pnpm-store
+    policy: pull-push
+  before_script:
+    - npm install -g pnpm@8.2.0
+    - pnpm config set store-dir .pnpm-store
+    - pnpm install
+  needs: []
 
-deploy_production:
-  stage: deploy
-  script:
-    - docker login -u "$DOCKER_USER" -p "$DOCKER_PASS" "$DOCKER_REGISTRY"
-    - export http_proxy=http://proxy.esrf.fr:3128
-    - 'which ssh-agent || ( apk update && apk add openssh-client )'
-    - eval $(ssh-agent -s)
-    - echo "$SSH_DEPLOY_KEY_PROD" | ssh-add -
-    - mkdir -p ~/.ssh
-    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
-    - ssh -l gitlab-deploy "$DEPLOY_HOST" "$DOCKER_REGISTRY/$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
-  environment:
-    name: production
-    url: http://doi.esrf.fr/
-  when: manual
-  except:
-    - master
+include:
+  - local: '.gitlab/*.yml'
diff --git a/.gitlab/validate.yml b/.gitlab/validate.yml
new file mode 100644
index 0000000..b9e0cef
--- /dev/null
+++ b/.gitlab/validate.yml
@@ -0,0 +1,8 @@
+lint:
+  extends: .pnpm
+  stage: validate
+  script:
+    - pnpm lint:$LINTER
+  parallel:
+    matrix:
+      - LINTER: [eslint, prettier, tsc]
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..53c37a1
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1 @@
+dist
\ No newline at end of file
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..544138b
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,3 @@
+{
+  "singleQuote": true
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..8f58402
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,27 @@
+{
+  "javascript.format.enable": false,
+  "typescript.format.enable": false,
+  "json.format.enable": false,
+
+  "js/ts.implicitProjectConfig.checkJs": false,
+  "css.validate": false,
+
+  "editor.defaultFormatter": "esbenp.prettier-vscode",
+  "editor.formatOnSave": true,
+  "editor.codeActionsOnSave": {
+    "source.fixAll.eslint": true
+  },
+
+  "typescript.tsdk": "node_modules/typescript/lib",
+  "typescript.enablePromptUseWorkspaceTsdk": true,
+  "typescript.preferences.importModuleSpecifier": "non-relative",
+
+  "eslint.codeAction.disableRuleComment": { "location": "sameLine" },
+  "eslint.workingDirectories": [
+    { "pattern": "./apps/*/" },
+    { "pattern": "./packages/*/" }
+  ],
+  "eslint.trace.server": "verbose",
+  "eslint.debug": true,
+  "files.exclude": {}
+}
diff --git a/Dockerfile b/Dockerfile
deleted file mode 100644
index cafe548..0000000
--- a/Dockerfile
+++ /dev/null
@@ -1,15 +0,0 @@
-FROM httpd:2.4
-
-MAINTAINER Alejandro DE MARIA <demariaa@esrf.fr>
-
-ENV http_proxy http://proxy.esrf.fr:3128
-ENV https_proxy https://proxy.esrf.fr:3128
-ENV DEBIAN_FRONTEND noninteractive
-
-# RUN apt-get update
-# RUN apt-get install apache2 -y
-
-ADD www /usr/local/apache2/htdocs/
-COPY myHttpd.conf /usr/local/apache2/conf/httpd.conf
-EXPOSE 80
-# CMD /usr/sbin/apache2ctl -D FOREGROUND
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 3f0c68b..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2018 ICAT
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/Readme.md b/Readme.md
index 66d43a7..b557502 100644
--- a/Readme.md
+++ b/Readme.md
@@ -1,77 +1,28 @@
 # DOI landing page
-## Introduction
-This project handles the management of the doi landing page at ESRF.
-A person is searching for information from a given DOI code. He/she can go to datacite [search page](https://search.datacite.org/) and will enter the doi code he/she is looking at. In response, from his own database, the datacite server will redirect the search to the doi landing page which is located on esrf server.
-
-### Usage
-In production, the doi landing page is part of a docker container containing an apache2 server. 
-To perform a request use the following address (provided the page is accessible from doi.esrf.fr)
-   http://doi.esrf.fr/DOIprefix/DOIsuffix
-
 
+## Introduction
 
-## Technicalities for developers
+This project implements the DOI landing page.
+This landing page gives access to the metadata of the DOI and has a link to the data itself in the data portal.
 
-The grunFile.js has 2 tasks.
-* the default task will check and prepare the project for production. js files will be minified and concatanated. Consequently debugging of the js files is not easy using this task. 
-* the dev task which is meant for debugging purpose. In this case the js files are not minified.
+## Structure
 
-### How to develop
+The project is composed of two subprojects:
 
-* Fork this project to your github space.
-* Change the code to implement a new functionnality or fix issues. 
+- `apps/doi-landing-page`: The landing page itself. This is a react app which is in charge of resolving the requested route and use the relevant component to render the page.
 
-To test the changes locally on your computer:
-* Prepare the project ( check js files, create the dev.html file from the dev.tpl.html template )
-```
-cd www
-grunt dev
-```
-* Copy the www folder  (not all files are needed but it is easy) to apache folder
-```
-sudo rm -fr /var/www/html &&  sudo cp -r www/. /var/www/html/
-```
-* Open your browser and hit the starting page at the following address http://localhost/dev.html?DOI=prefix/suffix
-Replace prefix and suffix with real values. Note that the stating page is dev.html. In production , the starting page will be index.html.
-* Once you are satisfied with your work, prepare the project for production
-```
-cd www
-grunt
-```
-* Submit a merge request on icat repository at https://gitlab.esrf.fr/icat/doi-landing-page
+- `packages/doi/`: The DOI package. Used by `apps/doi-landing-page` and published on npm registry for use by data portal. This package is in charge of fetching the metadata of the DOI and rendering it.
 
-### How to prepare the docker container locally for testing purpose
-* Make sure the project is prepared for production (check js files, concatene them, minify them, handle other js dependancies)
-```
-grunt
-```
-* prepare the docker container
-```
-cd rootOfTheProject
-sudo ./build.sh
-```
+## Development
 
-### How to test the page in production setting (ie using the docker container)
-you can install the container locally to your docker instance
-* start docker daemon
-```
-sudo /etc/init.d/docker start
-```
-* install the docker container created before.
-```
-cd rootOfTheProject
-sudo ./run.sh
-```
+This project is using pnpm as package manager. You can install it with `npm install -g pnpm`.
 
-* retrieve the name of the container which has been installed locally listing all none running containers
-```
-sudo docker ps -a
-```
+To install the dependencies, run `pnpm install` at the root of the project.
 
-* start the given container
-```
-sudo docker start nameOfTheContainer
-```
+To start developing, go to `apps/doi-landing-page` and run `pnpm dev`.
 
-* access the doi landing page http://localhost:8092/DOIprefix/DOIsuffix
+To publish a new version of the `doi` package:
 
+- Go to `packages/doi`
+- Update the version in `package.json`
+- Run `pnpm package-publish`
diff --git a/apps/doi-landing-page/.eslintignore b/apps/doi-landing-page/.eslintignore
new file mode 100644
index 0000000..0ed753a
--- /dev/null
+++ b/apps/doi-landing-page/.eslintignore
@@ -0,0 +1,4 @@
+/dist*/
+/node_modules/
+.eslintrc.cjs
+vite.config.ts
\ No newline at end of file
diff --git a/apps/doi-landing-page/.eslintrc.cjs b/apps/doi-landing-page/.eslintrc.cjs
new file mode 100644
index 0000000..406cb04
--- /dev/null
+++ b/apps/doi-landing-page/.eslintrc.cjs
@@ -0,0 +1,26 @@
+module.exports = {
+  root: true,
+  extends: [
+    'react-app',
+    'react-app/jest',
+    'plugin:react/recommended',
+    'plugin:react/jsx-runtime',
+  ],
+  parser: '@typescript-eslint/parser',
+  rules: {
+    'no-debugger': 'error',
+    'no-console': [
+      'error',
+      {
+        allow: ['warn', 'error'],
+      },
+    ],
+    'react/no-unknown-property': 'off',
+    'no-restricted-imports': [
+      'error',
+      {
+        patterns: ['.*'],
+      },
+    ],
+  },
+};
diff --git a/apps/doi-landing-page/.gitignore b/apps/doi-landing-page/.gitignore
new file mode 100644
index 0000000..2d65cd9
--- /dev/null
+++ b/apps/doi-landing-page/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+.pnpm-store
+
+# Editor directories and files
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/apps/doi-landing-page/.prettierignore b/apps/doi-landing-page/.prettierignore
new file mode 100644
index 0000000..86c2365
--- /dev/null
+++ b/apps/doi-landing-page/.prettierignore
@@ -0,0 +1,25 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+.pnpm-store
+pnpm-lock.yaml
+
+# Editor directories and files
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/apps/doi-landing-page/.prettierrc b/apps/doi-landing-page/.prettierrc
new file mode 100644
index 0000000..544138b
--- /dev/null
+++ b/apps/doi-landing-page/.prettierrc
@@ -0,0 +1,3 @@
+{
+  "singleQuote": true
+}
diff --git a/apps/doi-landing-page/index.html b/apps/doi-landing-page/index.html
new file mode 100644
index 0000000..201986f
--- /dev/null
+++ b/apps/doi-landing-page/index.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <link rel="icon" type="image/svg+xml" href="/favicon.ico" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>DOI Landing page</title>
+  </head>
+  <body>
+    <div id="root"></div>
+    <script type="module" src="/src/main.tsx"></script>
+  </body>
+</html>
diff --git a/apps/doi-landing-page/package.json b/apps/doi-landing-page/package.json
new file mode 100644
index 0000000..e45f294
--- /dev/null
+++ b/apps/doi-landing-page/package.json
@@ -0,0 +1,41 @@
+{
+  "name": "doi-landing-page",
+  "private": true,
+  "version": "0.0.0",
+  "type": "module",
+  "scripts": {
+    "dev": "vite",
+    "build": "tsc && vite build",
+    "lint:eslint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
+    "lint:tsc": "tsc",
+    "lint:prettier": "prettier . --check",
+    "fix:eslint": "eslint \"**/*.{js,cjs,ts,tsx}\" --fix",
+    "fix:prettier": "prettier . --write",
+    "preview": "vite preview"
+  },
+  "dependencies": {
+    "bootstrap": "^5.3.2",
+    "bootswatch": "^5.3.2",
+    "react": "^18.2.0",
+    "react-bootstrap": "^2.9.1",
+    "react-dom": "^18.2.0",
+    "react-router-dom": "^6.17.0",
+    "@edata-portal/doi": "workspace:*"
+  },
+  "devDependencies": {
+    "@types/react": "^18.2.15",
+    "@types/react-dom": "^18.2.7",
+    "@typescript-eslint/eslint-plugin": "^6.0.0",
+    "@typescript-eslint/parser": "^6.0.0",
+    "@vitejs/plugin-react": "^4.0.3",
+    "eslint": "^8.45.0",
+    "eslint-config-react-app": "^7.0.1",
+    "eslint-plugin-react-hooks": "^4.6.0",
+    "eslint-plugin-react-refresh": "^0.4.3",
+    "prettier": "^3.0.3",
+    "sass": "^1.69.5",
+    "typescript": "^5.2.2",
+    "vite": "^4.4.5",
+    "vite-tsconfig-paths": "^4.2.1"
+  }
+}
diff --git a/apps/doi-landing-page/pnpm-lock.yaml b/apps/doi-landing-page/pnpm-lock.yaml
new file mode 100644
index 0000000..da8d83f
--- /dev/null
+++ b/apps/doi-landing-page/pnpm-lock.yaml
@@ -0,0 +1,4820 @@
+lockfileVersion: '6.0'
+
+settings:
+  autoInstallPeers: true
+  excludeLinksFromLockfile: false
+
+dependencies:
+  '@fortawesome/free-solid-svg-icons':
+    specifier: ^6.4.2
+    version: 6.4.2
+  '@fortawesome/react-fontawesome':
+    specifier: ^0.2.0
+    version: 0.2.0(@fortawesome/fontawesome-svg-core@6.4.2)(react@18.2.0)
+  '@tanstack/react-query':
+    specifier: ^5.0.5
+    version: 5.0.5(react-dom@18.2.0)(react@18.2.0)
+  autolinker:
+    specifier: ^4.0.0
+    version: 4.0.0
+  bootstrap:
+    specifier: ^5.3.2
+    version: 5.3.2(@popperjs/core@2.11.8)
+  bootswatch:
+    specifier: ^5.3.2
+    version: 5.3.2
+  date-fns:
+    specifier: ^2.30.0
+    version: 2.30.0
+  react:
+    specifier: ^18.2.0
+    version: 18.2.0
+  react-bootstrap:
+    specifier: ^2.9.1
+    version: 2.9.1(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)
+  react-dom:
+    specifier: ^18.2.0
+    version: 18.2.0(react@18.2.0)
+  react-router-dom:
+    specifier: ^6.17.0
+    version: 6.17.0(react-dom@18.2.0)(react@18.2.0)
+
+devDependencies:
+  '@types/react':
+    specifier: ^18.2.15
+    version: 18.2.15
+  '@types/react-dom':
+    specifier: ^18.2.7
+    version: 18.2.7
+  '@typescript-eslint/eslint-plugin':
+    specifier: ^6.0.0
+    version: 6.0.0(@typescript-eslint/parser@6.0.0)(eslint@8.45.0)(typescript@5.0.2)
+  '@typescript-eslint/parser':
+    specifier: ^6.0.0
+    version: 6.0.0(eslint@8.45.0)(typescript@5.0.2)
+  '@vitejs/plugin-react':
+    specifier: ^4.0.3
+    version: 4.0.3(vite@4.4.5)
+  eslint:
+    specifier: ^8.45.0
+    version: 8.45.0
+  eslint-config-react-app:
+    specifier: ^7.0.1
+    version: 7.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.15)(eslint@8.45.0)(typescript@5.0.2)
+  eslint-plugin-react-hooks:
+    specifier: ^4.6.0
+    version: 4.6.0(eslint@8.45.0)
+  eslint-plugin-react-refresh:
+    specifier: ^0.4.3
+    version: 0.4.3(eslint@8.45.0)
+  prettier:
+    specifier: ^3.0.3
+    version: 3.0.3
+  sass:
+    specifier: ^1.69.5
+    version: 1.69.5
+  typescript:
+    specifier: ^5.0.2
+    version: 5.0.2
+  vite:
+    specifier: ^4.4.5
+    version: 4.4.5(sass@1.69.5)
+  vite-tsconfig-paths:
+    specifier: ^4.2.1
+    version: 4.2.1(typescript@5.0.2)(vite@4.4.5)
+
+packages:
+
+  /@aashutoshrathi/word-wrap@1.2.6:
+    resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /@ampproject/remapping@2.2.1:
+    resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
+    engines: {node: '>=6.0.0'}
+    dependencies:
+      '@jridgewell/gen-mapping': 0.3.3
+      '@jridgewell/trace-mapping': 0.3.20
+    dev: true
+
+  /@babel/code-frame@7.22.13:
+    resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/highlight': 7.22.20
+      chalk: 2.4.2
+    dev: true
+
+  /@babel/compat-data@7.23.2:
+    resolution: {integrity: sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /@babel/core@7.23.2:
+    resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@ampproject/remapping': 2.2.1
+      '@babel/code-frame': 7.22.13
+      '@babel/generator': 7.23.0
+      '@babel/helper-compilation-targets': 7.22.15
+      '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2)
+      '@babel/helpers': 7.23.2
+      '@babel/parser': 7.23.0
+      '@babel/template': 7.22.15
+      '@babel/traverse': 7.23.2
+      '@babel/types': 7.23.0
+      convert-source-map: 2.0.0
+      debug: 4.3.4
+      gensync: 1.0.0-beta.2
+      json5: 2.2.3
+      semver: 6.3.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/eslint-parser@7.22.15(@babel/core@7.23.2)(eslint@8.45.0):
+    resolution: {integrity: sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==}
+    engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
+    peerDependencies:
+      '@babel/core': ^7.11.0
+      eslint: ^7.5.0 || ^8.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
+      eslint: 8.45.0
+      eslint-visitor-keys: 2.1.0
+      semver: 6.3.1
+    dev: true
+
+  /@babel/generator@7.23.0:
+    resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+      '@jridgewell/gen-mapping': 0.3.3
+      '@jridgewell/trace-mapping': 0.3.20
+      jsesc: 2.5.2
+    dev: true
+
+  /@babel/helper-annotate-as-pure@7.22.5:
+    resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15:
+    resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-compilation-targets@7.22.15:
+    resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/compat-data': 7.23.2
+      '@babel/helper-validator-option': 7.22.15
+      browserslist: 4.22.1
+      lru-cache: 5.1.1
+      semver: 6.3.1
+    dev: true
+
+  /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      '@babel/helper-environment-visitor': 7.22.20
+      '@babel/helper-function-name': 7.23.0
+      '@babel/helper-member-expression-to-functions': 7.23.0
+      '@babel/helper-optimise-call-expression': 7.22.5
+      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2)
+      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+      '@babel/helper-split-export-declaration': 7.22.6
+      semver: 6.3.1
+    dev: true
+
+  /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      regexpu-core: 5.3.2
+      semver: 6.3.1
+    dev: true
+
+  /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==}
+    peerDependencies:
+      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-compilation-targets': 7.22.15
+      '@babel/helper-plugin-utils': 7.22.5
+      debug: 4.3.4
+      lodash.debounce: 4.0.8
+      resolve: 1.22.8
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/helper-environment-visitor@7.22.20:
+    resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /@babel/helper-function-name@7.23.0:
+    resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/template': 7.22.15
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-hoist-variables@7.22.5:
+    resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-member-expression-to-functions@7.23.0:
+    resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-module-imports@7.22.15:
+    resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.2):
+    resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-environment-visitor': 7.22.20
+      '@babel/helper-module-imports': 7.22.15
+      '@babel/helper-simple-access': 7.22.5
+      '@babel/helper-split-export-declaration': 7.22.6
+      '@babel/helper-validator-identifier': 7.22.20
+    dev: true
+
+  /@babel/helper-optimise-call-expression@7.22.5:
+    resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-plugin-utils@7.22.5:
+    resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.2):
+    resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      '@babel/helper-environment-visitor': 7.22.20
+      '@babel/helper-wrap-function': 7.22.20
+    dev: true
+
+  /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.2):
+    resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-environment-visitor': 7.22.20
+      '@babel/helper-member-expression-to-functions': 7.23.0
+      '@babel/helper-optimise-call-expression': 7.22.5
+    dev: true
+
+  /@babel/helper-simple-access@7.22.5:
+    resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-skip-transparent-expression-wrappers@7.22.5:
+    resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-split-export-declaration@7.22.6:
+    resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-string-parser@7.22.5:
+    resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /@babel/helper-validator-identifier@7.22.20:
+    resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /@babel/helper-validator-option@7.22.15:
+    resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /@babel/helper-wrap-function@7.22.20:
+    resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-function-name': 7.23.0
+      '@babel/template': 7.22.15
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helpers@7.23.2:
+    resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/template': 7.22.15
+      '@babel/traverse': 7.23.2
+      '@babel/types': 7.23.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/highlight@7.22.20:
+    resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-validator-identifier': 7.22.20
+      chalk: 2.4.2
+      js-tokens: 4.0.0
+    dev: true
+
+  /@babel/parser@7.23.0:
+    resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==}
+    engines: {node: '>=6.0.0'}
+    hasBin: true
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.13.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+      '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.2):
+    resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==}
+    engines: {node: '>=6.9.0'}
+    deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-proposal-decorators@7.23.2(@babel/core@7.23.2):
+    resolution: {integrity: sha512-eR0gJQc830fJVGz37oKLvt9W9uUIQSAovUl0e9sJ3YeO09dlcoBVYD3CLrjCj4qHdXmfiyTyFt8yeQYSN5fxLg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2)
+      '@babel/helper-split-export-declaration': 7.22.6
+      '@babel/plugin-syntax-decorators': 7.22.10(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.2):
+    resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==}
+    engines: {node: '>=6.9.0'}
+    deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.23.2):
+    resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==}
+    engines: {node: '>=6.9.0'}
+    deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.2):
+    resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==}
+    engines: {node: '>=6.9.0'}
+    deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.23.2):
+    resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==}
+    engines: {node: '>=6.9.0'}
+    deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.2):
+    resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+    dev: true
+
+  /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==}
+    engines: {node: '>=6.9.0'}
+    deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.2):
+    resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.2):
+    resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-decorators@7.22.10(@babel/core@7.23.2):
+    resolution: {integrity: sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.2):
+    resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.2):
+    resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.2):
+    resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.2):
+    resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-async-generator-functions@7.23.2(@babel/core@7.23.2):
+    resolution: {integrity: sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-environment-visitor': 7.22.20
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.2)
+      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-module-imports': 7.22.15
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.23.2):
+    resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.12.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-classes@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      '@babel/helper-compilation-targets': 7.22.15
+      '@babel/helper-environment-visitor': 7.22.20
+      '@babel/helper-function-name': 7.23.0
+      '@babel/helper-optimise-call-expression': 7.22.5
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2)
+      '@babel/helper-split-export-declaration': 7.22.6
+      globals: 11.12.0
+    dev: true
+
+  /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/template': 7.22.15
+    dev: true
+
+  /@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.23.2):
+    resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-for-of@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-compilation-targets': 7.22.15
+      '@babel/helper-function-name': 7.23.0
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-literals@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-modules-amd@7.23.0(@babel/core@7.23.2):
+    resolution: {integrity: sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.2):
+    resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-simple-access': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-modules-systemjs@7.23.0(@babel/core@7.23.2):
+    resolution: {integrity: sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-hoist-variables': 7.22.5
+      '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-validator-identifier': 7.22.20
+    dev: true
+
+  /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-object-rest-spread@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/compat-data': 7.23.2
+      '@babel/core': 7.23.2
+      '@babel/helper-compilation-targets': 7.22.15
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2)
+      '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-optional-chaining@7.23.0(@babel/core@7.23.2):
+    resolution: {integrity: sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-parameters@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      '@babel/helper-module-imports': 7.22.15
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.2)
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/plugin-transform-react-pure-annotations@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.23.2):
+    resolution: {integrity: sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      regenerator-transform: 0.15.2
+    dev: true
+
+  /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-runtime@7.23.2(@babel/core@7.23.2):
+    resolution: {integrity: sha512-XOntj6icgzMS58jPVtQpiuF6ZFWxQiJavISGx5KGjRj+3gqZr8+N6Kx+N9BApWzgS+DOjIZfXXj0ZesenOWDyA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-module-imports': 7.22.15
+      '@babel/helper-plugin-utils': 7.22.5
+      babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.2)
+      babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.2)
+      babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.2)
+      semver: 6.3.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-spread@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.23.2):
+    resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/preset-env@7.23.2(@babel/core@7.23.2):
+    resolution: {integrity: sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/compat-data': 7.23.2
+      '@babel/core': 7.23.2
+      '@babel/helper-compilation-targets': 7.22.15
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-validator-option': 7.22.15
+      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15(@babel/core@7.23.2)
+      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15(@babel/core@7.23.2)
+      '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.2)
+      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2)
+      '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.2)
+      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.2)
+      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2)
+      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.2)
+      '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.2)
+      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2)
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2)
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2)
+      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2)
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2)
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2)
+      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2)
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2)
+      '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.2)
+      '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.2)
+      '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-async-generator-functions': 7.23.2(@babel/core@7.23.2)
+      '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.23.2)
+      '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.23.2)
+      '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-destructuring': 7.23.0(@babel/core@7.23.2)
+      '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-dynamic-import': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-export-namespace-from': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.23.2)
+      '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-json-strings': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-modules-amd': 7.23.0(@babel/core@7.23.2)
+      '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.2)
+      '@babel/plugin-transform-modules-systemjs': 7.23.0(@babel/core@7.23.2)
+      '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-numeric-separator': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-object-rest-spread': 7.22.15(@babel/core@7.23.2)
+      '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-optional-catch-binding': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.2)
+      '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.2)
+      '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-private-property-in-object': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.23.2)
+      '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.23.2)
+      '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.23.2)
+      '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.2)
+      '@babel/types': 7.23.0
+      babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.2)
+      babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.2)
+      babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.2)
+      core-js-compat: 3.33.1
+      semver: 6.3.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.2):
+    resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/types': 7.23.0
+      esutils: 2.0.3
+    dev: true
+
+  /@babel/preset-react@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-validator-option': 7.22.15
+      '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.23.2)
+      '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-react-pure-annotations': 7.22.5(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/preset-typescript@7.23.2(@babel/core@7.23.2):
+    resolution: {integrity: sha512-u4UJc1XsS1GhIGteM8rnGiIvf9rJpiVgMEeCnwlLA7WJPC+jcXWJAGxYmeqs5hOZD8BbAfnV5ezBOxQbb4OUxA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-validator-option': 7.22.15
+      '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.2)
+      '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/regjsgen@0.8.0:
+    resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
+    dev: true
+
+  /@babel/runtime@7.23.2:
+    resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      regenerator-runtime: 0.14.0
+
+  /@babel/template@7.22.15:
+    resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/code-frame': 7.22.13
+      '@babel/parser': 7.23.0
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/traverse@7.23.2:
+    resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/code-frame': 7.22.13
+      '@babel/generator': 7.23.0
+      '@babel/helper-environment-visitor': 7.22.20
+      '@babel/helper-function-name': 7.23.0
+      '@babel/helper-hoist-variables': 7.22.5
+      '@babel/helper-split-export-declaration': 7.22.6
+      '@babel/parser': 7.23.0
+      '@babel/types': 7.23.0
+      debug: 4.3.4
+      globals: 11.12.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/types@7.23.0:
+    resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-string-parser': 7.22.5
+      '@babel/helper-validator-identifier': 7.22.20
+      to-fast-properties: 2.0.0
+    dev: true
+
+  /@esbuild/android-arm64@0.18.20:
+    resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/android-arm@0.18.20:
+    resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/android-x64@0.18.20:
+    resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/darwin-arm64@0.18.20:
+    resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/darwin-x64@0.18.20:
+    resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/freebsd-arm64@0.18.20:
+    resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [freebsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/freebsd-x64@0.18.20:
+    resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [freebsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-arm64@0.18.20:
+    resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-arm@0.18.20:
+    resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-ia32@0.18.20:
+    resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-loong64@0.18.20:
+    resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
+    engines: {node: '>=12'}
+    cpu: [loong64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-mips64el@0.18.20:
+    resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
+    engines: {node: '>=12'}
+    cpu: [mips64el]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-ppc64@0.18.20:
+    resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
+    engines: {node: '>=12'}
+    cpu: [ppc64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-riscv64@0.18.20:
+    resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
+    engines: {node: '>=12'}
+    cpu: [riscv64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-s390x@0.18.20:
+    resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
+    engines: {node: '>=12'}
+    cpu: [s390x]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-x64@0.18.20:
+    resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/netbsd-x64@0.18.20:
+    resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [netbsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/openbsd-x64@0.18.20:
+    resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [openbsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/sunos-x64@0.18.20:
+    resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [sunos]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/win32-arm64@0.18.20:
+    resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/win32-ia32@0.18.20:
+    resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/win32-x64@0.18.20:
+    resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@eslint-community/eslint-utils@4.4.0(eslint@8.45.0):
+    resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+    dependencies:
+      eslint: 8.45.0
+      eslint-visitor-keys: 3.4.3
+    dev: true
+
+  /@eslint-community/regexpp@4.10.0:
+    resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
+    engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+    dev: true
+
+  /@eslint/eslintrc@2.1.2:
+    resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dependencies:
+      ajv: 6.12.6
+      debug: 4.3.4
+      espree: 9.6.1
+      globals: 13.23.0
+      ignore: 5.2.4
+      import-fresh: 3.3.0
+      js-yaml: 4.1.0
+      minimatch: 3.1.2
+      strip-json-comments: 3.1.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@eslint/js@8.44.0:
+    resolution: {integrity: sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dev: true
+
+  /@fortawesome/fontawesome-common-types@6.4.2:
+    resolution: {integrity: sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==}
+    engines: {node: '>=6'}
+    requiresBuild: true
+    dev: false
+
+  /@fortawesome/fontawesome-svg-core@6.4.2:
+    resolution: {integrity: sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==}
+    engines: {node: '>=6'}
+    requiresBuild: true
+    dependencies:
+      '@fortawesome/fontawesome-common-types': 6.4.2
+    dev: false
+
+  /@fortawesome/free-solid-svg-icons@6.4.2:
+    resolution: {integrity: sha512-sYwXurXUEQS32fZz9hVCUUv/xu49PEJEyUOsA51l6PU/qVgfbTb2glsTEaJngVVT8VqBATRIdh7XVgV1JF1LkA==}
+    engines: {node: '>=6'}
+    requiresBuild: true
+    dependencies:
+      '@fortawesome/fontawesome-common-types': 6.4.2
+    dev: false
+
+  /@fortawesome/react-fontawesome@0.2.0(@fortawesome/fontawesome-svg-core@6.4.2)(react@18.2.0):
+    resolution: {integrity: sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==}
+    peerDependencies:
+      '@fortawesome/fontawesome-svg-core': ~1 || ~6
+      react: '>=16.3'
+    dependencies:
+      '@fortawesome/fontawesome-svg-core': 6.4.2
+      prop-types: 15.8.1
+      react: 18.2.0
+    dev: false
+
+  /@humanwhocodes/config-array@0.11.13:
+    resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==}
+    engines: {node: '>=10.10.0'}
+    dependencies:
+      '@humanwhocodes/object-schema': 2.0.1
+      debug: 4.3.4
+      minimatch: 3.1.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@humanwhocodes/module-importer@1.0.1:
+    resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+    engines: {node: '>=12.22'}
+    dev: true
+
+  /@humanwhocodes/object-schema@2.0.1:
+    resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==}
+    dev: true
+
+  /@jridgewell/gen-mapping@0.3.3:
+    resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
+    engines: {node: '>=6.0.0'}
+    dependencies:
+      '@jridgewell/set-array': 1.1.2
+      '@jridgewell/sourcemap-codec': 1.4.15
+      '@jridgewell/trace-mapping': 0.3.20
+    dev: true
+
+  /@jridgewell/resolve-uri@3.1.1:
+    resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
+    engines: {node: '>=6.0.0'}
+    dev: true
+
+  /@jridgewell/set-array@1.1.2:
+    resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
+    engines: {node: '>=6.0.0'}
+    dev: true
+
+  /@jridgewell/sourcemap-codec@1.4.15:
+    resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+    dev: true
+
+  /@jridgewell/trace-mapping@0.3.20:
+    resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==}
+    dependencies:
+      '@jridgewell/resolve-uri': 3.1.1
+      '@jridgewell/sourcemap-codec': 1.4.15
+    dev: true
+
+  /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1:
+    resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==}
+    dependencies:
+      eslint-scope: 5.1.1
+    dev: true
+
+  /@nodelib/fs.scandir@2.1.5:
+    resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+    engines: {node: '>= 8'}
+    dependencies:
+      '@nodelib/fs.stat': 2.0.5
+      run-parallel: 1.2.0
+    dev: true
+
+  /@nodelib/fs.stat@2.0.5:
+    resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+    engines: {node: '>= 8'}
+    dev: true
+
+  /@nodelib/fs.walk@1.2.8:
+    resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+    engines: {node: '>= 8'}
+    dependencies:
+      '@nodelib/fs.scandir': 2.1.5
+      fastq: 1.15.0
+    dev: true
+
+  /@popperjs/core@2.11.8:
+    resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
+    dev: false
+
+  /@react-aria/ssr@3.8.0(react@18.2.0):
+    resolution: {integrity: sha512-Y54xs483rglN5DxbwfCPHxnkvZ+gZ0LbSYmR72LyWPGft8hN/lrl1VRS1EW2SMjnkEWlj+Km2mwvA3kEHDUA0A==}
+    engines: {node: '>= 12'}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+    dependencies:
+      '@swc/helpers': 0.5.3
+      react: 18.2.0
+    dev: false
+
+  /@remix-run/router@1.10.0:
+    resolution: {integrity: sha512-Lm+fYpMfZoEucJ7cMxgt4dYt8jLfbpwRCzAjm9UgSLOkmlqo9gupxt6YX3DY0Fk155NT9l17d/ydi+964uS9Lw==}
+    engines: {node: '>=14.0.0'}
+    dev: false
+
+  /@restart/hooks@0.4.11(react@18.2.0):
+    resolution: {integrity: sha512-Ft/ncTULZN6ldGHiF/k5qt72O8JyRMOeg0tApvCni8LkoiEahO+z3TNxfXIVGy890YtWVDvJAl662dVJSJXvMw==}
+    peerDependencies:
+      react: '>=16.8.0'
+    dependencies:
+      dequal: 2.0.3
+      react: 18.2.0
+    dev: false
+
+  /@restart/ui@1.6.6(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-eC3puKuWE1SRYbojWHXnvCNHGgf3uzHCb6JOhnF4OXPibOIPEkR1sqDSkL643ydigxwh+ruCa1CmYHlzk7ikKA==}
+    peerDependencies:
+      react: '>=16.14.0'
+      react-dom: '>=16.14.0'
+    dependencies:
+      '@babel/runtime': 7.23.2
+      '@popperjs/core': 2.11.8
+      '@react-aria/ssr': 3.8.0(react@18.2.0)
+      '@restart/hooks': 0.4.11(react@18.2.0)
+      '@types/warning': 3.0.2
+      dequal: 2.0.3
+      dom-helpers: 5.2.1
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      uncontrollable: 8.0.4(react@18.2.0)
+      warning: 4.0.3
+    dev: false
+
+  /@rushstack/eslint-patch@1.5.1:
+    resolution: {integrity: sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==}
+    dev: true
+
+  /@swc/helpers@0.5.3:
+    resolution: {integrity: sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==}
+    dependencies:
+      tslib: 2.6.2
+    dev: false
+
+  /@tanstack/query-core@5.0.5:
+    resolution: {integrity: sha512-MThCETMkHDHTnFZHp71L+SqTtD5d6XHftFCVR1xRJdWM3qGrlQ2VCXaj0SKVcyJej2e1Opa2c7iknu1llxCDNQ==}
+    dev: false
+
+  /@tanstack/react-query@5.0.5(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-ZG0Q4HZ0iuI8mWiZ2/MdVYPHbrmAVhMn7+gLOkxJh6zLIgCL4luSZlohzN5Xt4MjxfxxWioO1nemwpudaTsmQg==}
+    peerDependencies:
+      react: ^18.0.0
+      react-dom: ^18.0.0
+      react-native: '*'
+    peerDependenciesMeta:
+      react-dom:
+        optional: true
+      react-native:
+        optional: true
+    dependencies:
+      '@tanstack/query-core': 5.0.5
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: false
+
+  /@types/json-schema@7.0.14:
+    resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==}
+    dev: true
+
+  /@types/json5@0.0.29:
+    resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+    dev: true
+
+  /@types/parse-json@4.0.1:
+    resolution: {integrity: sha512-3YmXzzPAdOTVljVMkTMBdBEvlOLg2cDQaDhnnhT3nT9uDbnJzjWhKlzb+desT12Y7tGqaN6d+AbozcKzyL36Ng==}
+    dev: true
+
+  /@types/prop-types@15.7.9:
+    resolution: {integrity: sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==}
+
+  /@types/react-dom@18.2.7:
+    resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==}
+    dependencies:
+      '@types/react': 18.2.15
+    dev: true
+
+  /@types/react-transition-group@4.4.8:
+    resolution: {integrity: sha512-QmQ22q+Pb+HQSn04NL3HtrqHwYMf4h3QKArOy5F8U5nEVMaihBs3SR10WiOM1iwPz5jIo8x/u11al+iEGZZrvg==}
+    dependencies:
+      '@types/react': 18.2.15
+    dev: false
+
+  /@types/react@18.2.15:
+    resolution: {integrity: sha512-oEjE7TQt1fFTFSbf8kkNuc798ahTUzn3Le67/PWjE8MAfYAD/qB7O8hSTcromLFqHCt9bcdOg5GXMokzTjJ5SA==}
+    dependencies:
+      '@types/prop-types': 15.7.9
+      '@types/scheduler': 0.16.5
+      csstype: 3.1.2
+
+  /@types/scheduler@0.16.5:
+    resolution: {integrity: sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==}
+
+  /@types/semver@7.5.4:
+    resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==}
+    dev: true
+
+  /@types/warning@3.0.2:
+    resolution: {integrity: sha512-S/2+OjBIcBl8Kur23YLe0hG1e7J5m2bHfB4UuMNoLZjIFhQWhTf1FeS+WFoXHUC6QsCEfk4pftj4J1KIKC1glA==}
+    dev: false
+
+  /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.45.0)(typescript@5.0.2):
+    resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      '@typescript-eslint/parser': ^5.0.0
+      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@eslint-community/regexpp': 4.10.0
+      '@typescript-eslint/parser': 5.62.0(eslint@8.45.0)(typescript@5.0.2)
+      '@typescript-eslint/scope-manager': 5.62.0
+      '@typescript-eslint/type-utils': 5.62.0(eslint@8.45.0)(typescript@5.0.2)
+      '@typescript-eslint/utils': 5.62.0(eslint@8.45.0)(typescript@5.0.2)
+      debug: 4.3.4
+      eslint: 8.45.0
+      graphemer: 1.4.0
+      ignore: 5.2.4
+      natural-compare-lite: 1.4.0
+      semver: 7.5.4
+      tsutils: 3.21.0(typescript@5.0.2)
+      typescript: 5.0.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/eslint-plugin@6.0.0(@typescript-eslint/parser@6.0.0)(eslint@8.45.0)(typescript@5.0.2):
+    resolution: {integrity: sha512-xuv6ghKGoiq856Bww/yVYnXGsKa588kY3M0XK7uUW/3fJNNULKRfZfSBkMTSpqGG/8ZCXCadfh8G/z/B4aqS/A==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    peerDependencies:
+      '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
+      eslint: ^7.0.0 || ^8.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@eslint-community/regexpp': 4.10.0
+      '@typescript-eslint/parser': 6.0.0(eslint@8.45.0)(typescript@5.0.2)
+      '@typescript-eslint/scope-manager': 6.0.0
+      '@typescript-eslint/type-utils': 6.0.0(eslint@8.45.0)(typescript@5.0.2)
+      '@typescript-eslint/utils': 6.0.0(eslint@8.45.0)(typescript@5.0.2)
+      '@typescript-eslint/visitor-keys': 6.0.0
+      debug: 4.3.4
+      eslint: 8.45.0
+      grapheme-splitter: 1.0.4
+      graphemer: 1.4.0
+      ignore: 5.2.4
+      natural-compare: 1.4.0
+      natural-compare-lite: 1.4.0
+      semver: 7.5.4
+      ts-api-utils: 1.0.3(typescript@5.0.2)
+      typescript: 5.0.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/experimental-utils@5.62.0(eslint@8.45.0)(typescript@5.0.2):
+    resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+    dependencies:
+      '@typescript-eslint/utils': 5.62.0(eslint@8.45.0)(typescript@5.0.2)
+      eslint: 8.45.0
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+    dev: true
+
+  /@typescript-eslint/parser@5.62.0(eslint@8.45.0)(typescript@5.0.2):
+    resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/scope-manager': 5.62.0
+      '@typescript-eslint/types': 5.62.0
+      '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.2)
+      debug: 4.3.4
+      eslint: 8.45.0
+      typescript: 5.0.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/parser@6.0.0(eslint@8.45.0)(typescript@5.0.2):
+    resolution: {integrity: sha512-TNaufYSPrr1U8n+3xN+Yp9g31vQDJqhXzzPSHfQDLcaO4tU+mCfODPxCwf4H530zo7aUBE3QIdxCXamEnG04Tg==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    peerDependencies:
+      eslint: ^7.0.0 || ^8.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/scope-manager': 6.0.0
+      '@typescript-eslint/types': 6.0.0
+      '@typescript-eslint/typescript-estree': 6.0.0(typescript@5.0.2)
+      '@typescript-eslint/visitor-keys': 6.0.0
+      debug: 4.3.4
+      eslint: 8.45.0
+      typescript: 5.0.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/scope-manager@5.62.0:
+    resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dependencies:
+      '@typescript-eslint/types': 5.62.0
+      '@typescript-eslint/visitor-keys': 5.62.0
+    dev: true
+
+  /@typescript-eslint/scope-manager@6.0.0:
+    resolution: {integrity: sha512-o4q0KHlgCZTqjuaZ25nw5W57NeykZT9LiMEG4do/ovwvOcPnDO1BI5BQdCsUkjxFyrCL0cSzLjvIMfR9uo7cWg==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    dependencies:
+      '@typescript-eslint/types': 6.0.0
+      '@typescript-eslint/visitor-keys': 6.0.0
+    dev: true
+
+  /@typescript-eslint/type-utils@5.62.0(eslint@8.45.0)(typescript@5.0.2):
+    resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      eslint: '*'
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.2)
+      '@typescript-eslint/utils': 5.62.0(eslint@8.45.0)(typescript@5.0.2)
+      debug: 4.3.4
+      eslint: 8.45.0
+      tsutils: 3.21.0(typescript@5.0.2)
+      typescript: 5.0.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/type-utils@6.0.0(eslint@8.45.0)(typescript@5.0.2):
+    resolution: {integrity: sha512-ah6LJvLgkoZ/pyJ9GAdFkzeuMZ8goV6BH7eC9FPmojrnX9yNCIsfjB+zYcnex28YO3RFvBkV6rMV6WpIqkPvoQ==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    peerDependencies:
+      eslint: ^7.0.0 || ^8.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/typescript-estree': 6.0.0(typescript@5.0.2)
+      '@typescript-eslint/utils': 6.0.0(eslint@8.45.0)(typescript@5.0.2)
+      debug: 4.3.4
+      eslint: 8.45.0
+      ts-api-utils: 1.0.3(typescript@5.0.2)
+      typescript: 5.0.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/types@5.62.0:
+    resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dev: true
+
+  /@typescript-eslint/types@6.0.0:
+    resolution: {integrity: sha512-Zk9KDggyZM6tj0AJWYYKgF0yQyrcnievdhG0g5FqyU3Y2DRxJn4yWY21sJC0QKBckbsdKKjYDV2yVrrEvuTgxg==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    dev: true
+
+  /@typescript-eslint/typescript-estree@5.62.0(typescript@5.0.2):
+    resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/types': 5.62.0
+      '@typescript-eslint/visitor-keys': 5.62.0
+      debug: 4.3.4
+      globby: 11.1.0
+      is-glob: 4.0.3
+      semver: 7.5.4
+      tsutils: 3.21.0(typescript@5.0.2)
+      typescript: 5.0.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/typescript-estree@6.0.0(typescript@5.0.2):
+    resolution: {integrity: sha512-2zq4O7P6YCQADfmJ5OTDQTP3ktajnXIRrYAtHM9ofto/CJZV3QfJ89GEaM2BNGeSr1KgmBuLhEkz5FBkS2RQhQ==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    peerDependencies:
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/types': 6.0.0
+      '@typescript-eslint/visitor-keys': 6.0.0
+      debug: 4.3.4
+      globby: 11.1.0
+      is-glob: 4.0.3
+      semver: 7.5.4
+      ts-api-utils: 1.0.3(typescript@5.0.2)
+      typescript: 5.0.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/utils@5.62.0(eslint@8.45.0)(typescript@5.0.2):
+    resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+    dependencies:
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0)
+      '@types/json-schema': 7.0.14
+      '@types/semver': 7.5.4
+      '@typescript-eslint/scope-manager': 5.62.0
+      '@typescript-eslint/types': 5.62.0
+      '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.2)
+      eslint: 8.45.0
+      eslint-scope: 5.1.1
+      semver: 7.5.4
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+    dev: true
+
+  /@typescript-eslint/utils@6.0.0(eslint@8.45.0)(typescript@5.0.2):
+    resolution: {integrity: sha512-SOr6l4NB6HE4H/ktz0JVVWNXqCJTOo/mHnvIte1ZhBQ0Cvd04x5uKZa3zT6tiodL06zf5xxdK8COiDvPnQ27JQ==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    peerDependencies:
+      eslint: ^7.0.0 || ^8.0.0
+    dependencies:
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0)
+      '@types/json-schema': 7.0.14
+      '@types/semver': 7.5.4
+      '@typescript-eslint/scope-manager': 6.0.0
+      '@typescript-eslint/types': 6.0.0
+      '@typescript-eslint/typescript-estree': 6.0.0(typescript@5.0.2)
+      eslint: 8.45.0
+      eslint-scope: 5.1.1
+      semver: 7.5.4
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+    dev: true
+
+  /@typescript-eslint/visitor-keys@5.62.0:
+    resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dependencies:
+      '@typescript-eslint/types': 5.62.0
+      eslint-visitor-keys: 3.4.3
+    dev: true
+
+  /@typescript-eslint/visitor-keys@6.0.0:
+    resolution: {integrity: sha512-cvJ63l8c0yXdeT5POHpL0Q1cZoRcmRKFCtSjNGJxPkcP571EfZMcNbzWAc7oK3D1dRzm/V5EwtkANTZxqvuuUA==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    dependencies:
+      '@typescript-eslint/types': 6.0.0
+      eslint-visitor-keys: 3.4.3
+    dev: true
+
+  /@vitejs/plugin-react@4.0.3(vite@4.4.5):
+    resolution: {integrity: sha512-pwXDog5nwwvSIzwrvYYmA2Ljcd/ZNlcsSG2Q9CNDBwnsd55UGAyr2doXtB5j+2uymRCnCfExlznzzSFbBRcoCg==}
+    engines: {node: ^14.18.0 || >=16.0.0}
+    peerDependencies:
+      vite: ^4.2.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.23.2)
+      react-refresh: 0.14.0
+      vite: 4.4.5(sass@1.69.5)
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /acorn-jsx@5.3.2(acorn@8.10.0):
+    resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+    peerDependencies:
+      acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+    dependencies:
+      acorn: 8.10.0
+    dev: true
+
+  /acorn@8.10.0:
+    resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==}
+    engines: {node: '>=0.4.0'}
+    hasBin: true
+    dev: true
+
+  /ajv@6.12.6:
+    resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+    dependencies:
+      fast-deep-equal: 3.1.3
+      fast-json-stable-stringify: 2.1.0
+      json-schema-traverse: 0.4.1
+      uri-js: 4.4.1
+    dev: true
+
+  /ansi-regex@5.0.1:
+    resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /ansi-styles@3.2.1:
+    resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+    engines: {node: '>=4'}
+    dependencies:
+      color-convert: 1.9.3
+    dev: true
+
+  /ansi-styles@4.3.0:
+    resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+    engines: {node: '>=8'}
+    dependencies:
+      color-convert: 2.0.1
+    dev: true
+
+  /anymatch@3.1.3:
+    resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+    engines: {node: '>= 8'}
+    dependencies:
+      normalize-path: 3.0.0
+      picomatch: 2.3.1
+    dev: true
+
+  /argparse@2.0.1:
+    resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+    dev: true
+
+  /aria-query@5.3.0:
+    resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
+    dependencies:
+      dequal: 2.0.3
+    dev: true
+
+  /array-buffer-byte-length@1.0.0:
+    resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
+    dependencies:
+      call-bind: 1.0.5
+      is-array-buffer: 3.0.2
+    dev: true
+
+  /array-includes@3.1.7:
+    resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      get-intrinsic: 1.2.2
+      is-string: 1.0.7
+    dev: true
+
+  /array-union@2.1.0:
+    resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /array.prototype.findlastindex@1.2.3:
+    resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      es-shim-unscopables: 1.0.2
+      get-intrinsic: 1.2.2
+    dev: true
+
+  /array.prototype.flat@1.3.2:
+    resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      es-shim-unscopables: 1.0.2
+    dev: true
+
+  /array.prototype.flatmap@1.3.2:
+    resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      es-shim-unscopables: 1.0.2
+    dev: true
+
+  /array.prototype.tosorted@1.1.2:
+    resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      es-shim-unscopables: 1.0.2
+      get-intrinsic: 1.2.2
+    dev: true
+
+  /arraybuffer.prototype.slice@1.0.2:
+    resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      array-buffer-byte-length: 1.0.0
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      get-intrinsic: 1.2.2
+      is-array-buffer: 3.0.2
+      is-shared-array-buffer: 1.0.2
+    dev: true
+
+  /ast-types-flow@0.0.7:
+    resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==}
+    dev: true
+
+  /asynciterator.prototype@1.0.0:
+    resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==}
+    dependencies:
+      has-symbols: 1.0.3
+    dev: true
+
+  /autolinker@4.0.0:
+    resolution: {integrity: sha512-fl5Kh6BmEEZx+IWBfEirnRUU5+cOiV0OK7PEt0RBKvJMJ8GaRseIOeDU3FKf4j3CE5HVefcjHmhYPOcaVt0bZw==}
+    dependencies:
+      tslib: 2.6.2
+    dev: false
+
+  /available-typed-arrays@1.0.5:
+    resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
+    engines: {node: '>= 0.4'}
+    dev: true
+
+  /axe-core@4.8.2:
+    resolution: {integrity: sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /axobject-query@3.2.1:
+    resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==}
+    dependencies:
+      dequal: 2.0.3
+    dev: true
+
+  /babel-plugin-macros@3.1.0:
+    resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
+    engines: {node: '>=10', npm: '>=6'}
+    dependencies:
+      '@babel/runtime': 7.23.2
+      cosmiconfig: 7.1.0
+      resolve: 1.22.8
+    dev: true
+
+  /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.2):
+    resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==}
+    peerDependencies:
+      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+    dependencies:
+      '@babel/compat-data': 7.23.2
+      '@babel/core': 7.23.2
+      '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2)
+      semver: 6.3.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.23.2):
+    resolution: {integrity: sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==}
+    peerDependencies:
+      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2)
+      core-js-compat: 3.33.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==}
+    peerDependencies:
+      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2)
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /babel-plugin-transform-react-remove-prop-types@0.4.24:
+    resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==}
+    dev: true
+
+  /babel-preset-react-app@10.0.1:
+    resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==}
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.2)
+      '@babel/plugin-proposal-decorators': 7.23.2(@babel/core@7.23.2)
+      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.2)
+      '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.2)
+      '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.2)
+      '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.23.2)
+      '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-runtime': 7.23.2(@babel/core@7.23.2)
+      '@babel/preset-env': 7.23.2(@babel/core@7.23.2)
+      '@babel/preset-react': 7.22.15(@babel/core@7.23.2)
+      '@babel/preset-typescript': 7.23.2(@babel/core@7.23.2)
+      '@babel/runtime': 7.23.2
+      babel-plugin-macros: 3.1.0
+      babel-plugin-transform-react-remove-prop-types: 0.4.24
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /balanced-match@1.0.2:
+    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+    dev: true
+
+  /binary-extensions@2.2.0:
+    resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /bootstrap@5.3.2(@popperjs/core@2.11.8):
+    resolution: {integrity: sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==}
+    peerDependencies:
+      '@popperjs/core': ^2.11.8
+    dependencies:
+      '@popperjs/core': 2.11.8
+    dev: false
+
+  /bootswatch@5.3.2:
+    resolution: {integrity: sha512-r05xOSLSx7MJvjpk/uoU8wPYgkPHWLV+uenLaRsS7yBsqSUcWYPjeUkz+tmrRv6s1eFxkF08NvQfBSSPCTyYaA==}
+    dev: false
+
+  /brace-expansion@1.1.11:
+    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+    dependencies:
+      balanced-match: 1.0.2
+      concat-map: 0.0.1
+    dev: true
+
+  /braces@3.0.2:
+    resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+    engines: {node: '>=8'}
+    dependencies:
+      fill-range: 7.0.1
+    dev: true
+
+  /browserslist@4.22.1:
+    resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==}
+    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+    hasBin: true
+    dependencies:
+      caniuse-lite: 1.0.30001554
+      electron-to-chromium: 1.4.567
+      node-releases: 2.0.13
+      update-browserslist-db: 1.0.13(browserslist@4.22.1)
+    dev: true
+
+  /call-bind@1.0.5:
+    resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==}
+    dependencies:
+      function-bind: 1.1.2
+      get-intrinsic: 1.2.2
+      set-function-length: 1.1.1
+    dev: true
+
+  /callsites@3.1.0:
+    resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+    engines: {node: '>=6'}
+    dev: true
+
+  /caniuse-lite@1.0.30001554:
+    resolution: {integrity: sha512-A2E3U//MBwbJVzebddm1YfNp7Nud5Ip+IPn4BozBmn4KqVX7AvluoIDFWjsv5OkGnKUXQVmMSoMKLa3ScCblcQ==}
+    dev: true
+
+  /chalk@2.4.2:
+    resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+    engines: {node: '>=4'}
+    dependencies:
+      ansi-styles: 3.2.1
+      escape-string-regexp: 1.0.5
+      supports-color: 5.5.0
+    dev: true
+
+  /chalk@4.1.2:
+    resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+    engines: {node: '>=10'}
+    dependencies:
+      ansi-styles: 4.3.0
+      supports-color: 7.2.0
+    dev: true
+
+  /chokidar@3.5.3:
+    resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+    engines: {node: '>= 8.10.0'}
+    dependencies:
+      anymatch: 3.1.3
+      braces: 3.0.2
+      glob-parent: 5.1.2
+      is-binary-path: 2.1.0
+      is-glob: 4.0.3
+      normalize-path: 3.0.0
+      readdirp: 3.6.0
+    optionalDependencies:
+      fsevents: 2.3.3
+    dev: true
+
+  /classnames@2.3.2:
+    resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==}
+    dev: false
+
+  /color-convert@1.9.3:
+    resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+    dependencies:
+      color-name: 1.1.3
+    dev: true
+
+  /color-convert@2.0.1:
+    resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+    engines: {node: '>=7.0.0'}
+    dependencies:
+      color-name: 1.1.4
+    dev: true
+
+  /color-name@1.1.3:
+    resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+    dev: true
+
+  /color-name@1.1.4:
+    resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+    dev: true
+
+  /concat-map@0.0.1:
+    resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+    dev: true
+
+  /confusing-browser-globals@1.0.11:
+    resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==}
+    dev: true
+
+  /convert-source-map@2.0.0:
+    resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+    dev: true
+
+  /core-js-compat@3.33.1:
+    resolution: {integrity: sha512-6pYKNOgD/j/bkC5xS5IIg6bncid3rfrI42oBH1SQJbsmYPKF7rhzcFzYCcxYMmNQQ0rCEB8WqpW7QHndOggaeQ==}
+    dependencies:
+      browserslist: 4.22.1
+    dev: true
+
+  /cosmiconfig@7.1.0:
+    resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
+    engines: {node: '>=10'}
+    dependencies:
+      '@types/parse-json': 4.0.1
+      import-fresh: 3.3.0
+      parse-json: 5.2.0
+      path-type: 4.0.0
+      yaml: 1.10.2
+    dev: true
+
+  /cross-spawn@7.0.3:
+    resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+    engines: {node: '>= 8'}
+    dependencies:
+      path-key: 3.1.1
+      shebang-command: 2.0.0
+      which: 2.0.2
+    dev: true
+
+  /csstype@3.1.2:
+    resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
+
+  /damerau-levenshtein@1.0.8:
+    resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
+    dev: true
+
+  /date-fns@2.30.0:
+    resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
+    engines: {node: '>=0.11'}
+    dependencies:
+      '@babel/runtime': 7.23.2
+    dev: false
+
+  /debug@3.2.7:
+    resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
+    peerDependencies:
+      supports-color: '*'
+    peerDependenciesMeta:
+      supports-color:
+        optional: true
+    dependencies:
+      ms: 2.1.2
+    dev: true
+
+  /debug@4.3.4:
+    resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+    engines: {node: '>=6.0'}
+    peerDependencies:
+      supports-color: '*'
+    peerDependenciesMeta:
+      supports-color:
+        optional: true
+    dependencies:
+      ms: 2.1.2
+    dev: true
+
+  /deep-is@0.1.4:
+    resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+    dev: true
+
+  /define-data-property@1.1.1:
+    resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      get-intrinsic: 1.2.2
+      gopd: 1.0.1
+      has-property-descriptors: 1.0.1
+    dev: true
+
+  /define-properties@1.2.1:
+    resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      define-data-property: 1.1.1
+      has-property-descriptors: 1.0.1
+      object-keys: 1.1.1
+    dev: true
+
+  /dequal@2.0.3:
+    resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+    engines: {node: '>=6'}
+
+  /dir-glob@3.0.1:
+    resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+    engines: {node: '>=8'}
+    dependencies:
+      path-type: 4.0.0
+    dev: true
+
+  /doctrine@2.1.0:
+    resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
+    engines: {node: '>=0.10.0'}
+    dependencies:
+      esutils: 2.0.3
+    dev: true
+
+  /doctrine@3.0.0:
+    resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+    engines: {node: '>=6.0.0'}
+    dependencies:
+      esutils: 2.0.3
+    dev: true
+
+  /dom-helpers@5.2.1:
+    resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
+    dependencies:
+      '@babel/runtime': 7.23.2
+      csstype: 3.1.2
+    dev: false
+
+  /electron-to-chromium@1.4.567:
+    resolution: {integrity: sha512-8KR114CAYQ4/r5EIEsOmOMqQ9j0MRbJZR3aXD/KFA8RuKzyoUB4XrUCg+l8RUGqTVQgKNIgTpjaG8YHRPAbX2w==}
+    dev: true
+
+  /emoji-regex@9.2.2:
+    resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+    dev: true
+
+  /error-ex@1.3.2:
+    resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+    dependencies:
+      is-arrayish: 0.2.1
+    dev: true
+
+  /es-abstract@1.22.3:
+    resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      array-buffer-byte-length: 1.0.0
+      arraybuffer.prototype.slice: 1.0.2
+      available-typed-arrays: 1.0.5
+      call-bind: 1.0.5
+      es-set-tostringtag: 2.0.2
+      es-to-primitive: 1.2.1
+      function.prototype.name: 1.1.6
+      get-intrinsic: 1.2.2
+      get-symbol-description: 1.0.0
+      globalthis: 1.0.3
+      gopd: 1.0.1
+      has-property-descriptors: 1.0.1
+      has-proto: 1.0.1
+      has-symbols: 1.0.3
+      hasown: 2.0.0
+      internal-slot: 1.0.6
+      is-array-buffer: 3.0.2
+      is-callable: 1.2.7
+      is-negative-zero: 2.0.2
+      is-regex: 1.1.4
+      is-shared-array-buffer: 1.0.2
+      is-string: 1.0.7
+      is-typed-array: 1.1.12
+      is-weakref: 1.0.2
+      object-inspect: 1.13.1
+      object-keys: 1.1.1
+      object.assign: 4.1.4
+      regexp.prototype.flags: 1.5.1
+      safe-array-concat: 1.0.1
+      safe-regex-test: 1.0.0
+      string.prototype.trim: 1.2.8
+      string.prototype.trimend: 1.0.7
+      string.prototype.trimstart: 1.0.7
+      typed-array-buffer: 1.0.0
+      typed-array-byte-length: 1.0.0
+      typed-array-byte-offset: 1.0.0
+      typed-array-length: 1.0.4
+      unbox-primitive: 1.0.2
+      which-typed-array: 1.1.13
+    dev: true
+
+  /es-iterator-helpers@1.0.15:
+    resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==}
+    dependencies:
+      asynciterator.prototype: 1.0.0
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      es-set-tostringtag: 2.0.2
+      function-bind: 1.1.2
+      get-intrinsic: 1.2.2
+      globalthis: 1.0.3
+      has-property-descriptors: 1.0.1
+      has-proto: 1.0.1
+      has-symbols: 1.0.3
+      internal-slot: 1.0.6
+      iterator.prototype: 1.1.2
+      safe-array-concat: 1.0.1
+    dev: true
+
+  /es-set-tostringtag@2.0.2:
+    resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      get-intrinsic: 1.2.2
+      has-tostringtag: 1.0.0
+      hasown: 2.0.0
+    dev: true
+
+  /es-shim-unscopables@1.0.2:
+    resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==}
+    dependencies:
+      hasown: 2.0.0
+    dev: true
+
+  /es-to-primitive@1.2.1:
+    resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      is-callable: 1.2.7
+      is-date-object: 1.0.5
+      is-symbol: 1.0.4
+    dev: true
+
+  /esbuild@0.18.20:
+    resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
+    engines: {node: '>=12'}
+    hasBin: true
+    requiresBuild: true
+    optionalDependencies:
+      '@esbuild/android-arm': 0.18.20
+      '@esbuild/android-arm64': 0.18.20
+      '@esbuild/android-x64': 0.18.20
+      '@esbuild/darwin-arm64': 0.18.20
+      '@esbuild/darwin-x64': 0.18.20
+      '@esbuild/freebsd-arm64': 0.18.20
+      '@esbuild/freebsd-x64': 0.18.20
+      '@esbuild/linux-arm': 0.18.20
+      '@esbuild/linux-arm64': 0.18.20
+      '@esbuild/linux-ia32': 0.18.20
+      '@esbuild/linux-loong64': 0.18.20
+      '@esbuild/linux-mips64el': 0.18.20
+      '@esbuild/linux-ppc64': 0.18.20
+      '@esbuild/linux-riscv64': 0.18.20
+      '@esbuild/linux-s390x': 0.18.20
+      '@esbuild/linux-x64': 0.18.20
+      '@esbuild/netbsd-x64': 0.18.20
+      '@esbuild/openbsd-x64': 0.18.20
+      '@esbuild/sunos-x64': 0.18.20
+      '@esbuild/win32-arm64': 0.18.20
+      '@esbuild/win32-ia32': 0.18.20
+      '@esbuild/win32-x64': 0.18.20
+    dev: true
+
+  /escalade@3.1.1:
+    resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
+    engines: {node: '>=6'}
+    dev: true
+
+  /escape-string-regexp@1.0.5:
+    resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+    engines: {node: '>=0.8.0'}
+    dev: true
+
+  /escape-string-regexp@4.0.0:
+    resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+    engines: {node: '>=10'}
+    dev: true
+
+  /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.15)(eslint@8.45.0)(typescript@5.0.2):
+    resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==}
+    engines: {node: '>=14.0.0'}
+    peerDependencies:
+      eslint: ^8.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/eslint-parser': 7.22.15(@babel/core@7.23.2)(eslint@8.45.0)
+      '@rushstack/eslint-patch': 1.5.1
+      '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.45.0)(typescript@5.0.2)
+      '@typescript-eslint/parser': 5.62.0(eslint@8.45.0)(typescript@5.0.2)
+      babel-preset-react-app: 10.0.1
+      confusing-browser-globals: 1.0.11
+      eslint: 8.45.0
+      eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.15)(eslint@8.45.0)
+      eslint-plugin-import: 2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.45.0)
+      eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.45.0)(typescript@5.0.2)
+      eslint-plugin-jsx-a11y: 6.7.1(eslint@8.45.0)
+      eslint-plugin-react: 7.33.2(eslint@8.45.0)
+      eslint-plugin-react-hooks: 4.6.0(eslint@8.45.0)
+      eslint-plugin-testing-library: 5.11.1(eslint@8.45.0)(typescript@5.0.2)
+      typescript: 5.0.2
+    transitivePeerDependencies:
+      - '@babel/plugin-syntax-flow'
+      - '@babel/plugin-transform-react-jsx'
+      - eslint-import-resolver-typescript
+      - eslint-import-resolver-webpack
+      - jest
+      - supports-color
+    dev: true
+
+  /eslint-import-resolver-node@0.3.9:
+    resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
+    dependencies:
+      debug: 3.2.7
+      is-core-module: 2.13.1
+      resolve: 1.22.8
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.45.0):
+    resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
+    engines: {node: '>=4'}
+    peerDependencies:
+      '@typescript-eslint/parser': '*'
+      eslint: '*'
+      eslint-import-resolver-node: '*'
+      eslint-import-resolver-typescript: '*'
+      eslint-import-resolver-webpack: '*'
+    peerDependenciesMeta:
+      '@typescript-eslint/parser':
+        optional: true
+      eslint:
+        optional: true
+      eslint-import-resolver-node:
+        optional: true
+      eslint-import-resolver-typescript:
+        optional: true
+      eslint-import-resolver-webpack:
+        optional: true
+    dependencies:
+      '@typescript-eslint/parser': 5.62.0(eslint@8.45.0)(typescript@5.0.2)
+      debug: 3.2.7
+      eslint: 8.45.0
+      eslint-import-resolver-node: 0.3.9
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.15)(eslint@8.45.0):
+    resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==}
+    engines: {node: '>=12.0.0'}
+    peerDependencies:
+      '@babel/plugin-syntax-flow': ^7.14.5
+      '@babel/plugin-transform-react-jsx': ^7.14.9
+      eslint: ^8.1.0
+    dependencies:
+      '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.23.2)
+      eslint: 8.45.0
+      lodash: 4.17.21
+      string-natural-compare: 3.0.1
+    dev: true
+
+  /eslint-plugin-import@2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.45.0):
+    resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==}
+    engines: {node: '>=4'}
+    peerDependencies:
+      '@typescript-eslint/parser': '*'
+      eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
+    peerDependenciesMeta:
+      '@typescript-eslint/parser':
+        optional: true
+    dependencies:
+      '@typescript-eslint/parser': 5.62.0(eslint@8.45.0)(typescript@5.0.2)
+      array-includes: 3.1.7
+      array.prototype.findlastindex: 1.2.3
+      array.prototype.flat: 1.3.2
+      array.prototype.flatmap: 1.3.2
+      debug: 3.2.7
+      doctrine: 2.1.0
+      eslint: 8.45.0
+      eslint-import-resolver-node: 0.3.9
+      eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.45.0)
+      hasown: 2.0.0
+      is-core-module: 2.13.1
+      is-glob: 4.0.3
+      minimatch: 3.1.2
+      object.fromentries: 2.0.7
+      object.groupby: 1.0.1
+      object.values: 1.1.7
+      semver: 6.3.1
+      tsconfig-paths: 3.14.2
+    transitivePeerDependencies:
+      - eslint-import-resolver-typescript
+      - eslint-import-resolver-webpack
+      - supports-color
+    dev: true
+
+  /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.45.0)(typescript@5.0.2):
+    resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==}
+    engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+    peerDependencies:
+      '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0
+      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+      jest: '*'
+    peerDependenciesMeta:
+      '@typescript-eslint/eslint-plugin':
+        optional: true
+      jest:
+        optional: true
+    dependencies:
+      '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.45.0)(typescript@5.0.2)
+      '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.45.0)(typescript@5.0.2)
+      eslint: 8.45.0
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+    dev: true
+
+  /eslint-plugin-jsx-a11y@6.7.1(eslint@8.45.0):
+    resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==}
+    engines: {node: '>=4.0'}
+    peerDependencies:
+      eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+    dependencies:
+      '@babel/runtime': 7.23.2
+      aria-query: 5.3.0
+      array-includes: 3.1.7
+      array.prototype.flatmap: 1.3.2
+      ast-types-flow: 0.0.7
+      axe-core: 4.8.2
+      axobject-query: 3.2.1
+      damerau-levenshtein: 1.0.8
+      emoji-regex: 9.2.2
+      eslint: 8.45.0
+      has: 1.0.4
+      jsx-ast-utils: 3.3.5
+      language-tags: 1.0.5
+      minimatch: 3.1.2
+      object.entries: 1.1.7
+      object.fromentries: 2.0.7
+      semver: 6.3.1
+    dev: true
+
+  /eslint-plugin-react-hooks@4.6.0(eslint@8.45.0):
+    resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
+    engines: {node: '>=10'}
+    peerDependencies:
+      eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
+    dependencies:
+      eslint: 8.45.0
+    dev: true
+
+  /eslint-plugin-react-refresh@0.4.3(eslint@8.45.0):
+    resolution: {integrity: sha512-Hh0wv8bUNY877+sI0BlCUlsS0TYYQqvzEwJsJJPM2WF4RnTStSnSR3zdJYa2nPOJgg3UghXi54lVyMSmpCalzA==}
+    peerDependencies:
+      eslint: '>=7'
+    dependencies:
+      eslint: 8.45.0
+    dev: true
+
+  /eslint-plugin-react@7.33.2(eslint@8.45.0):
+    resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==}
+    engines: {node: '>=4'}
+    peerDependencies:
+      eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+    dependencies:
+      array-includes: 3.1.7
+      array.prototype.flatmap: 1.3.2
+      array.prototype.tosorted: 1.1.2
+      doctrine: 2.1.0
+      es-iterator-helpers: 1.0.15
+      eslint: 8.45.0
+      estraverse: 5.3.0
+      jsx-ast-utils: 3.3.5
+      minimatch: 3.1.2
+      object.entries: 1.1.7
+      object.fromentries: 2.0.7
+      object.hasown: 1.1.3
+      object.values: 1.1.7
+      prop-types: 15.8.1
+      resolve: 2.0.0-next.5
+      semver: 6.3.1
+      string.prototype.matchall: 4.0.10
+    dev: true
+
+  /eslint-plugin-testing-library@5.11.1(eslint@8.45.0)(typescript@5.0.2):
+    resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'}
+    peerDependencies:
+      eslint: ^7.5.0 || ^8.0.0
+    dependencies:
+      '@typescript-eslint/utils': 5.62.0(eslint@8.45.0)(typescript@5.0.2)
+      eslint: 8.45.0
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+    dev: true
+
+  /eslint-scope@5.1.1:
+    resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+    engines: {node: '>=8.0.0'}
+    dependencies:
+      esrecurse: 4.3.0
+      estraverse: 4.3.0
+    dev: true
+
+  /eslint-scope@7.2.2:
+    resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dependencies:
+      esrecurse: 4.3.0
+      estraverse: 5.3.0
+    dev: true
+
+  /eslint-visitor-keys@2.1.0:
+    resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
+    engines: {node: '>=10'}
+    dev: true
+
+  /eslint-visitor-keys@3.4.3:
+    resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dev: true
+
+  /eslint@8.45.0:
+    resolution: {integrity: sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    hasBin: true
+    dependencies:
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0)
+      '@eslint-community/regexpp': 4.10.0
+      '@eslint/eslintrc': 2.1.2
+      '@eslint/js': 8.44.0
+      '@humanwhocodes/config-array': 0.11.13
+      '@humanwhocodes/module-importer': 1.0.1
+      '@nodelib/fs.walk': 1.2.8
+      ajv: 6.12.6
+      chalk: 4.1.2
+      cross-spawn: 7.0.3
+      debug: 4.3.4
+      doctrine: 3.0.0
+      escape-string-regexp: 4.0.0
+      eslint-scope: 7.2.2
+      eslint-visitor-keys: 3.4.3
+      espree: 9.6.1
+      esquery: 1.5.0
+      esutils: 2.0.3
+      fast-deep-equal: 3.1.3
+      file-entry-cache: 6.0.1
+      find-up: 5.0.0
+      glob-parent: 6.0.2
+      globals: 13.23.0
+      graphemer: 1.4.0
+      ignore: 5.2.4
+      imurmurhash: 0.1.4
+      is-glob: 4.0.3
+      is-path-inside: 3.0.3
+      js-yaml: 4.1.0
+      json-stable-stringify-without-jsonify: 1.0.1
+      levn: 0.4.1
+      lodash.merge: 4.6.2
+      minimatch: 3.1.2
+      natural-compare: 1.4.0
+      optionator: 0.9.3
+      strip-ansi: 6.0.1
+      text-table: 0.2.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /espree@9.6.1:
+    resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dependencies:
+      acorn: 8.10.0
+      acorn-jsx: 5.3.2(acorn@8.10.0)
+      eslint-visitor-keys: 3.4.3
+    dev: true
+
+  /esquery@1.5.0:
+    resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
+    engines: {node: '>=0.10'}
+    dependencies:
+      estraverse: 5.3.0
+    dev: true
+
+  /esrecurse@4.3.0:
+    resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+    engines: {node: '>=4.0'}
+    dependencies:
+      estraverse: 5.3.0
+    dev: true
+
+  /estraverse@4.3.0:
+    resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+    engines: {node: '>=4.0'}
+    dev: true
+
+  /estraverse@5.3.0:
+    resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+    engines: {node: '>=4.0'}
+    dev: true
+
+  /esutils@2.0.3:
+    resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /fast-deep-equal@3.1.3:
+    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+    dev: true
+
+  /fast-glob@3.3.1:
+    resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
+    engines: {node: '>=8.6.0'}
+    dependencies:
+      '@nodelib/fs.stat': 2.0.5
+      '@nodelib/fs.walk': 1.2.8
+      glob-parent: 5.1.2
+      merge2: 1.4.1
+      micromatch: 4.0.5
+    dev: true
+
+  /fast-json-stable-stringify@2.1.0:
+    resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+    dev: true
+
+  /fast-levenshtein@2.0.6:
+    resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+    dev: true
+
+  /fastq@1.15.0:
+    resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
+    dependencies:
+      reusify: 1.0.4
+    dev: true
+
+  /file-entry-cache@6.0.1:
+    resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
+    engines: {node: ^10.12.0 || >=12.0.0}
+    dependencies:
+      flat-cache: 3.1.1
+    dev: true
+
+  /fill-range@7.0.1:
+    resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+    engines: {node: '>=8'}
+    dependencies:
+      to-regex-range: 5.0.1
+    dev: true
+
+  /find-up@5.0.0:
+    resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+    engines: {node: '>=10'}
+    dependencies:
+      locate-path: 6.0.0
+      path-exists: 4.0.0
+    dev: true
+
+  /flat-cache@3.1.1:
+    resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==}
+    engines: {node: '>=12.0.0'}
+    dependencies:
+      flatted: 3.2.9
+      keyv: 4.5.4
+      rimraf: 3.0.2
+    dev: true
+
+  /flatted@3.2.9:
+    resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
+    dev: true
+
+  /for-each@0.3.3:
+    resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+    dependencies:
+      is-callable: 1.2.7
+    dev: true
+
+  /fs.realpath@1.0.0:
+    resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+    dev: true
+
+  /fsevents@2.3.3:
+    resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /function-bind@1.1.2:
+    resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+    dev: true
+
+  /function.prototype.name@1.1.6:
+    resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      functions-have-names: 1.2.3
+    dev: true
+
+  /functions-have-names@1.2.3:
+    resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+    dev: true
+
+  /gensync@1.0.0-beta.2:
+    resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /get-intrinsic@1.2.2:
+    resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==}
+    dependencies:
+      function-bind: 1.1.2
+      has-proto: 1.0.1
+      has-symbols: 1.0.3
+      hasown: 2.0.0
+    dev: true
+
+  /get-symbol-description@1.0.0:
+    resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      get-intrinsic: 1.2.2
+    dev: true
+
+  /glob-parent@5.1.2:
+    resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+    engines: {node: '>= 6'}
+    dependencies:
+      is-glob: 4.0.3
+    dev: true
+
+  /glob-parent@6.0.2:
+    resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+    engines: {node: '>=10.13.0'}
+    dependencies:
+      is-glob: 4.0.3
+    dev: true
+
+  /glob@7.2.3:
+    resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+    dependencies:
+      fs.realpath: 1.0.0
+      inflight: 1.0.6
+      inherits: 2.0.4
+      minimatch: 3.1.2
+      once: 1.4.0
+      path-is-absolute: 1.0.1
+    dev: true
+
+  /globals@11.12.0:
+    resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /globals@13.23.0:
+    resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==}
+    engines: {node: '>=8'}
+    dependencies:
+      type-fest: 0.20.2
+    dev: true
+
+  /globalthis@1.0.3:
+    resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      define-properties: 1.2.1
+    dev: true
+
+  /globby@11.1.0:
+    resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+    engines: {node: '>=10'}
+    dependencies:
+      array-union: 2.1.0
+      dir-glob: 3.0.1
+      fast-glob: 3.3.1
+      ignore: 5.2.4
+      merge2: 1.4.1
+      slash: 3.0.0
+    dev: true
+
+  /globrex@0.1.2:
+    resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
+    dev: true
+
+  /gopd@1.0.1:
+    resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+    dependencies:
+      get-intrinsic: 1.2.2
+    dev: true
+
+  /grapheme-splitter@1.0.4:
+    resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
+    dev: true
+
+  /graphemer@1.4.0:
+    resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+    dev: true
+
+  /has-bigints@1.0.2:
+    resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
+    dev: true
+
+  /has-flag@3.0.0:
+    resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /has-flag@4.0.0:
+    resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /has-property-descriptors@1.0.1:
+    resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==}
+    dependencies:
+      get-intrinsic: 1.2.2
+    dev: true
+
+  /has-proto@1.0.1:
+    resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
+    engines: {node: '>= 0.4'}
+    dev: true
+
+  /has-symbols@1.0.3:
+    resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+    engines: {node: '>= 0.4'}
+    dev: true
+
+  /has-tostringtag@1.0.0:
+    resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      has-symbols: 1.0.3
+    dev: true
+
+  /has@1.0.4:
+    resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==}
+    engines: {node: '>= 0.4.0'}
+    dev: true
+
+  /hasown@2.0.0:
+    resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      function-bind: 1.1.2
+    dev: true
+
+  /ignore@5.2.4:
+    resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
+    engines: {node: '>= 4'}
+    dev: true
+
+  /immutable@4.3.4:
+    resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==}
+    dev: true
+
+  /import-fresh@3.3.0:
+    resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+    engines: {node: '>=6'}
+    dependencies:
+      parent-module: 1.0.1
+      resolve-from: 4.0.0
+    dev: true
+
+  /imurmurhash@0.1.4:
+    resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+    engines: {node: '>=0.8.19'}
+    dev: true
+
+  /inflight@1.0.6:
+    resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+    dependencies:
+      once: 1.4.0
+      wrappy: 1.0.2
+    dev: true
+
+  /inherits@2.0.4:
+    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+    dev: true
+
+  /internal-slot@1.0.6:
+    resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      get-intrinsic: 1.2.2
+      hasown: 2.0.0
+      side-channel: 1.0.4
+    dev: true
+
+  /invariant@2.2.4:
+    resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
+    dependencies:
+      loose-envify: 1.4.0
+    dev: false
+
+  /is-array-buffer@3.0.2:
+    resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
+    dependencies:
+      call-bind: 1.0.5
+      get-intrinsic: 1.2.2
+      is-typed-array: 1.1.12
+    dev: true
+
+  /is-arrayish@0.2.1:
+    resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+    dev: true
+
+  /is-async-function@2.0.0:
+    resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      has-tostringtag: 1.0.0
+    dev: true
+
+  /is-bigint@1.0.4:
+    resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
+    dependencies:
+      has-bigints: 1.0.2
+    dev: true
+
+  /is-binary-path@2.1.0:
+    resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+    engines: {node: '>=8'}
+    dependencies:
+      binary-extensions: 2.2.0
+    dev: true
+
+  /is-boolean-object@1.1.2:
+    resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      has-tostringtag: 1.0.0
+    dev: true
+
+  /is-callable@1.2.7:
+    resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+    engines: {node: '>= 0.4'}
+    dev: true
+
+  /is-core-module@2.13.1:
+    resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
+    dependencies:
+      hasown: 2.0.0
+    dev: true
+
+  /is-date-object@1.0.5:
+    resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      has-tostringtag: 1.0.0
+    dev: true
+
+  /is-extglob@2.1.1:
+    resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /is-finalizationregistry@1.0.2:
+    resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==}
+    dependencies:
+      call-bind: 1.0.5
+    dev: true
+
+  /is-generator-function@1.0.10:
+    resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      has-tostringtag: 1.0.0
+    dev: true
+
+  /is-glob@4.0.3:
+    resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+    engines: {node: '>=0.10.0'}
+    dependencies:
+      is-extglob: 2.1.1
+    dev: true
+
+  /is-map@2.0.2:
+    resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
+    dev: true
+
+  /is-negative-zero@2.0.2:
+    resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
+    engines: {node: '>= 0.4'}
+    dev: true
+
+  /is-number-object@1.0.7:
+    resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      has-tostringtag: 1.0.0
+    dev: true
+
+  /is-number@7.0.0:
+    resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+    engines: {node: '>=0.12.0'}
+    dev: true
+
+  /is-path-inside@3.0.3:
+    resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /is-regex@1.1.4:
+    resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      has-tostringtag: 1.0.0
+    dev: true
+
+  /is-set@2.0.2:
+    resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==}
+    dev: true
+
+  /is-shared-array-buffer@1.0.2:
+    resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
+    dependencies:
+      call-bind: 1.0.5
+    dev: true
+
+  /is-string@1.0.7:
+    resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      has-tostringtag: 1.0.0
+    dev: true
+
+  /is-symbol@1.0.4:
+    resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      has-symbols: 1.0.3
+    dev: true
+
+  /is-typed-array@1.1.12:
+    resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      which-typed-array: 1.1.13
+    dev: true
+
+  /is-weakmap@2.0.1:
+    resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==}
+    dev: true
+
+  /is-weakref@1.0.2:
+    resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
+    dependencies:
+      call-bind: 1.0.5
+    dev: true
+
+  /is-weakset@2.0.2:
+    resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
+    dependencies:
+      call-bind: 1.0.5
+      get-intrinsic: 1.2.2
+    dev: true
+
+  /isarray@2.0.5:
+    resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+    dev: true
+
+  /isexe@2.0.0:
+    resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+    dev: true
+
+  /iterator.prototype@1.1.2:
+    resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==}
+    dependencies:
+      define-properties: 1.2.1
+      get-intrinsic: 1.2.2
+      has-symbols: 1.0.3
+      reflect.getprototypeof: 1.0.4
+      set-function-name: 2.0.1
+    dev: true
+
+  /js-tokens@4.0.0:
+    resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+  /js-yaml@4.1.0:
+    resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+    hasBin: true
+    dependencies:
+      argparse: 2.0.1
+    dev: true
+
+  /jsesc@0.5.0:
+    resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
+    hasBin: true
+    dev: true
+
+  /jsesc@2.5.2:
+    resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
+    engines: {node: '>=4'}
+    hasBin: true
+    dev: true
+
+  /json-buffer@3.0.1:
+    resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+    dev: true
+
+  /json-parse-even-better-errors@2.3.1:
+    resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+    dev: true
+
+  /json-schema-traverse@0.4.1:
+    resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+    dev: true
+
+  /json-stable-stringify-without-jsonify@1.0.1:
+    resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+    dev: true
+
+  /json5@1.0.2:
+    resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+    hasBin: true
+    dependencies:
+      minimist: 1.2.8
+    dev: true
+
+  /json5@2.2.3:
+    resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+    engines: {node: '>=6'}
+    hasBin: true
+    dev: true
+
+  /jsx-ast-utils@3.3.5:
+    resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
+    engines: {node: '>=4.0'}
+    dependencies:
+      array-includes: 3.1.7
+      array.prototype.flat: 1.3.2
+      object.assign: 4.1.4
+      object.values: 1.1.7
+    dev: true
+
+  /keyv@4.5.4:
+    resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+    dependencies:
+      json-buffer: 3.0.1
+    dev: true
+
+  /language-subtag-registry@0.3.22:
+    resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
+    dev: true
+
+  /language-tags@1.0.5:
+    resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==}
+    dependencies:
+      language-subtag-registry: 0.3.22
+    dev: true
+
+  /levn@0.4.1:
+    resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+    engines: {node: '>= 0.8.0'}
+    dependencies:
+      prelude-ls: 1.2.1
+      type-check: 0.4.0
+    dev: true
+
+  /lines-and-columns@1.2.4:
+    resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+    dev: true
+
+  /locate-path@6.0.0:
+    resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+    engines: {node: '>=10'}
+    dependencies:
+      p-locate: 5.0.0
+    dev: true
+
+  /lodash.debounce@4.0.8:
+    resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+    dev: true
+
+  /lodash.merge@4.6.2:
+    resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+    dev: true
+
+  /lodash@4.17.21:
+    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+    dev: true
+
+  /loose-envify@1.4.0:
+    resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+    hasBin: true
+    dependencies:
+      js-tokens: 4.0.0
+
+  /lru-cache@5.1.1:
+    resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+    dependencies:
+      yallist: 3.1.1
+    dev: true
+
+  /lru-cache@6.0.0:
+    resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+    engines: {node: '>=10'}
+    dependencies:
+      yallist: 4.0.0
+    dev: true
+
+  /merge2@1.4.1:
+    resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+    engines: {node: '>= 8'}
+    dev: true
+
+  /micromatch@4.0.5:
+    resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
+    engines: {node: '>=8.6'}
+    dependencies:
+      braces: 3.0.2
+      picomatch: 2.3.1
+    dev: true
+
+  /minimatch@3.1.2:
+    resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+    dependencies:
+      brace-expansion: 1.1.11
+    dev: true
+
+  /minimist@1.2.8:
+    resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+    dev: true
+
+  /ms@2.1.2:
+    resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+    dev: true
+
+  /nanoid@3.3.6:
+    resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
+    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+    hasBin: true
+    dev: true
+
+  /natural-compare-lite@1.4.0:
+    resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
+    dev: true
+
+  /natural-compare@1.4.0:
+    resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+    dev: true
+
+  /node-releases@2.0.13:
+    resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
+    dev: true
+
+  /normalize-path@3.0.0:
+    resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /object-assign@4.1.1:
+    resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+    engines: {node: '>=0.10.0'}
+
+  /object-inspect@1.13.1:
+    resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==}
+    dev: true
+
+  /object-keys@1.1.1:
+    resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+    engines: {node: '>= 0.4'}
+    dev: true
+
+  /object.assign@4.1.4:
+    resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      has-symbols: 1.0.3
+      object-keys: 1.1.1
+    dev: true
+
+  /object.entries@1.1.7:
+    resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+    dev: true
+
+  /object.fromentries@2.0.7:
+    resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+    dev: true
+
+  /object.groupby@1.0.1:
+    resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      get-intrinsic: 1.2.2
+    dev: true
+
+  /object.hasown@1.1.3:
+    resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==}
+    dependencies:
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+    dev: true
+
+  /object.values@1.1.7:
+    resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+    dev: true
+
+  /once@1.4.0:
+    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+    dependencies:
+      wrappy: 1.0.2
+    dev: true
+
+  /optionator@0.9.3:
+    resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
+    engines: {node: '>= 0.8.0'}
+    dependencies:
+      '@aashutoshrathi/word-wrap': 1.2.6
+      deep-is: 0.1.4
+      fast-levenshtein: 2.0.6
+      levn: 0.4.1
+      prelude-ls: 1.2.1
+      type-check: 0.4.0
+    dev: true
+
+  /p-limit@3.1.0:
+    resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+    engines: {node: '>=10'}
+    dependencies:
+      yocto-queue: 0.1.0
+    dev: true
+
+  /p-locate@5.0.0:
+    resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+    engines: {node: '>=10'}
+    dependencies:
+      p-limit: 3.1.0
+    dev: true
+
+  /parent-module@1.0.1:
+    resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+    engines: {node: '>=6'}
+    dependencies:
+      callsites: 3.1.0
+    dev: true
+
+  /parse-json@5.2.0:
+    resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+    engines: {node: '>=8'}
+    dependencies:
+      '@babel/code-frame': 7.22.13
+      error-ex: 1.3.2
+      json-parse-even-better-errors: 2.3.1
+      lines-and-columns: 1.2.4
+    dev: true
+
+  /path-exists@4.0.0:
+    resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /path-is-absolute@1.0.1:
+    resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /path-key@3.1.1:
+    resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /path-parse@1.0.7:
+    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+    dev: true
+
+  /path-type@4.0.0:
+    resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /picocolors@1.0.0:
+    resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+    dev: true
+
+  /picomatch@2.3.1:
+    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+    engines: {node: '>=8.6'}
+    dev: true
+
+  /postcss@8.4.31:
+    resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
+    engines: {node: ^10 || ^12 || >=14}
+    dependencies:
+      nanoid: 3.3.6
+      picocolors: 1.0.0
+      source-map-js: 1.0.2
+    dev: true
+
+  /prelude-ls@1.2.1:
+    resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+    engines: {node: '>= 0.8.0'}
+    dev: true
+
+  /prettier@3.0.3:
+    resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==}
+    engines: {node: '>=14'}
+    hasBin: true
+    dev: true
+
+  /prop-types-extra@1.1.1(react@18.2.0):
+    resolution: {integrity: sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==}
+    peerDependencies:
+      react: '>=0.14.0'
+    dependencies:
+      react: 18.2.0
+      react-is: 16.13.1
+      warning: 4.0.3
+    dev: false
+
+  /prop-types@15.8.1:
+    resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+    dependencies:
+      loose-envify: 1.4.0
+      object-assign: 4.1.1
+      react-is: 16.13.1
+
+  /punycode@2.3.0:
+    resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
+    engines: {node: '>=6'}
+    dev: true
+
+  /queue-microtask@1.2.3:
+    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+    dev: true
+
+  /react-bootstrap@2.9.1(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-ezgmh/ARCYp18LbZEqPp0ppvy+ytCmycDORqc8vXSKYV3cer4VH7OReV8uMOoKXmYzivJTxgzGHalGrHamryHA==}
+    peerDependencies:
+      '@types/react': '>=16.14.8'
+      react: '>=16.14.0'
+      react-dom: '>=16.14.0'
+    peerDependenciesMeta:
+      '@types/react':
+        optional: true
+    dependencies:
+      '@babel/runtime': 7.23.2
+      '@restart/hooks': 0.4.11(react@18.2.0)
+      '@restart/ui': 1.6.6(react-dom@18.2.0)(react@18.2.0)
+      '@types/react': 18.2.15
+      '@types/react-transition-group': 4.4.8
+      classnames: 2.3.2
+      dom-helpers: 5.2.1
+      invariant: 2.2.4
+      prop-types: 15.8.1
+      prop-types-extra: 1.1.1(react@18.2.0)
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0)
+      uncontrollable: 7.2.1(react@18.2.0)
+      warning: 4.0.3
+    dev: false
+
+  /react-dom@18.2.0(react@18.2.0):
+    resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
+    peerDependencies:
+      react: ^18.2.0
+    dependencies:
+      loose-envify: 1.4.0
+      react: 18.2.0
+      scheduler: 0.23.0
+    dev: false
+
+  /react-is@16.13.1:
+    resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+
+  /react-lifecycles-compat@3.0.4:
+    resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==}
+    dev: false
+
+  /react-refresh@0.14.0:
+    resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /react-router-dom@6.17.0(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-qWHkkbXQX+6li0COUUPKAUkxjNNqPJuiBd27dVwQGDNsuFBdMbrS6UZ0CLYc4CsbdLYTckn4oB4tGDuPZpPhaQ==}
+    engines: {node: '>=14.0.0'}
+    peerDependencies:
+      react: '>=16.8'
+      react-dom: '>=16.8'
+    dependencies:
+      '@remix-run/router': 1.10.0
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      react-router: 6.17.0(react@18.2.0)
+    dev: false
+
+  /react-router@6.17.0(react@18.2.0):
+    resolution: {integrity: sha512-YJR3OTJzi3zhqeJYADHANCGPUu9J+6fT5GLv82UWRGSxu6oJYCKVmxUcaBQuGm9udpWmPsvpme/CdHumqgsoaA==}
+    engines: {node: '>=14.0.0'}
+    peerDependencies:
+      react: '>=16.8'
+    dependencies:
+      '@remix-run/router': 1.10.0
+      react: 18.2.0
+    dev: false
+
+  /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
+    peerDependencies:
+      react: '>=16.6.0'
+      react-dom: '>=16.6.0'
+    dependencies:
+      '@babel/runtime': 7.23.2
+      dom-helpers: 5.2.1
+      loose-envify: 1.4.0
+      prop-types: 15.8.1
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: false
+
+  /react@18.2.0:
+    resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
+    engines: {node: '>=0.10.0'}
+    dependencies:
+      loose-envify: 1.4.0
+    dev: false
+
+  /readdirp@3.6.0:
+    resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+    engines: {node: '>=8.10.0'}
+    dependencies:
+      picomatch: 2.3.1
+    dev: true
+
+  /reflect.getprototypeof@1.0.4:
+    resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      get-intrinsic: 1.2.2
+      globalthis: 1.0.3
+      which-builtin-type: 1.1.3
+    dev: true
+
+  /regenerate-unicode-properties@10.1.1:
+    resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==}
+    engines: {node: '>=4'}
+    dependencies:
+      regenerate: 1.4.2
+    dev: true
+
+  /regenerate@1.4.2:
+    resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+    dev: true
+
+  /regenerator-runtime@0.14.0:
+    resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
+
+  /regenerator-transform@0.15.2:
+    resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
+    dependencies:
+      '@babel/runtime': 7.23.2
+    dev: true
+
+  /regexp.prototype.flags@1.5.1:
+    resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      set-function-name: 2.0.1
+    dev: true
+
+  /regexpu-core@5.3.2:
+    resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==}
+    engines: {node: '>=4'}
+    dependencies:
+      '@babel/regjsgen': 0.8.0
+      regenerate: 1.4.2
+      regenerate-unicode-properties: 10.1.1
+      regjsparser: 0.9.1
+      unicode-match-property-ecmascript: 2.0.0
+      unicode-match-property-value-ecmascript: 2.1.0
+    dev: true
+
+  /regjsparser@0.9.1:
+    resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==}
+    hasBin: true
+    dependencies:
+      jsesc: 0.5.0
+    dev: true
+
+  /resolve-from@4.0.0:
+    resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /resolve@1.22.8:
+    resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
+    hasBin: true
+    dependencies:
+      is-core-module: 2.13.1
+      path-parse: 1.0.7
+      supports-preserve-symlinks-flag: 1.0.0
+    dev: true
+
+  /resolve@2.0.0-next.5:
+    resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
+    hasBin: true
+    dependencies:
+      is-core-module: 2.13.1
+      path-parse: 1.0.7
+      supports-preserve-symlinks-flag: 1.0.0
+    dev: true
+
+  /reusify@1.0.4:
+    resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+    engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+    dev: true
+
+  /rimraf@3.0.2:
+    resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+    hasBin: true
+    dependencies:
+      glob: 7.2.3
+    dev: true
+
+  /rollup@3.29.4:
+    resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==}
+    engines: {node: '>=14.18.0', npm: '>=8.0.0'}
+    hasBin: true
+    optionalDependencies:
+      fsevents: 2.3.3
+    dev: true
+
+  /run-parallel@1.2.0:
+    resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+    dependencies:
+      queue-microtask: 1.2.3
+    dev: true
+
+  /safe-array-concat@1.0.1:
+    resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==}
+    engines: {node: '>=0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      get-intrinsic: 1.2.2
+      has-symbols: 1.0.3
+      isarray: 2.0.5
+    dev: true
+
+  /safe-regex-test@1.0.0:
+    resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
+    dependencies:
+      call-bind: 1.0.5
+      get-intrinsic: 1.2.2
+      is-regex: 1.1.4
+    dev: true
+
+  /sass@1.69.5:
+    resolution: {integrity: sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==}
+    engines: {node: '>=14.0.0'}
+    hasBin: true
+    dependencies:
+      chokidar: 3.5.3
+      immutable: 4.3.4
+      source-map-js: 1.0.2
+    dev: true
+
+  /scheduler@0.23.0:
+    resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
+    dependencies:
+      loose-envify: 1.4.0
+    dev: false
+
+  /semver@6.3.1:
+    resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+    hasBin: true
+    dev: true
+
+  /semver@7.5.4:
+    resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
+    engines: {node: '>=10'}
+    hasBin: true
+    dependencies:
+      lru-cache: 6.0.0
+    dev: true
+
+  /set-function-length@1.1.1:
+    resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      define-data-property: 1.1.1
+      get-intrinsic: 1.2.2
+      gopd: 1.0.1
+      has-property-descriptors: 1.0.1
+    dev: true
+
+  /set-function-name@2.0.1:
+    resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      define-data-property: 1.1.1
+      functions-have-names: 1.2.3
+      has-property-descriptors: 1.0.1
+    dev: true
+
+  /shebang-command@2.0.0:
+    resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+    engines: {node: '>=8'}
+    dependencies:
+      shebang-regex: 3.0.0
+    dev: true
+
+  /shebang-regex@3.0.0:
+    resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /side-channel@1.0.4:
+    resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
+    dependencies:
+      call-bind: 1.0.5
+      get-intrinsic: 1.2.2
+      object-inspect: 1.13.1
+    dev: true
+
+  /slash@3.0.0:
+    resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /source-map-js@1.0.2:
+    resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /string-natural-compare@3.0.1:
+    resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==}
+    dev: true
+
+  /string.prototype.matchall@4.0.10:
+    resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      get-intrinsic: 1.2.2
+      has-symbols: 1.0.3
+      internal-slot: 1.0.6
+      regexp.prototype.flags: 1.5.1
+      set-function-name: 2.0.1
+      side-channel: 1.0.4
+    dev: true
+
+  /string.prototype.trim@1.2.8:
+    resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+    dev: true
+
+  /string.prototype.trimend@1.0.7:
+    resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+    dev: true
+
+  /string.prototype.trimstart@1.0.7:
+    resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+    dev: true
+
+  /strip-ansi@6.0.1:
+    resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+    engines: {node: '>=8'}
+    dependencies:
+      ansi-regex: 5.0.1
+    dev: true
+
+  /strip-bom@3.0.0:
+    resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /strip-json-comments@3.1.1:
+    resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /supports-color@5.5.0:
+    resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+    engines: {node: '>=4'}
+    dependencies:
+      has-flag: 3.0.0
+    dev: true
+
+  /supports-color@7.2.0:
+    resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+    engines: {node: '>=8'}
+    dependencies:
+      has-flag: 4.0.0
+    dev: true
+
+  /supports-preserve-symlinks-flag@1.0.0:
+    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+    engines: {node: '>= 0.4'}
+    dev: true
+
+  /text-table@0.2.0:
+    resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+    dev: true
+
+  /to-fast-properties@2.0.0:
+    resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /to-regex-range@5.0.1:
+    resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+    engines: {node: '>=8.0'}
+    dependencies:
+      is-number: 7.0.0
+    dev: true
+
+  /ts-api-utils@1.0.3(typescript@5.0.2):
+    resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==}
+    engines: {node: '>=16.13.0'}
+    peerDependencies:
+      typescript: '>=4.2.0'
+    dependencies:
+      typescript: 5.0.2
+    dev: true
+
+  /tsconfck@2.1.2(typescript@5.0.2):
+    resolution: {integrity: sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==}
+    engines: {node: ^14.13.1 || ^16 || >=18}
+    hasBin: true
+    peerDependencies:
+      typescript: ^4.3.5 || ^5.0.0
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      typescript: 5.0.2
+    dev: true
+
+  /tsconfig-paths@3.14.2:
+    resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==}
+    dependencies:
+      '@types/json5': 0.0.29
+      json5: 1.0.2
+      minimist: 1.2.8
+      strip-bom: 3.0.0
+    dev: true
+
+  /tslib@1.14.1:
+    resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+    dev: true
+
+  /tslib@2.6.2:
+    resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+    dev: false
+
+  /tsutils@3.21.0(typescript@5.0.2):
+    resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
+    engines: {node: '>= 6'}
+    peerDependencies:
+      typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
+    dependencies:
+      tslib: 1.14.1
+      typescript: 5.0.2
+    dev: true
+
+  /type-check@0.4.0:
+    resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+    engines: {node: '>= 0.8.0'}
+    dependencies:
+      prelude-ls: 1.2.1
+    dev: true
+
+  /type-fest@0.20.2:
+    resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+    engines: {node: '>=10'}
+    dev: true
+
+  /typed-array-buffer@1.0.0:
+    resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      get-intrinsic: 1.2.2
+      is-typed-array: 1.1.12
+    dev: true
+
+  /typed-array-byte-length@1.0.0:
+    resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      for-each: 0.3.3
+      has-proto: 1.0.1
+      is-typed-array: 1.1.12
+    dev: true
+
+  /typed-array-byte-offset@1.0.0:
+    resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      available-typed-arrays: 1.0.5
+      call-bind: 1.0.5
+      for-each: 0.3.3
+      has-proto: 1.0.1
+      is-typed-array: 1.1.12
+    dev: true
+
+  /typed-array-length@1.0.4:
+    resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
+    dependencies:
+      call-bind: 1.0.5
+      for-each: 0.3.3
+      is-typed-array: 1.1.12
+    dev: true
+
+  /typescript@5.0.2:
+    resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==}
+    engines: {node: '>=12.20'}
+    hasBin: true
+    dev: true
+
+  /unbox-primitive@1.0.2:
+    resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
+    dependencies:
+      call-bind: 1.0.5
+      has-bigints: 1.0.2
+      has-symbols: 1.0.3
+      which-boxed-primitive: 1.0.2
+    dev: true
+
+  /uncontrollable@7.2.1(react@18.2.0):
+    resolution: {integrity: sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==}
+    peerDependencies:
+      react: '>=15.0.0'
+    dependencies:
+      '@babel/runtime': 7.23.2
+      '@types/react': 18.2.15
+      invariant: 2.2.4
+      react: 18.2.0
+      react-lifecycles-compat: 3.0.4
+    dev: false
+
+  /uncontrollable@8.0.4(react@18.2.0):
+    resolution: {integrity: sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==}
+    peerDependencies:
+      react: '>=16.14.0'
+    dependencies:
+      react: 18.2.0
+    dev: false
+
+  /unicode-canonical-property-names-ecmascript@2.0.0:
+    resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /unicode-match-property-ecmascript@2.0.0:
+    resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
+    engines: {node: '>=4'}
+    dependencies:
+      unicode-canonical-property-names-ecmascript: 2.0.0
+      unicode-property-aliases-ecmascript: 2.1.0
+    dev: true
+
+  /unicode-match-property-value-ecmascript@2.1.0:
+    resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /unicode-property-aliases-ecmascript@2.1.0:
+    resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /update-browserslist-db@1.0.13(browserslist@4.22.1):
+    resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
+    hasBin: true
+    peerDependencies:
+      browserslist: '>= 4.21.0'
+    dependencies:
+      browserslist: 4.22.1
+      escalade: 3.1.1
+      picocolors: 1.0.0
+    dev: true
+
+  /uri-js@4.4.1:
+    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+    dependencies:
+      punycode: 2.3.0
+    dev: true
+
+  /vite-tsconfig-paths@4.2.1(typescript@5.0.2)(vite@4.4.5):
+    resolution: {integrity: sha512-GNUI6ZgPqT3oervkvzU+qtys83+75N/OuDaQl7HmOqFTb0pjZsuARrRipsyJhJ3enqV8beI1xhGbToR4o78nSQ==}
+    peerDependencies:
+      vite: '*'
+    peerDependenciesMeta:
+      vite:
+        optional: true
+    dependencies:
+      debug: 4.3.4
+      globrex: 0.1.2
+      tsconfck: 2.1.2(typescript@5.0.2)
+      vite: 4.4.5(sass@1.69.5)
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+    dev: true
+
+  /vite@4.4.5(sass@1.69.5):
+    resolution: {integrity: sha512-4m5kEtAWHYr0O1Fu7rZp64CfO1PsRGZlD3TAB32UmQlpd7qg15VF7ROqGN5CyqN7HFuwr7ICNM2+fDWRqFEKaA==}
+    engines: {node: ^14.18.0 || >=16.0.0}
+    hasBin: true
+    peerDependencies:
+      '@types/node': '>= 14'
+      less: '*'
+      lightningcss: ^1.21.0
+      sass: '*'
+      stylus: '*'
+      sugarss: '*'
+      terser: ^5.4.0
+    peerDependenciesMeta:
+      '@types/node':
+        optional: true
+      less:
+        optional: true
+      lightningcss:
+        optional: true
+      sass:
+        optional: true
+      stylus:
+        optional: true
+      sugarss:
+        optional: true
+      terser:
+        optional: true
+    dependencies:
+      esbuild: 0.18.20
+      postcss: 8.4.31
+      rollup: 3.29.4
+      sass: 1.69.5
+    optionalDependencies:
+      fsevents: 2.3.3
+    dev: true
+
+  /warning@4.0.3:
+    resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==}
+    dependencies:
+      loose-envify: 1.4.0
+    dev: false
+
+  /which-boxed-primitive@1.0.2:
+    resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
+    dependencies:
+      is-bigint: 1.0.4
+      is-boolean-object: 1.1.2
+      is-number-object: 1.0.7
+      is-string: 1.0.7
+      is-symbol: 1.0.4
+    dev: true
+
+  /which-builtin-type@1.1.3:
+    resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      function.prototype.name: 1.1.6
+      has-tostringtag: 1.0.0
+      is-async-function: 2.0.0
+      is-date-object: 1.0.5
+      is-finalizationregistry: 1.0.2
+      is-generator-function: 1.0.10
+      is-regex: 1.1.4
+      is-weakref: 1.0.2
+      isarray: 2.0.5
+      which-boxed-primitive: 1.0.2
+      which-collection: 1.0.1
+      which-typed-array: 1.1.13
+    dev: true
+
+  /which-collection@1.0.1:
+    resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==}
+    dependencies:
+      is-map: 2.0.2
+      is-set: 2.0.2
+      is-weakmap: 2.0.1
+      is-weakset: 2.0.2
+    dev: true
+
+  /which-typed-array@1.1.13:
+    resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      available-typed-arrays: 1.0.5
+      call-bind: 1.0.5
+      for-each: 0.3.3
+      gopd: 1.0.1
+      has-tostringtag: 1.0.0
+    dev: true
+
+  /which@2.0.2:
+    resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+    engines: {node: '>= 8'}
+    hasBin: true
+    dependencies:
+      isexe: 2.0.0
+    dev: true
+
+  /wrappy@1.0.2:
+    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+    dev: true
+
+  /yallist@3.1.1:
+    resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+    dev: true
+
+  /yallist@4.0.0:
+    resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+    dev: true
+
+  /yaml@1.10.2:
+    resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
+    engines: {node: '>= 6'}
+    dev: true
+
+  /yocto-queue@0.1.0:
+    resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+    engines: {node: '>=10'}
+    dev: true
diff --git a/www/src/images/esrflogo.png b/apps/doi-landing-page/public/esrf-white.png
similarity index 100%
rename from www/src/images/esrflogo.png
rename to apps/doi-landing-page/public/esrf-white.png
diff --git a/apps/doi-landing-page/public/favicon.ico b/apps/doi-landing-page/public/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..1a6e0cc3563d4609e8523f3fe0c230df2e98c44e
GIT binary patch
literal 2958
zcmeH|Yfw~W7{~vJ2(rqHET93hfGjKv%d*_$Ca^*(3xXIIF9C{|6ug88?!sAi5%5|X
z;tCiNx(JqBJvC)loIW(o)TgGbsb=UyHDxnd)0k6E+q-A?EN20ysn0z-&pz+_p5OUD
zmvd$g;6i`0NYH-|XhncO0GZtjX|$d{&X|A*=tF&=4~&F9I2cC)W1(FsgDyA<^^z#)
zLPOCck>hBH98F<iXby=%LufP_!dIa&EC$D<QpzMl8xaXzxDxf!Sk$jd!ZAq>bdfSN
zNmbB><f2Iyg{I(qG)Kfk8&r;FNdcMzDp4n0112&7jk0(!fmNuJtDu)Fa7da1y(|%W
zML4~GGqi!baYPY~mS|d^JQ0SdB<P}(P#>#+Vd3jADrv4*B@V}=;cy&1^Be&aphcY`
z0|vjdIG|8NFD-{YHkJ0OL$lvG)XIy|64V6a(oq<FyTL3!4`W<9_C=SWMwNq_)hg_d
zDMzc=j8^Y)oJp6UI(iq5d%cAg@h!CZO`<ZUj_SV(gU@?t_k9Pgfj4m>Hy9oM?_zga
zF)HGYp;D#AcBK(J)5~x&=rwFnwWGHn0H-2Y6enFo)#e0Ll%%0B<r+%!YEYba5F1lR
zP`xb$W4nNywA(1D$U<pVD%7cWP_`ot*%@ymBkg01?f1kR2Z7SP>6oZphUAPdkdpZo
zk~6=>hOH-{%K8q<%%AaQgFA97I*_3L0kLcEL8bl`NxAo+%>EPUG_G&Vfg<+-3ad}!
zeFKn|_dU|9O~}aq5h;6mvDTnQ=Ek4!L7NA%+q3b}Y2d?-WytPO<F1LmZw(XpvIj`K
zq`~KXfU<WTlDZ4<X?GxUyEoypo|TC2)8Oj?H{9(Ffzq6ZpyN}B8`L18?G9Ae^C2H9
zLi}I}5{Jr=F<gp>kwW;M{R9h4(^z=v8@OHh1-SYEFh2yY{{{^H0Sx~R+^_&+)c?1C
zJpuMV*~F;BCLSv==3w~6yeNNB80Q1Wg@A26Z|<vexSQ=P`?Qm!fnnJt7n~JGCU-AL
zC@CrufUR1lAwooMI)RhN+`Lz*i!?LfSuMjb`w2-DW*)ylNMLeNQIV#KSELlf=(iEl
zED*erM#$Pi$`xts9EUMXV;1p!X>@e*7PZOI@$yApsVXZ*jRQ~EIp(NHv~Kj})7!(s
z%1^$s$JJ|fv5m5WJjUn_i9AxUn25z>F+@b-plpH;j$yWnh{9HkQcN<Pxl;~Kt9>$n
zZ;fT8{)HNz)X-_4unvVY-44+V#<JdWz74KGo}vxA*pu35g;yT0XD!gd>2?vJ92Lx-
z5fpH3TV``n8y$i|u3#2Np4dDeXWTTK3!aB-(H-6}oAXaqtBP&IvE|jbF%?-Mgv1CN
z2_;1AzcS}3?&-0tfi`?#lLsMWX|!0#iKPKc3GrICCXWuBWl!n$`gw>Jg|FY){i1j5
z45;utXWEw^PdvT6(#t4E&CM<8;F(Lq=KkY8D|j%7JloT0>Uyrelq}@Wo_YS_fVrRA
zzzbxFI5Ibbz6I`0omT6*(s{nl&e<3%*Kamg$5|_tRd#i89LIK=IC6kP?0@FrTC%*u
zWO7i}g-!6fkn1<sl7MrUov<tR#7>~OhH^7W=?$0d7|RMX&*6F;7|RMW&*21^5S-2R
zIdSYDFX_y6Ia74UgHGH`3j%(CYsY-V$KG#`umb_dvP0Ks_Fk6lu};JG5S*?HH$!yO
zH<z(kjebomkC4U1X}EK73a+!GfpU+gfGis6ml+c3_o)*>oTh7c>QmHRoni~OH@aAi
zF7({!YMFA1?v`n8|4(uDeRjS3u*|8$ntz(QwH`k5_44&UqSvhb{AG_88aX$@g^T<=
O9<GpZd&_NZUVj5kL0|6x

literal 0
HcmV?d00001

diff --git a/apps/doi-landing-page/src/App.scss b/apps/doi-landing-page/src/App.scss
new file mode 100644
index 0000000..7e2cc4d
--- /dev/null
+++ b/apps/doi-landing-page/src/App.scss
@@ -0,0 +1,19 @@
+@import 'bootswatch/dist/flatly/variables';
+@import 'bootstrap/scss/bootstrap';
+@import 'bootswatch/dist/flatly/bootswatch';
+
+body {
+  font-size: 0.9em;
+}
+
+.navbar-brand {
+  background: url('/esrf-white.png') no-repeat;
+  background-size: contain;
+  padding-left: 50px;
+  margin-left: 20px;
+}
+
+.breadcrumb {
+  margin: 0px;
+  padding: 0px;
+}
diff --git a/apps/doi-landing-page/src/App.tsx b/apps/doi-landing-page/src/App.tsx
new file mode 100644
index 0000000..7d0e53a
--- /dev/null
+++ b/apps/doi-landing-page/src/App.tsx
@@ -0,0 +1,19 @@
+import { AppRouter } from 'routing/AppRouter';
+import 'App.scss';
+import { LandingPageContainer } from 'landingPage/LandingPageContainer';
+import { useEffect } from 'react';
+import { CONFIG } from 'config/config';
+
+function App() {
+  useEffect(() => {
+    document.title = `${CONFIG.SITE_NAME} DOI`;
+  }, []);
+
+  return (
+    <AppRouter>
+      <LandingPageContainer />
+    </AppRouter>
+  );
+}
+
+export default App;
diff --git a/apps/doi-landing-page/src/config/config.ts b/apps/doi-landing-page/src/config/config.ts
new file mode 100644
index 0000000..cbdced2
--- /dev/null
+++ b/apps/doi-landing-page/src/config/config.ts
@@ -0,0 +1,3 @@
+export const CONFIG = {
+  SITE_NAME: 'ESRF',
+};
diff --git a/apps/doi-landing-page/src/hooks/path.ts b/apps/doi-landing-page/src/hooks/path.ts
new file mode 100644
index 0000000..2cea7ae
--- /dev/null
+++ b/apps/doi-landing-page/src/hooks/path.ts
@@ -0,0 +1,22 @@
+import { useParams } from 'react-router-dom';
+
+export function usePath(key: string): string | undefined {
+  const params = useParams();
+  return params[key] || undefined;
+}
+
+export function useCurrentPathDOI() {
+  const prefix = usePath(DOI_PREFIX_PARAM);
+  const suffix = usePath(DOI_SUFFIX_PARAM);
+  if (!prefix || !suffix) {
+    return undefined;
+  }
+  return getDOI(prefix, suffix);
+}
+
+export const DOI_PREFIX_PARAM = 'doiPrefix';
+export const DOI_SUFFIX_PARAM = 'doiSuffix';
+
+function getDOI(prefix: string, suffix: string): string {
+  return `${prefix}/${suffix}`;
+}
diff --git a/apps/doi-landing-page/src/landingPage/LandingPage.tsx b/apps/doi-landing-page/src/landingPage/LandingPage.tsx
new file mode 100644
index 0000000..778ffc5
--- /dev/null
+++ b/apps/doi-landing-page/src/landingPage/LandingPage.tsx
@@ -0,0 +1,13 @@
+import { DOI } from '@edata-portal/doi';
+import { useCurrentPathDOI } from 'hooks/path';
+import { PageNotFound } from 'routing/PageNotFound';
+
+export function LandingPage() {
+  const doi = useCurrentPathDOI();
+
+  if (!doi) {
+    return <PageNotFound />;
+  }
+
+  return <DOI doi={doi} />;
+}
diff --git a/apps/doi-landing-page/src/landingPage/LandingPageContainer.tsx b/apps/doi-landing-page/src/landingPage/LandingPageContainer.tsx
new file mode 100644
index 0000000..0583f39
--- /dev/null
+++ b/apps/doi-landing-page/src/landingPage/LandingPageContainer.tsx
@@ -0,0 +1,21 @@
+import { Col, Container, Navbar } from 'react-bootstrap';
+import { Outlet } from 'react-router-dom';
+
+export function LandingPageContainer() {
+  return (
+    <Col>
+      <Navbar className="bg-primary">
+        <Container>
+          <Navbar.Brand
+            style={{
+              height: 50,
+            }}
+          />
+        </Container>
+      </Navbar>
+      <Container className="pt-3 pb-3">
+        <Outlet />
+      </Container>
+    </Col>
+  );
+}
diff --git a/apps/doi-landing-page/src/main.tsx b/apps/doi-landing-page/src/main.tsx
new file mode 100644
index 0000000..cd8543d
--- /dev/null
+++ b/apps/doi-landing-page/src/main.tsx
@@ -0,0 +1,9 @@
+import React from 'react';
+import ReactDOM from 'react-dom/client';
+import App from 'App';
+
+ReactDOM.createRoot(document.getElementById('root')!).render(
+  <React.StrictMode>
+    <App />
+  </React.StrictMode>,
+);
diff --git a/apps/doi-landing-page/src/routes.tsx b/apps/doi-landing-page/src/routes.tsx
new file mode 100644
index 0000000..3ff44d2
--- /dev/null
+++ b/apps/doi-landing-page/src/routes.tsx
@@ -0,0 +1,20 @@
+import { DOI_PREFIX_PARAM, DOI_SUFFIX_PARAM } from 'hooks/path';
+import { LandingPage } from 'landingPage/LandingPage';
+import type { RouteObject } from 'react-router-dom';
+import { PageNotFound } from 'routing/PageNotFound';
+
+export const routes: RouteObject[] = [
+  {
+    path: 'doi',
+    children: [
+      {
+        path: `:${DOI_PREFIX_PARAM}/:${DOI_SUFFIX_PARAM}`,
+        element: <LandingPage />,
+      },
+    ],
+  },
+  {
+    path: '*',
+    element: <PageNotFound />,
+  },
+];
diff --git a/apps/doi-landing-page/src/routing/AppRouter.tsx b/apps/doi-landing-page/src/routing/AppRouter.tsx
new file mode 100644
index 0000000..1f9f3b1
--- /dev/null
+++ b/apps/doi-landing-page/src/routing/AppRouter.tsx
@@ -0,0 +1,17 @@
+import { useMemo } from 'react';
+import { createBrowserRouter, RouterProvider } from 'react-router-dom';
+
+import { routes } from 'routes';
+
+export function AppRouter({ children }: { children?: JSX.Element }) {
+  const router = useMemo(() => {
+    return createBrowserRouter([
+      {
+        element: children,
+        children: routes,
+      },
+    ]);
+  }, [children]);
+
+  return <RouterProvider router={router} />;
+}
diff --git a/apps/doi-landing-page/src/routing/PageNotFound.tsx b/apps/doi-landing-page/src/routing/PageNotFound.tsx
new file mode 100644
index 0000000..ac822b8
--- /dev/null
+++ b/apps/doi-landing-page/src/routing/PageNotFound.tsx
@@ -0,0 +1,5 @@
+import { Alert } from 'react-bootstrap';
+
+export function PageNotFound() {
+  return <Alert variant="danger">Page not found</Alert>;
+}
diff --git a/apps/doi-landing-page/src/vite-env.d.ts b/apps/doi-landing-page/src/vite-env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/apps/doi-landing-page/src/vite-env.d.ts
@@ -0,0 +1 @@
+/// <reference types="vite/client" />
diff --git a/apps/doi-landing-page/tsconfig.json b/apps/doi-landing-page/tsconfig.json
new file mode 100644
index 0000000..2602029
--- /dev/null
+++ b/apps/doi-landing-page/tsconfig.json
@@ -0,0 +1,14 @@
+{
+  "extends": "../../tsconfig.json",
+  "include": ["src"],
+  "compilerOptions": {
+    "baseUrl": "src",
+    "outDir": "dist",
+    "noEmit": true
+  },
+  "exclude": ["../../packages/*"],
+  "references": [
+    { "path": "./tsconfig.node.json" },
+    { "path": "../../packages/doi" }
+  ]
+}
diff --git a/apps/doi-landing-page/tsconfig.node.json b/apps/doi-landing-page/tsconfig.node.json
new file mode 100644
index 0000000..9d31e2a
--- /dev/null
+++ b/apps/doi-landing-page/tsconfig.node.json
@@ -0,0 +1,9 @@
+{
+  "compilerOptions": {
+    "composite": true,
+    "module": "ESNext",
+    "moduleResolution": "Node",
+    "allowSyntheticDefaultImports": true
+  },
+  "include": ["vite.config.ts"]
+}
diff --git a/apps/doi-landing-page/vite.config.ts b/apps/doi-landing-page/vite.config.ts
new file mode 100644
index 0000000..6d2b0cd
--- /dev/null
+++ b/apps/doi-landing-page/vite.config.ts
@@ -0,0 +1,12 @@
+import { defineConfig } from 'vite';
+import react from '@vitejs/plugin-react';
+import tsconfigPaths from 'vite-tsconfig-paths';
+
+// https://vitejs.dev/config/
+export default defineConfig({
+  plugins: [react(), tsconfigPaths()],
+  server: {
+    port: 3000,
+    host: true,
+  },
+});
diff --git a/build.sh b/build.sh
deleted file mode 100755
index 2f6563f..0000000
--- a/build.sh
+++ /dev/null
@@ -1 +0,0 @@
-docker build -t  dockcs.esrf.fr/dau/doi:1.0.0-SNAPSHOT .
diff --git a/myHttpd.conf b/myHttpd.conf
deleted file mode 100644
index 2224060..0000000
--- a/myHttpd.conf
+++ /dev/null
@@ -1,544 +0,0 @@
-#
-# This is the main Apache HTTP server configuration file.  It contains the
-# configuration directives that give the server its instructions.
-# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
-# In particular, see 
-# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
-# for a discussion of each configuration directive.
-#
-# Do NOT simply read the instructions in here without understanding
-# what they do.  They're here only as hints or reminders.  If you are unsure
-# consult the online docs. You have been warned.  
-#
-# Configuration and logfile names: If the filenames you specify for many
-# of the server's control files begin with "/" (or "drive:/" for Win32), the
-# server will use that explicit path.  If the filenames do *not* begin
-# with "/", the value of ServerRoot is prepended -- so "logs/access_log"
-# with ServerRoot set to "/usr/local/apache2" will be interpreted by the
-# server as "/usr/local/apache2/logs/access_log", whereas "/logs/access_log" 
-# will be interpreted as '/logs/access_log'.
-
-#
-# ServerRoot: The top of the directory tree under which the server's
-# configuration, error, and log files are kept.
-#
-# Do not add a slash at the end of the directory path.  If you point
-# ServerRoot at a non-local disk, be sure to specify a local disk on the
-# Mutex directive, if file-based mutexes are used.  If you wish to share the
-# same ServerRoot for multiple httpd daemons, you will need to change at
-# least PidFile.
-#
-ServerRoot "/usr/local/apache2"
-
-# Mutex: Allows you to set the mutex mechanism and mutex file directory
-# for individual mutexes, or change the global defaults
-#
-# Uncomment and change the directory if mutexes are file-based and the default
-# mutex file directory is not on a local disk or is not appropriate for some
-# other reason.
-#
-# Mutex default:logs
-
-#
-# Listen: Allows you to bind Apache to specific IP addresses and/or
-# ports, instead of the default. See also the <VirtualHost>
-# directive.
-#
-# Change this to Listen on specific IP addresses as shown below to 
-# prevent Apache from glomming onto all bound IP addresses.
-#
-#Listen 12.34.56.78:80
-Listen 80
-
-#
-# Dynamic Shared Object (DSO) Support
-#
-# To be able to use the functionality of a module which was built as a DSO you
-# have to place corresponding `LoadModule' lines at this location so the
-# directives contained in it are actually available _before_ they are used.
-# Statically compiled modules (those listed by `httpd -l') do not need
-# to be loaded here.
-#
-# Example:
-# LoadModule foo_module modules/mod_foo.so
-#
-LoadModule mpm_event_module modules/mod_mpm_event.so
-LoadModule authn_file_module modules/mod_authn_file.so
-#LoadModule authn_dbm_module modules/mod_authn_dbm.so
-#LoadModule authn_anon_module modules/mod_authn_anon.so
-#LoadModule authn_dbd_module modules/mod_authn_dbd.so
-#LoadModule authn_socache_module modules/mod_authn_socache.so
-LoadModule authn_core_module modules/mod_authn_core.so
-LoadModule authz_host_module modules/mod_authz_host.so
-LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
-LoadModule authz_user_module modules/mod_authz_user.so
-#LoadModule authz_dbm_module modules/mod_authz_dbm.so
-#LoadModule authz_owner_module modules/mod_authz_owner.so
-#LoadModule authz_dbd_module modules/mod_authz_dbd.so
-LoadModule authz_core_module modules/mod_authz_core.so
-#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
-#LoadModule authnz_fcgi_module modules/mod_authnz_fcgi.so
-LoadModule access_compat_module modules/mod_access_compat.so
-LoadModule auth_basic_module modules/mod_auth_basic.so
-#LoadModule auth_form_module modules/mod_auth_form.so
-#LoadModule auth_digest_module modules/mod_auth_digest.so
-#LoadModule allowmethods_module modules/mod_allowmethods.so
-#LoadModule isapi_module modules/mod_isapi.so
-#LoadModule file_cache_module modules/mod_file_cache.so
-#LoadModule cache_module modules/mod_cache.so
-#LoadModule cache_disk_module modules/mod_cache_disk.so
-#LoadModule cache_socache_module modules/mod_cache_socache.so
-#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
-#LoadModule socache_dbm_module modules/mod_socache_dbm.so
-#LoadModule socache_memcache_module modules/mod_socache_memcache.so
-#LoadModule watchdog_module modules/mod_watchdog.so
-#LoadModule macro_module modules/mod_macro.so
-#LoadModule dbd_module modules/mod_dbd.so
-#LoadModule bucketeer_module modules/mod_bucketeer.so
-#LoadModule dumpio_module modules/mod_dumpio.so
-#LoadModule echo_module modules/mod_echo.so
-#LoadModule example_hooks_module modules/mod_example_hooks.so
-#LoadModule case_filter_module modules/mod_case_filter.so
-#LoadModule case_filter_in_module modules/mod_case_filter_in.so
-#LoadModule example_ipc_module modules/mod_example_ipc.so
-#LoadModule buffer_module modules/mod_buffer.so
-#LoadModule data_module modules/mod_data.so
-#LoadModule ratelimit_module modules/mod_ratelimit.so
-LoadModule reqtimeout_module modules/mod_reqtimeout.so
-#LoadModule ext_filter_module modules/mod_ext_filter.so
-#LoadModule request_module modules/mod_request.so
-#LoadModule include_module modules/mod_include.so
-LoadModule filter_module modules/mod_filter.so
-#LoadModule reflector_module modules/mod_reflector.so
-#LoadModule substitute_module modules/mod_substitute.so
-#LoadModule sed_module modules/mod_sed.so
-#LoadModule charset_lite_module modules/mod_charset_lite.so
-#LoadModule deflate_module modules/mod_deflate.so
-#LoadModule xml2enc_module modules/mod_xml2enc.so
-#LoadModule proxy_html_module modules/mod_proxy_html.so
-LoadModule mime_module modules/mod_mime.so
-#LoadModule ldap_module modules/mod_ldap.so
-LoadModule log_config_module modules/mod_log_config.so
-#LoadModule log_debug_module modules/mod_log_debug.so
-#LoadModule log_forensic_module modules/mod_log_forensic.so
-#LoadModule logio_module modules/mod_logio.so
-#LoadModule lua_module modules/mod_lua.so
-LoadModule env_module modules/mod_env.so
-#LoadModule mime_magic_module modules/mod_mime_magic.so
-#LoadModule cern_meta_module modules/mod_cern_meta.so
-#LoadModule expires_module modules/mod_expires.so
-LoadModule headers_module modules/mod_headers.so
-#LoadModule ident_module modules/mod_ident.so
-#LoadModule usertrack_module modules/mod_usertrack.so
-#LoadModule unique_id_module modules/mod_unique_id.so
-LoadModule setenvif_module modules/mod_setenvif.so
-LoadModule version_module modules/mod_version.so
-#LoadModule remoteip_module modules/mod_remoteip.so
-LoadModule proxy_module modules/mod_proxy.so
-#LoadModule proxy_connect_module modules/mod_proxy_connect.so
-#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
-LoadModule proxy_http_module modules/mod_proxy_http.so
-#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
-#LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
-#LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
-#LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
-#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
-#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
-#LoadModule proxy_express_module modules/mod_proxy_express.so
-#LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so
-#LoadModule session_module modules/mod_session.so
-#LoadModule session_cookie_module modules/mod_session_cookie.so
-#LoadModule session_crypto_module modules/mod_session_crypto.so
-#LoadModule session_dbd_module modules/mod_session_dbd.so
-#LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
-#LoadModule slotmem_plain_module modules/mod_slotmem_plain.so
-#LoadModule ssl_module modules/mod_ssl.so
-#LoadModule optional_hook_export_module modules/mod_optional_hook_export.so
-#LoadModule optional_hook_import_module modules/mod_optional_hook_import.so
-#LoadModule optional_fn_import_module modules/mod_optional_fn_import.so
-#LoadModule optional_fn_export_module modules/mod_optional_fn_export.so
-#LoadModule dialup_module modules/mod_dialup.so
-#LoadModule http2_module modules/mod_http2.so
-#LoadModule proxy_http2_module modules/mod_proxy_http2.so
-#LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
-#LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
-#LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
-#LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
-LoadModule unixd_module modules/mod_unixd.so
-#LoadModule heartbeat_module modules/mod_heartbeat.so
-#LoadModule heartmonitor_module modules/mod_heartmonitor.so
-#LoadModule dav_module modules/mod_dav.so
-LoadModule status_module modules/mod_status.so
-LoadModule autoindex_module modules/mod_autoindex.so
-#LoadModule asis_module modules/mod_asis.so
-#LoadModule info_module modules/mod_info.so
-#LoadModule suexec_module modules/mod_suexec.so
-<IfModule !mpm_prefork_module>
-	#LoadModule cgid_module modules/mod_cgid.so
-</IfModule>
-<IfModule mpm_prefork_module>
-	#LoadModule cgi_module modules/mod_cgi.so
-</IfModule>
-#LoadModule dav_fs_module modules/mod_dav_fs.so
-#LoadModule dav_lock_module modules/mod_dav_lock.so
-#LoadModule vhost_alias_module modules/mod_vhost_alias.so
-#LoadModule negotiation_module modules/mod_negotiation.so
-LoadModule dir_module modules/mod_dir.so
-#LoadModule imagemap_module modules/mod_imagemap.so
-#LoadModule actions_module modules/mod_actions.so
-#LoadModule speling_module modules/mod_speling.so
-#LoadModule userdir_module modules/mod_userdir.so
-LoadModule alias_module modules/mod_alias.so
-LoadModule rewrite_module modules/mod_rewrite.so
-
-<IfModule unixd_module>
-#
-# If you wish httpd to run as a different user or group, you must run
-# httpd as root initially and it will switch.  
-#
-# User/Group: The name (or #number) of the user/group to run httpd as.
-# It is usually good practice to create a dedicated user and group for
-# running httpd, as with most system services.
-#
-User daemon
-Group daemon
-
-</IfModule>
-
-# 'Main' server configuration
-#
-# The directives in this section set up the values used by the 'main'
-# server, which responds to any requests that aren't handled by a
-# <VirtualHost> definition.  These values also provide defaults for
-# any <VirtualHost> containers you may define later in the file.
-#
-# All of these directives may appear inside <VirtualHost> containers,
-# in which case these default settings will be overridden for the
-# virtual host being defined.
-#
-
-#
-# ServerAdmin: Your address, where problems with the server should be
-# e-mailed.  This address appears on some server-generated pages, such
-# as error documents.  e.g. admin@your-domain.com
-#
-ServerAdmin webmaster@localhost
-
-#
-# ServerName gives the name and port that the server uses to identify itself.
-# This can often be determined automatically, but we recommend you specify
-# it explicitly to prevent problems during startup.
-#
-# If your host doesn't have a registered DNS name, enter its IP address here.
-#
-#ServerName www.example.com:80
-
-#
-# Deny access to the entirety of your server's filesystem. You must
-# explicitly permit access to web content directories in other 
-# <Directory> blocks below.
-#
-<Directory />
-    AllowOverride none
-    Require all denied
-</Directory>
-
-#
-# Note that from this point forward you must specifically allow
-# particular features to be enabled - so if something's not working as
-# you might expect, make sure that you have specifically enabled it
-# below.
-#
-
-#
-# DocumentRoot: The directory out of which you will serve your
-# documents. By default, all requests are taken from this directory, but
-# symbolic links and aliases may be used to point to other locations.
-#
-DocumentRoot "/usr/local/apache2/htdocs"
-<Directory "/usr/local/apache2/htdocs">
-    #
-    # Possible values for the Options directive are "None", "All",
-    # or any combination of:
-    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
-    #
-    # Note that "MultiViews" must be named *explicitly* --- "Options All"
-    # doesn't give it to you.
-    #
-    # The Options directive is both complicated and important.  Please see
-    # http://httpd.apache.org/docs/2.4/mod/core.html#options
-    # for more information.
-    #
-    Options Indexes FollowSymLinks
-
-    #
-    # AllowOverride controls what directives may be placed in .htaccess files.
-    # It can be "All", "None", or any combination of the keywords:
-    #   AllowOverride FileInfo AuthConfig Limit
-    #
-    AllowOverride All
-
-    #
-    # Controls who can get stuff from this server.
-    #
-    Require all granted
-</Directory>
-
-#
-# DirectoryIndex: sets the file that Apache will serve if a directory
-# is requested.
-#
-<IfModule dir_module>
-    DirectoryIndex index.html
-</IfModule>
-
-#
-# The following lines prevent .htaccess and .htpasswd files from being 
-# viewed by Web clients. 
-#
-<Files ".ht*">
-    Require all denied
-</Files>
-
-#
-# ErrorLog: The location of the error log file.
-# If you do not specify an ErrorLog directive within a <VirtualHost>
-# container, error messages relating to that virtual host will be
-# logged here.  If you *do* define an error logfile for a <VirtualHost>
-# container, that host's errors will be logged there and not here.
-#
-ErrorLog /proc/self/fd/2
-
-#
-# LogLevel: Control the number of messages logged to the error_log.
-# Possible values include: debug, info, notice, warn, error, crit,
-# alert, emerg.
-#
-LogLevel warn
-
-<IfModule log_config_module>
-    #
-    # The following directives define some format nicknames for use with
-    # a CustomLog directive (see below).
-    #
-    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
-    LogFormat "%h %l %u %t \"%r\" %>s %b" common
-
-    <IfModule logio_module>
-      # You need to enable mod_logio.c to use %I and %O
-      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
-    </IfModule>
-
-    #
-    # The location and format of the access logfile (Common Logfile Format).
-    # If you do not define any access logfiles within a <VirtualHost>
-    # container, they will be logged here.  Contrariwise, if you *do*
-    # define per-<VirtualHost> access logfiles, transactions will be
-    # logged therein and *not* in this file.
-    #
-    CustomLog /proc/self/fd/1 common
-
-    #
-    # If you prefer a logfile with access, agent, and referer information
-    # (Combined Logfile Format) you can use the following directive.
-    #
-    #CustomLog "logs/access_log" combined
-</IfModule>
-
-<IfModule alias_module>
-    #
-    # Redirect: Allows you to tell clients about documents that used to 
-    # exist in your server's namespace, but do not anymore. The client 
-    # will make a new request for the document at its new location.
-    # Example:
-    # Redirect permanent /foo http://www.example.com/bar
-
-    #
-    # Alias: Maps web paths into filesystem paths and is used to
-    # access content that does not live under the DocumentRoot.
-    # Example:
-    # Alias /webpath /full/filesystem/path
-    #
-    # If you include a trailing / on /webpath then the server will
-    # require it to be present in the URL.  You will also likely
-    # need to provide a <Directory> section to allow access to
-    # the filesystem path.
-
-    #
-    # ScriptAlias: This controls which directories contain server scripts. 
-    # ScriptAliases are essentially the same as Aliases, except that
-    # documents in the target directory are treated as applications and
-    # run by the server when requested rather than as documents sent to the
-    # client.  The same rules about trailing "/" apply to ScriptAlias
-    # directives as to Alias.
-    #
-    ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
-
-</IfModule>
-
-<IfModule cgid_module>
-    #
-    # ScriptSock: On threaded servers, designate the path to the UNIX
-    # socket used to communicate with the CGI daemon of mod_cgid.
-    #
-    #Scriptsock cgisock
-</IfModule>
-
-#
-# "/usr/local/apache2/cgi-bin" should be changed to whatever your ScriptAliased
-# CGI directory exists, if you have that configured.
-#
-<Directory "/usr/local/apache2/cgi-bin">
-    AllowOverride None
-    Options None
-    Require all granted
-</Directory>
-
-<IfModule headers_module>
-    #
-    # Avoid passing HTTP_PROXY environment to CGI's on this or any proxied
-    # backend servers which have lingering "httpoxy" defects.
-    # 'Proxy' request header is undefined by the IETF, not listed by IANA
-    #
-    RequestHeader unset Proxy early
-</IfModule>
-
-<IfModule mime_module>
-    #
-    # TypesConfig points to the file containing the list of mappings from
-    # filename extension to MIME-type.
-    #
-    TypesConfig conf/mime.types
-
-    #
-    # AddType allows you to add to or override the MIME configuration
-    # file specified in TypesConfig for specific file types.
-    #
-    #AddType application/x-gzip .tgz
-    #
-    # AddEncoding allows you to have certain browsers uncompress
-    # information on the fly. Note: Not all browsers support this.
-    #
-    #AddEncoding x-compress .Z
-    #AddEncoding x-gzip .gz .tgz
-    #
-    # If the AddEncoding directives above are commented-out, then you
-    # probably should define those extensions to indicate media types:
-    #
-    AddType application/x-compress .Z
-    AddType application/x-gzip .gz .tgz
-
-    #
-    # AddHandler allows you to map certain file extensions to "handlers":
-    # actions unrelated to filetype. These can be either built into the server
-    # or added with the Action directive (see below)
-    #
-    # To use CGI scripts outside of ScriptAliased directories:
-    # (You will also need to add "ExecCGI" to the "Options" directive.)
-    #
-    #AddHandler cgi-script .cgi
-
-    # For type maps (negotiated resources):
-    #AddHandler type-map var
-
-    #
-    # Filters allow you to process content before it is sent to the client.
-    #
-    # To parse .shtml files for server-side includes (SSI):
-    # (You will also need to add "Includes" to the "Options" directive.)
-    #
-    #AddType text/html .shtml
-    #AddOutputFilter INCLUDES .shtml
-</IfModule>
-
-#
-# The mod_mime_magic module allows the server to use various hints from the
-# contents of the file itself to determine its type.  The MIMEMagicFile
-# directive tells the module where the hint definitions are located.
-#
-#MIMEMagicFile conf/magic
-
-#
-# Customizable error responses come in three flavors:
-# 1) plain text 2) local redirects 3) external redirects
-#
-# Some examples:
-#ErrorDocument 500 "The server made a boo boo."
-#ErrorDocument 404 /missing.html
-#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
-#ErrorDocument 402 http://www.example.com/subscription_info.html
-#
-
-#
-# MaxRanges: Maximum number of Ranges in a request before
-# returning the entire resource, or one of the special
-# values 'default', 'none' or 'unlimited'.
-# Default setting is to accept 200 Ranges.
-#MaxRanges unlimited
-
-#
-# EnableMMAP and EnableSendfile: On systems that support it, 
-# memory-mapping or the sendfile syscall may be used to deliver
-# files.  This usually improves server performance, but must
-# be turned off when serving from networked-mounted 
-# filesystems or if support for these functions is otherwise
-# broken on your system.
-# Defaults: EnableMMAP On, EnableSendfile Off
-#
-#EnableMMAP off
-#EnableSendfile on
-
-# Supplemental configuration
-#
-# The configuration files in the conf/extra/ directory can be 
-# included to add extra features or to modify the default configuration of 
-# the server, or you may simply copy their contents here and change as 
-# necessary.
-
-# Server-pool management (MPM specific)
-#Include conf/extra/httpd-mpm.conf
-
-# Multi-language error messages
-#Include conf/extra/httpd-multilang-errordoc.conf
-
-# Fancy directory listings
-#Include conf/extra/httpd-autoindex.conf
-
-# Language settings
-#Include conf/extra/httpd-languages.conf
-
-# User home directories
-#Include conf/extra/httpd-userdir.conf
-
-# Real-time info on requests and configuration
-#Include conf/extra/httpd-info.conf
-
-# Virtual hosts
-#Include conf/extra/httpd-vhosts.conf
-
-# Local access to the Apache HTTP Server Manual
-#Include conf/extra/httpd-manual.conf
-
-# Distributed authoring and versioning (WebDAV)
-#Include conf/extra/httpd-dav.conf
-
-# Various default settings
-#Include conf/extra/httpd-default.conf
-
-# Configure mod_proxy_html to understand HTML4/XHTML1
-<IfModule proxy_html_module>
-Include conf/extra/proxy-html.conf
-</IfModule>
-
-# Secure (SSL/TLS) connections
-#Include conf/extra/httpd-ssl.conf
-#
-# Note: The following must must be present to support
-#       starting without SSL on platforms with no /dev/random equivalent
-#       but a statically compiled-in mod_ssl.
-#
-<IfModule ssl_module>
-SSLRandomSeed startup builtin
-SSLRandomSeed connect builtin
-</IfModule>
-
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..193a3ee
--- /dev/null
+++ b/package.json
@@ -0,0 +1,18 @@
+{
+  "scripts": {
+    "lint:eslint": "pnpm -r --parallel lint:eslint",
+    "lint:tsc": "pnpm --filter @edata-portal/doi lint:tsc ; pnpm -r --parallel --filter './apps/**' lint:tsc",
+    "lint:prettier": "pnpm -r --parallel lint:prettier",
+    "fix:eslint": "pnpm -r --parallel fix:eslint",
+    "fix:prettier": "pnpm -r --parallel fix:prettier"
+  },
+  "dependencies": {
+    "eslint": "^8.36.0",
+    "prettier": "^2.8.4",
+    "typescript": "^5.2.2"
+  },
+  "devDependencies": {
+    "eslint-config-react-app": "^7.0.1"
+  },
+  "eslintConfig": {}
+}
diff --git a/packages/doi/.eslintignore b/packages/doi/.eslintignore
new file mode 100644
index 0000000..0ed753a
--- /dev/null
+++ b/packages/doi/.eslintignore
@@ -0,0 +1,4 @@
+/dist*/
+/node_modules/
+.eslintrc.cjs
+vite.config.ts
\ No newline at end of file
diff --git a/packages/doi/.eslintrc.cjs b/packages/doi/.eslintrc.cjs
new file mode 100644
index 0000000..406cb04
--- /dev/null
+++ b/packages/doi/.eslintrc.cjs
@@ -0,0 +1,26 @@
+module.exports = {
+  root: true,
+  extends: [
+    'react-app',
+    'react-app/jest',
+    'plugin:react/recommended',
+    'plugin:react/jsx-runtime',
+  ],
+  parser: '@typescript-eslint/parser',
+  rules: {
+    'no-debugger': 'error',
+    'no-console': [
+      'error',
+      {
+        allow: ['warn', 'error'],
+      },
+    ],
+    'react/no-unknown-property': 'off',
+    'no-restricted-imports': [
+      'error',
+      {
+        patterns: ['.*'],
+      },
+    ],
+  },
+};
diff --git a/packages/doi/.gitignore b/packages/doi/.gitignore
new file mode 100644
index 0000000..a547bf3
--- /dev/null
+++ b/packages/doi/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/packages/doi/.prettierignore b/packages/doi/.prettierignore
new file mode 100644
index 0000000..53c37a1
--- /dev/null
+++ b/packages/doi/.prettierignore
@@ -0,0 +1 @@
+dist
\ No newline at end of file
diff --git a/packages/doi/.prettierrc b/packages/doi/.prettierrc
new file mode 100644
index 0000000..544138b
--- /dev/null
+++ b/packages/doi/.prettierrc
@@ -0,0 +1,3 @@
+{
+  "singleQuote": true
+}
diff --git a/packages/doi/package.json b/packages/doi/package.json
new file mode 100644
index 0000000..bcc9adf
--- /dev/null
+++ b/packages/doi/package.json
@@ -0,0 +1,56 @@
+{
+  "name": "@edata-portal/doi",
+  "private": false,
+  "version": "0.0.4",
+  "type": "module",
+  "main": "./src/index.tsx",
+  "module": "./src/index.tsx",
+  "types": "./src/index.tsx",
+  "publishConfig": {
+    "main": "./dist/core.umd.js",
+    "module": "./dist/core.es.js",
+    "types": "./dist/index.d.ts"
+  },
+  "files": [
+    "dist/*"
+  ],
+  "scripts": {
+    "build": "vite build",
+    "package-publish": "pnpm build && pnpm publish",
+    "lint:eslint": "eslint \"**/*.{js,cjs,ts,tsx}\" --max-warnings=0 --resolve-plugins-relative-to .",
+    "lint:tsc": "tsc",
+    "lint:prettier": "prettier . --check",
+    "fix:eslint": "eslint \"**/*.{js,cjs,ts,tsx}\" --fix",
+    "fix:prettier": "prettier . --write"
+  },
+  "dependencies": {
+    "@fortawesome/free-solid-svg-icons": "^6.4.2",
+    "@fortawesome/react-fontawesome": "^0.2.0",
+    "@tanstack/react-query": "^5.0.5",
+    "autolinker": "^4.0.0",
+    "date-fns": "^2.30.0",
+    "react-bootstrap": "^2.9.1"
+  },
+  "devDependencies": {
+    "@types/react": "^18.2.15",
+    "@types/react-dom": "^18.2.7",
+    "@typescript-eslint/eslint-plugin": "^6.0.0",
+    "@typescript-eslint/parser": "^6.0.0",
+    "@vitejs/plugin-react": "^4.0.3",
+    "eslint": "^8.45.0",
+    "eslint-config-react-app": "^7.0.1",
+    "eslint-plugin-react-hooks": "^4.6.0",
+    "eslint-plugin-react-refresh": "^0.4.3",
+    "prettier": "^3.0.3",
+    "sass": "^1.69.5",
+    "typescript": "^5.2.2",
+    "vite": "^4.4.5",
+    "vite-tsconfig-paths": "^4.2.1",
+    "vite-plugin-dts": "^2.0.2",
+    "@types/node": "^18.14.6"
+  },
+  "peerDependencies": {
+    "react": "^18.2.0",
+    "react-dom": "^18.2.0"
+  }
+}
diff --git a/packages/doi/src/assets/orcid.png b/packages/doi/src/assets/orcid.png
new file mode 100644
index 0000000000000000000000000000000000000000..f9021490c41a9ea5ec549048e9832431e23c7418
GIT binary patch
literal 821
zcmV-51Iqk~P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004nX+uL$Nkc;*
zaB^>EX>4Tx04R}tkv&MmKpe$iTeVs$4ptCx$WWauh>AFB6^c+H)C#RSm|Xe=O&XFE
z7e~Rh;NZt%)xpJCR|i)?5c~jfbaGO3krMxx6k5c1aNLh~_a1le0DryARI_6oP&La)
zCE`LRyD9`<(St685W|4POnpuilkgm0_we!cF2=LG&;2=im7K`{pFljzbi*RvAfDc|
zbk6(45muBG;&b9LgDyz?$aUG}H_ioz{X8>bq*L?65n`dx#&R38qM;H`5l0nOqkMnH
zWrgz=XSG~q&3p0}hI87=GS_JiBY{OML4*JqRg_SMMSYc^kzyi6`*9EdkmDE0C6lWJ
zMvetkph9x|;D7MDTQfg7;U<OSK<A5Xe~bXZU7%63?eAmTZkzytXW&X}`73o`=9BbV
zON$->ecQmrbxV`?fXf|V@JW{p$&msy{rNoben#Jv1^RD+(3;y@b04P<K$^Nr-T()O
zz-WQ8*FE0d-QL^3XPW)}08)x_nvVa#sQ>@~24YJ`L;(K){{a7>y{D4^000SaNLh0L
z01FcU01FcV0GgZ_00007bV*G`2j&R|3N0?x*}Y@{00A*cL_t(I%cYYsNW)MRMNeW8
zgd$Z$5CnB_5rq6q>e9|`9h;?!s|9yg9R<NzG>eXIZen$4bV(efAP!pSAVnlfCP8rM
zkN%{!{NNqm`}aQH{qGv2aN;ko0ac)sYSjVPvAtupXeh*4;0&-Bj60z0*xoaMsgMJ}
zs)z=QQyaW~gntQGKp;6?0XeyVJ_?e9A$LBCJL=?#(O=Esp*){oQCes{Ck^{St=Q!L
z<&evVJu0G+c-?-#=C-w?3RTTMZYOYXwZLhx!o}kzV<Yp}(_3o0Wa=*6iF|HayUdNR
zChBGe<LE?wPc4(cWZv#8P}e0d&201ZcAmJ-9N-QzvQ}&+e!*|=t8Leiml$ZAaL-9Q
zwkKi_%0QTb97;~tL>UYrgMvnwL>wmLzj6KsA(CLe%sz$U00000NkvXXu0mjf_up|T

literal 0
HcmV?d00001

diff --git a/packages/doi/src/components/CopyValue.tsx b/packages/doi/src/components/CopyValue.tsx
new file mode 100644
index 0000000..f033d11
--- /dev/null
+++ b/packages/doi/src/components/CopyValue.tsx
@@ -0,0 +1,59 @@
+import {
+  faClipboard,
+  faClipboardCheck,
+} from '@fortawesome/free-solid-svg-icons';
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import React from 'react';
+import { OverlayTrigger, Tooltip, Card } from 'react-bootstrap';
+
+export function CopyValue({
+  value,
+  renderedValue,
+}: {
+  value: string;
+  renderedValue?: JSX.Element;
+}) {
+  const [copied, setCopied] = React.useState(false);
+  React.useEffect(() => {
+    if (copied) {
+      const timeout = setTimeout(() => setCopied(false), 5000);
+      return () => clearTimeout(timeout);
+    }
+    return undefined;
+  }, [copied]);
+
+  return (
+    <OverlayTrigger
+      placement="auto"
+      overlay={<Tooltip>{copied ? 'Copied' : 'Copy to clipboard'}</Tooltip>}
+    >
+      <Card
+        onClick={(e) => {
+          e.stopPropagation();
+          navigator.clipboard.writeText(value);
+          setCopied(true);
+        }}
+        style={{
+          padding: 5,
+          display: 'flex',
+          alignItems: 'center',
+          gap: '0.5rem',
+          flexDirection: 'row',
+          cursor: 'pointer',
+        }}
+      >
+        <FontAwesomeIcon
+          size="lg"
+          icon={copied ? faClipboardCheck : faClipboard}
+        />
+        <span
+          style={{
+            wordBreak: 'break-all',
+          }}
+        >
+          {renderedValue ?? value}
+        </span>
+      </Card>
+    </OverlayTrigger>
+  );
+}
diff --git a/packages/doi/src/components/DOIInfo/DOIBadge.tsx b/packages/doi/src/components/DOIInfo/DOIBadge.tsx
new file mode 100644
index 0000000..d36d4ed
--- /dev/null
+++ b/packages/doi/src/components/DOIInfo/DOIBadge.tsx
@@ -0,0 +1,57 @@
+import { CONFIG } from 'config/config';
+
+export function DOIBadge({
+  doi,
+  interactive = true,
+}: {
+  doi?: string;
+  interactive?: boolean;
+}) {
+  if (!doi?.trim().length) return null;
+
+  const doiUrl = CONFIG.LANGING_PAGE_LINK + doi;
+
+  const doiLabel = (
+    <div
+      className="bg-black text-white"
+      style={{
+        padding: '2px 5px',
+        display: 'inline-flex',
+        alignItems: 'center',
+      }}
+      key={'doilabel'}
+    >
+      DOI
+    </div>
+  );
+
+  const doiLink = (
+    <a
+      href={interactive ? doiUrl : undefined}
+      target={interactive ? '_blank' : undefined}
+      rel={interactive ? 'noopener noreferrer' : undefined}
+      className="bg-info text-white text-decoration-none"
+      style={{
+        padding: '2px 5px',
+        display: 'inline-flex',
+        alignItems: 'center',
+      }}
+      key={'doilink'}
+    >
+      {doi.toLocaleUpperCase()}
+    </a>
+  );
+
+  return (
+    <div
+      className="rounded"
+      style={{
+        display: 'inline-flex',
+        overflow: 'hidden',
+      }}
+    >
+      {doiLabel}
+      {doiLink}
+    </div>
+  );
+}
diff --git a/packages/doi/src/components/DOIInfo/DOICited.tsx b/packages/doi/src/components/DOIInfo/DOICited.tsx
new file mode 100644
index 0000000..8745024
--- /dev/null
+++ b/packages/doi/src/components/DOIInfo/DOICited.tsx
@@ -0,0 +1,54 @@
+import { LoadReference } from 'components/DOIInfo/DOIReference';
+import { Loading } from 'components/Loading';
+import { useGetEndpoint } from 'fetch/fetching';
+import { OPENCITATION_LIST_CITATIONS } from 'fetch/opencitation';
+import type { DOI } from 'model/doi';
+import { Suspense } from 'react';
+import { Card } from 'react-bootstrap';
+
+export function DOICited({ doi }: { doi: DOI }) {
+  return (
+    <Card>
+      <Card.Header className="p-2">Cited by</Card.Header>
+      <Card.Body className="p-0">
+        <Suspense fallback={<Loading />}>
+          <LoadCited doi={doi} />
+        </Suspense>
+      </Card.Body>
+    </Card>
+  );
+}
+
+export function LoadCited({ doi }: { doi: DOI }) {
+  const citations = useGetEndpoint({
+    endpoint: OPENCITATION_LIST_CITATIONS,
+    params: {
+      doi: doi.doi,
+    },
+  });
+
+  if (!citations?.length) {
+    return <p className="p-2 m-0">No citations were found.</p>;
+  }
+
+  return (
+    <>
+      {citations
+        .map((value) => value.citing.value)
+        //remove duplicates
+        .filter((doi, index, self) => self.indexOf(doi) === index)
+        .map((doi, index, self) => (
+          <div
+            key={doi}
+            className={`p-2 ${
+              index === self.length - 1 ? '' : 'border-bottom border-black'
+            }`}
+          >
+            <Suspense fallback={<Loading />}>
+              <LoadReference doi={doi} />
+            </Suspense>
+          </div>
+        ))}
+    </>
+  );
+}
diff --git a/packages/doi/src/components/DOIInfo/DOIDataAccess.tsx b/packages/doi/src/components/DOIInfo/DOIDataAccess.tsx
new file mode 100644
index 0000000..0bd2164
--- /dev/null
+++ b/packages/doi/src/components/DOIInfo/DOIDataAccess.tsx
@@ -0,0 +1,72 @@
+import { CONFIG } from 'config/config';
+import {
+  RESTRICTED_ACCESS,
+  ES_RESOURCE_TYPE,
+  OPEN_ACCESS,
+} from 'constants/doi';
+import type { DOI } from 'model/doi';
+
+import { useMemo } from 'react';
+import { Button, Card } from 'react-bootstrap';
+import { getAccessibilityStatus } from 'utils/accessibility';
+
+export function DOIDataAccess({ doi }: { doi: DOI }) {
+  const investigationId = useMemo(() => {
+    const regExp = RegExp(/\/\w*-*[Ee][Ss][Rr][Ff]-[Ee][Ss]-(\d+)$/);
+    const res = regExp.exec(doi.doi);
+    if (res) {
+      return res[1];
+    }
+    return undefined;
+  }, [doi]);
+
+  const accessibilityStatus = useMemo(() => getAccessibilityStatus(doi), [doi]);
+
+  const accessDataButtonText = useMemo(
+    () =>
+      accessibilityStatus === RESTRICTED_ACCESS
+        ? 'Access data for experimental team'
+        : 'Access data',
+    [accessibilityStatus],
+  );
+
+  const dataUrl = useMemo(
+    () =>
+      doi.resourceType === ES_RESOURCE_TYPE
+        ? CONFIG.DATA_ACCESS_LINK_INVESTIGATION.replace(
+            ':id',
+            investigationId || 'undefined',
+          )
+        : CONFIG.DATA_ACCESS_LINK_DOI.replace(':id', doi.doi),
+    [doi, investigationId],
+  );
+
+  return (
+    <Card className="h-100">
+      <Card.Header className="p-2">Experimental data</Card.Header>
+      <Card.Body className="p-2">
+        {accessibilityStatus === OPEN_ACCESS && (
+          <Card.Text>
+            Data can be accessed by clicking on the link below
+          </Card.Text>
+        )}
+        {accessibilityStatus === RESTRICTED_ACCESS && (
+          <Card.Text>
+            Data is under embargo until <b>{doi.publicationYear}</b> but could
+            be released earlier. Currently, it is only accessible to proposal
+            team members.
+          </Card.Text>
+        )}
+        <Button
+          variant="primary"
+          href={dataUrl}
+          target="_blank"
+          rel="noopener noreferrer"
+          size="sm"
+        >
+          {accessDataButtonText}
+        </Button>
+      </Card.Body>
+    </Card>
+  );
+}
diff --git a/packages/doi/src/components/DOIInfo/DOIDescription.tsx b/packages/doi/src/components/DOIInfo/DOIDescription.tsx
new file mode 100644
index 0000000..a8b2125
--- /dev/null
+++ b/packages/doi/src/components/DOIInfo/DOIDescription.tsx
@@ -0,0 +1,14 @@
+import type { DOI } from 'model/doi';
+
+export function DOIDescription({ doi }: { doi: DOI }) {
+  return (
+    <p
+      className="m-0"
+      style={{
+        textAlign: 'justify',
+      }}
+    >
+      {doi.description}
+    </p>
+  );
+}
diff --git a/packages/doi/src/components/DOIInfo/DOIExperimentReport.tsx b/packages/doi/src/components/DOIInfo/DOIExperimentReport.tsx
new file mode 100644
index 0000000..0163a9e
--- /dev/null
+++ b/packages/doi/src/components/DOIInfo/DOIExperimentReport.tsx
@@ -0,0 +1,18 @@
+import { CONFIG } from 'config/config';
+import type { DOI } from 'model/doi';
+import { Card } from 'react-bootstrap';
+
+export function DOIExperimentReport({ doi }: { doi: DOI }) {
+  if (!CONFIG.EXPERIMENT_REPORT.enabled) return null;
+
+  const ReportComponent = CONFIG.EXPERIMENT_REPORT.component;
+
+  return (
+    <Card className="h-100">
+      <Card.Header className="p-2">Experimental report</Card.Header>
+      <Card.Body className="p-2">
+        <ReportComponent doi={doi} />
+      </Card.Body>
+    </Card>
+  );
+}
diff --git a/packages/doi/src/components/DOIInfo/DOIExperimentReportESRF.tsx b/packages/doi/src/components/DOIInfo/DOIExperimentReportESRF.tsx
new file mode 100644
index 0000000..b3c0ace
--- /dev/null
+++ b/packages/doi/src/components/DOIInfo/DOIExperimentReportESRF.tsx
@@ -0,0 +1,81 @@
+import { Loading } from 'components/Loading';
+import { CONFIG } from 'config/config';
+import { RESTRICTED_ACCESS } from 'constants/doi';
+import { useGetEndpoint } from 'fetch/fetching';
+import { USER_PORTAL_FILES } from 'fetch/userportal';
+import type { DOI } from 'model/doi';
+import { Suspense, useMemo } from 'react';
+import { Button, Card, Col, Row } from 'react-bootstrap';
+import { getAccessibilityStatus } from 'utils/accessibility';
+import { getProposalCodeAndNumber } from 'utils/userportal';
+
+export function DOIExperimentReportESRF({ doi }: { doi: DOI }) {
+  return (
+    <Suspense fallback={<Loading />}>
+      <LoadReports doi={doi} />
+    </Suspense>
+  );
+}
+
+function LoadReports({ doi }: { doi: DOI }) {
+  const proposal = useMemo(
+    () => getProposalCodeAndNumber(doi.proposals[0]),
+    [doi],
+  );
+
+  const accessibilityStatus = useMemo(() => getAccessibilityStatus(doi), [doi]);
+
+  const reportFiles = useGetEndpoint({
+    endpoint: USER_PORTAL_FILES,
+    params: {
+      categoryCode: proposal?.proposalCode,
+      categoryCounter: proposal?.proposalNumber,
+    },
+    skipFetch:
+      !proposal ||
+      !proposal.proposalCode ||
+      !proposal.proposalNumber ||
+      accessibilityStatus === RESTRICTED_ACCESS,
+    default: [] as string[],
+  });
+
+  return (
+    <>
+      <Card.Text>
+        <ReportText files={reportFiles} />
+      </Card.Text>
+      <Row className="g-2">
+        {reportFiles.map((file) => (
+          <Col xs={'auto'} key={file}>
+            <ReportButton file={file} />
+          </Col>
+        ))}
+      </Row>
+    </>
+  );
+}
+
+function ReportButton({ file }: { file: string }) {
+  const link = `${CONFIG.DOWNLOAD_REPORT_LINK}${file}`;
+  return (
+    <Button href={link} size="sm" target="_blank" rel="noopener noreferrer">
+      {file}
+    </Button>
+  );
+}
+
+function ReportText({ files }: { files: string[] }) {
+  if (files.length === 0)
+    return <>There is currently no experimental report.</>;
+  if (files.length === 1)
+    return (
+      <>
+        <b>One</b> report has been found for this proposal.
+      </>
+    );
+  return (
+    <>
+      <b>{files.length}</b> reports have been found for this proposal.
+    </>
+  );
+}
diff --git a/packages/doi/src/components/DOIInfo/DOIInfo.tsx b/packages/doi/src/components/DOIInfo/DOIInfo.tsx
new file mode 100644
index 0000000..d9d7b84
--- /dev/null
+++ b/packages/doi/src/components/DOIInfo/DOIInfo.tsx
@@ -0,0 +1,62 @@
+import { DOICited } from 'components/DOIInfo/DOICited';
+import { DOIDataAccess } from 'components/DOIInfo/DOIDataAccess';
+import { DOIDescription } from 'components/DOIInfo/DOIDescription';
+import { DOIMetatada } from 'components/DOIInfo/DOIMetatada';
+import { DOIParticipants } from 'components/DOIInfo/DOIParticipants';
+import { DOIReference } from 'components/DOIInfo/DOIReference';
+import { DOIRelated } from 'components/DOIInfo/DOIRelated';
+import { DOIExperimentReport } from 'components/DOIInfo/DOIExperimentReport';
+import { DOITitle } from 'components/DOIInfo/DOITitle';
+import { DOITypes } from 'components/DOIInfo/DOITypes';
+import type { DOI } from 'model/doi';
+import { Col, Row } from 'react-bootstrap';
+import { CONFIG } from 'config/config';
+
+export function DOIInfo({ doi }: { doi: DOI }) {
+  return (
+    <>
+      <Row>
+        <DOITypes doi={doi} />
+      </Row>
+      <Row className="g-2">
+        <Col xs={12} lg={7} xl={8} xxl={9}>
+          <Row className="g-2">
+            <Col xs={12}>
+              <DOITitle doi={doi} />
+            </Col>
+            <Col xs={12}>
+              <DOIParticipants doi={doi} />
+            </Col>
+            <Col xs={12}>
+              <DOIDescription doi={doi} />
+            </Col>
+            <Col xs={12} sm={CONFIG.EXPERIMENT_REPORT.enabled ? 6 : 12}>
+              <DOIDataAccess doi={doi} />
+            </Col>
+            {CONFIG.EXPERIMENT_REPORT.enabled ? (
+              <Col xs={12} sm={6}>
+                <DOIExperimentReport doi={doi} />
+              </Col>
+            ) : null}
+            <Col xs={12}>
+              <DOIReference doi={doi} />
+            </Col>
+            <Col xs={12}>
+              <DOICited doi={doi} />
+            </Col>
+          </Row>
+        </Col>
+        <Col xs={12} lg={5} xl={4} xxl={3}>
+          <Row className="g-2">
+            <Col xs={12}>
+              <DOIMetatada doi={doi} />
+            </Col>
+            <Col xs={12}>
+              <DOIRelated doi={doi} />
+            </Col>
+          </Row>
+        </Col>
+      </Row>
+    </>
+  );
+}
diff --git a/packages/doi/src/components/DOIInfo/DOIMetatada.tsx b/packages/doi/src/components/DOIInfo/DOIMetatada.tsx
new file mode 100644
index 0000000..36db325
--- /dev/null
+++ b/packages/doi/src/components/DOIInfo/DOIMetatada.tsx
@@ -0,0 +1,143 @@
+import { DOIBadge } from 'components/DOIInfo/DOIBadge';
+import { CONFIG } from 'config/config';
+import { useGetEndpoint } from 'fetch/fetching';
+import { ICATPLUS_GET_INSTRUMENTS } from 'fetch/icatplus';
+import type { DOI } from 'model/doi';
+import { Suspense } from 'react';
+import { Card, Col, Row } from 'react-bootstrap';
+import { findInstrumentUrl } from 'utils/icatplus';
+
+export function DOIMetatada({ doi }: { doi: DOI }) {
+  return (
+    <Card>
+      <Card.Header className="p-2">Metadata</Card.Header>
+      <Card.Body className="pt-0 p-2">
+        <Col>
+          <MetadataElement
+            title="Identifier"
+            content={<DOIBadge doi={doi.doi} />}
+          />
+
+          {doi.proposals?.length && doi.instruments?.length && (
+            <Row>
+              {doi.proposals?.length && (
+                <Col>
+                  <MetadataElement
+                    title={`Proposal${doi.proposals?.length > 1 ? 's' : ''}`}
+                    content={doi.proposals}
+                  />
+                </Col>
+              )}
+              {doi.instruments?.length && (
+                <Col>
+                  <MetadataElement
+                    title={`Instrument${
+                      doi.instruments?.length > 1 ? 's' : ''
+                    }`}
+                    content={doi.instruments.map((i) => (
+                      <Instrument key={i} instrument={i} />
+                    ))}
+                  />
+                </Col>
+              )}
+            </Row>
+          )}
+          <MetadataElement
+            title="Public release year"
+            content={doi.publicationYear}
+          />
+          <MetadataElement title="Session date" content={doi.collectionDate} />
+          <MetadataElement title="Category" content={doi.categories} />
+          <MetadataElement
+            title="Publisher"
+            content={<Publisher doi={doi} />}
+          />
+          <MetadataElement title="License (for files)" content={<License />} />
+        </Col>
+      </Card.Body>
+    </Card>
+  );
+}
+
+type MetadataType = string | number | JSX.Element | undefined | null;
+
+function MetadataElement({
+  title,
+  content,
+}: {
+  title: string;
+  content: MetadataType | MetadataType[];
+}) {
+  const contentArray = Array.isArray(content) ? content : [content];
+
+  const filteredContentArray = contentArray.filter(
+    (c) => c !== null && c !== undefined,
+  );
+
+  if (filteredContentArray.length === 0) return null;
+
+  return (
+    <>
+      <Row className="mt-2">
+        <strong>{title}</strong>
+      </Row>
+
+      {filteredContentArray.map((c, i) => (
+        <Row key={i}>
+          <Col>{c}</Col>
+        </Row>
+      ))}
+    </>
+  );
+}
+
+function License() {
+  return (
+    <a
+      href="https://creativecommons.org/licenses/by/4.0/"
+      target="_blank"
+      rel="noopener noreferrer"
+    >
+      Creative Commons Attribution 4.0
+    </a>
+  );
+}
+
+function Publisher({ doi }: { doi: DOI }) {
+  if (
+    doi.publisher?.toLocaleLowerCase() !==
+    CONFIG.SITE_PUBLISHER_NAME.toLocaleLowerCase()
+  )
+    return <>{doi.publisher}</>;
+  return (
+    <a href={CONFIG.PUBLISHER_URL} target="_blank" rel="noopener noreferrer">
+      {doi.publisher}
+    </a>
+  );
+}
+
+function Instrument({ instrument }: { instrument: string }) {
+  return (
+    <Suspense fallback={instrument}>
+      <LoadInstrumentUrl instrument={instrument} />
+    </Suspense>
+  );
+}
+
+function LoadInstrumentUrl({ instrument }: { instrument: string }) {
+  const icatPlusInstruments = useGetEndpoint({
+    endpoint: ICATPLUS_GET_INSTRUMENTS,
+  });
+
+  if (!icatPlusInstruments) return <>{instrument}</>;
+
+  const url = findInstrumentUrl(icatPlusInstruments, instrument);
+
+  if (!url) return <>{instrument}</>;
+
+  return (
+    <a href={url} target="_blank" rel="noopener noreferrer">
+      {instrument}
+    </a>
+  );
+}
diff --git a/packages/doi/src/components/DOIInfo/DOIParticipants.tsx b/packages/doi/src/components/DOIInfo/DOIParticipants.tsx
new file mode 100644
index 0000000..eb90d6c
--- /dev/null
+++ b/packages/doi/src/components/DOIInfo/DOIParticipants.tsx
@@ -0,0 +1,70 @@
+import type { DOI, DOIParticipant } from 'model/doi';
+import { Col, Row } from 'react-bootstrap';
+import orcid from 'assets/orcid.png';
+
+export function DOIParticipants({ doi }: { doi: DOI }) {
+  return (
+    <Row className="g-2">
+      {doi.creators?.length ? (
+        <Col xs={12}>
+          <Row className="gx-2">
+            {doi.creators.map((participant, index, self) => {
+              return (
+                <Col xs={'auto'} key={participant.name}>
+                  <Participant participant={participant} />
+                  {index < self.length - 1 ? (
+                    <span className="text-muted">;</span>
+                  ) : null}
+                </Col>
+              );
+            })}
+          </Row>
+        </Col>
+      ) : null}
+      {doi.contributors?.length ? (
+        <Col xs={12}>
+          <Row className="gx-2">
+            <Col xs={'auto'}>
+              <small>Contributors:</small>
+            </Col>
+            {doi.contributors.map((participant, index, self) => {
+              return (
+                <Col xs={'auto'} key={participant.name}>
+                  <Participant participant={participant} />
+                  {index < self.length - 1 ? (
+                    <span className="text-muted">;</span>
+                  ) : null}
+                </Col>
+              );
+            })}
+          </Row>
+        </Col>
+      ) : null}
+    </Row>
+  );
+}
+
+function Participant({ participant }: { participant: DOIParticipant }) {
+  return (
+    <span>
+      <ORCIDBadge participant={participant} />
+      <small className="text-muted text-nowrap">{participant.name}</small>
+    </span>
+  );
+}
+
+function ORCIDBadge({ participant }: { participant: DOIParticipant }) {
+  if (!participant.orcid) {
+    return null;
+  }
+  return (
+    <a
+      href={participant.orcid}
+      target="_blank"
+      rel="noopener noreferrer"
+      className="me-1"
+    >
+      <img src={orcid} alt="ORCID" />
+    </a>
+  );
+}
diff --git a/packages/doi/src/components/DOIInfo/DOIReference.tsx b/packages/doi/src/components/DOIInfo/DOIReference.tsx
new file mode 100644
index 0000000..ca0b8a2
--- /dev/null
+++ b/packages/doi/src/components/DOIInfo/DOIReference.tsx
@@ -0,0 +1,72 @@
+import { CROSSCITE_FORMAT_REFERENCE } from 'fetch/crosscite';
+import { useGetEndpoint } from 'fetch/fetching';
+import type { DOI } from 'model/doi';
+import { Alert, Card } from 'react-bootstrap';
+import Autolinker from 'autolinker';
+import { Suspense } from 'react';
+import { Loading } from 'components/Loading';
+import { CopyValue } from 'components/CopyValue';
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import { faWarning } from '@fortawesome/free-solid-svg-icons';
+
+export function DOIReference({ doi }: { doi: DOI }) {
+  return (
+    <Card>
+      <Card.Header className="p-2">Reference</Card.Header>
+      <Card.Body className=" p-2">
+        <p>
+          Researchers must acknowledge the source of the data and cite its
+          unique identifier as well as any publications linked to the same raw
+          data.
+          <br />
+          Below is the recommended format for citing this work in a research
+          publication.
+        </p>
+
+        <Suspense fallback={<Loading />}>
+          <LoadReference doi={doi.doi} copy />
+        </Suspense>
+      </Card.Body>
+    </Card>
+  );
+}
+
+export function LoadReference({ doi, copy }: { doi: string; copy?: boolean }) {
+  const reference = useGetEndpoint({
+    endpoint: CROSSCITE_FORMAT_REFERENCE,
+    params: {
+      doi: doi,
+      lang: 'en-US',
+      style: 'apa',
+    },
+  });
+
+  if (!reference)
+    return (
+      <Alert variant="warning" className="p-2">
+        <FontAwesomeIcon icon={faWarning} className="me-2" />
+        Could not get reference
+      </Alert>
+    );
+
+  const content = (
+    <p
+      className="m-0"
+      style={{
+        fontStyle: 'italic',
+        wordBreak: 'keep-all',
+        textAlign: 'justify',
+      }}
+      dangerouslySetInnerHTML={
+        reference
+          ? {
+              __html: Autolinker.link(reference),
+            }
+          : undefined
+      }
+    />
+  );
+
+  if (!copy) return content;
+  return <CopyValue value={reference} renderedValue={content} />;
+}
diff --git a/packages/doi/src/components/DOIInfo/DOIRelated.tsx b/packages/doi/src/components/DOIInfo/DOIRelated.tsx
new file mode 100644
index 0000000..a75610d
--- /dev/null
+++ b/packages/doi/src/components/DOIInfo/DOIRelated.tsx
@@ -0,0 +1,32 @@
+import { LoadReference } from 'components/DOIInfo/DOIReference';
+import { Loading } from 'components/Loading';
+import type { DOI } from 'model/doi';
+import { Suspense } from 'react';
+import { Card } from 'react-bootstrap';
+
+export function DOIRelated({ doi }: { doi: DOI }) {
+  return (
+    <Card>
+      <Card.Header className="p-2">Related DOIs</Card.Header>
+      <Card.Body className="p-0">
+        {doi.relatedDOI?.length ? (
+          doi.relatedDOI?.map((doi, index, self) => (
+            <div
+              key={doi}
+              className={`p-2 ${
+                index === self.length - 1 ? '' : 'border-bottom border-black'
+              }`}
+            >
+              <Suspense fallback={<Loading />}>
+                <LoadReference doi={doi} />
+              </Suspense>
+            </div>
+          ))
+        ) : (
+          <p className="p-2 m-0">No related DOIs were found.</p>
+        )}
+        {}
+      </Card.Body>
+    </Card>
+  );
+}
diff --git a/packages/doi/src/components/DOIInfo/DOITitle.tsx b/packages/doi/src/components/DOIInfo/DOITitle.tsx
new file mode 100644
index 0000000..3043ed1
--- /dev/null
+++ b/packages/doi/src/components/DOIInfo/DOITitle.tsx
@@ -0,0 +1,5 @@
+import type { DOI } from 'model/doi';
+
+export function DOITitle({ doi }: { doi: DOI }) {
+  return <h3>{doi.title}</h3>;
+}
diff --git a/packages/doi/src/components/DOIInfo/DOITypes.tsx b/packages/doi/src/components/DOIInfo/DOITypes.tsx
new file mode 100644
index 0000000..42ccf67
--- /dev/null
+++ b/packages/doi/src/components/DOIInfo/DOITypes.tsx
@@ -0,0 +1,37 @@
+import {
+  ES_RESOURCE_TYPE,
+  DC_RESOURCE_TYPE,
+  OPEN_ACCESS,
+  RESTRICTED_ACCESS,
+} from 'constants/doi';
+import type { DOI } from 'model/doi';
+
+import { Badge, Stack } from 'react-bootstrap';
+import { getAccessibilityStatus } from 'utils/accessibility';
+
+export function DOITypes({ doi }: { doi: DOI }) {
+  const accessibilityStatus = getAccessibilityStatus(doi);
+
+  return (
+    <Stack
+      direction="horizontal"
+      style={{
+        fontSize: '1.3rem',
+      }}
+      gap={2}
+    >
+      {doi.resourceType === ES_RESOURCE_TYPE && (
+        <Badge bg="secondary">Session</Badge>
+      )}
+      {doi.resourceType === DC_RESOURCE_TYPE && (
+        <Badge bg="secondary">Data Collection</Badge>
+      )}
+      {accessibilityStatus === OPEN_ACCESS && (
+        <Badge bg="success">Open access</Badge>
+      )}
+      {accessibilityStatus === RESTRICTED_ACCESS && (
+        <Badge bg="warning">Restricted access</Badge>
+      )}
+    </Stack>
+  );
+}
diff --git a/packages/doi/src/components/DOINotFound.tsx b/packages/doi/src/components/DOINotFound.tsx
new file mode 100644
index 0000000..3e69dbe
--- /dev/null
+++ b/packages/doi/src/components/DOINotFound.tsx
@@ -0,0 +1,5 @@
+import { Alert } from 'react-bootstrap';
+
+export function DOINotFound() {
+  return <Alert variant="danger">DOI not found</Alert>;
+}
diff --git a/packages/doi/src/components/FetchAndDisplayDOI.tsx b/packages/doi/src/components/FetchAndDisplayDOI.tsx
new file mode 100644
index 0000000..6259e2f
--- /dev/null
+++ b/packages/doi/src/components/FetchAndDisplayDOI.tsx
@@ -0,0 +1,41 @@
+import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
+import { Suspense } from 'react';
+import { useGetEndpoint } from 'fetch/fetching';
+import { DATACITE_GET_DOI } from 'fetch/datacite';
+import { ICATPLUS_GET_DOI } from 'fetch/icatplus';
+import { Loading } from 'components/Loading';
+import { DOIInfo } from 'components/DOIInfo/DOIInfo';
+import { convertDataciteToInternal } from 'utils/datacite';
+import { DOINotFound } from 'components/DOINotFound';
+
+const queryClient = new QueryClient();
+
+export function FetchAndDisplayDOI({ doi }: { doi: string }) {
+  return (
+    <QueryClientProvider client={queryClient}>
+      <Suspense fallback={<Loading />}>
+        <FetchDOI doi={doi} />
+      </Suspense>
+    </QueryClientProvider>
+  );
+}
+
+function FetchDOI({ doi }: { doi: string }) {
+  const icatplusDOI = useGetEndpoint({
+    endpoint: ICATPLUS_GET_DOI,
+    params: { doi },
+  });
+
+  const dataciteDOI = useGetEndpoint({
+    endpoint: DATACITE_GET_DOI,
+    params: { doi },
+    skipFetch: icatplusDOI !== undefined,
+  });
+
+  const doiObject = convertDataciteToInternal(
+    icatplusDOI ? icatplusDOI : dataciteDOI,
+  );
+  if (!doiObject) return <DOINotFound />;
+
+  return <DOIInfo doi={doiObject} />;
+}
diff --git a/packages/doi/src/components/Loading.tsx b/packages/doi/src/components/Loading.tsx
new file mode 100644
index 0000000..7403c0f
--- /dev/null
+++ b/packages/doi/src/components/Loading.tsx
@@ -0,0 +1,10 @@
+import { Spinner } from 'react-bootstrap';
+
+export function Loading() {
+  return (
+    <div className="text-center">
+      <Spinner animation="border" role="status" variant="primary" />
+      <p className="">Loading...</p>
+    </div>
+  );
+}
diff --git a/packages/doi/src/config/config.ts b/packages/doi/src/config/config.ts
new file mode 100644
index 0000000..fd28067
--- /dev/null
+++ b/packages/doi/src/config/config.ts
@@ -0,0 +1,47 @@
+import { DOIExperimentReportESRF } from 'components/DOIInfo/DOIExperimentReportESRF';
+import type { Server } from 'fetch/fetching';
+import type { DOI } from 'model/doi';
+
+interface Config {
+  SITE_PUBLISHER_NAME: string;
+  LANGING_PAGE_LINK: string;
+  DATA_ACCESS_LINK_INVESTIGATION: string;
+  DATA_ACCESS_LINK_DOI: string;
+  DOWNLOAD_REPORT_LINK: string;
+  PUBLISHER_URL: string;
+  // value for each key of type Server is a string
+  SERVERS: Record<Server, string>;
+  AUTHORIZATION: Partial<Record<Server, string>>;
+  EXPERIMENT_REPORT:
+    | {
+        enabled: false;
+      }
+    | {
+        enabled: true;
+        component: React.FC<{ doi: DOI }>;
+      };
+}
+
+export const CONFIG: Config = {
+  SITE_PUBLISHER_NAME: 'European Synchrotron Radiation Facility',
+  LANGING_PAGE_LINK: 'https://doi.org/',
+  DATA_ACCESS_LINK_INVESTIGATION:
+    'https://data2.esrf.fr/investigation/:id/datasets',
+  DATA_ACCESS_LINK_DOI: 'https://data2.esrf.fr/doi/:id/datasets',
+  DOWNLOAD_REPORT_LINK: 'http://ftp.esrf.fr/pub/UserReports/',
+  PUBLISHER_URL: 'https://www.esrf.fr/',
+  SERVERS: {
+    DATACITE: 'https://api.datacite.org/',
+    ICATPLUS: 'https://icatplus.esrf.fr/',
+    CROSSCITE: 'https://citation.crosscite.org/',
+    USER_PORTAL: 'https://smis.esrf.fr/misapps/SMISServer/rest/',
+    OPENCITATION: 'https://opencitations.net/index/api/v1/',
+  },
+  AUTHORIZATION: {
+    OPENCITATION: 'd0633119-deff-4378-a192-8fb780c0bd8a',
+  },
+  EXPERIMENT_REPORT: {
+    enabled: true,
+    component: DOIExperimentReportESRF,
+  },
+};
diff --git a/packages/doi/src/constants/doi.ts b/packages/doi/src/constants/doi.ts
new file mode 100644
index 0000000..7129ab6
--- /dev/null
+++ b/packages/doi/src/constants/doi.ts
@@ -0,0 +1,17 @@
+export const RESTRICTED_ACCESS = 'Restricted access';
+export const OPEN_ACCESS = 'Open access';
+
+export const ES_RESOURCE_TYPE = 'Experiment Session';
+export const DC_RESOURCE_TYPE = 'Datacollection';
+
+export const CATEGORY_SUBJECT_SCHEME = 'Proposal Type Description';
+export const INSTRUMENT_SUBJECT_SCHEME = 'Instrument';
+export const PROPOSAL_SUBJECT_SCHEME = 'Proposal';
+
+export const COLLECTED_DATE_TYPE = 'Collected';
+
+export const ABSTRACT_DESCRIPTION_TYPE = 'Abstract';
+
+export const ORCID_IDENTIFIER_SCHEME = 'ORCID';
+
+export const COLLECTION_DATE_FORMAT = 'yyyy-MM-dd';
diff --git a/packages/doi/src/fetch/crosscite.ts b/packages/doi/src/fetch/crosscite.ts
new file mode 100644
index 0000000..5f92f07
--- /dev/null
+++ b/packages/doi/src/fetch/crosscite.ts
@@ -0,0 +1,12 @@
+import { Endpoint } from 'fetch/fetching';
+
+export const CROSSCITE_FORMAT_REFERENCE = Endpoint({
+  server: 'CROSSCITE',
+  path: 'format',
+  params: {} as {
+    style?: 'apa';
+    lang?: 'en-US';
+    doi: string;
+  },
+  schema: '' as string,
+});
diff --git a/packages/doi/src/fetch/datacite.ts b/packages/doi/src/fetch/datacite.ts
new file mode 100644
index 0000000..dee464b
--- /dev/null
+++ b/packages/doi/src/fetch/datacite.ts
@@ -0,0 +1,11 @@
+import { Endpoint } from 'fetch/fetching';
+import type { DataciteDOI } from 'model/datacite';
+
+export const DATACITE_GET_DOI = Endpoint({
+  server: 'DATACITE',
+  path: 'dois/:doi',
+  params: {} as {
+    doi: string;
+  },
+  schema: {} as DataciteDOI,
+});
diff --git a/packages/doi/src/fetch/fetching.tsx b/packages/doi/src/fetch/fetching.tsx
new file mode 100644
index 0000000..93b640a
--- /dev/null
+++ b/packages/doi/src/fetch/fetching.tsx
@@ -0,0 +1,167 @@
+import { replaceEqualDeep, useSuspenseQuery } from '@tanstack/react-query';
+import { CONFIG } from 'config/config';
+import { useMemo } from 'react';
+
+export const SERVERS = [
+  'ICATPLUS',
+  'DATACITE',
+  'CROSSCITE',
+  'USER_PORTAL',
+  'OPENCITATION',
+] as const;
+export type Server = (typeof SERVERS)[number];
+
+export type EndpointDefinitionParams<DATA, PARAMS> = {
+  path: string;
+  server: Server;
+  schema?: DATA;
+  params?: PARAMS;
+};
+
+export type EndpointDefinition<DATA, PARAMS> = Required<
+  EndpointDefinitionParams<DATA, PARAMS>
+>;
+
+export function Endpoint<DATA, PARAMS>(
+  args: EndpointDefinitionParams<DATA, PARAMS>,
+): EndpointDefinition<DATA, PARAMS> {
+  return {
+    schema: {} as DATA,
+    params: {} as PARAMS,
+    ...args,
+  };
+}
+
+function buildURL(endpoint: EndpointDefinition<unknown, unknown>, params: any) {
+  const serverUrl = CONFIG.SERVERS[endpoint.server];
+  const url = `${serverUrl}${endpoint.path}`;
+
+  if (typeof params !== 'object' || !params) return url;
+
+  const urlWithPathParams = Object.keys(params).reduce(
+    (a, b) => a.replaceAll(`:${b}`, params[b]),
+    url,
+  );
+
+  const queryParams = Object.keys(params).filter((key) => {
+    return !url.includes(`:${key}`);
+  });
+
+  if (queryParams.length === 0) return urlWithPathParams;
+
+  const queryParamsObject = new URLSearchParams();
+  queryParams.forEach((key) => {
+    queryParamsObject.append(key, params[key]);
+  });
+
+  return `${urlWithPathParams}?${queryParamsObject.toString()}`;
+}
+
+function getAuthorizationHeader(
+  endpoint: EndpointDefinition<unknown, unknown>,
+) {
+  const server = endpoint.server;
+
+  const authorizations = CONFIG.AUTHORIZATION as any;
+
+  if (server in authorizations && typeof authorizations[server] === 'string') {
+    return {
+      authorization: authorizations[server],
+    };
+  }
+  return undefined;
+}
+
+function fetchEndpoint<DATA, PARAMS>(args: {
+  endpoint: EndpointDefinition<DATA, PARAMS>;
+  params?: PARAMS;
+  url: string;
+  key?: any;
+  skipFetch?: boolean;
+  onFail?: (body: string) => void;
+}) {
+  if (args.skipFetch) return Promise.resolve(null);
+
+  return fetch(args.url, {
+    method: 'GET',
+    headers: getAuthorizationHeader(args.endpoint),
+  })
+    .catch((error) => {
+      console.error(error);
+      return null;
+    })
+    .then(async (response) => {
+      const body = await response?.text();
+
+      if (!response?.ok) {
+        console.error(
+          `Error fetching ${args.url}: ${response?.status} ${response?.statusText} ${body}`,
+        );
+        if (args.onFail)
+          body ? args.onFail(body) : args.onFail('Error fetching data');
+        return null;
+      }
+      if (!body) return null;
+      try {
+        return JSON.parse(body) as DATA;
+      } catch (e) {
+        return body as DATA;
+      }
+    });
+}
+
+export function getQueryObject<DATA, PARAMS>(args: {
+  endpoint: EndpointDefinition<DATA, PARAMS>;
+  params?: PARAMS;
+  skipFetch?: boolean;
+  onFail?: (body: string) => void;
+}) {
+  const url = buildURL(args.endpoint, args.params);
+
+  const key = [args.params, url, args.skipFetch ? 'skip' : 'fetch'];
+
+  return {
+    queryKey: key,
+    queryFn: () => fetchEndpoint({ ...args, url, key }),
+  };
+}
+
+export function useGetEndpoint<DATA, PARAMS, DEFAULT = undefined>(args: {
+  endpoint: EndpointDefinition<DATA, PARAMS>;
+  params?: PARAMS;
+  default?: DEFAULT;
+  skipFetch?: boolean;
+  onFail?: (body: string) => void;
+}): DATA | DEFAULT {
+  const query = getQueryObject({
+    endpoint: args.endpoint,
+    params: args.params,
+
+    skipFetch: args.skipFetch,
+    onFail: args.onFail,
+  });
+
+  const d = useSuspenseQuery({
+    notifyOnChangeProps: ['data'],
+    structuralSharing: (oldData, newData) => {
+      return replaceEqualDeep(oldData, newData);
+    },
+    refetchInterval: false,
+    refetchIntervalInBackground: false,
+    refetchOnMount: false,
+    refetchOnReconnect: false,
+    refetchOnWindowFocus: false,
+    retry: false,
+    ...query,
+  });
+
+  const res = useMemo(
+    () =>
+      d.data
+        ? (JSON.parse(JSON.stringify(d.data)) as DATA) //make a copy so that the data is not mutated
+        : (args.default as DEFAULT),
+    [d.data], // eslint-disable-line react-hooks/exhaustive-deps
+  );
+
+  return res;
+}
diff --git a/packages/doi/src/fetch/icatplus.ts b/packages/doi/src/fetch/icatplus.ts
new file mode 100644
index 0000000..5e94c77
--- /dev/null
+++ b/packages/doi/src/fetch/icatplus.ts
@@ -0,0 +1,21 @@
+import { Endpoint } from 'fetch/fetching';
+import type { DataciteDOIAttributes } from 'model/datacite';
+import type { Instrument } from 'model/icatplus';
+
+export const ICATPLUS_GET_DOI = Endpoint({
+  server: 'ICATPLUS',
+  path: 'doi/:doi/json-datacite',
+  params: {} as {
+    doi: string;
+  },
+  schema: {} as DataciteDOIAttributes,
+});
+
+export const ICATPLUS_GET_INSTRUMENTS = Endpoint({
+  server: 'ICATPLUS',
+  path: 'catalogue/instruments',
+  params: {} as {
+    doi: string;
+  },
+  schema: [] as Instrument[],
+});
diff --git a/packages/doi/src/fetch/opencitation.ts b/packages/doi/src/fetch/opencitation.ts
new file mode 100644
index 0000000..c236593
--- /dev/null
+++ b/packages/doi/src/fetch/opencitation.ts
@@ -0,0 +1,11 @@
+import { Endpoint } from 'fetch/fetching';
+import type { OpencitationCitation } from 'model/opencitation';
+
+export const OPENCITATION_LIST_CITATIONS = Endpoint({
+  server: 'OPENCITATION',
+  path: 'citations/:doi?json=dict(%22%20=%3E%20%22,citing,source,value).dict(%22%20=%3E%20%22,cited,source,value)',
+  params: {} as {
+    doi: string;
+  },
+  schema: {} as OpencitationCitation[],
+});
diff --git a/packages/doi/src/fetch/userportal.ts b/packages/doi/src/fetch/userportal.ts
new file mode 100644
index 0000000..b802351
--- /dev/null
+++ b/packages/doi/src/fetch/userportal.ts
@@ -0,0 +1,11 @@
+import { Endpoint } from 'fetch/fetching';
+
+export const USER_PORTAL_FILES = Endpoint({
+  server: 'USER_PORTAL',
+  path: 'reports/fileNames',
+  params: {} as {
+    categoryCode: string;
+    categoryCounter: string;
+  },
+  schema: [] as string[],
+});
diff --git a/packages/doi/src/index.tsx b/packages/doi/src/index.tsx
new file mode 100644
index 0000000..45b1ded
--- /dev/null
+++ b/packages/doi/src/index.tsx
@@ -0,0 +1,2 @@
+export { FetchAndDisplayDOI as DOI } from 'components/FetchAndDisplayDOI';
+export { DOIBadge } from 'components/DOIInfo/DOIBadge';
diff --git a/packages/doi/src/model/datacite.ts b/packages/doi/src/model/datacite.ts
new file mode 100644
index 0000000..7a6102b
--- /dev/null
+++ b/packages/doi/src/model/datacite.ts
@@ -0,0 +1,65 @@
+export interface NameIdentifier {
+  schemeUri: string;
+  nameIdentifierScheme: string;
+  nameIdentifier: string;
+}
+
+export interface DataciteParticipant {
+  name: string;
+  givenName?: string;
+  familyName?: string;
+  nameIdentifiers?: NameIdentifier[];
+}
+
+export interface DataciteTitle {
+  title: string;
+  titleType?: string;
+}
+
+export interface DataciteDescription {
+  description: string;
+  descriptionType: string;
+}
+
+export interface DataciteSubject {
+  subject: string;
+  subjectScheme: string;
+}
+
+export interface DataciteDateObject {
+  date: string;
+  dateType: string;
+}
+
+export interface DataciteTypes {
+  resourceTypeGeneral: string;
+  resourceType: string;
+}
+
+export interface DataciteRelatedIdentifier {
+  relatedIdentifier: string;
+  relatedIdentifierType: string;
+  relationType: string;
+}
+
+export interface DataciteDOIAttributes {
+  doi: string;
+  url: string;
+  publicationYear: string | number;
+  creators?: DataciteParticipant[];
+  contributors?: DataciteParticipant[];
+  titles: DataciteTitle[];
+  descriptions: DataciteDescription[];
+  publisher: string;
+  subjects: DataciteSubject[];
+  dates: DataciteDateObject[];
+  relatedIdentifiers?: DataciteRelatedIdentifier[];
+  types: DataciteTypes;
+}
+export interface DataciteDOI {
+  data: {
+    id: string;
+    type: string;
+    attributes: DataciteDOIAttributes;
+  };
+}
diff --git a/packages/doi/src/model/doi.ts b/packages/doi/src/model/doi.ts
new file mode 100644
index 0000000..e74fe4c
--- /dev/null
+++ b/packages/doi/src/model/doi.ts
@@ -0,0 +1,19 @@
+export type DOI = {
+  doi: string;
+  title: string;
+  creators?: DOIParticipant[];
+  contributors?: DOIParticipant[];
+  publicationYear?: number;
+  instruments: string[];
+  proposals: string[];
+  description?: string;
+  publisher?: string;
+  collectionDate?: string;
+  categories?: string[];
+  relatedDOI?: string[];
+  resourceType?: string;
+};
+export type DOIParticipant = {
+  name: string;
+  orcid?: string;
+};
diff --git a/packages/doi/src/model/icatplus.ts b/packages/doi/src/model/icatplus.ts
new file mode 100644
index 0000000..7f37515
--- /dev/null
+++ b/packages/doi/src/model/icatplus.ts
@@ -0,0 +1,12 @@
+export interface Instrument {
+  id: number;
+  createId: string;
+  createTime: string;
+  modId: string;
+  modTime: string;
+  description: string;
+  fullName: string;
+  name: string;
+  type: string;
+  url: string;
+}
diff --git a/packages/doi/src/model/opencitation.ts b/packages/doi/src/model/opencitation.ts
new file mode 100644
index 0000000..9b679f0
--- /dev/null
+++ b/packages/doi/src/model/opencitation.ts
@@ -0,0 +1,10 @@
+export interface OpencitationCitation {
+  citing: {
+    source: string;
+    value: string;
+  };
+  cited: {
+    source: string;
+    value: string;
+  };
+}
diff --git a/packages/doi/src/utils/accessibility.ts b/packages/doi/src/utils/accessibility.ts
new file mode 100644
index 0000000..383a535
--- /dev/null
+++ b/packages/doi/src/utils/accessibility.ts
@@ -0,0 +1,33 @@
+import {
+  ES_RESOURCE_TYPE,
+  OPEN_ACCESS,
+  RESTRICTED_ACCESS,
+  DC_RESOURCE_TYPE,
+  COLLECTION_DATE_FORMAT,
+} from 'constants/doi';
+import { parse, setYear } from 'date-fns';
+import type { DOI } from 'model/doi';
+
+export function getAccessibilityStatus(doi: DOI) {
+  const { resourceType, collectionDate, publicationYear } = doi;
+  if (resourceType === ES_RESOURCE_TYPE) {
+    if (publicationYear && collectionDate) {
+      // take day and month of sessionDate and year of publicationYear
+      const publiclyAvailableDate = setYear(
+        parse(collectionDate, COLLECTION_DATE_FORMAT, new Date()),
+        publicationYear,
+      );
+
+      const now = new Date();
+
+      if (now > publiclyAvailableDate) {
+        return OPEN_ACCESS;
+      } else if (now <= publiclyAvailableDate) {
+        return RESTRICTED_ACCESS;
+      }
+    }
+  } else if (resourceType === DC_RESOURCE_TYPE) {
+    return OPEN_ACCESS;
+  }
+  return undefined;
+}
diff --git a/packages/doi/src/utils/datacite.ts b/packages/doi/src/utils/datacite.ts
new file mode 100644
index 0000000..eaab888
--- /dev/null
+++ b/packages/doi/src/utils/datacite.ts
@@ -0,0 +1,87 @@
+import {
+  ABSTRACT_DESCRIPTION_TYPE,
+  CATEGORY_SUBJECT_SCHEME,
+  COLLECTED_DATE_TYPE,
+  INSTRUMENT_SUBJECT_SCHEME,
+  ORCID_IDENTIFIER_SCHEME,
+  PROPOSAL_SUBJECT_SCHEME,
+} from 'constants/doi';
+import type {
+  DataciteDOIAttributes,
+  DataciteDOI,
+  DataciteParticipant,
+} from 'model/datacite';
+import type { DOI, DOIParticipant } from 'model/doi';
+
+export function convertDataciteToInternal(
+  dataciteObject: DataciteDOIAttributes | DataciteDOI | undefined,
+): DOI | undefined {
+  if (!dataciteObject) return undefined;
+
+  const doi =
+    'data' in dataciteObject ? dataciteObject.data.attributes : dataciteObject;
+
+  return {
+    doi: doi.doi,
+    title: doi.titles[0].title,
+    creators: doi.creators?.map(makeParticipant),
+    contributors: doi.contributors?.map(makeParticipant),
+    publicationYear: parseIntOrUndefined(doi.publicationYear),
+    instruments: doi.subjects
+      .filter(
+        (subject) =>
+          subject.subjectScheme.toLowerCase() ===
+          INSTRUMENT_SUBJECT_SCHEME.toLowerCase(),
+      )
+      .flatMap((subject) => subject.subject.split(',')),
+    proposals: doi.subjects
+      .filter(
+        (subject) =>
+          subject.subjectScheme.toLowerCase() ===
+          PROPOSAL_SUBJECT_SCHEME.toLowerCase(),
+      )
+      .flatMap((subject) => subject.subject.split(',')),
+    description: doi.descriptions.find(
+      (description) =>
+        description.descriptionType.toLowerCase() ===
+        ABSTRACT_DESCRIPTION_TYPE.toLowerCase(),
+    )?.description,
+    publisher: doi.publisher,
+    collectionDate: doi.dates.find(
+      (date) =>
+        date.dateType.toLowerCase() === COLLECTED_DATE_TYPE.toLowerCase(),
+    )?.date,
+    categories: doi.subjects
+      .filter(
+        (subject) =>
+          subject.subjectScheme.toLowerCase() ===
+          CATEGORY_SUBJECT_SCHEME.toLowerCase(),
+      )
+      .map((subject) => subject.subject),
+    relatedDOI: doi.relatedIdentifiers?.map(
+      (relatedIdentifier) => relatedIdentifier.relatedIdentifier,
+    ),
+    resourceType: doi.types.resourceType,
+  };
+}
+
+function makeParticipant(p: DataciteParticipant): DOIParticipant {
+  const orcid = p.nameIdentifiers?.find(
+    (i) =>
+      i.nameIdentifierScheme.toLowerCase() ===
+      ORCID_IDENTIFIER_SCHEME.toLowerCase(),
+  );
+  const name =
+    p.familyName && p.givenName ? `${p.givenName} ${p.familyName}` : p.name;
+  return {
+    name: name,
+    orcid: orcid ? `${orcid.schemeUri}/${orcid.nameIdentifier}` : undefined,
+  };
+}
+
+function parseIntOrUndefined(value: string | number | undefined) {
+  if (value === undefined) return undefined;
+  const res = typeof value === 'string' ? parseInt(value) : value;
+  if (isNaN(res)) return undefined;
+  return res;
+}
diff --git a/packages/doi/src/utils/icatplus.ts b/packages/doi/src/utils/icatplus.ts
new file mode 100644
index 0000000..b6a10fc
--- /dev/null
+++ b/packages/doi/src/utils/icatplus.ts
@@ -0,0 +1,6 @@
+import type { Instrument } from 'model/icatplus';
+
+export function findInstrumentUrl(instruments: Instrument[], name: string) {
+  const instrument = instruments.find((instrument) => instrument.name === name);
+  return instrument ? instrument.url : undefined;
+}
diff --git a/packages/doi/src/utils/userportal.ts b/packages/doi/src/utils/userportal.ts
new file mode 100644
index 0000000..21f9ba9
--- /dev/null
+++ b/packages/doi/src/utils/userportal.ts
@@ -0,0 +1,41 @@
+/**
+ * Extracts the proposalCode and the proposalNumber of a specific proposal name
+ * @param {*} proposalName
+ * @returns {proposalCode, proposalNumber}
+ */
+export function getProposalCodeAndNumber(proposalName: string) {
+  const aroundHyphenRegExp = new RegExp(/^(.*)-(.*)/);
+  try {
+    // extract the proposal LetterCode (before the hyphen) and the digits (after the hyphen)
+    const res = aroundHyphenRegExp.exec(proposalName);
+    if (res?.length && res.length >= 2)
+      return {
+        proposalCode: res[1],
+        proposalNumber: res[2],
+      };
+  } catch (e) {
+    console.error(e);
+  }
+
+  /** It is most likely that symbol '-' is not present in the proposal name then we use /\d+$/ */
+  const numbersRegEXp = new RegExp(/\d+$/);
+  /** This will get all numbers at the end of the string
+   * Example: input=mx3030 then output[0]=3030
+   */
+
+  try {
+    const res = numbersRegEXp.exec(proposalName);
+    if (res?.length)
+      return {
+        proposalCode: proposalName.substring(
+          0,
+          proposalName.length - res[0].length,
+        ),
+        proposalNumber: res[0],
+      };
+  } catch (e) {
+    console.error(e);
+  }
+
+  return undefined;
+}
diff --git a/packages/doi/tsconfig.json b/packages/doi/tsconfig.json
new file mode 100644
index 0000000..4bae8ff
--- /dev/null
+++ b/packages/doi/tsconfig.json
@@ -0,0 +1,10 @@
+{
+  "extends": "../../tsconfig.json",
+  "include": ["src"],
+  "compilerOptions": {
+    "baseUrl": "src",
+    "outDir": "dist",
+    "composite": true
+  },
+  "references": [{ "path": "./tsconfig.node.json" }]
+}
diff --git a/packages/doi/tsconfig.node.json b/packages/doi/tsconfig.node.json
new file mode 100644
index 0000000..9d31e2a
--- /dev/null
+++ b/packages/doi/tsconfig.node.json
@@ -0,0 +1,9 @@
+{
+  "compilerOptions": {
+    "composite": true,
+    "module": "ESNext",
+    "moduleResolution": "Node",
+    "allowSyntheticDefaultImports": true
+  },
+  "include": ["vite.config.ts"]
+}
diff --git a/packages/doi/vite.config.ts b/packages/doi/vite.config.ts
new file mode 100644
index 0000000..086ad3f
--- /dev/null
+++ b/packages/doi/vite.config.ts
@@ -0,0 +1,34 @@
+import { defineConfig } from 'vite';
+import react from '@vitejs/plugin-react';
+import dts from 'vite-plugin-dts';
+import path from 'node:path';
+import tsconfigPaths from 'vite-tsconfig-paths';
+
+// https://vitejs.dev/config/
+export default defineConfig({
+  plugins: [
+    react(),
+    dts({
+      insertTypesEntry: true,
+    }),
+    tsconfigPaths(),
+  ],
+  build: {
+    lib: {
+      entry: path.resolve(__dirname, 'src/index.tsx'),
+      name: 'core',
+      formats: ['es', 'umd'],
+      fileName: (format) => `core.${format}.js`,
+    },
+    rollupOptions: {
+      external: ['react', 'react-dom', 'styled-components'],
+      output: {
+        globals: {
+          react: 'React',
+          'react-dom': 'ReactDOM',
+          'styled-components': 'styled',
+        },
+      },
+    },
+  },
+});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..29a28b8
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,5119 @@
+lockfileVersion: '6.0'
+
+importers:
+
+  .:
+    dependencies:
+      eslint:
+        specifier: ^8.36.0
+        version: 8.45.0
+      prettier:
+        specifier: ^2.8.4
+        version: 2.8.4
+      typescript:
+        specifier: ^5.2.2
+        version: 5.2.2
+    devDependencies:
+      eslint-config-react-app:
+        specifier: ^7.0.1
+        version: 7.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.15)(eslint@8.45.0)(typescript@5.2.2)
+
+  apps/doi-landing-page:
+    dependencies:
+      '@edata-portal/doi':
+        specifier: workspace:*
+        version: link:../../packages/doi
+      bootstrap:
+        specifier: ^5.3.2
+        version: 5.3.2(@popperjs/core@2.11.8)
+      bootswatch:
+        specifier: ^5.3.2
+        version: 5.3.2
+      react:
+        specifier: ^18.2.0
+        version: 18.2.0
+      react-bootstrap:
+        specifier: ^2.9.1
+        version: 2.9.1(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)
+      react-dom:
+        specifier: ^18.2.0
+        version: 18.2.0(react@18.2.0)
+      react-router-dom:
+        specifier: ^6.17.0
+        version: 6.17.0(react-dom@18.2.0)(react@18.2.0)
+    devDependencies:
+      '@types/react':
+        specifier: ^18.2.15
+        version: 18.2.15
+      '@types/react-dom':
+        specifier: ^18.2.7
+        version: 18.2.7
+      '@typescript-eslint/eslint-plugin':
+        specifier: ^6.0.0
+        version: 6.0.0(@typescript-eslint/parser@6.0.0)(eslint@8.45.0)(typescript@5.2.2)
+      '@typescript-eslint/parser':
+        specifier: ^6.0.0
+        version: 6.0.0(eslint@8.45.0)(typescript@5.2.2)
+      '@vitejs/plugin-react':
+        specifier: ^4.0.3
+        version: 4.0.3(vite@4.4.5)
+      eslint:
+        specifier: ^8.45.0
+        version: 8.45.0
+      eslint-config-react-app:
+        specifier: ^7.0.1
+        version: 7.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.15)(eslint@8.45.0)(typescript@5.2.2)
+      eslint-plugin-react-hooks:
+        specifier: ^4.6.0
+        version: 4.6.0(eslint@8.45.0)
+      eslint-plugin-react-refresh:
+        specifier: ^0.4.3
+        version: 0.4.3(eslint@8.45.0)
+      prettier:
+        specifier: ^3.0.3
+        version: 3.0.3
+      sass:
+        specifier: ^1.69.5
+        version: 1.69.5
+      typescript:
+        specifier: ^5.2.2
+        version: 5.2.2
+      vite:
+        specifier: ^4.4.5
+        version: 4.4.5(@types/node@18.14.6)(sass@1.69.5)
+      vite-tsconfig-paths:
+        specifier: ^4.2.1
+        version: 4.2.1(typescript@5.2.2)(vite@4.4.5)
+
+  packages/doi:
+    dependencies:
+      '@fortawesome/free-solid-svg-icons':
+        specifier: ^6.4.2
+        version: 6.4.2
+      '@fortawesome/react-fontawesome':
+        specifier: ^0.2.0
+        version: 0.2.0(@fortawesome/fontawesome-svg-core@6.4.2)(react@18.2.0)
+      '@tanstack/react-query':
+        specifier: ^5.0.5
+        version: 5.0.5(react-dom@18.2.0)(react@18.2.0)
+      autolinker:
+        specifier: ^4.0.0
+        version: 4.0.0
+      date-fns:
+        specifier: ^2.30.0
+        version: 2.30.0
+      react:
+        specifier: ^18.2.0
+        version: 18.2.0
+      react-bootstrap:
+        specifier: ^2.9.1
+        version: 2.9.1(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0)
+      react-dom:
+        specifier: ^18.2.0
+        version: 18.2.0(react@18.2.0)
+    devDependencies:
+      '@types/node':
+        specifier: ^18.14.6
+        version: 18.14.6
+      '@types/react':
+        specifier: ^18.2.15
+        version: 18.2.15
+      '@types/react-dom':
+        specifier: ^18.2.7
+        version: 18.2.7
+      '@typescript-eslint/eslint-plugin':
+        specifier: ^6.0.0
+        version: 6.0.0(@typescript-eslint/parser@6.0.0)(eslint@8.45.0)(typescript@5.2.2)
+      '@typescript-eslint/parser':
+        specifier: ^6.0.0
+        version: 6.0.0(eslint@8.45.0)(typescript@5.2.2)
+      '@vitejs/plugin-react':
+        specifier: ^4.0.3
+        version: 4.0.3(vite@4.4.5)
+      eslint:
+        specifier: ^8.45.0
+        version: 8.45.0
+      eslint-config-react-app:
+        specifier: ^7.0.1
+        version: 7.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.15)(eslint@8.45.0)(typescript@5.2.2)
+      eslint-plugin-react-hooks:
+        specifier: ^4.6.0
+        version: 4.6.0(eslint@8.45.0)
+      eslint-plugin-react-refresh:
+        specifier: ^0.4.3
+        version: 0.4.3(eslint@8.45.0)
+      prettier:
+        specifier: ^3.0.3
+        version: 3.0.3
+      sass:
+        specifier: ^1.69.5
+        version: 1.69.5
+      typescript:
+        specifier: ^5.2.2
+        version: 5.2.2
+      vite:
+        specifier: ^4.4.5
+        version: 4.4.5(@types/node@18.14.6)(sass@1.69.5)
+      vite-plugin-dts:
+        specifier: ^2.0.2
+        version: 2.0.2(@types/node@18.14.6)(vite@4.4.5)
+      vite-tsconfig-paths:
+        specifier: ^4.2.1
+        version: 4.2.1(typescript@5.2.2)(vite@4.4.5)
+
+packages:
+
+  /@aashutoshrathi/word-wrap@1.2.6:
+    resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
+    engines: {node: '>=0.10.0'}
+
+  /@ampproject/remapping@2.2.1:
+    resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
+    engines: {node: '>=6.0.0'}
+    dependencies:
+      '@jridgewell/gen-mapping': 0.3.3
+      '@jridgewell/trace-mapping': 0.3.20
+    dev: true
+
+  /@babel/code-frame@7.22.13:
+    resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/highlight': 7.22.20
+      chalk: 2.4.2
+    dev: true
+
+  /@babel/compat-data@7.23.2:
+    resolution: {integrity: sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /@babel/core@7.23.2:
+    resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@ampproject/remapping': 2.2.1
+      '@babel/code-frame': 7.22.13
+      '@babel/generator': 7.23.0
+      '@babel/helper-compilation-targets': 7.22.15
+      '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2)
+      '@babel/helpers': 7.23.2
+      '@babel/parser': 7.23.0
+      '@babel/template': 7.22.15
+      '@babel/traverse': 7.23.2
+      '@babel/types': 7.23.0
+      convert-source-map: 2.0.0
+      debug: 4.3.4
+      gensync: 1.0.0-beta.2
+      json5: 2.2.3
+      semver: 6.3.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/eslint-parser@7.22.15(@babel/core@7.23.2)(eslint@8.45.0):
+    resolution: {integrity: sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==}
+    engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
+    peerDependencies:
+      '@babel/core': ^7.11.0
+      eslint: ^7.5.0 || ^8.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
+      eslint: 8.45.0
+      eslint-visitor-keys: 2.1.0
+      semver: 6.3.1
+    dev: true
+
+  /@babel/generator@7.23.0:
+    resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+      '@jridgewell/gen-mapping': 0.3.3
+      '@jridgewell/trace-mapping': 0.3.20
+      jsesc: 2.5.2
+    dev: true
+
+  /@babel/helper-annotate-as-pure@7.22.5:
+    resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15:
+    resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-compilation-targets@7.22.15:
+    resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/compat-data': 7.23.2
+      '@babel/helper-validator-option': 7.22.15
+      browserslist: 4.22.1
+      lru-cache: 5.1.1
+      semver: 6.3.1
+    dev: true
+
+  /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      '@babel/helper-environment-visitor': 7.22.20
+      '@babel/helper-function-name': 7.23.0
+      '@babel/helper-member-expression-to-functions': 7.23.0
+      '@babel/helper-optimise-call-expression': 7.22.5
+      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2)
+      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+      '@babel/helper-split-export-declaration': 7.22.6
+      semver: 6.3.1
+    dev: true
+
+  /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      regexpu-core: 5.3.2
+      semver: 6.3.1
+    dev: true
+
+  /@babel/helper-define-polyfill-provider@0.4.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==}
+    peerDependencies:
+      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-compilation-targets': 7.22.15
+      '@babel/helper-plugin-utils': 7.22.5
+      debug: 4.3.4
+      lodash.debounce: 4.0.8
+      resolve: 1.22.8
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/helper-environment-visitor@7.22.20:
+    resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /@babel/helper-function-name@7.23.0:
+    resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/template': 7.22.15
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-hoist-variables@7.22.5:
+    resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-member-expression-to-functions@7.23.0:
+    resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-module-imports@7.22.15:
+    resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.2):
+    resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-environment-visitor': 7.22.20
+      '@babel/helper-module-imports': 7.22.15
+      '@babel/helper-simple-access': 7.22.5
+      '@babel/helper-split-export-declaration': 7.22.6
+      '@babel/helper-validator-identifier': 7.22.20
+    dev: true
+
+  /@babel/helper-optimise-call-expression@7.22.5:
+    resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-plugin-utils@7.22.5:
+    resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.2):
+    resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      '@babel/helper-environment-visitor': 7.22.20
+      '@babel/helper-wrap-function': 7.22.20
+    dev: true
+
+  /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.2):
+    resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-environment-visitor': 7.22.20
+      '@babel/helper-member-expression-to-functions': 7.23.0
+      '@babel/helper-optimise-call-expression': 7.22.5
+    dev: true
+
+  /@babel/helper-simple-access@7.22.5:
+    resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-skip-transparent-expression-wrappers@7.22.5:
+    resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-split-export-declaration@7.22.6:
+    resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helper-string-parser@7.22.5:
+    resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /@babel/helper-validator-identifier@7.22.20:
+    resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /@babel/helper-validator-option@7.22.15:
+    resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /@babel/helper-wrap-function@7.22.20:
+    resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-function-name': 7.23.0
+      '@babel/template': 7.22.15
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/helpers@7.23.2:
+    resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/template': 7.22.15
+      '@babel/traverse': 7.23.2
+      '@babel/types': 7.23.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/highlight@7.22.20:
+    resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-validator-identifier': 7.22.20
+      chalk: 2.4.2
+      js-tokens: 4.0.0
+    dev: true
+
+  /@babel/parser@7.23.0:
+    resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==}
+    engines: {node: '>=6.0.0'}
+    hasBin: true
+    dependencies:
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.13.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+      '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.2):
+    resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==}
+    engines: {node: '>=6.9.0'}
+    deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-proposal-decorators@7.23.2(@babel/core@7.23.2):
+    resolution: {integrity: sha512-eR0gJQc830fJVGz37oKLvt9W9uUIQSAovUl0e9sJ3YeO09dlcoBVYD3CLrjCj4qHdXmfiyTyFt8yeQYSN5fxLg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2)
+      '@babel/helper-split-export-declaration': 7.22.6
+      '@babel/plugin-syntax-decorators': 7.22.10(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.2):
+    resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==}
+    engines: {node: '>=6.9.0'}
+    deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.23.2):
+    resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==}
+    engines: {node: '>=6.9.0'}
+    deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.2):
+    resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==}
+    engines: {node: '>=6.9.0'}
+    deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.23.2):
+    resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==}
+    engines: {node: '>=6.9.0'}
+    deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.2):
+    resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+    dev: true
+
+  /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==}
+    engines: {node: '>=6.9.0'}
+    deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.2):
+    resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.2):
+    resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-decorators@7.22.10(@babel/core@7.23.2):
+    resolution: {integrity: sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.2):
+    resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.2):
+    resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.2):
+    resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.2):
+    resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-async-generator-functions@7.23.2(@babel/core@7.23.2):
+    resolution: {integrity: sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-environment-visitor': 7.22.20
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.2)
+      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-module-imports': 7.22.15
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.23.2):
+    resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.12.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-classes@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      '@babel/helper-compilation-targets': 7.22.15
+      '@babel/helper-environment-visitor': 7.22.20
+      '@babel/helper-function-name': 7.23.0
+      '@babel/helper-optimise-call-expression': 7.22.5
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2)
+      '@babel/helper-split-export-declaration': 7.22.6
+      globals: 11.12.0
+    dev: true
+
+  /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/template': 7.22.15
+    dev: true
+
+  /@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.23.2):
+    resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-for-of@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-compilation-targets': 7.22.15
+      '@babel/helper-function-name': 7.23.0
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-literals@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-modules-amd@7.23.0(@babel/core@7.23.2):
+    resolution: {integrity: sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.2):
+    resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-simple-access': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-modules-systemjs@7.23.0(@babel/core@7.23.2):
+    resolution: {integrity: sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-hoist-variables': 7.22.5
+      '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-validator-identifier': 7.22.20
+    dev: true
+
+  /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-object-rest-spread@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/compat-data': 7.23.2
+      '@babel/core': 7.23.2
+      '@babel/helper-compilation-targets': 7.22.15
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2)
+      '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-optional-chaining@7.23.0(@babel/core@7.23.2):
+    resolution: {integrity: sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-parameters@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.23.2):
+    resolution: {integrity: sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      '@babel/helper-module-imports': 7.22.15
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.2)
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/plugin-transform-react-pure-annotations@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.23.2):
+    resolution: {integrity: sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      regenerator-transform: 0.15.2
+    dev: true
+
+  /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-runtime@7.23.2(@babel/core@7.23.2):
+    resolution: {integrity: sha512-XOntj6icgzMS58jPVtQpiuF6ZFWxQiJavISGx5KGjRj+3gqZr8+N6Kx+N9BApWzgS+DOjIZfXXj0ZesenOWDyA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-module-imports': 7.22.15
+      '@babel/helper-plugin-utils': 7.22.5
+      babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.2)
+      babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.2)
+      babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.2)
+      semver: 6.3.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-spread@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-annotate-as-pure': 7.22.5
+      '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.23.2):
+    resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.23.2):
+    resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.2)
+      '@babel/helper-plugin-utils': 7.22.5
+    dev: true
+
+  /@babel/preset-env@7.23.2(@babel/core@7.23.2):
+    resolution: {integrity: sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/compat-data': 7.23.2
+      '@babel/core': 7.23.2
+      '@babel/helper-compilation-targets': 7.22.15
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-validator-option': 7.22.15
+      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15(@babel/core@7.23.2)
+      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15(@babel/core@7.23.2)
+      '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.2)
+      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2)
+      '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.2)
+      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.2)
+      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.2)
+      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.2)
+      '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.2)
+      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2)
+      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2)
+      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2)
+      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2)
+      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2)
+      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2)
+      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2)
+      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.2)
+      '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.2)
+      '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.2)
+      '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-async-generator-functions': 7.23.2(@babel/core@7.23.2)
+      '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.23.2)
+      '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.23.2)
+      '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-destructuring': 7.23.0(@babel/core@7.23.2)
+      '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-dynamic-import': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-export-namespace-from': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.23.2)
+      '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-json-strings': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-modules-amd': 7.23.0(@babel/core@7.23.2)
+      '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.2)
+      '@babel/plugin-transform-modules-systemjs': 7.23.0(@babel/core@7.23.2)
+      '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-numeric-separator': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-object-rest-spread': 7.22.15(@babel/core@7.23.2)
+      '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-optional-catch-binding': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.2)
+      '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.2)
+      '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-private-property-in-object': 7.22.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.23.2)
+      '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.23.2)
+      '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.23.2)
+      '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.2)
+      '@babel/types': 7.23.0
+      babel-plugin-polyfill-corejs2: 0.4.6(@babel/core@7.23.2)
+      babel-plugin-polyfill-corejs3: 0.8.6(@babel/core@7.23.2)
+      babel-plugin-polyfill-regenerator: 0.5.3(@babel/core@7.23.2)
+      core-js-compat: 3.33.1
+      semver: 6.3.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.2):
+    resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/types': 7.23.0
+      esutils: 2.0.3
+    dev: true
+
+  /@babel/preset-react@7.22.15(@babel/core@7.23.2):
+    resolution: {integrity: sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-validator-option': 7.22.15
+      '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.23.2)
+      '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-react-pure-annotations': 7.22.5(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/preset-typescript@7.23.2(@babel/core@7.23.2):
+    resolution: {integrity: sha512-u4UJc1XsS1GhIGteM8rnGiIvf9rJpiVgMEeCnwlLA7WJPC+jcXWJAGxYmeqs5hOZD8BbAfnV5ezBOxQbb4OUxA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-plugin-utils': 7.22.5
+      '@babel/helper-validator-option': 7.22.15
+      '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.2)
+      '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.2)
+    dev: true
+
+  /@babel/regjsgen@0.8.0:
+    resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
+    dev: true
+
+  /@babel/runtime@7.23.2:
+    resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      regenerator-runtime: 0.14.0
+
+  /@babel/template@7.22.15:
+    resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/code-frame': 7.22.13
+      '@babel/parser': 7.23.0
+      '@babel/types': 7.23.0
+    dev: true
+
+  /@babel/traverse@7.23.2:
+    resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/code-frame': 7.22.13
+      '@babel/generator': 7.23.0
+      '@babel/helper-environment-visitor': 7.22.20
+      '@babel/helper-function-name': 7.23.0
+      '@babel/helper-hoist-variables': 7.22.5
+      '@babel/helper-split-export-declaration': 7.22.6
+      '@babel/parser': 7.23.0
+      '@babel/types': 7.23.0
+      debug: 4.3.4
+      globals: 11.12.0
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@babel/types@7.23.0:
+    resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==}
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-string-parser': 7.22.5
+      '@babel/helper-validator-identifier': 7.22.20
+      to-fast-properties: 2.0.0
+    dev: true
+
+  /@esbuild/android-arm64@0.18.20:
+    resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/android-arm@0.18.20:
+    resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/android-x64@0.18.20:
+    resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/darwin-arm64@0.18.20:
+    resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/darwin-x64@0.18.20:
+    resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/freebsd-arm64@0.18.20:
+    resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [freebsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/freebsd-x64@0.18.20:
+    resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [freebsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-arm64@0.18.20:
+    resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-arm@0.18.20:
+    resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-ia32@0.18.20:
+    resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-loong64@0.18.20:
+    resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
+    engines: {node: '>=12'}
+    cpu: [loong64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-mips64el@0.18.20:
+    resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
+    engines: {node: '>=12'}
+    cpu: [mips64el]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-ppc64@0.18.20:
+    resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
+    engines: {node: '>=12'}
+    cpu: [ppc64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-riscv64@0.18.20:
+    resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
+    engines: {node: '>=12'}
+    cpu: [riscv64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-s390x@0.18.20:
+    resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
+    engines: {node: '>=12'}
+    cpu: [s390x]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-x64@0.18.20:
+    resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/netbsd-x64@0.18.20:
+    resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [netbsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/openbsd-x64@0.18.20:
+    resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [openbsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/sunos-x64@0.18.20:
+    resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [sunos]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/win32-arm64@0.18.20:
+    resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/win32-ia32@0.18.20:
+    resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/win32-x64@0.18.20:
+    resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@eslint-community/eslint-utils@4.4.0(eslint@8.45.0):
+    resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+    dependencies:
+      eslint: 8.45.0
+      eslint-visitor-keys: 3.4.3
+
+  /@eslint-community/regexpp@4.10.0:
+    resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
+    engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+  /@eslint/eslintrc@2.1.2:
+    resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dependencies:
+      ajv: 6.12.6
+      debug: 4.3.4
+      espree: 9.6.1
+      globals: 13.23.0
+      ignore: 5.2.4
+      import-fresh: 3.3.0
+      js-yaml: 4.1.0
+      minimatch: 3.1.2
+      strip-json-comments: 3.1.1
+    transitivePeerDependencies:
+      - supports-color
+
+  /@eslint/js@8.44.0:
+    resolution: {integrity: sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+  /@fortawesome/fontawesome-common-types@6.4.2:
+    resolution: {integrity: sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==}
+    engines: {node: '>=6'}
+    requiresBuild: true
+    dev: false
+
+  /@fortawesome/fontawesome-svg-core@6.4.2:
+    resolution: {integrity: sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==}
+    engines: {node: '>=6'}
+    requiresBuild: true
+    dependencies:
+      '@fortawesome/fontawesome-common-types': 6.4.2
+    dev: false
+
+  /@fortawesome/free-solid-svg-icons@6.4.2:
+    resolution: {integrity: sha512-sYwXurXUEQS32fZz9hVCUUv/xu49PEJEyUOsA51l6PU/qVgfbTb2glsTEaJngVVT8VqBATRIdh7XVgV1JF1LkA==}
+    engines: {node: '>=6'}
+    requiresBuild: true
+    dependencies:
+      '@fortawesome/fontawesome-common-types': 6.4.2
+    dev: false
+
+  /@fortawesome/react-fontawesome@0.2.0(@fortawesome/fontawesome-svg-core@6.4.2)(react@18.2.0):
+    resolution: {integrity: sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==}
+    peerDependencies:
+      '@fortawesome/fontawesome-svg-core': ~1 || ~6
+      react: '>=16.3'
+    dependencies:
+      '@fortawesome/fontawesome-svg-core': 6.4.2
+      prop-types: 15.8.1
+      react: 18.2.0
+    dev: false
+
+  /@humanwhocodes/config-array@0.11.13:
+    resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==}
+    engines: {node: '>=10.10.0'}
+    dependencies:
+      '@humanwhocodes/object-schema': 2.0.1
+      debug: 4.3.4
+      minimatch: 3.1.2
+    transitivePeerDependencies:
+      - supports-color
+
+  /@humanwhocodes/module-importer@1.0.1:
+    resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+    engines: {node: '>=12.22'}
+
+  /@humanwhocodes/object-schema@2.0.1:
+    resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==}
+
+  /@jridgewell/gen-mapping@0.3.3:
+    resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
+    engines: {node: '>=6.0.0'}
+    dependencies:
+      '@jridgewell/set-array': 1.1.2
+      '@jridgewell/sourcemap-codec': 1.4.15
+      '@jridgewell/trace-mapping': 0.3.20
+    dev: true
+
+  /@jridgewell/resolve-uri@3.1.1:
+    resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
+    engines: {node: '>=6.0.0'}
+    dev: true
+
+  /@jridgewell/set-array@1.1.2:
+    resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
+    engines: {node: '>=6.0.0'}
+    dev: true
+
+  /@jridgewell/sourcemap-codec@1.4.15:
+    resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+    dev: true
+
+  /@jridgewell/trace-mapping@0.3.20:
+    resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==}
+    dependencies:
+      '@jridgewell/resolve-uri': 3.1.1
+      '@jridgewell/sourcemap-codec': 1.4.15
+    dev: true
+
+  /@microsoft/api-extractor-model@7.28.2(@types/node@18.14.6):
+    resolution: {integrity: sha512-vkojrM2fo3q4n4oPh4uUZdjJ2DxQ2+RnDQL/xhTWSRUNPF6P4QyrvY357HBxbnltKcYu+nNNolVqc6TIGQ73Ig==}
+    dependencies:
+      '@microsoft/tsdoc': 0.14.2
+      '@microsoft/tsdoc-config': 0.16.2
+      '@rushstack/node-core-library': 3.61.0(@types/node@18.14.6)
+    transitivePeerDependencies:
+      - '@types/node'
+    dev: true
+
+  /@microsoft/api-extractor@7.38.0(@types/node@18.14.6):
+    resolution: {integrity: sha512-e1LhZYnfw+JEebuY2bzhw0imDCl1nwjSThTrQqBXl40hrVo6xm3j/1EpUr89QyzgjqmAwek2ZkIVZbrhaR+cqg==}
+    hasBin: true
+    dependencies:
+      '@microsoft/api-extractor-model': 7.28.2(@types/node@18.14.6)
+      '@microsoft/tsdoc': 0.14.2
+      '@microsoft/tsdoc-config': 0.16.2
+      '@rushstack/node-core-library': 3.61.0(@types/node@18.14.6)
+      '@rushstack/rig-package': 0.5.1
+      '@rushstack/ts-command-line': 4.16.1
+      colors: 1.2.5
+      lodash: 4.17.21
+      resolve: 1.22.8
+      semver: 7.5.4
+      source-map: 0.6.1
+      typescript: 5.0.4
+    transitivePeerDependencies:
+      - '@types/node'
+    dev: true
+
+  /@microsoft/tsdoc-config@0.16.2:
+    resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==}
+    dependencies:
+      '@microsoft/tsdoc': 0.14.2
+      ajv: 6.12.6
+      jju: 1.4.0
+      resolve: 1.19.0
+    dev: true
+
+  /@microsoft/tsdoc@0.14.2:
+    resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==}
+    dev: true
+
+  /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1:
+    resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==}
+    dependencies:
+      eslint-scope: 5.1.1
+    dev: true
+
+  /@nodelib/fs.scandir@2.1.5:
+    resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+    engines: {node: '>= 8'}
+    dependencies:
+      '@nodelib/fs.stat': 2.0.5
+      run-parallel: 1.2.0
+
+  /@nodelib/fs.stat@2.0.5:
+    resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+    engines: {node: '>= 8'}
+
+  /@nodelib/fs.walk@1.2.8:
+    resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+    engines: {node: '>= 8'}
+    dependencies:
+      '@nodelib/fs.scandir': 2.1.5
+      fastq: 1.15.0
+
+  /@popperjs/core@2.11.8:
+    resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
+    dev: false
+
+  /@react-aria/ssr@3.8.0(react@18.2.0):
+    resolution: {integrity: sha512-Y54xs483rglN5DxbwfCPHxnkvZ+gZ0LbSYmR72LyWPGft8hN/lrl1VRS1EW2SMjnkEWlj+Km2mwvA3kEHDUA0A==}
+    engines: {node: '>= 12'}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+    dependencies:
+      '@swc/helpers': 0.5.3
+      react: 18.2.0
+    dev: false
+
+  /@remix-run/router@1.10.0:
+    resolution: {integrity: sha512-Lm+fYpMfZoEucJ7cMxgt4dYt8jLfbpwRCzAjm9UgSLOkmlqo9gupxt6YX3DY0Fk155NT9l17d/ydi+964uS9Lw==}
+    engines: {node: '>=14.0.0'}
+    dev: false
+
+  /@restart/hooks@0.4.11(react@18.2.0):
+    resolution: {integrity: sha512-Ft/ncTULZN6ldGHiF/k5qt72O8JyRMOeg0tApvCni8LkoiEahO+z3TNxfXIVGy890YtWVDvJAl662dVJSJXvMw==}
+    peerDependencies:
+      react: '>=16.8.0'
+    dependencies:
+      dequal: 2.0.3
+      react: 18.2.0
+    dev: false
+
+  /@restart/ui@1.6.6(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-eC3puKuWE1SRYbojWHXnvCNHGgf3uzHCb6JOhnF4OXPibOIPEkR1sqDSkL643ydigxwh+ruCa1CmYHlzk7ikKA==}
+    peerDependencies:
+      react: '>=16.14.0'
+      react-dom: '>=16.14.0'
+    dependencies:
+      '@babel/runtime': 7.23.2
+      '@popperjs/core': 2.11.8
+      '@react-aria/ssr': 3.8.0(react@18.2.0)
+      '@restart/hooks': 0.4.11(react@18.2.0)
+      '@types/warning': 3.0.2
+      dequal: 2.0.3
+      dom-helpers: 5.2.1
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      uncontrollable: 8.0.4(react@18.2.0)
+      warning: 4.0.3
+    dev: false
+
+  /@rollup/pluginutils@5.0.5:
+    resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==}
+    engines: {node: '>=14.0.0'}
+    peerDependencies:
+      rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+    peerDependenciesMeta:
+      rollup:
+        optional: true
+    dependencies:
+      '@types/estree': 1.0.3
+      estree-walker: 2.0.2
+      picomatch: 2.3.1
+    dev: true
+
+  /@rushstack/eslint-patch@1.5.1:
+    resolution: {integrity: sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==}
+    dev: true
+
+  /@rushstack/node-core-library@3.61.0(@types/node@18.14.6):
+    resolution: {integrity: sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==}
+    peerDependencies:
+      '@types/node': '*'
+    peerDependenciesMeta:
+      '@types/node':
+        optional: true
+    dependencies:
+      '@types/node': 18.14.6
+      colors: 1.2.5
+      fs-extra: 7.0.1
+      import-lazy: 4.0.0
+      jju: 1.4.0
+      resolve: 1.22.8
+      semver: 7.5.4
+      z-schema: 5.0.5
+    dev: true
+
+  /@rushstack/rig-package@0.5.1:
+    resolution: {integrity: sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==}
+    dependencies:
+      resolve: 1.22.8
+      strip-json-comments: 3.1.1
+    dev: true
+
+  /@rushstack/ts-command-line@4.16.1:
+    resolution: {integrity: sha512-+OCsD553GYVLEmz12yiFjMOzuPeCiZ3f8wTiFHL30ZVXexTyPmgjwXEhg2K2P0a2lVf+8YBy7WtPoflB2Fp8/A==}
+    dependencies:
+      '@types/argparse': 1.0.38
+      argparse: 1.0.10
+      colors: 1.2.5
+      string-argv: 0.3.2
+    dev: true
+
+  /@swc/helpers@0.5.3:
+    resolution: {integrity: sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==}
+    dependencies:
+      tslib: 2.6.2
+    dev: false
+
+  /@tanstack/query-core@5.0.5:
+    resolution: {integrity: sha512-MThCETMkHDHTnFZHp71L+SqTtD5d6XHftFCVR1xRJdWM3qGrlQ2VCXaj0SKVcyJej2e1Opa2c7iknu1llxCDNQ==}
+    dev: false
+
+  /@tanstack/react-query@5.0.5(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-ZG0Q4HZ0iuI8mWiZ2/MdVYPHbrmAVhMn7+gLOkxJh6zLIgCL4luSZlohzN5Xt4MjxfxxWioO1nemwpudaTsmQg==}
+    peerDependencies:
+      react: ^18.0.0
+      react-dom: ^18.0.0
+      react-native: '*'
+    peerDependenciesMeta:
+      react-dom:
+        optional: true
+      react-native:
+        optional: true
+    dependencies:
+      '@tanstack/query-core': 5.0.5
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: false
+
+  /@ts-morph/common@0.18.1:
+    resolution: {integrity: sha512-RVE+zSRICWRsfrkAw5qCAK+4ZH9kwEFv5h0+/YeHTLieWP7F4wWq4JsKFuNWG+fYh/KF+8rAtgdj5zb2mm+DVA==}
+    dependencies:
+      fast-glob: 3.3.1
+      minimatch: 5.1.6
+      mkdirp: 1.0.4
+      path-browserify: 1.0.1
+    dev: true
+
+  /@types/argparse@1.0.38:
+    resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
+    dev: true
+
+  /@types/estree@1.0.3:
+    resolution: {integrity: sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==}
+    dev: true
+
+  /@types/json-schema@7.0.14:
+    resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==}
+    dev: true
+
+  /@types/json5@0.0.29:
+    resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+    dev: true
+
+  /@types/node@18.14.6:
+    resolution: {integrity: sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==}
+    dev: true
+
+  /@types/parse-json@4.0.1:
+    resolution: {integrity: sha512-3YmXzzPAdOTVljVMkTMBdBEvlOLg2cDQaDhnnhT3nT9uDbnJzjWhKlzb+desT12Y7tGqaN6d+AbozcKzyL36Ng==}
+    dev: true
+
+  /@types/prop-types@15.7.9:
+    resolution: {integrity: sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==}
+
+  /@types/react-dom@18.2.7:
+    resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==}
+    dependencies:
+      '@types/react': 18.2.15
+    dev: true
+
+  /@types/react-transition-group@4.4.8:
+    resolution: {integrity: sha512-QmQ22q+Pb+HQSn04NL3HtrqHwYMf4h3QKArOy5F8U5nEVMaihBs3SR10WiOM1iwPz5jIo8x/u11al+iEGZZrvg==}
+    dependencies:
+      '@types/react': 18.2.15
+    dev: false
+
+  /@types/react@18.2.15:
+    resolution: {integrity: sha512-oEjE7TQt1fFTFSbf8kkNuc798ahTUzn3Le67/PWjE8MAfYAD/qB7O8hSTcromLFqHCt9bcdOg5GXMokzTjJ5SA==}
+    dependencies:
+      '@types/prop-types': 15.7.9
+      '@types/scheduler': 0.16.5
+      csstype: 3.1.2
+
+  /@types/scheduler@0.16.5:
+    resolution: {integrity: sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==}
+
+  /@types/semver@7.5.4:
+    resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==}
+    dev: true
+
+  /@types/warning@3.0.2:
+    resolution: {integrity: sha512-S/2+OjBIcBl8Kur23YLe0hG1e7J5m2bHfB4UuMNoLZjIFhQWhTf1FeS+WFoXHUC6QsCEfk4pftj4J1KIKC1glA==}
+    dev: false
+
+  /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.45.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      '@typescript-eslint/parser': ^5.0.0
+      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@eslint-community/regexpp': 4.10.0
+      '@typescript-eslint/parser': 5.62.0(eslint@8.45.0)(typescript@5.2.2)
+      '@typescript-eslint/scope-manager': 5.62.0
+      '@typescript-eslint/type-utils': 5.62.0(eslint@8.45.0)(typescript@5.2.2)
+      '@typescript-eslint/utils': 5.62.0(eslint@8.45.0)(typescript@5.2.2)
+      debug: 4.3.4
+      eslint: 8.45.0
+      graphemer: 1.4.0
+      ignore: 5.2.4
+      natural-compare-lite: 1.4.0
+      semver: 7.5.4
+      tsutils: 3.21.0(typescript@5.2.2)
+      typescript: 5.2.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/eslint-plugin@6.0.0(@typescript-eslint/parser@6.0.0)(eslint@8.45.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-xuv6ghKGoiq856Bww/yVYnXGsKa588kY3M0XK7uUW/3fJNNULKRfZfSBkMTSpqGG/8ZCXCadfh8G/z/B4aqS/A==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    peerDependencies:
+      '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
+      eslint: ^7.0.0 || ^8.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@eslint-community/regexpp': 4.10.0
+      '@typescript-eslint/parser': 6.0.0(eslint@8.45.0)(typescript@5.2.2)
+      '@typescript-eslint/scope-manager': 6.0.0
+      '@typescript-eslint/type-utils': 6.0.0(eslint@8.45.0)(typescript@5.2.2)
+      '@typescript-eslint/utils': 6.0.0(eslint@8.45.0)(typescript@5.2.2)
+      '@typescript-eslint/visitor-keys': 6.0.0
+      debug: 4.3.4
+      eslint: 8.45.0
+      grapheme-splitter: 1.0.4
+      graphemer: 1.4.0
+      ignore: 5.2.4
+      natural-compare: 1.4.0
+      natural-compare-lite: 1.4.0
+      semver: 7.5.4
+      ts-api-utils: 1.0.3(typescript@5.2.2)
+      typescript: 5.2.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/experimental-utils@5.62.0(eslint@8.45.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+    dependencies:
+      '@typescript-eslint/utils': 5.62.0(eslint@8.45.0)(typescript@5.2.2)
+      eslint: 8.45.0
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+    dev: true
+
+  /@typescript-eslint/parser@5.62.0(eslint@8.45.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/scope-manager': 5.62.0
+      '@typescript-eslint/types': 5.62.0
+      '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2)
+      debug: 4.3.4
+      eslint: 8.45.0
+      typescript: 5.2.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/parser@6.0.0(eslint@8.45.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-TNaufYSPrr1U8n+3xN+Yp9g31vQDJqhXzzPSHfQDLcaO4tU+mCfODPxCwf4H530zo7aUBE3QIdxCXamEnG04Tg==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    peerDependencies:
+      eslint: ^7.0.0 || ^8.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/scope-manager': 6.0.0
+      '@typescript-eslint/types': 6.0.0
+      '@typescript-eslint/typescript-estree': 6.0.0(typescript@5.2.2)
+      '@typescript-eslint/visitor-keys': 6.0.0
+      debug: 4.3.4
+      eslint: 8.45.0
+      typescript: 5.2.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/scope-manager@5.62.0:
+    resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dependencies:
+      '@typescript-eslint/types': 5.62.0
+      '@typescript-eslint/visitor-keys': 5.62.0
+    dev: true
+
+  /@typescript-eslint/scope-manager@6.0.0:
+    resolution: {integrity: sha512-o4q0KHlgCZTqjuaZ25nw5W57NeykZT9LiMEG4do/ovwvOcPnDO1BI5BQdCsUkjxFyrCL0cSzLjvIMfR9uo7cWg==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    dependencies:
+      '@typescript-eslint/types': 6.0.0
+      '@typescript-eslint/visitor-keys': 6.0.0
+    dev: true
+
+  /@typescript-eslint/type-utils@5.62.0(eslint@8.45.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      eslint: '*'
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2)
+      '@typescript-eslint/utils': 5.62.0(eslint@8.45.0)(typescript@5.2.2)
+      debug: 4.3.4
+      eslint: 8.45.0
+      tsutils: 3.21.0(typescript@5.2.2)
+      typescript: 5.2.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/type-utils@6.0.0(eslint@8.45.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-ah6LJvLgkoZ/pyJ9GAdFkzeuMZ8goV6BH7eC9FPmojrnX9yNCIsfjB+zYcnex28YO3RFvBkV6rMV6WpIqkPvoQ==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    peerDependencies:
+      eslint: ^7.0.0 || ^8.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/typescript-estree': 6.0.0(typescript@5.2.2)
+      '@typescript-eslint/utils': 6.0.0(eslint@8.45.0)(typescript@5.2.2)
+      debug: 4.3.4
+      eslint: 8.45.0
+      ts-api-utils: 1.0.3(typescript@5.2.2)
+      typescript: 5.2.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/types@5.62.0:
+    resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dev: true
+
+  /@typescript-eslint/types@6.0.0:
+    resolution: {integrity: sha512-Zk9KDggyZM6tj0AJWYYKgF0yQyrcnievdhG0g5FqyU3Y2DRxJn4yWY21sJC0QKBckbsdKKjYDV2yVrrEvuTgxg==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    dev: true
+
+  /@typescript-eslint/typescript-estree@5.62.0(typescript@5.2.2):
+    resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/types': 5.62.0
+      '@typescript-eslint/visitor-keys': 5.62.0
+      debug: 4.3.4
+      globby: 11.1.0
+      is-glob: 4.0.3
+      semver: 7.5.4
+      tsutils: 3.21.0(typescript@5.2.2)
+      typescript: 5.2.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/typescript-estree@6.0.0(typescript@5.2.2):
+    resolution: {integrity: sha512-2zq4O7P6YCQADfmJ5OTDQTP3ktajnXIRrYAtHM9ofto/CJZV3QfJ89GEaM2BNGeSr1KgmBuLhEkz5FBkS2RQhQ==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    peerDependencies:
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@typescript-eslint/types': 6.0.0
+      '@typescript-eslint/visitor-keys': 6.0.0
+      debug: 4.3.4
+      globby: 11.1.0
+      is-glob: 4.0.3
+      semver: 7.5.4
+      ts-api-utils: 1.0.3(typescript@5.2.2)
+      typescript: 5.2.2
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /@typescript-eslint/utils@5.62.0(eslint@8.45.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+    dependencies:
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0)
+      '@types/json-schema': 7.0.14
+      '@types/semver': 7.5.4
+      '@typescript-eslint/scope-manager': 5.62.0
+      '@typescript-eslint/types': 5.62.0
+      '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2)
+      eslint: 8.45.0
+      eslint-scope: 5.1.1
+      semver: 7.5.4
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+    dev: true
+
+  /@typescript-eslint/utils@6.0.0(eslint@8.45.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-SOr6l4NB6HE4H/ktz0JVVWNXqCJTOo/mHnvIte1ZhBQ0Cvd04x5uKZa3zT6tiodL06zf5xxdK8COiDvPnQ27JQ==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    peerDependencies:
+      eslint: ^7.0.0 || ^8.0.0
+    dependencies:
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0)
+      '@types/json-schema': 7.0.14
+      '@types/semver': 7.5.4
+      '@typescript-eslint/scope-manager': 6.0.0
+      '@typescript-eslint/types': 6.0.0
+      '@typescript-eslint/typescript-estree': 6.0.0(typescript@5.2.2)
+      eslint: 8.45.0
+      eslint-scope: 5.1.1
+      semver: 7.5.4
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+    dev: true
+
+  /@typescript-eslint/visitor-keys@5.62.0:
+    resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dependencies:
+      '@typescript-eslint/types': 5.62.0
+      eslint-visitor-keys: 3.4.3
+    dev: true
+
+  /@typescript-eslint/visitor-keys@6.0.0:
+    resolution: {integrity: sha512-cvJ63l8c0yXdeT5POHpL0Q1cZoRcmRKFCtSjNGJxPkcP571EfZMcNbzWAc7oK3D1dRzm/V5EwtkANTZxqvuuUA==}
+    engines: {node: ^16.0.0 || >=18.0.0}
+    dependencies:
+      '@typescript-eslint/types': 6.0.0
+      eslint-visitor-keys: 3.4.3
+    dev: true
+
+  /@vitejs/plugin-react@4.0.3(vite@4.4.5):
+    resolution: {integrity: sha512-pwXDog5nwwvSIzwrvYYmA2Ljcd/ZNlcsSG2Q9CNDBwnsd55UGAyr2doXtB5j+2uymRCnCfExlznzzSFbBRcoCg==}
+    engines: {node: ^14.18.0 || >=16.0.0}
+    peerDependencies:
+      vite: ^4.2.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.23.2)
+      react-refresh: 0.14.0
+      vite: 4.4.5(@types/node@18.14.6)(sass@1.69.5)
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /acorn-jsx@5.3.2(acorn@8.11.2):
+    resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+    peerDependencies:
+      acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+    dependencies:
+      acorn: 8.11.2
+
+  /acorn@8.11.2:
+    resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==}
+    engines: {node: '>=0.4.0'}
+    hasBin: true
+
+  /ajv@6.12.6:
+    resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+    dependencies:
+      fast-deep-equal: 3.1.3
+      fast-json-stable-stringify: 2.1.0
+      json-schema-traverse: 0.4.1
+      uri-js: 4.4.1
+
+  /ansi-regex@5.0.1:
+    resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+    engines: {node: '>=8'}
+
+  /ansi-styles@3.2.1:
+    resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+    engines: {node: '>=4'}
+    dependencies:
+      color-convert: 1.9.3
+    dev: true
+
+  /ansi-styles@4.3.0:
+    resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+    engines: {node: '>=8'}
+    dependencies:
+      color-convert: 2.0.1
+
+  /anymatch@3.1.3:
+    resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+    engines: {node: '>= 8'}
+    dependencies:
+      normalize-path: 3.0.0
+      picomatch: 2.3.1
+    dev: true
+
+  /argparse@1.0.10:
+    resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+    dependencies:
+      sprintf-js: 1.0.3
+    dev: true
+
+  /argparse@2.0.1:
+    resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+  /aria-query@5.3.0:
+    resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
+    dependencies:
+      dequal: 2.0.3
+    dev: true
+
+  /array-buffer-byte-length@1.0.0:
+    resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
+    dependencies:
+      call-bind: 1.0.5
+      is-array-buffer: 3.0.2
+    dev: true
+
+  /array-includes@3.1.7:
+    resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      get-intrinsic: 1.2.2
+      is-string: 1.0.7
+    dev: true
+
+  /array-union@2.1.0:
+    resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /array.prototype.findlastindex@1.2.3:
+    resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      es-shim-unscopables: 1.0.2
+      get-intrinsic: 1.2.2
+    dev: true
+
+  /array.prototype.flat@1.3.2:
+    resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      es-shim-unscopables: 1.0.2
+    dev: true
+
+  /array.prototype.flatmap@1.3.2:
+    resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      es-shim-unscopables: 1.0.2
+    dev: true
+
+  /array.prototype.tosorted@1.1.2:
+    resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      es-shim-unscopables: 1.0.2
+      get-intrinsic: 1.2.2
+    dev: true
+
+  /arraybuffer.prototype.slice@1.0.2:
+    resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      array-buffer-byte-length: 1.0.0
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      get-intrinsic: 1.2.2
+      is-array-buffer: 3.0.2
+      is-shared-array-buffer: 1.0.2
+    dev: true
+
+  /ast-types-flow@0.0.7:
+    resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==}
+    dev: true
+
+  /asynciterator.prototype@1.0.0:
+    resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==}
+    dependencies:
+      has-symbols: 1.0.3
+    dev: true
+
+  /autolinker@4.0.0:
+    resolution: {integrity: sha512-fl5Kh6BmEEZx+IWBfEirnRUU5+cOiV0OK7PEt0RBKvJMJ8GaRseIOeDU3FKf4j3CE5HVefcjHmhYPOcaVt0bZw==}
+    dependencies:
+      tslib: 2.6.2
+    dev: false
+
+  /available-typed-arrays@1.0.5:
+    resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
+    engines: {node: '>= 0.4'}
+    dev: true
+
+  /axe-core@4.8.2:
+    resolution: {integrity: sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /axobject-query@3.2.1:
+    resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==}
+    dependencies:
+      dequal: 2.0.3
+    dev: true
+
+  /babel-plugin-macros@3.1.0:
+    resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
+    engines: {node: '>=10', npm: '>=6'}
+    dependencies:
+      '@babel/runtime': 7.23.2
+      cosmiconfig: 7.1.0
+      resolve: 1.22.8
+    dev: true
+
+  /babel-plugin-polyfill-corejs2@0.4.6(@babel/core@7.23.2):
+    resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==}
+    peerDependencies:
+      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+    dependencies:
+      '@babel/compat-data': 7.23.2
+      '@babel/core': 7.23.2
+      '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2)
+      semver: 6.3.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /babel-plugin-polyfill-corejs3@0.8.6(@babel/core@7.23.2):
+    resolution: {integrity: sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==}
+    peerDependencies:
+      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2)
+      core-js-compat: 3.33.1
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /babel-plugin-polyfill-regenerator@0.5.3(@babel/core@7.23.2):
+    resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==}
+    peerDependencies:
+      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/helper-define-polyfill-provider': 0.4.3(@babel/core@7.23.2)
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /babel-plugin-transform-react-remove-prop-types@0.4.24:
+    resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==}
+    dev: true
+
+  /babel-preset-react-app@10.0.1:
+    resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==}
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.2)
+      '@babel/plugin-proposal-decorators': 7.23.2(@babel/core@7.23.2)
+      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.2)
+      '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.2)
+      '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.2)
+      '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.23.2)
+      '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.23.2)
+      '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-runtime': 7.23.2(@babel/core@7.23.2)
+      '@babel/preset-env': 7.23.2(@babel/core@7.23.2)
+      '@babel/preset-react': 7.22.15(@babel/core@7.23.2)
+      '@babel/preset-typescript': 7.23.2(@babel/core@7.23.2)
+      '@babel/runtime': 7.23.2
+      babel-plugin-macros: 3.1.0
+      babel-plugin-transform-react-remove-prop-types: 0.4.24
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /balanced-match@1.0.2:
+    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+  /binary-extensions@2.2.0:
+    resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /bootstrap@5.3.2(@popperjs/core@2.11.8):
+    resolution: {integrity: sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==}
+    peerDependencies:
+      '@popperjs/core': ^2.11.8
+    dependencies:
+      '@popperjs/core': 2.11.8
+    dev: false
+
+  /bootswatch@5.3.2:
+    resolution: {integrity: sha512-r05xOSLSx7MJvjpk/uoU8wPYgkPHWLV+uenLaRsS7yBsqSUcWYPjeUkz+tmrRv6s1eFxkF08NvQfBSSPCTyYaA==}
+    dev: false
+
+  /brace-expansion@1.1.11:
+    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+    dependencies:
+      balanced-match: 1.0.2
+      concat-map: 0.0.1
+
+  /brace-expansion@2.0.1:
+    resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+    dependencies:
+      balanced-match: 1.0.2
+    dev: true
+
+  /braces@3.0.2:
+    resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+    engines: {node: '>=8'}
+    dependencies:
+      fill-range: 7.0.1
+    dev: true
+
+  /browserslist@4.22.1:
+    resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==}
+    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+    hasBin: true
+    dependencies:
+      caniuse-lite: 1.0.30001558
+      electron-to-chromium: 1.4.569
+      node-releases: 2.0.13
+      update-browserslist-db: 1.0.13(browserslist@4.22.1)
+    dev: true
+
+  /call-bind@1.0.5:
+    resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==}
+    dependencies:
+      function-bind: 1.1.2
+      get-intrinsic: 1.2.2
+      set-function-length: 1.1.1
+    dev: true
+
+  /callsites@3.1.0:
+    resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+    engines: {node: '>=6'}
+
+  /caniuse-lite@1.0.30001558:
+    resolution: {integrity: sha512-/Et7DwLqpjS47JPEcz6VnxU9PwcIdVi0ciLXRWBQdj1XFye68pSQYpV0QtPTfUKWuOaEig+/Vez2l74eDc1tPQ==}
+    dev: true
+
+  /chalk@2.4.2:
+    resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+    engines: {node: '>=4'}
+    dependencies:
+      ansi-styles: 3.2.1
+      escape-string-regexp: 1.0.5
+      supports-color: 5.5.0
+    dev: true
+
+  /chalk@4.1.2:
+    resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+    engines: {node: '>=10'}
+    dependencies:
+      ansi-styles: 4.3.0
+      supports-color: 7.2.0
+
+  /chokidar@3.5.3:
+    resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+    engines: {node: '>= 8.10.0'}
+    dependencies:
+      anymatch: 3.1.3
+      braces: 3.0.2
+      glob-parent: 5.1.2
+      is-binary-path: 2.1.0
+      is-glob: 4.0.3
+      normalize-path: 3.0.0
+      readdirp: 3.6.0
+    optionalDependencies:
+      fsevents: 2.3.3
+    dev: true
+
+  /classnames@2.3.2:
+    resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==}
+    dev: false
+
+  /code-block-writer@11.0.3:
+    resolution: {integrity: sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==}
+    dev: true
+
+  /color-convert@1.9.3:
+    resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+    dependencies:
+      color-name: 1.1.3
+    dev: true
+
+  /color-convert@2.0.1:
+    resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+    engines: {node: '>=7.0.0'}
+    dependencies:
+      color-name: 1.1.4
+
+  /color-name@1.1.3:
+    resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+    dev: true
+
+  /color-name@1.1.4:
+    resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+  /colors@1.2.5:
+    resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==}
+    engines: {node: '>=0.1.90'}
+    dev: true
+
+  /commander@9.5.0:
+    resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
+    engines: {node: ^12.20.0 || >=14}
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /concat-map@0.0.1:
+    resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+  /confusing-browser-globals@1.0.11:
+    resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==}
+    dev: true
+
+  /convert-source-map@2.0.0:
+    resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+    dev: true
+
+  /core-js-compat@3.33.1:
+    resolution: {integrity: sha512-6pYKNOgD/j/bkC5xS5IIg6bncid3rfrI42oBH1SQJbsmYPKF7rhzcFzYCcxYMmNQQ0rCEB8WqpW7QHndOggaeQ==}
+    dependencies:
+      browserslist: 4.22.1
+    dev: true
+
+  /cosmiconfig@7.1.0:
+    resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
+    engines: {node: '>=10'}
+    dependencies:
+      '@types/parse-json': 4.0.1
+      import-fresh: 3.3.0
+      parse-json: 5.2.0
+      path-type: 4.0.0
+      yaml: 1.10.2
+    dev: true
+
+  /cross-spawn@7.0.3:
+    resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+    engines: {node: '>= 8'}
+    dependencies:
+      path-key: 3.1.1
+      shebang-command: 2.0.0
+      which: 2.0.2
+
+  /csstype@3.1.2:
+    resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
+
+  /damerau-levenshtein@1.0.8:
+    resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
+    dev: true
+
+  /date-fns@2.30.0:
+    resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
+    engines: {node: '>=0.11'}
+    dependencies:
+      '@babel/runtime': 7.23.2
+    dev: false
+
+  /debug@3.2.7:
+    resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
+    peerDependencies:
+      supports-color: '*'
+    peerDependenciesMeta:
+      supports-color:
+        optional: true
+    dependencies:
+      ms: 2.1.3
+    dev: true
+
+  /debug@4.3.4:
+    resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+    engines: {node: '>=6.0'}
+    peerDependencies:
+      supports-color: '*'
+    peerDependenciesMeta:
+      supports-color:
+        optional: true
+    dependencies:
+      ms: 2.1.2
+
+  /deep-is@0.1.4:
+    resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+  /define-data-property@1.1.1:
+    resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      get-intrinsic: 1.2.2
+      gopd: 1.0.1
+      has-property-descriptors: 1.0.1
+    dev: true
+
+  /define-properties@1.2.1:
+    resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      define-data-property: 1.1.1
+      has-property-descriptors: 1.0.1
+      object-keys: 1.1.1
+    dev: true
+
+  /dequal@2.0.3:
+    resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+    engines: {node: '>=6'}
+
+  /dir-glob@3.0.1:
+    resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+    engines: {node: '>=8'}
+    dependencies:
+      path-type: 4.0.0
+    dev: true
+
+  /doctrine@2.1.0:
+    resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
+    engines: {node: '>=0.10.0'}
+    dependencies:
+      esutils: 2.0.3
+    dev: true
+
+  /doctrine@3.0.0:
+    resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+    engines: {node: '>=6.0.0'}
+    dependencies:
+      esutils: 2.0.3
+
+  /dom-helpers@5.2.1:
+    resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
+    dependencies:
+      '@babel/runtime': 7.23.2
+      csstype: 3.1.2
+    dev: false
+
+  /electron-to-chromium@1.4.569:
+    resolution: {integrity: sha512-LsrJjZ0IbVy12ApW3gpYpcmHS3iRxH4bkKOW98y1/D+3cvDUWGcbzbsFinfUS8knpcZk/PG/2p/RnkMCYN7PVg==}
+    dev: true
+
+  /emoji-regex@9.2.2:
+    resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+    dev: true
+
+  /error-ex@1.3.2:
+    resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+    dependencies:
+      is-arrayish: 0.2.1
+    dev: true
+
+  /es-abstract@1.22.3:
+    resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      array-buffer-byte-length: 1.0.0
+      arraybuffer.prototype.slice: 1.0.2
+      available-typed-arrays: 1.0.5
+      call-bind: 1.0.5
+      es-set-tostringtag: 2.0.2
+      es-to-primitive: 1.2.1
+      function.prototype.name: 1.1.6
+      get-intrinsic: 1.2.2
+      get-symbol-description: 1.0.0
+      globalthis: 1.0.3
+      gopd: 1.0.1
+      has-property-descriptors: 1.0.1
+      has-proto: 1.0.1
+      has-symbols: 1.0.3
+      hasown: 2.0.0
+      internal-slot: 1.0.6
+      is-array-buffer: 3.0.2
+      is-callable: 1.2.7
+      is-negative-zero: 2.0.2
+      is-regex: 1.1.4
+      is-shared-array-buffer: 1.0.2
+      is-string: 1.0.7
+      is-typed-array: 1.1.12
+      is-weakref: 1.0.2
+      object-inspect: 1.13.1
+      object-keys: 1.1.1
+      object.assign: 4.1.4
+      regexp.prototype.flags: 1.5.1
+      safe-array-concat: 1.0.1
+      safe-regex-test: 1.0.0
+      string.prototype.trim: 1.2.8
+      string.prototype.trimend: 1.0.7
+      string.prototype.trimstart: 1.0.7
+      typed-array-buffer: 1.0.0
+      typed-array-byte-length: 1.0.0
+      typed-array-byte-offset: 1.0.0
+      typed-array-length: 1.0.4
+      unbox-primitive: 1.0.2
+      which-typed-array: 1.1.13
+    dev: true
+
+  /es-iterator-helpers@1.0.15:
+    resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==}
+    dependencies:
+      asynciterator.prototype: 1.0.0
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      es-set-tostringtag: 2.0.2
+      function-bind: 1.1.2
+      get-intrinsic: 1.2.2
+      globalthis: 1.0.3
+      has-property-descriptors: 1.0.1
+      has-proto: 1.0.1
+      has-symbols: 1.0.3
+      internal-slot: 1.0.6
+      iterator.prototype: 1.1.2
+      safe-array-concat: 1.0.1
+    dev: true
+
+  /es-set-tostringtag@2.0.2:
+    resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      get-intrinsic: 1.2.2
+      has-tostringtag: 1.0.0
+      hasown: 2.0.0
+    dev: true
+
+  /es-shim-unscopables@1.0.2:
+    resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==}
+    dependencies:
+      hasown: 2.0.0
+    dev: true
+
+  /es-to-primitive@1.2.1:
+    resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      is-callable: 1.2.7
+      is-date-object: 1.0.5
+      is-symbol: 1.0.4
+    dev: true
+
+  /esbuild@0.18.20:
+    resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
+    engines: {node: '>=12'}
+    hasBin: true
+    requiresBuild: true
+    optionalDependencies:
+      '@esbuild/android-arm': 0.18.20
+      '@esbuild/android-arm64': 0.18.20
+      '@esbuild/android-x64': 0.18.20
+      '@esbuild/darwin-arm64': 0.18.20
+      '@esbuild/darwin-x64': 0.18.20
+      '@esbuild/freebsd-arm64': 0.18.20
+      '@esbuild/freebsd-x64': 0.18.20
+      '@esbuild/linux-arm': 0.18.20
+      '@esbuild/linux-arm64': 0.18.20
+      '@esbuild/linux-ia32': 0.18.20
+      '@esbuild/linux-loong64': 0.18.20
+      '@esbuild/linux-mips64el': 0.18.20
+      '@esbuild/linux-ppc64': 0.18.20
+      '@esbuild/linux-riscv64': 0.18.20
+      '@esbuild/linux-s390x': 0.18.20
+      '@esbuild/linux-x64': 0.18.20
+      '@esbuild/netbsd-x64': 0.18.20
+      '@esbuild/openbsd-x64': 0.18.20
+      '@esbuild/sunos-x64': 0.18.20
+      '@esbuild/win32-arm64': 0.18.20
+      '@esbuild/win32-ia32': 0.18.20
+      '@esbuild/win32-x64': 0.18.20
+    dev: true
+
+  /escalade@3.1.1:
+    resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
+    engines: {node: '>=6'}
+    dev: true
+
+  /escape-string-regexp@1.0.5:
+    resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+    engines: {node: '>=0.8.0'}
+    dev: true
+
+  /escape-string-regexp@4.0.0:
+    resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+    engines: {node: '>=10'}
+
+  /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.15)(eslint@8.45.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==}
+    engines: {node: '>=14.0.0'}
+    peerDependencies:
+      eslint: ^8.0.0
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      '@babel/core': 7.23.2
+      '@babel/eslint-parser': 7.22.15(@babel/core@7.23.2)(eslint@8.45.0)
+      '@rushstack/eslint-patch': 1.5.1
+      '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.45.0)(typescript@5.2.2)
+      '@typescript-eslint/parser': 5.62.0(eslint@8.45.0)(typescript@5.2.2)
+      babel-preset-react-app: 10.0.1
+      confusing-browser-globals: 1.0.11
+      eslint: 8.45.0
+      eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.15)(eslint@8.45.0)
+      eslint-plugin-import: 2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.45.0)
+      eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.45.0)(typescript@5.2.2)
+      eslint-plugin-jsx-a11y: 6.7.1(eslint@8.45.0)
+      eslint-plugin-react: 7.33.2(eslint@8.45.0)
+      eslint-plugin-react-hooks: 4.6.0(eslint@8.45.0)
+      eslint-plugin-testing-library: 5.11.1(eslint@8.45.0)(typescript@5.2.2)
+      typescript: 5.2.2
+    transitivePeerDependencies:
+      - '@babel/plugin-syntax-flow'
+      - '@babel/plugin-transform-react-jsx'
+      - eslint-import-resolver-typescript
+      - eslint-import-resolver-webpack
+      - jest
+      - supports-color
+    dev: true
+
+  /eslint-import-resolver-node@0.3.9:
+    resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
+    dependencies:
+      debug: 3.2.7
+      is-core-module: 2.13.1
+      resolve: 1.22.8
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.45.0):
+    resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
+    engines: {node: '>=4'}
+    peerDependencies:
+      '@typescript-eslint/parser': '*'
+      eslint: '*'
+      eslint-import-resolver-node: '*'
+      eslint-import-resolver-typescript: '*'
+      eslint-import-resolver-webpack: '*'
+    peerDependenciesMeta:
+      '@typescript-eslint/parser':
+        optional: true
+      eslint:
+        optional: true
+      eslint-import-resolver-node:
+        optional: true
+      eslint-import-resolver-typescript:
+        optional: true
+      eslint-import-resolver-webpack:
+        optional: true
+    dependencies:
+      '@typescript-eslint/parser': 5.62.0(eslint@8.45.0)(typescript@5.2.2)
+      debug: 3.2.7
+      eslint: 8.45.0
+      eslint-import-resolver-node: 0.3.9
+    transitivePeerDependencies:
+      - supports-color
+    dev: true
+
+  /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.15)(eslint@8.45.0):
+    resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==}
+    engines: {node: '>=12.0.0'}
+    peerDependencies:
+      '@babel/plugin-syntax-flow': ^7.14.5
+      '@babel/plugin-transform-react-jsx': ^7.14.9
+      eslint: ^8.1.0
+    dependencies:
+      '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.23.2)
+      '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.23.2)
+      eslint: 8.45.0
+      lodash: 4.17.21
+      string-natural-compare: 3.0.1
+    dev: true
+
+  /eslint-plugin-import@2.29.0(@typescript-eslint/parser@5.62.0)(eslint@8.45.0):
+    resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==}
+    engines: {node: '>=4'}
+    peerDependencies:
+      '@typescript-eslint/parser': '*'
+      eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
+    peerDependenciesMeta:
+      '@typescript-eslint/parser':
+        optional: true
+    dependencies:
+      '@typescript-eslint/parser': 5.62.0(eslint@8.45.0)(typescript@5.2.2)
+      array-includes: 3.1.7
+      array.prototype.findlastindex: 1.2.3
+      array.prototype.flat: 1.3.2
+      array.prototype.flatmap: 1.3.2
+      debug: 3.2.7
+      doctrine: 2.1.0
+      eslint: 8.45.0
+      eslint-import-resolver-node: 0.3.9
+      eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.45.0)
+      hasown: 2.0.0
+      is-core-module: 2.13.1
+      is-glob: 4.0.3
+      minimatch: 3.1.2
+      object.fromentries: 2.0.7
+      object.groupby: 1.0.1
+      object.values: 1.1.7
+      semver: 6.3.1
+      tsconfig-paths: 3.14.2
+    transitivePeerDependencies:
+      - eslint-import-resolver-typescript
+      - eslint-import-resolver-webpack
+      - supports-color
+    dev: true
+
+  /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.45.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==}
+    engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+    peerDependencies:
+      '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0
+      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+      jest: '*'
+    peerDependenciesMeta:
+      '@typescript-eslint/eslint-plugin':
+        optional: true
+      jest:
+        optional: true
+    dependencies:
+      '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.45.0)(typescript@5.2.2)
+      '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.45.0)(typescript@5.2.2)
+      eslint: 8.45.0
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+    dev: true
+
+  /eslint-plugin-jsx-a11y@6.7.1(eslint@8.45.0):
+    resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==}
+    engines: {node: '>=4.0'}
+    peerDependencies:
+      eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+    dependencies:
+      '@babel/runtime': 7.23.2
+      aria-query: 5.3.0
+      array-includes: 3.1.7
+      array.prototype.flatmap: 1.3.2
+      ast-types-flow: 0.0.7
+      axe-core: 4.8.2
+      axobject-query: 3.2.1
+      damerau-levenshtein: 1.0.8
+      emoji-regex: 9.2.2
+      eslint: 8.45.0
+      has: 1.0.4
+      jsx-ast-utils: 3.3.5
+      language-tags: 1.0.5
+      minimatch: 3.1.2
+      object.entries: 1.1.7
+      object.fromentries: 2.0.7
+      semver: 6.3.1
+    dev: true
+
+  /eslint-plugin-react-hooks@4.6.0(eslint@8.45.0):
+    resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
+    engines: {node: '>=10'}
+    peerDependencies:
+      eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
+    dependencies:
+      eslint: 8.45.0
+    dev: true
+
+  /eslint-plugin-react-refresh@0.4.3(eslint@8.45.0):
+    resolution: {integrity: sha512-Hh0wv8bUNY877+sI0BlCUlsS0TYYQqvzEwJsJJPM2WF4RnTStSnSR3zdJYa2nPOJgg3UghXi54lVyMSmpCalzA==}
+    peerDependencies:
+      eslint: '>=7'
+    dependencies:
+      eslint: 8.45.0
+    dev: true
+
+  /eslint-plugin-react@7.33.2(eslint@8.45.0):
+    resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==}
+    engines: {node: '>=4'}
+    peerDependencies:
+      eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+    dependencies:
+      array-includes: 3.1.7
+      array.prototype.flatmap: 1.3.2
+      array.prototype.tosorted: 1.1.2
+      doctrine: 2.1.0
+      es-iterator-helpers: 1.0.15
+      eslint: 8.45.0
+      estraverse: 5.3.0
+      jsx-ast-utils: 3.3.5
+      minimatch: 3.1.2
+      object.entries: 1.1.7
+      object.fromentries: 2.0.7
+      object.hasown: 1.1.3
+      object.values: 1.1.7
+      prop-types: 15.8.1
+      resolve: 2.0.0-next.5
+      semver: 6.3.1
+      string.prototype.matchall: 4.0.10
+    dev: true
+
+  /eslint-plugin-testing-library@5.11.1(eslint@8.45.0)(typescript@5.2.2):
+    resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'}
+    peerDependencies:
+      eslint: ^7.5.0 || ^8.0.0
+    dependencies:
+      '@typescript-eslint/utils': 5.62.0(eslint@8.45.0)(typescript@5.2.2)
+      eslint: 8.45.0
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+    dev: true
+
+  /eslint-scope@5.1.1:
+    resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+    engines: {node: '>=8.0.0'}
+    dependencies:
+      esrecurse: 4.3.0
+      estraverse: 4.3.0
+    dev: true
+
+  /eslint-scope@7.2.2:
+    resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dependencies:
+      esrecurse: 4.3.0
+      estraverse: 5.3.0
+
+  /eslint-visitor-keys@2.1.0:
+    resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
+    engines: {node: '>=10'}
+    dev: true
+
+  /eslint-visitor-keys@3.4.3:
+    resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+  /eslint@8.45.0:
+    resolution: {integrity: sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    hasBin: true
+    dependencies:
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0)
+      '@eslint-community/regexpp': 4.10.0
+      '@eslint/eslintrc': 2.1.2
+      '@eslint/js': 8.44.0
+      '@humanwhocodes/config-array': 0.11.13
+      '@humanwhocodes/module-importer': 1.0.1
+      '@nodelib/fs.walk': 1.2.8
+      ajv: 6.12.6
+      chalk: 4.1.2
+      cross-spawn: 7.0.3
+      debug: 4.3.4
+      doctrine: 3.0.0
+      escape-string-regexp: 4.0.0
+      eslint-scope: 7.2.2
+      eslint-visitor-keys: 3.4.3
+      espree: 9.6.1
+      esquery: 1.5.0
+      esutils: 2.0.3
+      fast-deep-equal: 3.1.3
+      file-entry-cache: 6.0.1
+      find-up: 5.0.0
+      glob-parent: 6.0.2
+      globals: 13.23.0
+      graphemer: 1.4.0
+      ignore: 5.2.4
+      imurmurhash: 0.1.4
+      is-glob: 4.0.3
+      is-path-inside: 3.0.3
+      js-yaml: 4.1.0
+      json-stable-stringify-without-jsonify: 1.0.1
+      levn: 0.4.1
+      lodash.merge: 4.6.2
+      minimatch: 3.1.2
+      natural-compare: 1.4.0
+      optionator: 0.9.3
+      strip-ansi: 6.0.1
+      text-table: 0.2.0
+    transitivePeerDependencies:
+      - supports-color
+
+  /espree@9.6.1:
+    resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    dependencies:
+      acorn: 8.11.2
+      acorn-jsx: 5.3.2(acorn@8.11.2)
+      eslint-visitor-keys: 3.4.3
+
+  /esquery@1.5.0:
+    resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
+    engines: {node: '>=0.10'}
+    dependencies:
+      estraverse: 5.3.0
+
+  /esrecurse@4.3.0:
+    resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+    engines: {node: '>=4.0'}
+    dependencies:
+      estraverse: 5.3.0
+
+  /estraverse@4.3.0:
+    resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+    engines: {node: '>=4.0'}
+    dev: true
+
+  /estraverse@5.3.0:
+    resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+    engines: {node: '>=4.0'}
+
+  /estree-walker@2.0.2:
+    resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+    dev: true
+
+  /esutils@2.0.3:
+    resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+    engines: {node: '>=0.10.0'}
+
+  /fast-deep-equal@3.1.3:
+    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+  /fast-glob@3.3.1:
+    resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
+    engines: {node: '>=8.6.0'}
+    dependencies:
+      '@nodelib/fs.stat': 2.0.5
+      '@nodelib/fs.walk': 1.2.8
+      glob-parent: 5.1.2
+      merge2: 1.4.1
+      micromatch: 4.0.5
+    dev: true
+
+  /fast-json-stable-stringify@2.1.0:
+    resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+  /fast-levenshtein@2.0.6:
+    resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+  /fastq@1.15.0:
+    resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
+    dependencies:
+      reusify: 1.0.4
+
+  /file-entry-cache@6.0.1:
+    resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
+    engines: {node: ^10.12.0 || >=12.0.0}
+    dependencies:
+      flat-cache: 3.1.1
+
+  /fill-range@7.0.1:
+    resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+    engines: {node: '>=8'}
+    dependencies:
+      to-regex-range: 5.0.1
+    dev: true
+
+  /find-up@5.0.0:
+    resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+    engines: {node: '>=10'}
+    dependencies:
+      locate-path: 6.0.0
+      path-exists: 4.0.0
+
+  /flat-cache@3.1.1:
+    resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==}
+    engines: {node: '>=12.0.0'}
+    dependencies:
+      flatted: 3.2.9
+      keyv: 4.5.4
+      rimraf: 3.0.2
+
+  /flatted@3.2.9:
+    resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
+
+  /for-each@0.3.3:
+    resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+    dependencies:
+      is-callable: 1.2.7
+    dev: true
+
+  /fs-extra@10.1.0:
+    resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
+    engines: {node: '>=12'}
+    dependencies:
+      graceful-fs: 4.2.11
+      jsonfile: 6.1.0
+      universalify: 2.0.0
+    dev: true
+
+  /fs-extra@7.0.1:
+    resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
+    engines: {node: '>=6 <7 || >=8'}
+    dependencies:
+      graceful-fs: 4.2.11
+      jsonfile: 4.0.0
+      universalify: 0.1.2
+    dev: true
+
+  /fs.realpath@1.0.0:
+    resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+  /fsevents@2.3.3:
+    resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /function-bind@1.1.2:
+    resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+    dev: true
+
+  /function.prototype.name@1.1.6:
+    resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      functions-have-names: 1.2.3
+    dev: true
+
+  /functions-have-names@1.2.3:
+    resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+    dev: true
+
+  /gensync@1.0.0-beta.2:
+    resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /get-intrinsic@1.2.2:
+    resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==}
+    dependencies:
+      function-bind: 1.1.2
+      has-proto: 1.0.1
+      has-symbols: 1.0.3
+      hasown: 2.0.0
+    dev: true
+
+  /get-symbol-description@1.0.0:
+    resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      get-intrinsic: 1.2.2
+    dev: true
+
+  /glob-parent@5.1.2:
+    resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+    engines: {node: '>= 6'}
+    dependencies:
+      is-glob: 4.0.3
+    dev: true
+
+  /glob-parent@6.0.2:
+    resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+    engines: {node: '>=10.13.0'}
+    dependencies:
+      is-glob: 4.0.3
+
+  /glob@7.2.3:
+    resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+    dependencies:
+      fs.realpath: 1.0.0
+      inflight: 1.0.6
+      inherits: 2.0.4
+      minimatch: 3.1.2
+      once: 1.4.0
+      path-is-absolute: 1.0.1
+
+  /globals@11.12.0:
+    resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /globals@13.23.0:
+    resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==}
+    engines: {node: '>=8'}
+    dependencies:
+      type-fest: 0.20.2
+
+  /globalthis@1.0.3:
+    resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      define-properties: 1.2.1
+    dev: true
+
+  /globby@11.1.0:
+    resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+    engines: {node: '>=10'}
+    dependencies:
+      array-union: 2.1.0
+      dir-glob: 3.0.1
+      fast-glob: 3.3.1
+      ignore: 5.2.4
+      merge2: 1.4.1
+      slash: 3.0.0
+    dev: true
+
+  /globrex@0.1.2:
+    resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
+    dev: true
+
+  /gopd@1.0.1:
+    resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+    dependencies:
+      get-intrinsic: 1.2.2
+    dev: true
+
+  /graceful-fs@4.2.11:
+    resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+    dev: true
+
+  /grapheme-splitter@1.0.4:
+    resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
+    dev: true
+
+  /graphemer@1.4.0:
+    resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+
+  /has-bigints@1.0.2:
+    resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
+    dev: true
+
+  /has-flag@3.0.0:
+    resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /has-flag@4.0.0:
+    resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+    engines: {node: '>=8'}
+
+  /has-property-descriptors@1.0.1:
+    resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==}
+    dependencies:
+      get-intrinsic: 1.2.2
+    dev: true
+
+  /has-proto@1.0.1:
+    resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
+    engines: {node: '>= 0.4'}
+    dev: true
+
+  /has-symbols@1.0.3:
+    resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+    engines: {node: '>= 0.4'}
+    dev: true
+
+  /has-tostringtag@1.0.0:
+    resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      has-symbols: 1.0.3
+    dev: true
+
+  /has@1.0.4:
+    resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==}
+    engines: {node: '>= 0.4.0'}
+    dev: true
+
+  /hasown@2.0.0:
+    resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      function-bind: 1.1.2
+    dev: true
+
+  /ignore@5.2.4:
+    resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
+    engines: {node: '>= 4'}
+
+  /immutable@4.3.4:
+    resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==}
+    dev: true
+
+  /import-fresh@3.3.0:
+    resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+    engines: {node: '>=6'}
+    dependencies:
+      parent-module: 1.0.1
+      resolve-from: 4.0.0
+
+  /import-lazy@4.0.0:
+    resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /imurmurhash@0.1.4:
+    resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+    engines: {node: '>=0.8.19'}
+
+  /inflight@1.0.6:
+    resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+    dependencies:
+      once: 1.4.0
+      wrappy: 1.0.2
+
+  /inherits@2.0.4:
+    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+  /internal-slot@1.0.6:
+    resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      get-intrinsic: 1.2.2
+      hasown: 2.0.0
+      side-channel: 1.0.4
+    dev: true
+
+  /invariant@2.2.4:
+    resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
+    dependencies:
+      loose-envify: 1.4.0
+    dev: false
+
+  /is-array-buffer@3.0.2:
+    resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
+    dependencies:
+      call-bind: 1.0.5
+      get-intrinsic: 1.2.2
+      is-typed-array: 1.1.12
+    dev: true
+
+  /is-arrayish@0.2.1:
+    resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+    dev: true
+
+  /is-async-function@2.0.0:
+    resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      has-tostringtag: 1.0.0
+    dev: true
+
+  /is-bigint@1.0.4:
+    resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
+    dependencies:
+      has-bigints: 1.0.2
+    dev: true
+
+  /is-binary-path@2.1.0:
+    resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+    engines: {node: '>=8'}
+    dependencies:
+      binary-extensions: 2.2.0
+    dev: true
+
+  /is-boolean-object@1.1.2:
+    resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      has-tostringtag: 1.0.0
+    dev: true
+
+  /is-callable@1.2.7:
+    resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+    engines: {node: '>= 0.4'}
+    dev: true
+
+  /is-core-module@2.13.1:
+    resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
+    dependencies:
+      hasown: 2.0.0
+    dev: true
+
+  /is-date-object@1.0.5:
+    resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      has-tostringtag: 1.0.0
+    dev: true
+
+  /is-extglob@2.1.1:
+    resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+    engines: {node: '>=0.10.0'}
+
+  /is-finalizationregistry@1.0.2:
+    resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==}
+    dependencies:
+      call-bind: 1.0.5
+    dev: true
+
+  /is-generator-function@1.0.10:
+    resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      has-tostringtag: 1.0.0
+    dev: true
+
+  /is-glob@4.0.3:
+    resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+    engines: {node: '>=0.10.0'}
+    dependencies:
+      is-extglob: 2.1.1
+
+  /is-map@2.0.2:
+    resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
+    dev: true
+
+  /is-negative-zero@2.0.2:
+    resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
+    engines: {node: '>= 0.4'}
+    dev: true
+
+  /is-number-object@1.0.7:
+    resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      has-tostringtag: 1.0.0
+    dev: true
+
+  /is-number@7.0.0:
+    resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+    engines: {node: '>=0.12.0'}
+    dev: true
+
+  /is-path-inside@3.0.3:
+    resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
+    engines: {node: '>=8'}
+
+  /is-regex@1.1.4:
+    resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      has-tostringtag: 1.0.0
+    dev: true
+
+  /is-set@2.0.2:
+    resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==}
+    dev: true
+
+  /is-shared-array-buffer@1.0.2:
+    resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
+    dependencies:
+      call-bind: 1.0.5
+    dev: true
+
+  /is-string@1.0.7:
+    resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      has-tostringtag: 1.0.0
+    dev: true
+
+  /is-symbol@1.0.4:
+    resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      has-symbols: 1.0.3
+    dev: true
+
+  /is-typed-array@1.1.12:
+    resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      which-typed-array: 1.1.13
+    dev: true
+
+  /is-weakmap@2.0.1:
+    resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==}
+    dev: true
+
+  /is-weakref@1.0.2:
+    resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
+    dependencies:
+      call-bind: 1.0.5
+    dev: true
+
+  /is-weakset@2.0.2:
+    resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
+    dependencies:
+      call-bind: 1.0.5
+      get-intrinsic: 1.2.2
+    dev: true
+
+  /isarray@2.0.5:
+    resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+    dev: true
+
+  /isexe@2.0.0:
+    resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+  /iterator.prototype@1.1.2:
+    resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==}
+    dependencies:
+      define-properties: 1.2.1
+      get-intrinsic: 1.2.2
+      has-symbols: 1.0.3
+      reflect.getprototypeof: 1.0.4
+      set-function-name: 2.0.1
+    dev: true
+
+  /jju@1.4.0:
+    resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
+    dev: true
+
+  /js-tokens@4.0.0:
+    resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+  /js-yaml@4.1.0:
+    resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+    hasBin: true
+    dependencies:
+      argparse: 2.0.1
+
+  /jsesc@0.5.0:
+    resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
+    hasBin: true
+    dev: true
+
+  /jsesc@2.5.2:
+    resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
+    engines: {node: '>=4'}
+    hasBin: true
+    dev: true
+
+  /json-buffer@3.0.1:
+    resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+  /json-parse-even-better-errors@2.3.1:
+    resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+    dev: true
+
+  /json-schema-traverse@0.4.1:
+    resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+  /json-stable-stringify-without-jsonify@1.0.1:
+    resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+  /json5@1.0.2:
+    resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+    hasBin: true
+    dependencies:
+      minimist: 1.2.8
+    dev: true
+
+  /json5@2.2.3:
+    resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+    engines: {node: '>=6'}
+    hasBin: true
+    dev: true
+
+  /jsonfile@4.0.0:
+    resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
+    optionalDependencies:
+      graceful-fs: 4.2.11
+    dev: true
+
+  /jsonfile@6.1.0:
+    resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+    dependencies:
+      universalify: 2.0.0
+    optionalDependencies:
+      graceful-fs: 4.2.11
+    dev: true
+
+  /jsx-ast-utils@3.3.5:
+    resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
+    engines: {node: '>=4.0'}
+    dependencies:
+      array-includes: 3.1.7
+      array.prototype.flat: 1.3.2
+      object.assign: 4.1.4
+      object.values: 1.1.7
+    dev: true
+
+  /keyv@4.5.4:
+    resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+    dependencies:
+      json-buffer: 3.0.1
+
+  /kolorist@1.8.0:
+    resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
+    dev: true
+
+  /language-subtag-registry@0.3.22:
+    resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
+    dev: true
+
+  /language-tags@1.0.5:
+    resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==}
+    dependencies:
+      language-subtag-registry: 0.3.22
+    dev: true
+
+  /levn@0.4.1:
+    resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+    engines: {node: '>= 0.8.0'}
+    dependencies:
+      prelude-ls: 1.2.1
+      type-check: 0.4.0
+
+  /lines-and-columns@1.2.4:
+    resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+    dev: true
+
+  /locate-path@6.0.0:
+    resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+    engines: {node: '>=10'}
+    dependencies:
+      p-locate: 5.0.0
+
+  /lodash.debounce@4.0.8:
+    resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+    dev: true
+
+  /lodash.get@4.4.2:
+    resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
+    dev: true
+
+  /lodash.isequal@4.5.0:
+    resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
+    dev: true
+
+  /lodash.merge@4.6.2:
+    resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+  /lodash@4.17.21:
+    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+    dev: true
+
+  /loose-envify@1.4.0:
+    resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+    hasBin: true
+    dependencies:
+      js-tokens: 4.0.0
+
+  /lru-cache@5.1.1:
+    resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+    dependencies:
+      yallist: 3.1.1
+    dev: true
+
+  /lru-cache@6.0.0:
+    resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+    engines: {node: '>=10'}
+    dependencies:
+      yallist: 4.0.0
+    dev: true
+
+  /magic-string@0.29.0:
+    resolution: {integrity: sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==}
+    engines: {node: '>=12'}
+    dependencies:
+      '@jridgewell/sourcemap-codec': 1.4.15
+    dev: true
+
+  /merge2@1.4.1:
+    resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+    engines: {node: '>= 8'}
+    dev: true
+
+  /micromatch@4.0.5:
+    resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
+    engines: {node: '>=8.6'}
+    dependencies:
+      braces: 3.0.2
+      picomatch: 2.3.1
+    dev: true
+
+  /minimatch@3.1.2:
+    resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+    dependencies:
+      brace-expansion: 1.1.11
+
+  /minimatch@5.1.6:
+    resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+    engines: {node: '>=10'}
+    dependencies:
+      brace-expansion: 2.0.1
+    dev: true
+
+  /minimist@1.2.8:
+    resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+    dev: true
+
+  /mkdirp@1.0.4:
+    resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
+    engines: {node: '>=10'}
+    hasBin: true
+    dev: true
+
+  /ms@2.1.2:
+    resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+  /ms@2.1.3:
+    resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+    dev: true
+
+  /nanoid@3.3.6:
+    resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
+    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+    hasBin: true
+    dev: true
+
+  /natural-compare-lite@1.4.0:
+    resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
+    dev: true
+
+  /natural-compare@1.4.0:
+    resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+  /node-releases@2.0.13:
+    resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
+    dev: true
+
+  /normalize-path@3.0.0:
+    resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /object-assign@4.1.1:
+    resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+    engines: {node: '>=0.10.0'}
+
+  /object-inspect@1.13.1:
+    resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==}
+    dev: true
+
+  /object-keys@1.1.1:
+    resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+    engines: {node: '>= 0.4'}
+    dev: true
+
+  /object.assign@4.1.4:
+    resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      has-symbols: 1.0.3
+      object-keys: 1.1.1
+    dev: true
+
+  /object.entries@1.1.7:
+    resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+    dev: true
+
+  /object.fromentries@2.0.7:
+    resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+    dev: true
+
+  /object.groupby@1.0.1:
+    resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      get-intrinsic: 1.2.2
+    dev: true
+
+  /object.hasown@1.1.3:
+    resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==}
+    dependencies:
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+    dev: true
+
+  /object.values@1.1.7:
+    resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+    dev: true
+
+  /once@1.4.0:
+    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+    dependencies:
+      wrappy: 1.0.2
+
+  /optionator@0.9.3:
+    resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
+    engines: {node: '>= 0.8.0'}
+    dependencies:
+      '@aashutoshrathi/word-wrap': 1.2.6
+      deep-is: 0.1.4
+      fast-levenshtein: 2.0.6
+      levn: 0.4.1
+      prelude-ls: 1.2.1
+      type-check: 0.4.0
+
+  /p-limit@3.1.0:
+    resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+    engines: {node: '>=10'}
+    dependencies:
+      yocto-queue: 0.1.0
+
+  /p-locate@5.0.0:
+    resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+    engines: {node: '>=10'}
+    dependencies:
+      p-limit: 3.1.0
+
+  /parent-module@1.0.1:
+    resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+    engines: {node: '>=6'}
+    dependencies:
+      callsites: 3.1.0
+
+  /parse-json@5.2.0:
+    resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+    engines: {node: '>=8'}
+    dependencies:
+      '@babel/code-frame': 7.22.13
+      error-ex: 1.3.2
+      json-parse-even-better-errors: 2.3.1
+      lines-and-columns: 1.2.4
+    dev: true
+
+  /path-browserify@1.0.1:
+    resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
+    dev: true
+
+  /path-exists@4.0.0:
+    resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+    engines: {node: '>=8'}
+
+  /path-is-absolute@1.0.1:
+    resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+    engines: {node: '>=0.10.0'}
+
+  /path-key@3.1.1:
+    resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+    engines: {node: '>=8'}
+
+  /path-parse@1.0.7:
+    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+    dev: true
+
+  /path-type@4.0.0:
+    resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /picocolors@1.0.0:
+    resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+    dev: true
+
+  /picomatch@2.3.1:
+    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+    engines: {node: '>=8.6'}
+    dev: true
+
+  /postcss@8.4.31:
+    resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
+    engines: {node: ^10 || ^12 || >=14}
+    dependencies:
+      nanoid: 3.3.6
+      picocolors: 1.0.0
+      source-map-js: 1.0.2
+    dev: true
+
+  /prelude-ls@1.2.1:
+    resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+    engines: {node: '>= 0.8.0'}
+
+  /prettier@2.8.4:
+    resolution: {integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==}
+    engines: {node: '>=10.13.0'}
+    hasBin: true
+    dev: false
+
+  /prettier@3.0.3:
+    resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==}
+    engines: {node: '>=14'}
+    hasBin: true
+    dev: true
+
+  /prop-types-extra@1.1.1(react@18.2.0):
+    resolution: {integrity: sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==}
+    peerDependencies:
+      react: '>=0.14.0'
+    dependencies:
+      react: 18.2.0
+      react-is: 16.13.1
+      warning: 4.0.3
+    dev: false
+
+  /prop-types@15.8.1:
+    resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
+    dependencies:
+      loose-envify: 1.4.0
+      object-assign: 4.1.1
+      react-is: 16.13.1
+
+  /punycode@2.3.0:
+    resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
+    engines: {node: '>=6'}
+
+  /queue-microtask@1.2.3:
+    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+  /react-bootstrap@2.9.1(@types/react@18.2.15)(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-ezgmh/ARCYp18LbZEqPp0ppvy+ytCmycDORqc8vXSKYV3cer4VH7OReV8uMOoKXmYzivJTxgzGHalGrHamryHA==}
+    peerDependencies:
+      '@types/react': '>=16.14.8'
+      react: '>=16.14.0'
+      react-dom: '>=16.14.0'
+    peerDependenciesMeta:
+      '@types/react':
+        optional: true
+    dependencies:
+      '@babel/runtime': 7.23.2
+      '@restart/hooks': 0.4.11(react@18.2.0)
+      '@restart/ui': 1.6.6(react-dom@18.2.0)(react@18.2.0)
+      '@types/react': 18.2.15
+      '@types/react-transition-group': 4.4.8
+      classnames: 2.3.2
+      dom-helpers: 5.2.1
+      invariant: 2.2.4
+      prop-types: 15.8.1
+      prop-types-extra: 1.1.1(react@18.2.0)
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0)
+      uncontrollable: 7.2.1(react@18.2.0)
+      warning: 4.0.3
+    dev: false
+
+  /react-dom@18.2.0(react@18.2.0):
+    resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
+    peerDependencies:
+      react: ^18.2.0
+    dependencies:
+      loose-envify: 1.4.0
+      react: 18.2.0
+      scheduler: 0.23.0
+    dev: false
+
+  /react-is@16.13.1:
+    resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+
+  /react-lifecycles-compat@3.0.4:
+    resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==}
+    dev: false
+
+  /react-refresh@0.14.0:
+    resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /react-router-dom@6.17.0(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-qWHkkbXQX+6li0COUUPKAUkxjNNqPJuiBd27dVwQGDNsuFBdMbrS6UZ0CLYc4CsbdLYTckn4oB4tGDuPZpPhaQ==}
+    engines: {node: '>=14.0.0'}
+    peerDependencies:
+      react: '>=16.8'
+      react-dom: '>=16.8'
+    dependencies:
+      '@remix-run/router': 1.10.0
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+      react-router: 6.17.0(react@18.2.0)
+    dev: false
+
+  /react-router@6.17.0(react@18.2.0):
+    resolution: {integrity: sha512-YJR3OTJzi3zhqeJYADHANCGPUu9J+6fT5GLv82UWRGSxu6oJYCKVmxUcaBQuGm9udpWmPsvpme/CdHumqgsoaA==}
+    engines: {node: '>=14.0.0'}
+    peerDependencies:
+      react: '>=16.8'
+    dependencies:
+      '@remix-run/router': 1.10.0
+      react: 18.2.0
+    dev: false
+
+  /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0):
+    resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==}
+    peerDependencies:
+      react: '>=16.6.0'
+      react-dom: '>=16.6.0'
+    dependencies:
+      '@babel/runtime': 7.23.2
+      dom-helpers: 5.2.1
+      loose-envify: 1.4.0
+      prop-types: 15.8.1
+      react: 18.2.0
+      react-dom: 18.2.0(react@18.2.0)
+    dev: false
+
+  /react@18.2.0:
+    resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
+    engines: {node: '>=0.10.0'}
+    dependencies:
+      loose-envify: 1.4.0
+    dev: false
+
+  /readdirp@3.6.0:
+    resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+    engines: {node: '>=8.10.0'}
+    dependencies:
+      picomatch: 2.3.1
+    dev: true
+
+  /reflect.getprototypeof@1.0.4:
+    resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      get-intrinsic: 1.2.2
+      globalthis: 1.0.3
+      which-builtin-type: 1.1.3
+    dev: true
+
+  /regenerate-unicode-properties@10.1.1:
+    resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==}
+    engines: {node: '>=4'}
+    dependencies:
+      regenerate: 1.4.2
+    dev: true
+
+  /regenerate@1.4.2:
+    resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+    dev: true
+
+  /regenerator-runtime@0.14.0:
+    resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
+
+  /regenerator-transform@0.15.2:
+    resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
+    dependencies:
+      '@babel/runtime': 7.23.2
+    dev: true
+
+  /regexp.prototype.flags@1.5.1:
+    resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      set-function-name: 2.0.1
+    dev: true
+
+  /regexpu-core@5.3.2:
+    resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==}
+    engines: {node: '>=4'}
+    dependencies:
+      '@babel/regjsgen': 0.8.0
+      regenerate: 1.4.2
+      regenerate-unicode-properties: 10.1.1
+      regjsparser: 0.9.1
+      unicode-match-property-ecmascript: 2.0.0
+      unicode-match-property-value-ecmascript: 2.1.0
+    dev: true
+
+  /regjsparser@0.9.1:
+    resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==}
+    hasBin: true
+    dependencies:
+      jsesc: 0.5.0
+    dev: true
+
+  /resolve-from@4.0.0:
+    resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+    engines: {node: '>=4'}
+
+  /resolve@1.19.0:
+    resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==}
+    dependencies:
+      is-core-module: 2.13.1
+      path-parse: 1.0.7
+    dev: true
+
+  /resolve@1.22.8:
+    resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
+    hasBin: true
+    dependencies:
+      is-core-module: 2.13.1
+      path-parse: 1.0.7
+      supports-preserve-symlinks-flag: 1.0.0
+    dev: true
+
+  /resolve@2.0.0-next.5:
+    resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
+    hasBin: true
+    dependencies:
+      is-core-module: 2.13.1
+      path-parse: 1.0.7
+      supports-preserve-symlinks-flag: 1.0.0
+    dev: true
+
+  /reusify@1.0.4:
+    resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+    engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+  /rimraf@3.0.2:
+    resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+    hasBin: true
+    dependencies:
+      glob: 7.2.3
+
+  /rollup@3.29.4:
+    resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==}
+    engines: {node: '>=14.18.0', npm: '>=8.0.0'}
+    hasBin: true
+    optionalDependencies:
+      fsevents: 2.3.3
+    dev: true
+
+  /run-parallel@1.2.0:
+    resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+    dependencies:
+      queue-microtask: 1.2.3
+
+  /safe-array-concat@1.0.1:
+    resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==}
+    engines: {node: '>=0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      get-intrinsic: 1.2.2
+      has-symbols: 1.0.3
+      isarray: 2.0.5
+    dev: true
+
+  /safe-regex-test@1.0.0:
+    resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
+    dependencies:
+      call-bind: 1.0.5
+      get-intrinsic: 1.2.2
+      is-regex: 1.1.4
+    dev: true
+
+  /sass@1.69.5:
+    resolution: {integrity: sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==}
+    engines: {node: '>=14.0.0'}
+    hasBin: true
+    dependencies:
+      chokidar: 3.5.3
+      immutable: 4.3.4
+      source-map-js: 1.0.2
+    dev: true
+
+  /scheduler@0.23.0:
+    resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
+    dependencies:
+      loose-envify: 1.4.0
+    dev: false
+
+  /semver@6.3.1:
+    resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+    hasBin: true
+    dev: true
+
+  /semver@7.5.4:
+    resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
+    engines: {node: '>=10'}
+    hasBin: true
+    dependencies:
+      lru-cache: 6.0.0
+    dev: true
+
+  /set-function-length@1.1.1:
+    resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      define-data-property: 1.1.1
+      get-intrinsic: 1.2.2
+      gopd: 1.0.1
+      has-property-descriptors: 1.0.1
+    dev: true
+
+  /set-function-name@2.0.1:
+    resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      define-data-property: 1.1.1
+      functions-have-names: 1.2.3
+      has-property-descriptors: 1.0.1
+    dev: true
+
+  /shebang-command@2.0.0:
+    resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+    engines: {node: '>=8'}
+    dependencies:
+      shebang-regex: 3.0.0
+
+  /shebang-regex@3.0.0:
+    resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+    engines: {node: '>=8'}
+
+  /side-channel@1.0.4:
+    resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
+    dependencies:
+      call-bind: 1.0.5
+      get-intrinsic: 1.2.2
+      object-inspect: 1.13.1
+    dev: true
+
+  /slash@3.0.0:
+    resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+    engines: {node: '>=8'}
+    dev: true
+
+  /source-map-js@1.0.2:
+    resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /source-map@0.6.1:
+    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /sprintf-js@1.0.3:
+    resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+    dev: true
+
+  /string-argv@0.3.2:
+    resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
+    engines: {node: '>=0.6.19'}
+    dev: true
+
+  /string-natural-compare@3.0.1:
+    resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==}
+    dev: true
+
+  /string.prototype.matchall@4.0.10:
+    resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+      get-intrinsic: 1.2.2
+      has-symbols: 1.0.3
+      internal-slot: 1.0.6
+      regexp.prototype.flags: 1.5.1
+      set-function-name: 2.0.1
+      side-channel: 1.0.4
+    dev: true
+
+  /string.prototype.trim@1.2.8:
+    resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+    dev: true
+
+  /string.prototype.trimend@1.0.7:
+    resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+    dev: true
+
+  /string.prototype.trimstart@1.0.7:
+    resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
+    dependencies:
+      call-bind: 1.0.5
+      define-properties: 1.2.1
+      es-abstract: 1.22.3
+    dev: true
+
+  /strip-ansi@6.0.1:
+    resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+    engines: {node: '>=8'}
+    dependencies:
+      ansi-regex: 5.0.1
+
+  /strip-bom@3.0.0:
+    resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /strip-json-comments@3.1.1:
+    resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+    engines: {node: '>=8'}
+
+  /supports-color@5.5.0:
+    resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+    engines: {node: '>=4'}
+    dependencies:
+      has-flag: 3.0.0
+    dev: true
+
+  /supports-color@7.2.0:
+    resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+    engines: {node: '>=8'}
+    dependencies:
+      has-flag: 4.0.0
+
+  /supports-preserve-symlinks-flag@1.0.0:
+    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+    engines: {node: '>= 0.4'}
+    dev: true
+
+  /text-table@0.2.0:
+    resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+
+  /to-fast-properties@2.0.0:
+    resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /to-regex-range@5.0.1:
+    resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+    engines: {node: '>=8.0'}
+    dependencies:
+      is-number: 7.0.0
+    dev: true
+
+  /ts-api-utils@1.0.3(typescript@5.2.2):
+    resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==}
+    engines: {node: '>=16.13.0'}
+    peerDependencies:
+      typescript: '>=4.2.0'
+    dependencies:
+      typescript: 5.2.2
+    dev: true
+
+  /ts-morph@17.0.1:
+    resolution: {integrity: sha512-10PkHyXmrtsTvZSL+cqtJLTgFXkU43Gd0JCc0Rw6GchWbqKe0Rwgt1v3ouobTZwQzF1mGhDeAlWYBMGRV7y+3g==}
+    dependencies:
+      '@ts-morph/common': 0.18.1
+      code-block-writer: 11.0.3
+    dev: true
+
+  /tsconfck@2.1.2(typescript@5.2.2):
+    resolution: {integrity: sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==}
+    engines: {node: ^14.13.1 || ^16 || >=18}
+    hasBin: true
+    peerDependencies:
+      typescript: ^4.3.5 || ^5.0.0
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+    dependencies:
+      typescript: 5.2.2
+    dev: true
+
+  /tsconfig-paths@3.14.2:
+    resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==}
+    dependencies:
+      '@types/json5': 0.0.29
+      json5: 1.0.2
+      minimist: 1.2.8
+      strip-bom: 3.0.0
+    dev: true
+
+  /tslib@1.14.1:
+    resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+    dev: true
+
+  /tslib@2.6.2:
+    resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+    dev: false
+
+  /tsutils@3.21.0(typescript@5.2.2):
+    resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
+    engines: {node: '>= 6'}
+    peerDependencies:
+      typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
+    dependencies:
+      tslib: 1.14.1
+      typescript: 5.2.2
+    dev: true
+
+  /type-check@0.4.0:
+    resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+    engines: {node: '>= 0.8.0'}
+    dependencies:
+      prelude-ls: 1.2.1
+
+  /type-fest@0.20.2:
+    resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+    engines: {node: '>=10'}
+
+  /typed-array-buffer@1.0.0:
+    resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      get-intrinsic: 1.2.2
+      is-typed-array: 1.1.12
+    dev: true
+
+  /typed-array-byte-length@1.0.0:
+    resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      call-bind: 1.0.5
+      for-each: 0.3.3
+      has-proto: 1.0.1
+      is-typed-array: 1.1.12
+    dev: true
+
+  /typed-array-byte-offset@1.0.0:
+    resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      available-typed-arrays: 1.0.5
+      call-bind: 1.0.5
+      for-each: 0.3.3
+      has-proto: 1.0.1
+      is-typed-array: 1.1.12
+    dev: true
+
+  /typed-array-length@1.0.4:
+    resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
+    dependencies:
+      call-bind: 1.0.5
+      for-each: 0.3.3
+      is-typed-array: 1.1.12
+    dev: true
+
+  /typescript@5.0.4:
+    resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==}
+    engines: {node: '>=12.20'}
+    hasBin: true
+    dev: true
+
+  /typescript@5.2.2:
+    resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==}
+    engines: {node: '>=14.17'}
+    hasBin: true
+
+  /unbox-primitive@1.0.2:
+    resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
+    dependencies:
+      call-bind: 1.0.5
+      has-bigints: 1.0.2
+      has-symbols: 1.0.3
+      which-boxed-primitive: 1.0.2
+    dev: true
+
+  /uncontrollable@7.2.1(react@18.2.0):
+    resolution: {integrity: sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==}
+    peerDependencies:
+      react: '>=15.0.0'
+    dependencies:
+      '@babel/runtime': 7.23.2
+      '@types/react': 18.2.15
+      invariant: 2.2.4
+      react: 18.2.0
+      react-lifecycles-compat: 3.0.4
+    dev: false
+
+  /uncontrollable@8.0.4(react@18.2.0):
+    resolution: {integrity: sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==}
+    peerDependencies:
+      react: '>=16.14.0'
+    dependencies:
+      react: 18.2.0
+    dev: false
+
+  /unicode-canonical-property-names-ecmascript@2.0.0:
+    resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /unicode-match-property-ecmascript@2.0.0:
+    resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
+    engines: {node: '>=4'}
+    dependencies:
+      unicode-canonical-property-names-ecmascript: 2.0.0
+      unicode-property-aliases-ecmascript: 2.1.0
+    dev: true
+
+  /unicode-match-property-value-ecmascript@2.1.0:
+    resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /unicode-property-aliases-ecmascript@2.1.0:
+    resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
+    engines: {node: '>=4'}
+    dev: true
+
+  /universalify@0.1.2:
+    resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
+    engines: {node: '>= 4.0.0'}
+    dev: true
+
+  /universalify@2.0.0:
+    resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
+    engines: {node: '>= 10.0.0'}
+    dev: true
+
+  /update-browserslist-db@1.0.13(browserslist@4.22.1):
+    resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
+    hasBin: true
+    peerDependencies:
+      browserslist: '>= 4.21.0'
+    dependencies:
+      browserslist: 4.22.1
+      escalade: 3.1.1
+      picocolors: 1.0.0
+    dev: true
+
+  /uri-js@4.4.1:
+    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+    dependencies:
+      punycode: 2.3.0
+
+  /validator@13.11.0:
+    resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==}
+    engines: {node: '>= 0.10'}
+    dev: true
+
+  /vite-plugin-dts@2.0.2(@types/node@18.14.6)(vite@4.4.5):
+    resolution: {integrity: sha512-i3HBlrdqE2FQxQqrNwFj9P2ei/I7lt/d3Q8NOE1JCz/gNYhNf/oUeIJamIdWQUNQGhUd/Y6mtpm3kOYPw1gz8Q==}
+    engines: {node: ^14.18.0 || >=16.0.0}
+    peerDependencies:
+      vite: '>=2.9.0'
+    dependencies:
+      '@babel/parser': 7.23.0
+      '@microsoft/api-extractor': 7.38.0(@types/node@18.14.6)
+      '@rollup/pluginutils': 5.0.5
+      '@rushstack/node-core-library': 3.61.0(@types/node@18.14.6)
+      debug: 4.3.4
+      fast-glob: 3.3.1
+      fs-extra: 10.1.0
+      kolorist: 1.8.0
+      magic-string: 0.29.0
+      ts-morph: 17.0.1
+      vite: 4.4.5(@types/node@18.14.6)(sass@1.69.5)
+    transitivePeerDependencies:
+      - '@types/node'
+      - rollup
+      - supports-color
+    dev: true
+
+  /vite-tsconfig-paths@4.2.1(typescript@5.2.2)(vite@4.4.5):
+    resolution: {integrity: sha512-GNUI6ZgPqT3oervkvzU+qtys83+75N/OuDaQl7HmOqFTb0pjZsuARrRipsyJhJ3enqV8beI1xhGbToR4o78nSQ==}
+    peerDependencies:
+      vite: '*'
+    peerDependenciesMeta:
+      vite:
+        optional: true
+    dependencies:
+      debug: 4.3.4
+      globrex: 0.1.2
+      tsconfck: 2.1.2(typescript@5.2.2)
+      vite: 4.4.5(@types/node@18.14.6)(sass@1.69.5)
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+    dev: true
+
+  /vite@4.4.5(@types/node@18.14.6)(sass@1.69.5):
+    resolution: {integrity: sha512-4m5kEtAWHYr0O1Fu7rZp64CfO1PsRGZlD3TAB32UmQlpd7qg15VF7ROqGN5CyqN7HFuwr7ICNM2+fDWRqFEKaA==}
+    engines: {node: ^14.18.0 || >=16.0.0}
+    hasBin: true
+    peerDependencies:
+      '@types/node': '>= 14'
+      less: '*'
+      lightningcss: ^1.21.0
+      sass: '*'
+      stylus: '*'
+      sugarss: '*'
+      terser: ^5.4.0
+    peerDependenciesMeta:
+      '@types/node':
+        optional: true
+      less:
+        optional: true
+      lightningcss:
+        optional: true
+      sass:
+        optional: true
+      stylus:
+        optional: true
+      sugarss:
+        optional: true
+      terser:
+        optional: true
+    dependencies:
+      '@types/node': 18.14.6
+      esbuild: 0.18.20
+      postcss: 8.4.31
+      rollup: 3.29.4
+      sass: 1.69.5
+    optionalDependencies:
+      fsevents: 2.3.3
+    dev: true
+
+  /warning@4.0.3:
+    resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==}
+    dependencies:
+      loose-envify: 1.4.0
+    dev: false
+
+  /which-boxed-primitive@1.0.2:
+    resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
+    dependencies:
+      is-bigint: 1.0.4
+      is-boolean-object: 1.1.2
+      is-number-object: 1.0.7
+      is-string: 1.0.7
+      is-symbol: 1.0.4
+    dev: true
+
+  /which-builtin-type@1.1.3:
+    resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      function.prototype.name: 1.1.6
+      has-tostringtag: 1.0.0
+      is-async-function: 2.0.0
+      is-date-object: 1.0.5
+      is-finalizationregistry: 1.0.2
+      is-generator-function: 1.0.10
+      is-regex: 1.1.4
+      is-weakref: 1.0.2
+      isarray: 2.0.5
+      which-boxed-primitive: 1.0.2
+      which-collection: 1.0.1
+      which-typed-array: 1.1.13
+    dev: true
+
+  /which-collection@1.0.1:
+    resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==}
+    dependencies:
+      is-map: 2.0.2
+      is-set: 2.0.2
+      is-weakmap: 2.0.1
+      is-weakset: 2.0.2
+    dev: true
+
+  /which-typed-array@1.1.13:
+    resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      available-typed-arrays: 1.0.5
+      call-bind: 1.0.5
+      for-each: 0.3.3
+      gopd: 1.0.1
+      has-tostringtag: 1.0.0
+    dev: true
+
+  /which@2.0.2:
+    resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+    engines: {node: '>= 8'}
+    hasBin: true
+    dependencies:
+      isexe: 2.0.0
+
+  /wrappy@1.0.2:
+    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+  /yallist@3.1.1:
+    resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+    dev: true
+
+  /yallist@4.0.0:
+    resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+    dev: true
+
+  /yaml@1.10.2:
+    resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
+    engines: {node: '>= 6'}
+    dev: true
+
+  /yocto-queue@0.1.0:
+    resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+    engines: {node: '>=10'}
+
+  /z-schema@5.0.5:
+    resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==}
+    engines: {node: '>=8.0.0'}
+    hasBin: true
+    dependencies:
+      lodash.get: 4.4.2
+      lodash.isequal: 4.5.0
+      validator: 13.11.0
+    optionalDependencies:
+      commander: 9.5.0
+    dev: true
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
new file mode 100644
index 0000000..e9b0dad
--- /dev/null
+++ b/pnpm-workspace.yaml
@@ -0,0 +1,3 @@
+packages:
+  - 'apps/*'
+  - 'packages/*'
diff --git a/run.sh b/run.sh
deleted file mode 100755
index e1f533f..0000000
--- a/run.sh
+++ /dev/null
@@ -1 +0,0 @@
-docker run -p 8092:80 -dit --name doiLandingPage dockcs.esrf.fr/dau/doi:1.0.0-SNAPSHOT
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..6c4b0f6
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,30 @@
+{
+  "compilerOptions": {
+    "module": "esnext",
+    "moduleResolution": "node",
+    "target": "esnext",
+    "lib": ["dom", "dom.iterable", "esnext"],
+    "jsx": "react-jsx",
+    "allowJs": true,
+    "skipLibCheck": true,
+    "esModuleInterop": false,
+    "allowSyntheticDefaultImports": true,
+    "isolatedModules": true,
+    "resolveJsonModule": true,
+    "strict": true,
+    "downlevelIteration": true,
+    "strictPropertyInitialization": false,
+    "forceConsistentCasingInFileNames": true,
+    "useDefineForClassFields": true,
+    "types": ["vite/client"],
+    "declaration": true,
+    "declarationMap": true,
+    "removeComments": true,
+    "noImplicitReturns": true,
+    "noFallthroughCasesInSwitch": true,
+    "verbatimModuleSyntax": true,
+    "useUnknownInCatchVariables": true,
+    "incremental": true,
+    "sourceMap": true
+  }
+}
diff --git a/www/.htaccess b/www/.htaccess
deleted file mode 100644
index c94be63..0000000
--- a/www/.htaccess
+++ /dev/null
@@ -1,22 +0,0 @@
-RewriteEngine on
-RewriteBase /
-
-RewriteCond %{REQUEST_FILENAME} !-f
-
-# redirect a call to doi.esrf.fr/DOIprefix/DOIsuffix to doi.esrf.fr/index.html?DOI=DOIprefix/DOIsuffix
-RewriteCond %{REQUEST_URI} !(\.js)
-RewriteCond %{REQUEST_URI} !(\.css)
-RewriteCond %{REQUEST_URI} !(images/)
-
-RewriteCond %{HTTP_USER_AGENT} !googlebot [NC]
-RewriteRule  "/(.+)$"   "index.html?DOI=$1"    [NC,L]
-
-# When a googlebot is crawling around
-# P requires that the apache libs 'proxy_http' and 'proxy' is loaded 
-RewriteCond %{HTTP_USER_AGENT} googlebot [NC]
-RewriteCond %{REQUEST_FILENAME} !-f
-
-# RewriteRule "(.+)$" "http://localhost:3002/render/http://%{HTTP_HOST}/$1" [P,L]
-# RewriteRule "(.+)$" "https://render-tron.appspot.com/render/http://%{HTTP_HOST}/$1" [P,L]  
-
-RewriteRule "(.+)$" "http://render-tron.appspot.com/render/http://doi.esrf.fr/$1" [P,L]  
diff --git a/www/Gruntfile.js b/www/Gruntfile.js
deleted file mode 100644
index 4087215..0000000
--- a/www/Gruntfile.js
+++ /dev/null
@@ -1,102 +0,0 @@
-module.exports = function (grunt) {
-  grunt.initConfig({
-    jshint: {
-      files: ["Gruntfile.js", "src/*.js", "test/**/*.js"],
-      options: {
-        globals: {
-          jQuery: true,
-        },
-      },
-    },
-
-    watch: {
-      files: ["src/*.js", "templates/*.js", "css/*.css"],
-      tasks: ["uglify", "dustjs", "cssmin", "wiredep:dev"],
-    },
-
-    uglify: {
-      options: {
-        mangle: false,
-        beautify: true,
-        compress: false,
-      },
-      prod: {
-        files: {
-          "min/components.min.js": [
-            "bower_components/jquery/dist/jquery.js",
-            "bower_components/bootstrap/dist/js/bootstrap.js",
-            "bower_components/dustjs-linkedin/dist/dust-full.min.js",
-            "bower_components/dustjs-helpers/dist/dust-helpers.min.js",
-            "bower_components/lodash/dist/lodash.min.js",
-            "bower_components/moment/moment.js",
-          ],
-          "min/doi.min.js": ["src/*js"],
-        },
-      },
-    },
-
-    wiredep: {
-      prod: {
-        src: "index.html",
-      },
-      dev: {
-        src: "dev.html",
-      },
-    },
-
-    cssmin: {
-      prod: {
-        files: {
-          "min/output.min.css": ["bower_components/bootstrap/dist/css/bootstrap.css", "css/*.css"],
-        },
-      },
-    },
-
-    dustjs: {
-      compile: {
-        files: {
-          "min/precompiled.templates.min.js": ["templates/**js"],
-        },
-      },
-    },
-
-    includeSource: {
-      options: {
-        basePath: "",
-        baseUrl: "www",
-      },
-      dev: {
-        files: {
-          "dev.html": "dev.tpl.html",
-        },
-      },
-    },
-    plato: {
-      all: {
-        options: {
-          complexity: {
-            logicalor: true,
-            switchcase: true,
-            forin: true,
-            trycatch: true,
-          },
-        },
-        files: {
-          reports: ["src/*.js"],
-        },
-      },
-    },
-  });
-
-  grunt.loadNpmTasks("grunt-contrib-jshint");
-  grunt.loadNpmTasks("grunt-contrib-watch");
-  grunt.loadNpmTasks("grunt-contrib-uglify");
-  grunt.loadNpmTasks("grunt-wiredep");
-  grunt.loadNpmTasks("grunt-dustjs");
-  grunt.loadNpmTasks("grunt-contrib-cssmin");
-  grunt.loadNpmTasks("grunt-include-source");
-  grunt.loadNpmTasks("grunt-plato");
-
-  grunt.registerTask("default", ["jshint", "dustjs", "uglify", "cssmin"]);
-  grunt.registerTask("dev", ["includeSource:dev", "dustjs", "cssmin", "wiredep:dev", "plato"]);
-};
diff --git a/www/bower.json b/www/bower.json
deleted file mode 100644
index 4015201..0000000
--- a/www/bower.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  "name": "ESRF DOI landing page",
-  "authors": [
-    "Alejandro De Maria Antolinos <demariaa@esrf.fr>",
-    "Maxime Chaillet <mchaille@esrf.fr>"
-  ],
-  "description": "This is the landing page for the DOI at the ESRF",
-  "main": "index.html",
-  "moduleType": [],
-  "keywords": [
-    "DOI",
-    "ESRF",
-    "data",
-    "science",
-    "metadata"
-  ],
-  "license": "MIT",
-  "homepage": "https://doi.esrf.fr",
-  "private": true,
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "test",
-    "tests"
-  ],
-  "dependencies": {
-    "jquery": "^3.2.1",
-    "dustjs-linkedin": "^2.7.5",
-    "bootstrap": "^4.0.0",
-    "dustjs-helpers": "^1.7.3",
-    "lodash": "^4.17.5",
-    "moment": "momentjs#^2.21.0"
-  },
-  "overrides": {
-    "bootstrap": {
-      "main": [
-        "dist/js/bootstrap.js",
-        "dist/css/bootstrap.css",
-        "less/bootstrap.less"
-      ]
-    }
-  }
-}
diff --git a/www/css/doi.css b/www/css/doi.css
deleted file mode 100644
index fdc9d45..0000000
--- a/www/css/doi.css
+++ /dev/null
@@ -1,371 +0,0 @@
-/* Sticky footer styles
--------------------------------------------------- */
-
-html {
-    position: relative;
-    min-height: 100%;
-    font-size: 10px;
-}
-
-body {
-    margin-bottom: 60px;
-    /* Margin bottom by footer height */
-    font-size: 1.6rem;
-}
-
-hr {
-    margin-top: 15px;
-    margin-bottom: 15px;
-}
-
-label {
-    margin-bottom: 0px;
-    font-weight: bold;
-}
-
-@media only screen and (max-width: 768px) {
-    #footerLeft {
-        text-align: center;
-    }
-    #footerRight {
-        text-align: center;
-    }
-    #licenceImage {
-        display: block;
-        margin: auto;
-    }
-    .footer {
-        position: absolute;
-        /* bottom: 0;  */
-        /* width: 100%; */
-        /* height: 60px;  */
-        /* Set the fixed height of the footer here */
-        /* line-height: 60px;  */
-        /* Vertically center the text there */
-        background-color: #f4f4f4;
-    }
-}
-
-@media only screen and (min-width: 769px) {
-    #footerLeft {
-        text-align: left;
-    }
-    #footerRight {
-        display:block;
-        float: right
-
-    }
-    .footer {
-        position: absolute;
-        bottom: 0;
-        height: 60px;
-        width: 100%;
-        /* Set the fixed height of the footer here */
-        line-height: 60px;
-        background-color: #f4f4f4;
-    }
-}
-
-@media only screen and (max-width: 1200px) {
-    .searchButtonDiv {
-        padding-left: 15px;
-    }
-}
-
-@media only screen and (min-width: 1201px) {
-    .searchButtonDiv {
-        padding-left: 0px;
-    }
-}
-
-
-/* ########################################### */
-
-/*     override bootstrap specific classes     */
-
-/* ########################################### */
-
-.card-header {
-    background-color: #CFD1D2;
-}
-
-.card-footer {
-    background-color: #FFFFFF;
-    border: 0;
-}
-
-.container {
-    width: auto;
-    max-width: 680px;
-    padding: 0 15px;
-}
-
-/* ########################################### */
-
-/*                the backgrounds              */
-
-/* ########################################### */
-
-/* sets the background color as esrf blue*/
-
-.blueBackground {
-    background-color: #132577 !important;
-}
-
-.lightRedBackground {
-    background-color: #ffcaca !important;
-}
-
-.grayBackground {
-    background-color: #dcdee2;
-}
-
-.whiteBackground {
-    background-color: #ffffff;
-}
-
-/* ########################################### */
-
-/*                the fonts                    */
-
-/* ########################################### */
-
-.font-3p2rem {
-    font-size: 3.2rem;
-}
-
-.font-1p4rem {
-    font-size: 1.4rem;
-}
-
-.whiteFont {
-    color: #ffffff;
-}
-
-.fontSize-20 {
-    font-size: 20px;
-}
-
-/* vertically center the font and sets its color to white */
-
-.whiteVCenteredFont {
-    color: white;
-    margin-top: auto;
-    margin-bottom: auto;
-}
-
-/* ########################################### */
-
-/*                the padding                  */
-
-/* ########################################### */
-
-.padding-top-15 {
-    padding-top: 15px;
-}
-
-.padding-top-5 {
-    padding-top: 5px;
-}
-
-.padding-bottom-15 {
-    padding-bottom: 15px;
-}
-
-.padding-left-15 {
-    padding-left: 15px;
-}
-
-.padding-bottom-10 {
-    padding-bottom: 10px;
-}
-
-.padding10 {
-    padding: 10px;
-}
-
-.padding-left-0 {
-    padding-left: 0;
-}
-
-.padding-right-0 {
-    padding-right: 0;
-}
-
-.padding-right-2 {
-    padding-right: 2px;
-}
-
-.padding-left-2 {
-    padding-left: 2px;
-}
-
-/* ########################################### */
-
-/*                the margin                  */
-
-/* ########################################### */
-
-.marging-right-10 {
-    marging-right: 10px;
-}
-
-.margin-left-0 {
-    margin-left: 0px;
-}
-
-.margin-right-0 {
-    margin-right: 0px;
-}
-
-/* ########################################### */
-
-/*                the DOI badge                */
-
-/* ########################################### */
-
-.borderRadius-5 {
-    border-radius: 5px;
-}
-
-span.doiBadge {
-    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
-    color: white;
-    background: black;
-    text-decoration: none;
-    padding: 2px 0px 2px 4px;
-    border-color: black;
-}
-
-span.doiBadge::before {
-    content: "DOI";
-}
-
-span.doiBadge a {
-    color: white;
-    background: #0099cc;
-    text-decoration: none;
-    margin-left: 4px;
-    padding: 2px 5px 2px 4px;
-    border-radius: 0px 5px 5px 0px;
-}
-
-/* ######################## For doi landing page ######### */
-
-.myBorder-left {
-    border-left-color: #cfd1d2;
-    border-left-width: 4px;
-    border-left-style: solid;
-    padding-left: 15px;
-    margin-bottom: 10px;
-}
-
-.scroll-box {
-    overflow-y: auto;
-    overflow-x: hidden;
-    height: 130px;
-}
-
-/* ######################## For welcome page ############# */
-
-.welcomeBanner {
-    heigth: 100px;
-}
-
-.flexCentered {
-    display: flex;
-    justify-content: center;
-    /* align horizontal */
-    align-items: center;
-}
-
-.height100p {
-    height: 100%;
-}
-
-/* ########################################### */
-
-/*                the form elements            */
-
-/* ########################################### */
-
-.form-control {
-    font-size: 1.6rem;
-}
-
-.btn {
-    white-space: normal;
-    font-size: 1.6rem;
-}
-
-/* when the buttons are hovered */
-
-.btn-primary:hover {}
-
-.btn-primary {
-    border-color: #132577;
-    background-color: #132577
-}
-
-/* when the buttons are disabled */
-
-.btn-primary.disabled {
-    background-color: #132577;
-    border-color: #132577;
-    cursor: not-allowed;
-}
-
-.btn.disabled {
-    opacity: .50
-}
-
-/* ################# esrf logo ############### */
-
-#logo {
-    height: 50px;
-}
-
-/* ############### right side metadata ##########*/
-
-/* ######################################################### */
-
-/* ##         the please-wait-loading-animation           ## */
-
-/* ######################################################### */
-
-/* Start by setting display:none to make this hidden.
- *    Then we position it in relation to the viewport window
- *    with position:fixed. Width, height, top and left speak
- *    for themselves. Background we set to 80% white with
- our animation centered, and no-repeating */
-
-.modal {
-    display: none;
-    position: absolute;
-    z-index: 1000;
-    top: 82px;
-    bottom: 60px;
-    background: rgba( 0, 0, 0, .05) url('../src/images/ajaxloader.gif') 50% 50% no-repeat;
-}
-
-/* When the body has the loading class, we turn
- the scrollbar off with overflow:hidden */
-
-body.loading {
-    overflow: hidden;
-}
-
-/* Anytime the body has the loading class, our
- modal element will be visible */
-
-body.loading .modal {
-    display: block;
-}
-
-/* ######################################################### */
-
-/* sets the display of the element to flex */
-
-.flex {
-    display: flex;
-}
\ No newline at end of file
diff --git a/www/dev.html b/www/dev.html
deleted file mode 100644
index 2e9f6d7..0000000
--- a/www/dev.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!DOCTYPE html>
-<html>
-   <head>
-      <meta charset="UTF-8">
-         <title> ESRF - DOI </title>
-         <link rel="icon" href="/src/images/favicon.ico">
-         
-         <script src="min/components.min.js"></script>
-         <!-- <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"> -->
-     
-         <!-- Using grunt-wiredep, the proper js files from bower components are included below -->
-         <!-- bower:js -->
-         <script src="bower_components/jquery/dist/jquery.js"></script>
-         <script src="bower_components/dustjs-linkedin/dist/dust-full.min.js"></script>
-         <script src="bower_components/bootstrap/dist/js/bootstrap.js"></script>
-         <script src="bower_components/dustjs-helpers/dist/dust-helpers.min.js"></script>
-         <script src="bower_components/lodash/lodash.js"></script>
-         <script src="bower_components/moment/moment.js"></script>
-         <!-- endbower -->
-         
-         <!-- Using grunt-include-source, the proper js files created by us (not minified) are included below -->
-         <script src="src/author.js"></script>
-         <script src="src/beamlineurl.js"></script>
-         <script src="src/citation.js"></script>
-         <script src="src/constants.js"></script>
-         <script src="src/doicontroller.js"></script>
-         <script src="src/doiData.js"></script>
-         <script src="src/doiview.js"></script>
-         <script src="src/ESRF-DC-142893590.js"></script>
-         <script src="src/ESRF-DC-142915526.js"></script>
-         <script src="src/event.js"></script>
-         <script src="src/experimentalreportcontroller.js"></script>
-         <script src="src/googleMetadataObject.js"></script>
-         <script src="src/jsonextractor.js"></script>
-         <script src="src/metadataTableHelper.js"></script>
-            
-
-         <!-- bower:css -->
-         <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css" />
-         <!-- endbower -->
-
-         <!-- Using grunt-include-source, the proper all dustjs templates files (not minified are included below -->
-         <script src="min/precompiled.templates.min.js"></script>
-      
-         <link rel="stylesheet" href="/min/output.min.css" >   
-     <script type="text/javascript">
-       $(document).ready(function() {                         
-         var doi = document.location.search.substring(5);
-         if (doi==="") {
-           alert ("Please use dev.html page as follow .../dev.html?DOI=prefix/suffix");
-         } else {
-           new DOIController(new DOIView()).getData(doi);
-         }
-       });      
-     </script>
-   </head>
-   <body>
-      <div class="container-fluid">
-         <div class="row align-items-center blueBackground">
-            <div class="col-12 col-sm-4" > <img id="logo" style="height:80px;" src="/src/images/esrflogo.png" alt="the ESRF logo"> </img> </div>
-            <div class="col"> </div>
-            <div class="col-auto">
-               <div class="whiteFont font-3p2rem" id="doiValue">
-                 <!-- filled by the js code -->
-               </div>
-            </div>
-         </div>
-      </div>
-
-      <div id="main"></div>
-      <div id='error' ></div>
-      
-      <div class="modal">
-        <!-- nothing to write here -->
-      </div>
-            <footer class="footer">
-         <div class="container-fluid">
-            <div class="row">
-               <div class="col-12 col-md-5" >
-                   <p><a style='font-weight:bold;' href="http://www.esrf.eu">European Synchrotron Radiation Facility</a></p>
-               </div>
-               <div class="col-12 col-md-2" >
-                <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">
-                    <img id="licenceImage" alt="Creative Commons License" style="border-width:0" src="/src/images/88x31.png" />
-                </a>
-               </div>
-               <div class="col-12 col-md-5">
-                  <p class="float-right" style="font-size:12px;display:block;" > Access to data is governed by the <a href="http://www.esrf.eu/files/live/sites/www/files/about/organisation/ESRF%20data%20policy-web.pdf" target="_blank">ESRF data policy</a>.</p>
-               </div>
-            </div>
-         </div>
-      </footer>
-   </body>
-</html>
diff --git a/www/dev.tpl.html b/www/dev.tpl.html
deleted file mode 100644
index 911955b..0000000
--- a/www/dev.tpl.html
+++ /dev/null
@@ -1,74 +0,0 @@
-<!DOCTYPE html>
-<html>
-   <head>
-      <meta charset="UTF-8">
-         <title> ESRF - DOI </title>
-         <link rel="icon" href="/src/images/favicon.ico">
-         
-         <script src="min/components.min.js"></script>
-         <!-- <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"> -->
-     
-         <!-- Using grunt-wiredep, the proper js files from bower components are included below -->
-         <!-- bower:js -->
-         <!-- endbower -->
-         
-         <!-- Using grunt-include-source, the proper js files created by us (not minified) are included below -->
-         <!-- include: "type": "js", "files": "src/*.js" -->
-            
-
-         <!-- bower:css -->
-         <!-- endbower -->
-
-         <!-- Using grunt-include-source, the proper all dustjs templates files (not minified are included below -->
-         <!-- include: "type": "js", "files": "min/precompiled.templates.min.js" -->
-      
-         <link rel="stylesheet" href="/min/output.min.css" >   
-     <script type="text/javascript">
-       $(document).ready(function() {                         
-         var doi = document.location.search.substring(5);
-         if (doi==="") {
-           alert ("Please use dev.html page as follow .../dev.html?DOI=prefix/suffix");
-         } else {
-           new DOIController(new DOIView()).getData(doi);
-         }
-       });      
-     </script>
-   </head>
-   <body>
-      <div class="container-fluid">
-         <div class="row align-items-center blueBackground">
-            <div class="col-12 col-sm-4" > <img id="logo" style="height:80px;" src="/src/images/esrflogo.png" alt="the ESRF logo"> </img> </div>
-            <div class="col"> </div>
-            <div class="col-auto">
-               <div class="whiteFont font-3p2rem" id="doiValue">
-                 <!-- filled by the js code -->
-               </div>
-            </div>
-         </div>
-      </div>
-
-      <div id="main"></div>
-      <div id='error' ></div>
-      
-      <div class="modal">
-        <!-- nothing to write here -->
-      </div>
-            <footer class="footer">
-         <div class="container-fluid">
-            <div class="row">
-               <div class="col-12 col-md-5" >
-                   <p><a style='font-weight:bold;' href="http://www.esrf.eu">European Synchrotron Radiation Facility</a></p>
-               </div>
-               <div class="col-12 col-md-2" >
-                <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">
-                    <img id="licenceImage" alt="Creative Commons License" style="border-width:0" src="/src/images/88x31.png" />
-                </a>
-               </div>
-               <div class="col-12 col-md-5">
-                  <p class="float-right" style="font-size:12px;display:block;" > Access to data is governed by the <a href="http://www.esrf.eu/files/live/sites/www/files/about/organisation/ESRF%20data%20policy-web.pdf" target="_blank">ESRF data policy</a>.</p>
-               </div>
-            </div>
-         </div>
-      </footer>
-   </body>
-</html>
diff --git a/www/googlea9107bd1e2baeb72.html b/www/googlea9107bd1e2baeb72.html
deleted file mode 100644
index bb9874c..0000000
--- a/www/googlea9107bd1e2baeb72.html
+++ /dev/null
@@ -1 +0,0 @@
-google-site-verification: googlea9107bd1e2baeb72.html
\ No newline at end of file
diff --git a/www/index.html b/www/index.html
deleted file mode 100644
index 1cbea7a..0000000
--- a/www/index.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!DOCTYPE html>
-<html>
-
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-    <link rel="icon" href="/src/images/favicon.ico">
-
-    <title> ESRF - DOI </title>
-
-    <!-- <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"> -->
-    <link rel="stylesheet" href="/min/output.min.css">
-
-    <script src="/min/components.min.js"></script>
-    <script src="/min/precompiled.templates.min.js"></script>
-    <script src="/min/doi.min.js"></script>
-
-    <script type="text/javascript">
-        $(document).ready(function () {
-            var doi = document.location.pathname.substring(1, document.location.pathname.length);
-            var controller = new DOIController(new DOIView());
-            if (doi != "") {
-                controller.setOrigin("index");
-            }
-            else {
-                controller.setOrigin("welcome-page");
-            }
-            controller.displayMainContent(doi);
-        });
-
-        // search the doi entered in the search box
-        function searchDOI() {
-            var doi = $('#doiSearchBox').val();
-            if (!doi) { doi = $('#doiSearchBox').attr('placeholder') }
-            var controller = new DOIController(new DOIView());
-            controller.setOrigin("welcome-page");
-            controller.getData(doi);
-        };
-
-    </script>
-</head>
-
-<body>
-    <div class="align-items-center blueBackground" style="display:flex; flex-wrap: wrap">
-        <div style="flex: 0 0 auto; padding-left: 10px;">
-            <img id="logo" style="height:80px;" src="/src/images/esrflogo.png" alt="the ESRF logo">
-        </div>
-        <div style="flex: 1 1 auto; word-wrap: break-word;">
-            <div class="whiteFont font-3p2rem" style="text-align: right; padding-right: 10px" id="doiValue">
-                <!-- filled by the js code -->
-            </div>
-        </div>
-    </div>
-
-    <div id='main'></div>
-    <div id='error'></div>
-    <div class="modal">
-        <!-- nothing to write here -->
-    </div>
-
-    <footer class="footer">
-        <div class="container-fluid">
-            <div class="row">
-                <div class="col-12 col-md-5">
-                    <p id="footerLeft">
-                        <a style='font-weight:bold;' href="http://www.esrf.eu">European Synchrotron Radiation Facility</a>
-                    </p>
-                </div>
-                <div class="col-12 col-md-2">
-                    <p>
-                        <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">
-                            <img id="licenceImage" alt="Creative Commons License" style="border-width:0" src="/src/images/88x31.png" />
-                        </a>
-
-
-                    </p>
-                </div>
-                <div class="col-12 col-md-5">
-                    <p id="footerRight" style="font-size:12px;">
-                        Access to data is governed by the
-                        <a href="http://www.esrf.eu/files/live/sites/www/files/about/organisation/ESRF%20data%20policy-web.pdf"
-                            target="_blank">
-                            ESRF data policy
-                        </a>.
-                    </p>
-                </div>
-            </div>
-        </div>
-    </footer>
-</body>
-
-</html>
\ No newline at end of file
diff --git a/www/karma.conf.js b/www/karma.conf.js
deleted file mode 100644
index f62aa7f..0000000
--- a/www/karma.conf.js
+++ /dev/null
@@ -1,74 +0,0 @@
-// Karma configuration
-// Generated on Thu Oct 11 2018 23:09:22 GMT+0200 (CEST)
-
-module.exports = function (config) {
-    config.set({
-        // base path that will be used to resolve all patterns (eg. files, exclude)
-        basePath: '',
-
-        // frameworks to use
-        // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-        frameworks: ['jasmine', 'browserify'],
-
-        // list of files / patterns to load in the browser
-        files: [
-            'src/beamlineurl.js',
-            'src/constants.js',
-            'src/doicontroller.js',
-            'src/doiview.js',
-            'src/doiData.js',
-            'src/experimentalreportcontroller.js',
-            'src/event.js',
-            'src/jsonextractor.js',
-            'src/googleMetadataObject.js',
-            'tests/jsonExtractor.test.js',
-            'tests/doiController.test.js',
-            'tests/doiData.test.js',
-            'tests/googleMetadataObject.test.js',
-            'bower_components/lodash/lodash.js',
-            'bower_components/moment/moment.js'
-        ],
-
-        // list of files / patterns to exclude
-        exclude: [
-        ],
-
-        // preprocess matching files before serving them to the browser
-        // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
-        preprocessors: {
-            'tests/jsonExtractor.test.js': ['browserify'],
-            'tests/googleMetadataObject.test.js': ['browserify']
-        },
-
-        // test results reporter to use
-        // possible values: 'dots', 'progress'
-        // available reporters: https://npmjs.org/browse/keyword/karma-reporter
-        reporters: ['progress'],
-
-        // web server port
-        port: 9876,
-
-        // enable / disable colors in the output (reporters and logs)
-        colors: true,
-
-        // level of logging
-        // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
-        logLevel: config.LOG_INFO,
-
-        // enable / disable watching file and executing tests whenever any file changes
-        autoWatch: true,
-
-        // start these browsers
-        // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-        browsers: ['Firefox', 'Chrome'],
-        //browsers: ['Firefox'],
-
-        // Continuous Integration mode
-        // if true, Karma captures browsers, runs the tests and exits
-        singleRun: false,
-
-        // Concurrency level
-        // how many browser should be started simultaneous
-        concurrency: Infinity
-    })
-}
diff --git a/www/min/components.min.js b/www/min/components.min.js
deleted file mode 100644
index 5658ba7..0000000
--- a/www/min/components.min.js
+++ /dev/null
@@ -1,17691 +0,0 @@
-(function(global, factory) {
-    "use strict";
-    if (typeof module === "object" && typeof module.exports === "object") {
-        module.exports = global.document ? factory(global, true) : function(w) {
-            if (!w.document) {
-                throw new Error("jQuery requires a window with a document");
-            }
-            return factory(w);
-        };
-    } else {
-        factory(global);
-    }
-})(typeof window !== "undefined" ? window : this, function(window, noGlobal) {
-    "use strict";
-    var arr = [];
-    var getProto = Object.getPrototypeOf;
-    var slice = arr.slice;
-    var flat = arr.flat ? function(array) {
-        return arr.flat.call(array);
-    } : function(array) {
-        return arr.concat.apply([], array);
-    };
-    var push = arr.push;
-    var indexOf = arr.indexOf;
-    var class2type = {};
-    var toString = class2type.toString;
-    var hasOwn = class2type.hasOwnProperty;
-    var fnToString = hasOwn.toString;
-    var ObjectFunctionString = fnToString.call(Object);
-    var support = {};
-    var isFunction = function isFunction(obj) {
-        return typeof obj === "function" && typeof obj.nodeType !== "number" && typeof obj.item !== "function";
-    };
-    var isWindow = function isWindow(obj) {
-        return obj != null && obj === obj.window;
-    };
-    var document = window.document;
-    var preservedScriptAttributes = {
-        type: true,
-        src: true,
-        nonce: true,
-        noModule: true
-    };
-    function DOMEval(code, node, doc) {
-        doc = doc || document;
-        var i, val, script = doc.createElement("script");
-        script.text = code;
-        if (node) {
-            for (i in preservedScriptAttributes) {
-                val = node[i] || node.getAttribute && node.getAttribute(i);
-                if (val) {
-                    script.setAttribute(i, val);
-                }
-            }
-        }
-        doc.head.appendChild(script).parentNode.removeChild(script);
-    }
-    function toType(obj) {
-        if (obj == null) {
-            return obj + "";
-        }
-        return typeof obj === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : typeof obj;
-    }
-    var version = "3.6.0", jQuery = function(selector, context) {
-        return new jQuery.fn.init(selector, context);
-    };
-    jQuery.fn = jQuery.prototype = {
-        jquery: version,
-        constructor: jQuery,
-        length: 0,
-        toArray: function() {
-            return slice.call(this);
-        },
-        get: function(num) {
-            if (num == null) {
-                return slice.call(this);
-            }
-            return num < 0 ? this[num + this.length] : this[num];
-        },
-        pushStack: function(elems) {
-            var ret = jQuery.merge(this.constructor(), elems);
-            ret.prevObject = this;
-            return ret;
-        },
-        each: function(callback) {
-            return jQuery.each(this, callback);
-        },
-        map: function(callback) {
-            return this.pushStack(jQuery.map(this, function(elem, i) {
-                return callback.call(elem, i, elem);
-            }));
-        },
-        slice: function() {
-            return this.pushStack(slice.apply(this, arguments));
-        },
-        first: function() {
-            return this.eq(0);
-        },
-        last: function() {
-            return this.eq(-1);
-        },
-        even: function() {
-            return this.pushStack(jQuery.grep(this, function(_elem, i) {
-                return (i + 1) % 2;
-            }));
-        },
-        odd: function() {
-            return this.pushStack(jQuery.grep(this, function(_elem, i) {
-                return i % 2;
-            }));
-        },
-        eq: function(i) {
-            var len = this.length, j = +i + (i < 0 ? len : 0);
-            return this.pushStack(j >= 0 && j < len ? [ this[j] ] : []);
-        },
-        end: function() {
-            return this.prevObject || this.constructor();
-        },
-        push: push,
-        sort: arr.sort,
-        splice: arr.splice
-    };
-    jQuery.extend = jQuery.fn.extend = function() {
-        var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false;
-        if (typeof target === "boolean") {
-            deep = target;
-            target = arguments[i] || {};
-            i++;
-        }
-        if (typeof target !== "object" && !isFunction(target)) {
-            target = {};
-        }
-        if (i === length) {
-            target = this;
-            i--;
-        }
-        for (;i < length; i++) {
-            if ((options = arguments[i]) != null) {
-                for (name in options) {
-                    copy = options[name];
-                    if (name === "__proto__" || target === copy) {
-                        continue;
-                    }
-                    if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {
-                        src = target[name];
-                        if (copyIsArray && !Array.isArray(src)) {
-                            clone = [];
-                        } else if (!copyIsArray && !jQuery.isPlainObject(src)) {
-                            clone = {};
-                        } else {
-                            clone = src;
-                        }
-                        copyIsArray = false;
-                        target[name] = jQuery.extend(deep, clone, copy);
-                    } else if (copy !== undefined) {
-                        target[name] = copy;
-                    }
-                }
-            }
-        }
-        return target;
-    };
-    jQuery.extend({
-        expando: "jQuery" + (version + Math.random()).replace(/\D/g, ""),
-        isReady: true,
-        error: function(msg) {
-            throw new Error(msg);
-        },
-        noop: function() {},
-        isPlainObject: function(obj) {
-            var proto, Ctor;
-            if (!obj || toString.call(obj) !== "[object Object]") {
-                return false;
-            }
-            proto = getProto(obj);
-            if (!proto) {
-                return true;
-            }
-            Ctor = hasOwn.call(proto, "constructor") && proto.constructor;
-            return typeof Ctor === "function" && fnToString.call(Ctor) === ObjectFunctionString;
-        },
-        isEmptyObject: function(obj) {
-            var name;
-            for (name in obj) {
-                return false;
-            }
-            return true;
-        },
-        globalEval: function(code, options, doc) {
-            DOMEval(code, {
-                nonce: options && options.nonce
-            }, doc);
-        },
-        each: function(obj, callback) {
-            var length, i = 0;
-            if (isArrayLike(obj)) {
-                length = obj.length;
-                for (;i < length; i++) {
-                    if (callback.call(obj[i], i, obj[i]) === false) {
-                        break;
-                    }
-                }
-            } else {
-                for (i in obj) {
-                    if (callback.call(obj[i], i, obj[i]) === false) {
-                        break;
-                    }
-                }
-            }
-            return obj;
-        },
-        makeArray: function(arr, results) {
-            var ret = results || [];
-            if (arr != null) {
-                if (isArrayLike(Object(arr))) {
-                    jQuery.merge(ret, typeof arr === "string" ? [ arr ] : arr);
-                } else {
-                    push.call(ret, arr);
-                }
-            }
-            return ret;
-        },
-        inArray: function(elem, arr, i) {
-            return arr == null ? -1 : indexOf.call(arr, elem, i);
-        },
-        merge: function(first, second) {
-            var len = +second.length, j = 0, i = first.length;
-            for (;j < len; j++) {
-                first[i++] = second[j];
-            }
-            first.length = i;
-            return first;
-        },
-        grep: function(elems, callback, invert) {
-            var callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert;
-            for (;i < length; i++) {
-                callbackInverse = !callback(elems[i], i);
-                if (callbackInverse !== callbackExpect) {
-                    matches.push(elems[i]);
-                }
-            }
-            return matches;
-        },
-        map: function(elems, callback, arg) {
-            var length, value, i = 0, ret = [];
-            if (isArrayLike(elems)) {
-                length = elems.length;
-                for (;i < length; i++) {
-                    value = callback(elems[i], i, arg);
-                    if (value != null) {
-                        ret.push(value);
-                    }
-                }
-            } else {
-                for (i in elems) {
-                    value = callback(elems[i], i, arg);
-                    if (value != null) {
-                        ret.push(value);
-                    }
-                }
-            }
-            return flat(ret);
-        },
-        guid: 1,
-        support: support
-    });
-    if (typeof Symbol === "function") {
-        jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];
-    }
-    jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(_i, name) {
-        class2type["[object " + name + "]"] = name.toLowerCase();
-    });
-    function isArrayLike(obj) {
-        var length = !!obj && "length" in obj && obj.length, type = toType(obj);
-        if (isFunction(obj) || isWindow(obj)) {
-            return false;
-        }
-        return type === "array" || length === 0 || typeof length === "number" && length > 0 && length - 1 in obj;
-    }
-    var Sizzle = function(window) {
-        var i, support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, setDocument, document, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains, expando = "sizzle" + 1 * new Date(), preferredDoc = window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), nonnativeSelectorCache = createCache(), sortOrder = function(a, b) {
-            if (a === b) {
-                hasDuplicate = true;
-            }
-            return 0;
-        }, hasOwn = {}.hasOwnProperty, arr = [], pop = arr.pop, pushNative = arr.push, push = arr.push, slice = arr.slice, indexOf = function(list, elem) {
-            var i = 0, len = list.length;
-            for (;i < len; i++) {
-                if (list[i] === elem) {
-                    return i;
-                }
-            }
-            return -1;
-        }, booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + "ismap|loop|multiple|open|readonly|required|scoped", whitespace = "[\\x20\\t\\r\\n\\f]", identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + "*([*^$|!~]?=)" + whitespace + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]", pseudos = ":(" + identifier + ")(?:\\((" + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + ".*" + ")\\)|)", rwhitespace = new RegExp(whitespace + "+", "g"), rtrim = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g"), rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"), rcombinators = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"), rdescend = new RegExp(whitespace + "|>"), rpseudo = new RegExp(pseudos), ridentifier = new RegExp("^" + identifier + "$"), matchExpr = {
-            ID: new RegExp("^#(" + identifier + ")"),
-            CLASS: new RegExp("^\\.(" + identifier + ")"),
-            TAG: new RegExp("^(" + identifier + "|[*])"),
-            ATTR: new RegExp("^" + attributes),
-            PSEUDO: new RegExp("^" + pseudos),
-            CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i"),
-            bool: new RegExp("^(?:" + booleans + ")$", "i"),
-            needsContext: new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i")
-        }, rhtml = /HTML$/i, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rnative = /^[^{]+\{\s*\[native \w/, rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, runescape = new RegExp("\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g"), funescape = function(escape, nonHex) {
-            var high = "0x" + escape.slice(1) - 65536;
-            return nonHex ? nonHex : high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320);
-        }, rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, fcssescape = function(ch, asCodePoint) {
-            if (asCodePoint) {
-                if (ch === "\0") {
-                    return "�";
-                }
-                return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " ";
-            }
-            return "\\" + ch;
-        }, unloadHandler = function() {
-            setDocument();
-        }, inDisabledFieldset = addCombinator(function(elem) {
-            return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
-        }, {
-            dir: "parentNode",
-            next: "legend"
-        });
-        try {
-            push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes);
-            arr[preferredDoc.childNodes.length].nodeType;
-        } catch (e) {
-            push = {
-                apply: arr.length ? function(target, els) {
-                    pushNative.apply(target, slice.call(els));
-                } : function(target, els) {
-                    var j = target.length, i = 0;
-                    while (target[j++] = els[i++]) {}
-                    target.length = j - 1;
-                }
-            };
-        }
-        function Sizzle(selector, context, results, seed) {
-            var m, i, elem, nid, match, groups, newSelector, newContext = context && context.ownerDocument, nodeType = context ? context.nodeType : 9;
-            results = results || [];
-            if (typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {
-                return results;
-            }
-            if (!seed) {
-                setDocument(context);
-                context = context || document;
-                if (documentIsHTML) {
-                    if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {
-                        if (m = match[1]) {
-                            if (nodeType === 9) {
-                                if (elem = context.getElementById(m)) {
-                                    if (elem.id === m) {
-                                        results.push(elem);
-                                        return results;
-                                    }
-                                } else {
-                                    return results;
-                                }
-                            } else {
-                                if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {
-                                    results.push(elem);
-                                    return results;
-                                }
-                            }
-                        } else if (match[2]) {
-                            push.apply(results, context.getElementsByTagName(selector));
-                            return results;
-                        } else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {
-                            push.apply(results, context.getElementsByClassName(m));
-                            return results;
-                        }
-                    }
-                    if (support.qsa && !nonnativeSelectorCache[selector + " "] && (!rbuggyQSA || !rbuggyQSA.test(selector)) && (nodeType !== 1 || context.nodeName.toLowerCase() !== "object")) {
-                        newSelector = selector;
-                        newContext = context;
-                        if (nodeType === 1 && (rdescend.test(selector) || rcombinators.test(selector))) {
-                            newContext = rsibling.test(selector) && testContext(context.parentNode) || context;
-                            if (newContext !== context || !support.scope) {
-                                if (nid = context.getAttribute("id")) {
-                                    nid = nid.replace(rcssescape, fcssescape);
-                                } else {
-                                    context.setAttribute("id", nid = expando);
-                                }
-                            }
-                            groups = tokenize(selector);
-                            i = groups.length;
-                            while (i--) {
-                                groups[i] = (nid ? "#" + nid : ":scope") + " " + toSelector(groups[i]);
-                            }
-                            newSelector = groups.join(",");
-                        }
-                        try {
-                            push.apply(results, newContext.querySelectorAll(newSelector));
-                            return results;
-                        } catch (qsaError) {
-                            nonnativeSelectorCache(selector, true);
-                        } finally {
-                            if (nid === expando) {
-                                context.removeAttribute("id");
-                            }
-                        }
-                    }
-                }
-            }
-            return select(selector.replace(rtrim, "$1"), context, results, seed);
-        }
-        function createCache() {
-            var keys = [];
-            function cache(key, value) {
-                if (keys.push(key + " ") > Expr.cacheLength) {
-                    delete cache[keys.shift()];
-                }
-                return cache[key + " "] = value;
-            }
-            return cache;
-        }
-        function markFunction(fn) {
-            fn[expando] = true;
-            return fn;
-        }
-        function assert(fn) {
-            var el = document.createElement("fieldset");
-            try {
-                return !!fn(el);
-            } catch (e) {
-                return false;
-            } finally {
-                if (el.parentNode) {
-                    el.parentNode.removeChild(el);
-                }
-                el = null;
-            }
-        }
-        function addHandle(attrs, handler) {
-            var arr = attrs.split("|"), i = arr.length;
-            while (i--) {
-                Expr.attrHandle[arr[i]] = handler;
-            }
-        }
-        function siblingCheck(a, b) {
-            var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex;
-            if (diff) {
-                return diff;
-            }
-            if (cur) {
-                while (cur = cur.nextSibling) {
-                    if (cur === b) {
-                        return -1;
-                    }
-                }
-            }
-            return a ? 1 : -1;
-        }
-        function createInputPseudo(type) {
-            return function(elem) {
-                var name = elem.nodeName.toLowerCase();
-                return name === "input" && elem.type === type;
-            };
-        }
-        function createButtonPseudo(type) {
-            return function(elem) {
-                var name = elem.nodeName.toLowerCase();
-                return (name === "input" || name === "button") && elem.type === type;
-            };
-        }
-        function createDisabledPseudo(disabled) {
-            return function(elem) {
-                if ("form" in elem) {
-                    if (elem.parentNode && elem.disabled === false) {
-                        if ("label" in elem) {
-                            if ("label" in elem.parentNode) {
-                                return elem.parentNode.disabled === disabled;
-                            } else {
-                                return elem.disabled === disabled;
-                            }
-                        }
-                        return elem.isDisabled === disabled || elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;
-                    }
-                    return elem.disabled === disabled;
-                } else if ("label" in elem) {
-                    return elem.disabled === disabled;
-                }
-                return false;
-            };
-        }
-        function createPositionalPseudo(fn) {
-            return markFunction(function(argument) {
-                argument = +argument;
-                return markFunction(function(seed, matches) {
-                    var j, matchIndexes = fn([], seed.length, argument), i = matchIndexes.length;
-                    while (i--) {
-                        if (seed[j = matchIndexes[i]]) {
-                            seed[j] = !(matches[j] = seed[j]);
-                        }
-                    }
-                });
-            });
-        }
-        function testContext(context) {
-            return context && typeof context.getElementsByTagName !== "undefined" && context;
-        }
-        support = Sizzle.support = {};
-        isXML = Sizzle.isXML = function(elem) {
-            var namespace = elem && elem.namespaceURI, docElem = elem && (elem.ownerDocument || elem).documentElement;
-            return !rhtml.test(namespace || docElem && docElem.nodeName || "HTML");
-        };
-        setDocument = Sizzle.setDocument = function(node) {
-            var hasCompare, subWindow, doc = node ? node.ownerDocument || node : preferredDoc;
-            if (doc == document || doc.nodeType !== 9 || !doc.documentElement) {
-                return document;
-            }
-            document = doc;
-            docElem = document.documentElement;
-            documentIsHTML = !isXML(document);
-            if (preferredDoc != document && (subWindow = document.defaultView) && subWindow.top !== subWindow) {
-                if (subWindow.addEventListener) {
-                    subWindow.addEventListener("unload", unloadHandler, false);
-                } else if (subWindow.attachEvent) {
-                    subWindow.attachEvent("onunload", unloadHandler);
-                }
-            }
-            support.scope = assert(function(el) {
-                docElem.appendChild(el).appendChild(document.createElement("div"));
-                return typeof el.querySelectorAll !== "undefined" && !el.querySelectorAll(":scope fieldset div").length;
-            });
-            support.attributes = assert(function(el) {
-                el.className = "i";
-                return !el.getAttribute("className");
-            });
-            support.getElementsByTagName = assert(function(el) {
-                el.appendChild(document.createComment(""));
-                return !el.getElementsByTagName("*").length;
-            });
-            support.getElementsByClassName = rnative.test(document.getElementsByClassName);
-            support.getById = assert(function(el) {
-                docElem.appendChild(el).id = expando;
-                return !document.getElementsByName || !document.getElementsByName(expando).length;
-            });
-            if (support.getById) {
-                Expr.filter["ID"] = function(id) {
-                    var attrId = id.replace(runescape, funescape);
-                    return function(elem) {
-                        return elem.getAttribute("id") === attrId;
-                    };
-                };
-                Expr.find["ID"] = function(id, context) {
-                    if (typeof context.getElementById !== "undefined" && documentIsHTML) {
-                        var elem = context.getElementById(id);
-                        return elem ? [ elem ] : [];
-                    }
-                };
-            } else {
-                Expr.filter["ID"] = function(id) {
-                    var attrId = id.replace(runescape, funescape);
-                    return function(elem) {
-                        var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-                        return node && node.value === attrId;
-                    };
-                };
-                Expr.find["ID"] = function(id, context) {
-                    if (typeof context.getElementById !== "undefined" && documentIsHTML) {
-                        var node, i, elems, elem = context.getElementById(id);
-                        if (elem) {
-                            node = elem.getAttributeNode("id");
-                            if (node && node.value === id) {
-                                return [ elem ];
-                            }
-                            elems = context.getElementsByName(id);
-                            i = 0;
-                            while (elem = elems[i++]) {
-                                node = elem.getAttributeNode("id");
-                                if (node && node.value === id) {
-                                    return [ elem ];
-                                }
-                            }
-                        }
-                        return [];
-                    }
-                };
-            }
-            Expr.find["TAG"] = support.getElementsByTagName ? function(tag, context) {
-                if (typeof context.getElementsByTagName !== "undefined") {
-                    return context.getElementsByTagName(tag);
-                } else if (support.qsa) {
-                    return context.querySelectorAll(tag);
-                }
-            } : function(tag, context) {
-                var elem, tmp = [], i = 0, results = context.getElementsByTagName(tag);
-                if (tag === "*") {
-                    while (elem = results[i++]) {
-                        if (elem.nodeType === 1) {
-                            tmp.push(elem);
-                        }
-                    }
-                    return tmp;
-                }
-                return results;
-            };
-            Expr.find["CLASS"] = support.getElementsByClassName && function(className, context) {
-                if (typeof context.getElementsByClassName !== "undefined" && documentIsHTML) {
-                    return context.getElementsByClassName(className);
-                }
-            };
-            rbuggyMatches = [];
-            rbuggyQSA = [];
-            if (support.qsa = rnative.test(document.querySelectorAll)) {
-                assert(function(el) {
-                    var input;
-                    docElem.appendChild(el).innerHTML = "<a id='" + expando + "'></a>" + "<select id='" + expando + "-\r\\' msallowcapture=''>" + "<option selected=''></option></select>";
-                    if (el.querySelectorAll("[msallowcapture^='']").length) {
-                        rbuggyQSA.push("[*^$]=" + whitespace + "*(?:''|\"\")");
-                    }
-                    if (!el.querySelectorAll("[selected]").length) {
-                        rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")");
-                    }
-                    if (!el.querySelectorAll("[id~=" + expando + "-]").length) {
-                        rbuggyQSA.push("~=");
-                    }
-                    input = document.createElement("input");
-                    input.setAttribute("name", "");
-                    el.appendChild(input);
-                    if (!el.querySelectorAll("[name='']").length) {
-                        rbuggyQSA.push("\\[" + whitespace + "*name" + whitespace + "*=" + whitespace + "*(?:''|\"\")");
-                    }
-                    if (!el.querySelectorAll(":checked").length) {
-                        rbuggyQSA.push(":checked");
-                    }
-                    if (!el.querySelectorAll("a#" + expando + "+*").length) {
-                        rbuggyQSA.push(".#.+[+~]");
-                    }
-                    el.querySelectorAll("\\\f");
-                    rbuggyQSA.push("[\\r\\n\\f]");
-                });
-                assert(function(el) {
-                    el.innerHTML = "<a href='' disabled='disabled'></a>" + "<select disabled='disabled'><option/></select>";
-                    var input = document.createElement("input");
-                    input.setAttribute("type", "hidden");
-                    el.appendChild(input).setAttribute("name", "D");
-                    if (el.querySelectorAll("[name=d]").length) {
-                        rbuggyQSA.push("name" + whitespace + "*[*^$|!~]?=");
-                    }
-                    if (el.querySelectorAll(":enabled").length !== 2) {
-                        rbuggyQSA.push(":enabled", ":disabled");
-                    }
-                    docElem.appendChild(el).disabled = true;
-                    if (el.querySelectorAll(":disabled").length !== 2) {
-                        rbuggyQSA.push(":enabled", ":disabled");
-                    }
-                    el.querySelectorAll("*,:x");
-                    rbuggyQSA.push(",.*:");
-                });
-            }
-            if (support.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) {
-                assert(function(el) {
-                    support.disconnectedMatch = matches.call(el, "*");
-                    matches.call(el, "[s!='']:x");
-                    rbuggyMatches.push("!=", pseudos);
-                });
-            }
-            rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|"));
-            rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join("|"));
-            hasCompare = rnative.test(docElem.compareDocumentPosition);
-            contains = hasCompare || rnative.test(docElem.contains) ? function(a, b) {
-                var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode;
-                return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));
-            } : function(a, b) {
-                if (b) {
-                    while (b = b.parentNode) {
-                        if (b === a) {
-                            return true;
-                        }
-                    }
-                }
-                return false;
-            };
-            sortOrder = hasCompare ? function(a, b) {
-                if (a === b) {
-                    hasDuplicate = true;
-                    return 0;
-                }
-                var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
-                if (compare) {
-                    return compare;
-                }
-                compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1;
-                if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {
-                    if (a == document || a.ownerDocument == preferredDoc && contains(preferredDoc, a)) {
-                        return -1;
-                    }
-                    if (b == document || b.ownerDocument == preferredDoc && contains(preferredDoc, b)) {
-                        return 1;
-                    }
-                    return sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;
-                }
-                return compare & 4 ? -1 : 1;
-            } : function(a, b) {
-                if (a === b) {
-                    hasDuplicate = true;
-                    return 0;
-                }
-                var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [ a ], bp = [ b ];
-                if (!aup || !bup) {
-                    return a == document ? -1 : b == document ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;
-                } else if (aup === bup) {
-                    return siblingCheck(a, b);
-                }
-                cur = a;
-                while (cur = cur.parentNode) {
-                    ap.unshift(cur);
-                }
-                cur = b;
-                while (cur = cur.parentNode) {
-                    bp.unshift(cur);
-                }
-                while (ap[i] === bp[i]) {
-                    i++;
-                }
-                return i ? siblingCheck(ap[i], bp[i]) : ap[i] == preferredDoc ? -1 : bp[i] == preferredDoc ? 1 : 0;
-            };
-            return document;
-        };
-        Sizzle.matches = function(expr, elements) {
-            return Sizzle(expr, null, null, elements);
-        };
-        Sizzle.matchesSelector = function(elem, expr) {
-            setDocument(elem);
-            if (support.matchesSelector && documentIsHTML && !nonnativeSelectorCache[expr + " "] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {
-                try {
-                    var ret = matches.call(elem, expr);
-                    if (ret || support.disconnectedMatch || elem.document && elem.document.nodeType !== 11) {
-                        return ret;
-                    }
-                } catch (e) {
-                    nonnativeSelectorCache(expr, true);
-                }
-            }
-            return Sizzle(expr, document, null, [ elem ]).length > 0;
-        };
-        Sizzle.contains = function(context, elem) {
-            if ((context.ownerDocument || context) != document) {
-                setDocument(context);
-            }
-            return contains(context, elem);
-        };
-        Sizzle.attr = function(elem, name) {
-            if ((elem.ownerDocument || elem) != document) {
-                setDocument(elem);
-            }
-            var fn = Expr.attrHandle[name.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;
-            return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;
-        };
-        Sizzle.escape = function(sel) {
-            return (sel + "").replace(rcssescape, fcssescape);
-        };
-        Sizzle.error = function(msg) {
-            throw new Error("Syntax error, unrecognized expression: " + msg);
-        };
-        Sizzle.uniqueSort = function(results) {
-            var elem, duplicates = [], j = 0, i = 0;
-            hasDuplicate = !support.detectDuplicates;
-            sortInput = !support.sortStable && results.slice(0);
-            results.sort(sortOrder);
-            if (hasDuplicate) {
-                while (elem = results[i++]) {
-                    if (elem === results[i]) {
-                        j = duplicates.push(i);
-                    }
-                }
-                while (j--) {
-                    results.splice(duplicates[j], 1);
-                }
-            }
-            sortInput = null;
-            return results;
-        };
-        getText = Sizzle.getText = function(elem) {
-            var node, ret = "", i = 0, nodeType = elem.nodeType;
-            if (!nodeType) {
-                while (node = elem[i++]) {
-                    ret += getText(node);
-                }
-            } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {
-                if (typeof elem.textContent === "string") {
-                    return elem.textContent;
-                } else {
-                    for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
-                        ret += getText(elem);
-                    }
-                }
-            } else if (nodeType === 3 || nodeType === 4) {
-                return elem.nodeValue;
-            }
-            return ret;
-        };
-        Expr = Sizzle.selectors = {
-            cacheLength: 50,
-            createPseudo: markFunction,
-            match: matchExpr,
-            attrHandle: {},
-            find: {},
-            relative: {
-                ">": {
-                    dir: "parentNode",
-                    first: true
-                },
-                " ": {
-                    dir: "parentNode"
-                },
-                "+": {
-                    dir: "previousSibling",
-                    first: true
-                },
-                "~": {
-                    dir: "previousSibling"
-                }
-            },
-            preFilter: {
-                ATTR: function(match) {
-                    match[1] = match[1].replace(runescape, funescape);
-                    match[3] = (match[3] || match[4] || match[5] || "").replace(runescape, funescape);
-                    if (match[2] === "~=") {
-                        match[3] = " " + match[3] + " ";
-                    }
-                    return match.slice(0, 4);
-                },
-                CHILD: function(match) {
-                    match[1] = match[1].toLowerCase();
-                    if (match[1].slice(0, 3) === "nth") {
-                        if (!match[3]) {
-                            Sizzle.error(match[0]);
-                        }
-                        match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === "even" || match[3] === "odd"));
-                        match[5] = +(match[7] + match[8] || match[3] === "odd");
-                    } else if (match[3]) {
-                        Sizzle.error(match[0]);
-                    }
-                    return match;
-                },
-                PSEUDO: function(match) {
-                    var excess, unquoted = !match[6] && match[2];
-                    if (matchExpr["CHILD"].test(match[0])) {
-                        return null;
-                    }
-                    if (match[3]) {
-                        match[2] = match[4] || match[5] || "";
-                    } else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) {
-                        match[0] = match[0].slice(0, excess);
-                        match[2] = unquoted.slice(0, excess);
-                    }
-                    return match.slice(0, 3);
-                }
-            },
-            filter: {
-                TAG: function(nodeNameSelector) {
-                    var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();
-                    return nodeNameSelector === "*" ? function() {
-                        return true;
-                    } : function(elem) {
-                        return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
-                    };
-                },
-                CLASS: function(className) {
-                    var pattern = classCache[className + " "];
-                    return pattern || (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) && classCache(className, function(elem) {
-                        return pattern.test(typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "");
-                    });
-                },
-                ATTR: function(name, operator, check) {
-                    return function(elem) {
-                        var result = Sizzle.attr(elem, name);
-                        if (result == null) {
-                            return operator === "!=";
-                        }
-                        if (!operator) {
-                            return true;
-                        }
-                        result += "";
-                        return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf(check) === 0 : operator === "*=" ? check && result.indexOf(check) > -1 : operator === "$=" ? check && result.slice(-check.length) === check : operator === "~=" ? (" " + result.replace(rwhitespace, " ") + " ").indexOf(check) > -1 : operator === "|=" ? result === check || result.slice(0, check.length + 1) === check + "-" : false;
-                    };
-                },
-                CHILD: function(type, what, _argument, first, last) {
-                    var simple = type.slice(0, 3) !== "nth", forward = type.slice(-4) !== "last", ofType = what === "of-type";
-                    return first === 1 && last === 0 ? function(elem) {
-                        return !!elem.parentNode;
-                    } : function(elem, _context, xml) {
-                        var cache, uniqueCache, outerCache, node, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType, diff = false;
-                        if (parent) {
-                            if (simple) {
-                                while (dir) {
-                                    node = elem;
-                                    while (node = node[dir]) {
-                                        if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {
-                                            return false;
-                                        }
-                                    }
-                                    start = dir = type === "only" && !start && "nextSibling";
-                                }
-                                return true;
-                            }
-                            start = [ forward ? parent.firstChild : parent.lastChild ];
-                            if (forward && useCache) {
-                                node = parent;
-                                outerCache = node[expando] || (node[expando] = {});
-                                uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
-                                cache = uniqueCache[type] || [];
-                                nodeIndex = cache[0] === dirruns && cache[1];
-                                diff = nodeIndex && cache[2];
-                                node = nodeIndex && parent.childNodes[nodeIndex];
-                                while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {
-                                    if (node.nodeType === 1 && ++diff && node === elem) {
-                                        uniqueCache[type] = [ dirruns, nodeIndex, diff ];
-                                        break;
-                                    }
-                                }
-                            } else {
-                                if (useCache) {
-                                    node = elem;
-                                    outerCache = node[expando] || (node[expando] = {});
-                                    uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
-                                    cache = uniqueCache[type] || [];
-                                    nodeIndex = cache[0] === dirruns && cache[1];
-                                    diff = nodeIndex;
-                                }
-                                if (diff === false) {
-                                    while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {
-                                        if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {
-                                            if (useCache) {
-                                                outerCache = node[expando] || (node[expando] = {});
-                                                uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
-                                                uniqueCache[type] = [ dirruns, diff ];
-                                            }
-                                            if (node === elem) {
-                                                break;
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                            diff -= last;
-                            return diff === first || diff % first === 0 && diff / first >= 0;
-                        }
-                    };
-                },
-                PSEUDO: function(pseudo, argument) {
-                    var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error("unsupported pseudo: " + pseudo);
-                    if (fn[expando]) {
-                        return fn(argument);
-                    }
-                    if (fn.length > 1) {
-                        args = [ pseudo, pseudo, "", argument ];
-                        return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function(seed, matches) {
-                            var idx, matched = fn(seed, argument), i = matched.length;
-                            while (i--) {
-                                idx = indexOf(seed, matched[i]);
-                                seed[idx] = !(matches[idx] = matched[i]);
-                            }
-                        }) : function(elem) {
-                            return fn(elem, 0, args);
-                        };
-                    }
-                    return fn;
-                }
-            },
-            pseudos: {
-                not: markFunction(function(selector) {
-                    var input = [], results = [], matcher = compile(selector.replace(rtrim, "$1"));
-                    return matcher[expando] ? markFunction(function(seed, matches, _context, xml) {
-                        var elem, unmatched = matcher(seed, null, xml, []), i = seed.length;
-                        while (i--) {
-                            if (elem = unmatched[i]) {
-                                seed[i] = !(matches[i] = elem);
-                            }
-                        }
-                    }) : function(elem, _context, xml) {
-                        input[0] = elem;
-                        matcher(input, null, xml, results);
-                        input[0] = null;
-                        return !results.pop();
-                    };
-                }),
-                has: markFunction(function(selector) {
-                    return function(elem) {
-                        return Sizzle(selector, elem).length > 0;
-                    };
-                }),
-                contains: markFunction(function(text) {
-                    text = text.replace(runescape, funescape);
-                    return function(elem) {
-                        return (elem.textContent || getText(elem)).indexOf(text) > -1;
-                    };
-                }),
-                lang: markFunction(function(lang) {
-                    if (!ridentifier.test(lang || "")) {
-                        Sizzle.error("unsupported lang: " + lang);
-                    }
-                    lang = lang.replace(runescape, funescape).toLowerCase();
-                    return function(elem) {
-                        var elemLang;
-                        do {
-                            if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) {
-                                elemLang = elemLang.toLowerCase();
-                                return elemLang === lang || elemLang.indexOf(lang + "-") === 0;
-                            }
-                        } while ((elem = elem.parentNode) && elem.nodeType === 1);
-                        return false;
-                    };
-                }),
-                target: function(elem) {
-                    var hash = window.location && window.location.hash;
-                    return hash && hash.slice(1) === elem.id;
-                },
-                root: function(elem) {
-                    return elem === docElem;
-                },
-                focus: function(elem) {
-                    return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
-                },
-                enabled: createDisabledPseudo(false),
-                disabled: createDisabledPseudo(true),
-                checked: function(elem) {
-                    var nodeName = elem.nodeName.toLowerCase();
-                    return nodeName === "input" && !!elem.checked || nodeName === "option" && !!elem.selected;
-                },
-                selected: function(elem) {
-                    if (elem.parentNode) {
-                        elem.parentNode.selectedIndex;
-                    }
-                    return elem.selected === true;
-                },
-                empty: function(elem) {
-                    for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
-                        if (elem.nodeType < 6) {
-                            return false;
-                        }
-                    }
-                    return true;
-                },
-                parent: function(elem) {
-                    return !Expr.pseudos["empty"](elem);
-                },
-                header: function(elem) {
-                    return rheader.test(elem.nodeName);
-                },
-                input: function(elem) {
-                    return rinputs.test(elem.nodeName);
-                },
-                button: function(elem) {
-                    var name = elem.nodeName.toLowerCase();
-                    return name === "input" && elem.type === "button" || name === "button";
-                },
-                text: function(elem) {
-                    var attr;
-                    return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && ((attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text");
-                },
-                first: createPositionalPseudo(function() {
-                    return [ 0 ];
-                }),
-                last: createPositionalPseudo(function(_matchIndexes, length) {
-                    return [ length - 1 ];
-                }),
-                eq: createPositionalPseudo(function(_matchIndexes, length, argument) {
-                    return [ argument < 0 ? argument + length : argument ];
-                }),
-                even: createPositionalPseudo(function(matchIndexes, length) {
-                    var i = 0;
-                    for (;i < length; i += 2) {
-                        matchIndexes.push(i);
-                    }
-                    return matchIndexes;
-                }),
-                odd: createPositionalPseudo(function(matchIndexes, length) {
-                    var i = 1;
-                    for (;i < length; i += 2) {
-                        matchIndexes.push(i);
-                    }
-                    return matchIndexes;
-                }),
-                lt: createPositionalPseudo(function(matchIndexes, length, argument) {
-                    var i = argument < 0 ? argument + length : argument > length ? length : argument;
-                    for (;--i >= 0; ) {
-                        matchIndexes.push(i);
-                    }
-                    return matchIndexes;
-                }),
-                gt: createPositionalPseudo(function(matchIndexes, length, argument) {
-                    var i = argument < 0 ? argument + length : argument;
-                    for (;++i < length; ) {
-                        matchIndexes.push(i);
-                    }
-                    return matchIndexes;
-                })
-            }
-        };
-        Expr.pseudos["nth"] = Expr.pseudos["eq"];
-        for (i in {
-            radio: true,
-            checkbox: true,
-            file: true,
-            password: true,
-            image: true
-        }) {
-            Expr.pseudos[i] = createInputPseudo(i);
-        }
-        for (i in {
-            submit: true,
-            reset: true
-        }) {
-            Expr.pseudos[i] = createButtonPseudo(i);
-        }
-        function setFilters() {}
-        setFilters.prototype = Expr.filters = Expr.pseudos;
-        Expr.setFilters = new setFilters();
-        tokenize = Sizzle.tokenize = function(selector, parseOnly) {
-            var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + " "];
-            if (cached) {
-                return parseOnly ? 0 : cached.slice(0);
-            }
-            soFar = selector;
-            groups = [];
-            preFilters = Expr.preFilter;
-            while (soFar) {
-                if (!matched || (match = rcomma.exec(soFar))) {
-                    if (match) {
-                        soFar = soFar.slice(match[0].length) || soFar;
-                    }
-                    groups.push(tokens = []);
-                }
-                matched = false;
-                if (match = rcombinators.exec(soFar)) {
-                    matched = match.shift();
-                    tokens.push({
-                        value: matched,
-                        type: match[0].replace(rtrim, " ")
-                    });
-                    soFar = soFar.slice(matched.length);
-                }
-                for (type in Expr.filter) {
-                    if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {
-                        matched = match.shift();
-                        tokens.push({
-                            value: matched,
-                            type: type,
-                            matches: match
-                        });
-                        soFar = soFar.slice(matched.length);
-                    }
-                }
-                if (!matched) {
-                    break;
-                }
-            }
-            return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : tokenCache(selector, groups).slice(0);
-        };
-        function toSelector(tokens) {
-            var i = 0, len = tokens.length, selector = "";
-            for (;i < len; i++) {
-                selector += tokens[i].value;
-            }
-            return selector;
-        }
-        function addCombinator(matcher, combinator, base) {
-            var dir = combinator.dir, skip = combinator.next, key = skip || dir, checkNonElements = base && key === "parentNode", doneName = done++;
-            return combinator.first ? function(elem, context, xml) {
-                while (elem = elem[dir]) {
-                    if (elem.nodeType === 1 || checkNonElements) {
-                        return matcher(elem, context, xml);
-                    }
-                }
-                return false;
-            } : function(elem, context, xml) {
-                var oldCache, uniqueCache, outerCache, newCache = [ dirruns, doneName ];
-                if (xml) {
-                    while (elem = elem[dir]) {
-                        if (elem.nodeType === 1 || checkNonElements) {
-                            if (matcher(elem, context, xml)) {
-                                return true;
-                            }
-                        }
-                    }
-                } else {
-                    while (elem = elem[dir]) {
-                        if (elem.nodeType === 1 || checkNonElements) {
-                            outerCache = elem[expando] || (elem[expando] = {});
-                            uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});
-                            if (skip && skip === elem.nodeName.toLowerCase()) {
-                                elem = elem[dir] || elem;
-                            } else if ((oldCache = uniqueCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {
-                                return newCache[2] = oldCache[2];
-                            } else {
-                                uniqueCache[key] = newCache;
-                                if (newCache[2] = matcher(elem, context, xml)) {
-                                    return true;
-                                }
-                            }
-                        }
-                    }
-                }
-                return false;
-            };
-        }
-        function elementMatcher(matchers) {
-            return matchers.length > 1 ? function(elem, context, xml) {
-                var i = matchers.length;
-                while (i--) {
-                    if (!matchers[i](elem, context, xml)) {
-                        return false;
-                    }
-                }
-                return true;
-            } : matchers[0];
-        }
-        function multipleContexts(selector, contexts, results) {
-            var i = 0, len = contexts.length;
-            for (;i < len; i++) {
-                Sizzle(selector, contexts[i], results);
-            }
-            return results;
-        }
-        function condense(unmatched, map, filter, context, xml) {
-            var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null;
-            for (;i < len; i++) {
-                if (elem = unmatched[i]) {
-                    if (!filter || filter(elem, context, xml)) {
-                        newUnmatched.push(elem);
-                        if (mapped) {
-                            map.push(i);
-                        }
-                    }
-                }
-            }
-            return newUnmatched;
-        }
-        function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {
-            if (postFilter && !postFilter[expando]) {
-                postFilter = setMatcher(postFilter);
-            }
-            if (postFinder && !postFinder[expando]) {
-                postFinder = setMatcher(postFinder, postSelector);
-            }
-            return markFunction(function(seed, results, context, xml) {
-                var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(selector || "*", context.nodeType ? [ context ] : context, []), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems, matcherOut = matcher ? postFinder || (seed ? preFilter : preexisting || postFilter) ? [] : results : matcherIn;
-                if (matcher) {
-                    matcher(matcherIn, matcherOut, context, xml);
-                }
-                if (postFilter) {
-                    temp = condense(matcherOut, postMap);
-                    postFilter(temp, [], context, xml);
-                    i = temp.length;
-                    while (i--) {
-                        if (elem = temp[i]) {
-                            matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);
-                        }
-                    }
-                }
-                if (seed) {
-                    if (postFinder || preFilter) {
-                        if (postFinder) {
-                            temp = [];
-                            i = matcherOut.length;
-                            while (i--) {
-                                if (elem = matcherOut[i]) {
-                                    temp.push(matcherIn[i] = elem);
-                                }
-                            }
-                            postFinder(null, matcherOut = [], temp, xml);
-                        }
-                        i = matcherOut.length;
-                        while (i--) {
-                            if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) {
-                                seed[temp] = !(results[temp] = elem);
-                            }
-                        }
-                    }
-                } else {
-                    matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);
-                    if (postFinder) {
-                        postFinder(null, results, matcherOut, xml);
-                    } else {
-                        push.apply(results, matcherOut);
-                    }
-                }
-            });
-        }
-        function matcherFromTokens(tokens) {
-            var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[" "], i = leadingRelative ? 1 : 0, matchContext = addCombinator(function(elem) {
-                return elem === checkContext;
-            }, implicitRelative, true), matchAnyContext = addCombinator(function(elem) {
-                return indexOf(checkContext, elem) > -1;
-            }, implicitRelative, true), matchers = [ function(elem, context, xml) {
-                var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));
-                checkContext = null;
-                return ret;
-            } ];
-            for (;i < len; i++) {
-                if (matcher = Expr.relative[tokens[i].type]) {
-                    matchers = [ addCombinator(elementMatcher(matchers), matcher) ];
-                } else {
-                    matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);
-                    if (matcher[expando]) {
-                        j = ++i;
-                        for (;j < len; j++) {
-                            if (Expr.relative[tokens[j].type]) {
-                                break;
-                            }
-                        }
-                        return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(tokens.slice(0, i - 1).concat({
-                            value: tokens[i - 2].type === " " ? "*" : ""
-                        })).replace(rtrim, "$1"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));
-                    }
-                    matchers.push(matcher);
-                }
-            }
-            return elementMatcher(matchers);
-        }
-        function matcherFromGroupMatchers(elementMatchers, setMatchers) {
-            var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function(seed, context, xml, results, outermost) {
-                var elem, j, matcher, matchedCount = 0, i = "0", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find["TAG"]("*", outermost), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || .1, len = elems.length;
-                if (outermost) {
-                    outermostContext = context == document || context || outermost;
-                }
-                for (;i !== len && (elem = elems[i]) != null; i++) {
-                    if (byElement && elem) {
-                        j = 0;
-                        if (!context && elem.ownerDocument != document) {
-                            setDocument(elem);
-                            xml = !documentIsHTML;
-                        }
-                        while (matcher = elementMatchers[j++]) {
-                            if (matcher(elem, context || document, xml)) {
-                                results.push(elem);
-                                break;
-                            }
-                        }
-                        if (outermost) {
-                            dirruns = dirrunsUnique;
-                        }
-                    }
-                    if (bySet) {
-                        if (elem = !matcher && elem) {
-                            matchedCount--;
-                        }
-                        if (seed) {
-                            unmatched.push(elem);
-                        }
-                    }
-                }
-                matchedCount += i;
-                if (bySet && i !== matchedCount) {
-                    j = 0;
-                    while (matcher = setMatchers[j++]) {
-                        matcher(unmatched, setMatched, context, xml);
-                    }
-                    if (seed) {
-                        if (matchedCount > 0) {
-                            while (i--) {
-                                if (!(unmatched[i] || setMatched[i])) {
-                                    setMatched[i] = pop.call(results);
-                                }
-                            }
-                        }
-                        setMatched = condense(setMatched);
-                    }
-                    push.apply(results, setMatched);
-                    if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {
-                        Sizzle.uniqueSort(results);
-                    }
-                }
-                if (outermost) {
-                    dirruns = dirrunsUnique;
-                    outermostContext = contextBackup;
-                }
-                return unmatched;
-            };
-            return bySet ? markFunction(superMatcher) : superMatcher;
-        }
-        compile = Sizzle.compile = function(selector, match) {
-            var i, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + " "];
-            if (!cached) {
-                if (!match) {
-                    match = tokenize(selector);
-                }
-                i = match.length;
-                while (i--) {
-                    cached = matcherFromTokens(match[i]);
-                    if (cached[expando]) {
-                        setMatchers.push(cached);
-                    } else {
-                        elementMatchers.push(cached);
-                    }
-                }
-                cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));
-                cached.selector = selector;
-            }
-            return cached;
-        };
-        select = Sizzle.select = function(selector, context, results, seed) {
-            var i, tokens, token, type, find, compiled = typeof selector === "function" && selector, match = !seed && tokenize(selector = compiled.selector || selector);
-            results = results || [];
-            if (match.length === 1) {
-                tokens = match[0] = match[0].slice(0);
-                if (tokens.length > 2 && (token = tokens[0]).type === "ID" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {
-                    context = (Expr.find["ID"](token.matches[0].replace(runescape, funescape), context) || [])[0];
-                    if (!context) {
-                        return results;
-                    } else if (compiled) {
-                        context = context.parentNode;
-                    }
-                    selector = selector.slice(tokens.shift().value.length);
-                }
-                i = matchExpr["needsContext"].test(selector) ? 0 : tokens.length;
-                while (i--) {
-                    token = tokens[i];
-                    if (Expr.relative[type = token.type]) {
-                        break;
-                    }
-                    if (find = Expr.find[type]) {
-                        if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {
-                            tokens.splice(i, 1);
-                            selector = seed.length && toSelector(tokens);
-                            if (!selector) {
-                                push.apply(results, seed);
-                                return results;
-                            }
-                            break;
-                        }
-                    }
-                }
-            }
-            (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context);
-            return results;
-        };
-        support.sortStable = expando.split("").sort(sortOrder).join("") === expando;
-        support.detectDuplicates = !!hasDuplicate;
-        setDocument();
-        support.sortDetached = assert(function(el) {
-            return el.compareDocumentPosition(document.createElement("fieldset")) & 1;
-        });
-        if (!assert(function(el) {
-            el.innerHTML = "<a href='#'></a>";
-            return el.firstChild.getAttribute("href") === "#";
-        })) {
-            addHandle("type|href|height|width", function(elem, name, isXML) {
-                if (!isXML) {
-                    return elem.getAttribute(name, name.toLowerCase() === "type" ? 1 : 2);
-                }
-            });
-        }
-        if (!support.attributes || !assert(function(el) {
-            el.innerHTML = "<input/>";
-            el.firstChild.setAttribute("value", "");
-            return el.firstChild.getAttribute("value") === "";
-        })) {
-            addHandle("value", function(elem, _name, isXML) {
-                if (!isXML && elem.nodeName.toLowerCase() === "input") {
-                    return elem.defaultValue;
-                }
-            });
-        }
-        if (!assert(function(el) {
-            return el.getAttribute("disabled") == null;
-        })) {
-            addHandle(booleans, function(elem, name, isXML) {
-                var val;
-                if (!isXML) {
-                    return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;
-                }
-            });
-        }
-        return Sizzle;
-    }(window);
-    jQuery.find = Sizzle;
-    jQuery.expr = Sizzle.selectors;
-    jQuery.expr[":"] = jQuery.expr.pseudos;
-    jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
-    jQuery.text = Sizzle.getText;
-    jQuery.isXMLDoc = Sizzle.isXML;
-    jQuery.contains = Sizzle.contains;
-    jQuery.escapeSelector = Sizzle.escape;
-    var dir = function(elem, dir, until) {
-        var matched = [], truncate = until !== undefined;
-        while ((elem = elem[dir]) && elem.nodeType !== 9) {
-            if (elem.nodeType === 1) {
-                if (truncate && jQuery(elem).is(until)) {
-                    break;
-                }
-                matched.push(elem);
-            }
-        }
-        return matched;
-    };
-    var siblings = function(n, elem) {
-        var matched = [];
-        for (;n; n = n.nextSibling) {
-            if (n.nodeType === 1 && n !== elem) {
-                matched.push(n);
-            }
-        }
-        return matched;
-    };
-    var rneedsContext = jQuery.expr.match.needsContext;
-    function nodeName(elem, name) {
-        return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
-    }
-    var rsingleTag = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;
-    function winnow(elements, qualifier, not) {
-        if (isFunction(qualifier)) {
-            return jQuery.grep(elements, function(elem, i) {
-                return !!qualifier.call(elem, i, elem) !== not;
-            });
-        }
-        if (qualifier.nodeType) {
-            return jQuery.grep(elements, function(elem) {
-                return elem === qualifier !== not;
-            });
-        }
-        if (typeof qualifier !== "string") {
-            return jQuery.grep(elements, function(elem) {
-                return indexOf.call(qualifier, elem) > -1 !== not;
-            });
-        }
-        return jQuery.filter(qualifier, elements, not);
-    }
-    jQuery.filter = function(expr, elems, not) {
-        var elem = elems[0];
-        if (not) {
-            expr = ":not(" + expr + ")";
-        }
-        if (elems.length === 1 && elem.nodeType === 1) {
-            return jQuery.find.matchesSelector(elem, expr) ? [ elem ] : [];
-        }
-        return jQuery.find.matches(expr, jQuery.grep(elems, function(elem) {
-            return elem.nodeType === 1;
-        }));
-    };
-    jQuery.fn.extend({
-        find: function(selector) {
-            var i, ret, len = this.length, self = this;
-            if (typeof selector !== "string") {
-                return this.pushStack(jQuery(selector).filter(function() {
-                    for (i = 0; i < len; i++) {
-                        if (jQuery.contains(self[i], this)) {
-                            return true;
-                        }
-                    }
-                }));
-            }
-            ret = this.pushStack([]);
-            for (i = 0; i < len; i++) {
-                jQuery.find(selector, self[i], ret);
-            }
-            return len > 1 ? jQuery.uniqueSort(ret) : ret;
-        },
-        filter: function(selector) {
-            return this.pushStack(winnow(this, selector || [], false));
-        },
-        not: function(selector) {
-            return this.pushStack(winnow(this, selector || [], true));
-        },
-        is: function(selector) {
-            return !!winnow(this, typeof selector === "string" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;
-        }
-    });
-    var rootjQuery, rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, init = jQuery.fn.init = function(selector, context, root) {
-        var match, elem;
-        if (!selector) {
-            return this;
-        }
-        root = root || rootjQuery;
-        if (typeof selector === "string") {
-            if (selector[0] === "<" && selector[selector.length - 1] === ">" && selector.length >= 3) {
-                match = [ null, selector, null ];
-            } else {
-                match = rquickExpr.exec(selector);
-            }
-            if (match && (match[1] || !context)) {
-                if (match[1]) {
-                    context = context instanceof jQuery ? context[0] : context;
-                    jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true));
-                    if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {
-                        for (match in context) {
-                            if (isFunction(this[match])) {
-                                this[match](context[match]);
-                            } else {
-                                this.attr(match, context[match]);
-                            }
-                        }
-                    }
-                    return this;
-                } else {
-                    elem = document.getElementById(match[2]);
-                    if (elem) {
-                        this[0] = elem;
-                        this.length = 1;
-                    }
-                    return this;
-                }
-            } else if (!context || context.jquery) {
-                return (context || root).find(selector);
-            } else {
-                return this.constructor(context).find(selector);
-            }
-        } else if (selector.nodeType) {
-            this[0] = selector;
-            this.length = 1;
-            return this;
-        } else if (isFunction(selector)) {
-            return root.ready !== undefined ? root.ready(selector) : selector(jQuery);
-        }
-        return jQuery.makeArray(selector, this);
-    };
-    init.prototype = jQuery.fn;
-    rootjQuery = jQuery(document);
-    var rparentsprev = /^(?:parents|prev(?:Until|All))/, guaranteedUnique = {
-        children: true,
-        contents: true,
-        next: true,
-        prev: true
-    };
-    jQuery.fn.extend({
-        has: function(target) {
-            var targets = jQuery(target, this), l = targets.length;
-            return this.filter(function() {
-                var i = 0;
-                for (;i < l; i++) {
-                    if (jQuery.contains(this, targets[i])) {
-                        return true;
-                    }
-                }
-            });
-        },
-        closest: function(selectors, context) {
-            var cur, i = 0, l = this.length, matched = [], targets = typeof selectors !== "string" && jQuery(selectors);
-            if (!rneedsContext.test(selectors)) {
-                for (;i < l; i++) {
-                    for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {
-                        if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {
-                            matched.push(cur);
-                            break;
-                        }
-                    }
-                }
-            }
-            return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);
-        },
-        index: function(elem) {
-            if (!elem) {
-                return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;
-            }
-            if (typeof elem === "string") {
-                return indexOf.call(jQuery(elem), this[0]);
-            }
-            return indexOf.call(this, elem.jquery ? elem[0] : elem);
-        },
-        add: function(selector, context) {
-            return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context))));
-        },
-        addBack: function(selector) {
-            return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));
-        }
-    });
-    function sibling(cur, dir) {
-        while ((cur = cur[dir]) && cur.nodeType !== 1) {}
-        return cur;
-    }
-    jQuery.each({
-        parent: function(elem) {
-            var parent = elem.parentNode;
-            return parent && parent.nodeType !== 11 ? parent : null;
-        },
-        parents: function(elem) {
-            return dir(elem, "parentNode");
-        },
-        parentsUntil: function(elem, _i, until) {
-            return dir(elem, "parentNode", until);
-        },
-        next: function(elem) {
-            return sibling(elem, "nextSibling");
-        },
-        prev: function(elem) {
-            return sibling(elem, "previousSibling");
-        },
-        nextAll: function(elem) {
-            return dir(elem, "nextSibling");
-        },
-        prevAll: function(elem) {
-            return dir(elem, "previousSibling");
-        },
-        nextUntil: function(elem, _i, until) {
-            return dir(elem, "nextSibling", until);
-        },
-        prevUntil: function(elem, _i, until) {
-            return dir(elem, "previousSibling", until);
-        },
-        siblings: function(elem) {
-            return siblings((elem.parentNode || {}).firstChild, elem);
-        },
-        children: function(elem) {
-            return siblings(elem.firstChild);
-        },
-        contents: function(elem) {
-            if (elem.contentDocument != null && getProto(elem.contentDocument)) {
-                return elem.contentDocument;
-            }
-            if (nodeName(elem, "template")) {
-                elem = elem.content || elem;
-            }
-            return jQuery.merge([], elem.childNodes);
-        }
-    }, function(name, fn) {
-        jQuery.fn[name] = function(until, selector) {
-            var matched = jQuery.map(this, fn, until);
-            if (name.slice(-5) !== "Until") {
-                selector = until;
-            }
-            if (selector && typeof selector === "string") {
-                matched = jQuery.filter(selector, matched);
-            }
-            if (this.length > 1) {
-                if (!guaranteedUnique[name]) {
-                    jQuery.uniqueSort(matched);
-                }
-                if (rparentsprev.test(name)) {
-                    matched.reverse();
-                }
-            }
-            return this.pushStack(matched);
-        };
-    });
-    var rnothtmlwhite = /[^\x20\t\r\n\f]+/g;
-    function createOptions(options) {
-        var object = {};
-        jQuery.each(options.match(rnothtmlwhite) || [], function(_, flag) {
-            object[flag] = true;
-        });
-        return object;
-    }
-    jQuery.Callbacks = function(options) {
-        options = typeof options === "string" ? createOptions(options) : jQuery.extend({}, options);
-        var firing, memory, fired, locked, list = [], queue = [], firingIndex = -1, fire = function() {
-            locked = locked || options.once;
-            fired = firing = true;
-            for (;queue.length; firingIndex = -1) {
-                memory = queue.shift();
-                while (++firingIndex < list.length) {
-                    if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {
-                        firingIndex = list.length;
-                        memory = false;
-                    }
-                }
-            }
-            if (!options.memory) {
-                memory = false;
-            }
-            firing = false;
-            if (locked) {
-                if (memory) {
-                    list = [];
-                } else {
-                    list = "";
-                }
-            }
-        }, self = {
-            add: function() {
-                if (list) {
-                    if (memory && !firing) {
-                        firingIndex = list.length - 1;
-                        queue.push(memory);
-                    }
-                    (function add(args) {
-                        jQuery.each(args, function(_, arg) {
-                            if (isFunction(arg)) {
-                                if (!options.unique || !self.has(arg)) {
-                                    list.push(arg);
-                                }
-                            } else if (arg && arg.length && toType(arg) !== "string") {
-                                add(arg);
-                            }
-                        });
-                    })(arguments);
-                    if (memory && !firing) {
-                        fire();
-                    }
-                }
-                return this;
-            },
-            remove: function() {
-                jQuery.each(arguments, function(_, arg) {
-                    var index;
-                    while ((index = jQuery.inArray(arg, list, index)) > -1) {
-                        list.splice(index, 1);
-                        if (index <= firingIndex) {
-                            firingIndex--;
-                        }
-                    }
-                });
-                return this;
-            },
-            has: function(fn) {
-                return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;
-            },
-            empty: function() {
-                if (list) {
-                    list = [];
-                }
-                return this;
-            },
-            disable: function() {
-                locked = queue = [];
-                list = memory = "";
-                return this;
-            },
-            disabled: function() {
-                return !list;
-            },
-            lock: function() {
-                locked = queue = [];
-                if (!memory && !firing) {
-                    list = memory = "";
-                }
-                return this;
-            },
-            locked: function() {
-                return !!locked;
-            },
-            fireWith: function(context, args) {
-                if (!locked) {
-                    args = args || [];
-                    args = [ context, args.slice ? args.slice() : args ];
-                    queue.push(args);
-                    if (!firing) {
-                        fire();
-                    }
-                }
-                return this;
-            },
-            fire: function() {
-                self.fireWith(this, arguments);
-                return this;
-            },
-            fired: function() {
-                return !!fired;
-            }
-        };
-        return self;
-    };
-    function Identity(v) {
-        return v;
-    }
-    function Thrower(ex) {
-        throw ex;
-    }
-    function adoptValue(value, resolve, reject, noValue) {
-        var method;
-        try {
-            if (value && isFunction(method = value.promise)) {
-                method.call(value).done(resolve).fail(reject);
-            } else if (value && isFunction(method = value.then)) {
-                method.call(value, resolve, reject);
-            } else {
-                resolve.apply(undefined, [ value ].slice(noValue));
-            }
-        } catch (value) {
-            reject.apply(undefined, [ value ]);
-        }
-    }
-    jQuery.extend({
-        Deferred: function(func) {
-            var tuples = [ [ "notify", "progress", jQuery.Callbacks("memory"), jQuery.Callbacks("memory"), 2 ], [ "resolve", "done", jQuery.Callbacks("once memory"), jQuery.Callbacks("once memory"), 0, "resolved" ], [ "reject", "fail", jQuery.Callbacks("once memory"), jQuery.Callbacks("once memory"), 1, "rejected" ] ], state = "pending", promise = {
-                state: function() {
-                    return state;
-                },
-                always: function() {
-                    deferred.done(arguments).fail(arguments);
-                    return this;
-                },
-                catch: function(fn) {
-                    return promise.then(null, fn);
-                },
-                pipe: function() {
-                    var fns = arguments;
-                    return jQuery.Deferred(function(newDefer) {
-                        jQuery.each(tuples, function(_i, tuple) {
-                            var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];
-                            deferred[tuple[1]](function() {
-                                var returned = fn && fn.apply(this, arguments);
-                                if (returned && isFunction(returned.promise)) {
-                                    returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);
-                                } else {
-                                    newDefer[tuple[0] + "With"](this, fn ? [ returned ] : arguments);
-                                }
-                            });
-                        });
-                        fns = null;
-                    }).promise();
-                },
-                then: function(onFulfilled, onRejected, onProgress) {
-                    var maxDepth = 0;
-                    function resolve(depth, deferred, handler, special) {
-                        return function() {
-                            var that = this, args = arguments, mightThrow = function() {
-                                var returned, then;
-                                if (depth < maxDepth) {
-                                    return;
-                                }
-                                returned = handler.apply(that, args);
-                                if (returned === deferred.promise()) {
-                                    throw new TypeError("Thenable self-resolution");
-                                }
-                                then = returned && (typeof returned === "object" || typeof returned === "function") && returned.then;
-                                if (isFunction(then)) {
-                                    if (special) {
-                                        then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special));
-                                    } else {
-                                        maxDepth++;
-                                        then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith));
-                                    }
-                                } else {
-                                    if (handler !== Identity) {
-                                        that = undefined;
-                                        args = [ returned ];
-                                    }
-                                    (special || deferred.resolveWith)(that, args);
-                                }
-                            }, process = special ? mightThrow : function() {
-                                try {
-                                    mightThrow();
-                                } catch (e) {
-                                    if (jQuery.Deferred.exceptionHook) {
-                                        jQuery.Deferred.exceptionHook(e, process.stackTrace);
-                                    }
-                                    if (depth + 1 >= maxDepth) {
-                                        if (handler !== Thrower) {
-                                            that = undefined;
-                                            args = [ e ];
-                                        }
-                                        deferred.rejectWith(that, args);
-                                    }
-                                }
-                            };
-                            if (depth) {
-                                process();
-                            } else {
-                                if (jQuery.Deferred.getStackHook) {
-                                    process.stackTrace = jQuery.Deferred.getStackHook();
-                                }
-                                window.setTimeout(process);
-                            }
-                        };
-                    }
-                    return jQuery.Deferred(function(newDefer) {
-                        tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith));
-                        tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity));
-                        tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower));
-                    }).promise();
-                },
-                promise: function(obj) {
-                    return obj != null ? jQuery.extend(obj, promise) : promise;
-                }
-            }, deferred = {};
-            jQuery.each(tuples, function(i, tuple) {
-                var list = tuple[2], stateString = tuple[5];
-                promise[tuple[1]] = list.add;
-                if (stateString) {
-                    list.add(function() {
-                        state = stateString;
-                    }, tuples[3 - i][2].disable, tuples[3 - i][3].disable, tuples[0][2].lock, tuples[0][3].lock);
-                }
-                list.add(tuple[3].fire);
-                deferred[tuple[0]] = function() {
-                    deferred[tuple[0] + "With"](this === deferred ? undefined : this, arguments);
-                    return this;
-                };
-                deferred[tuple[0] + "With"] = list.fireWith;
-            });
-            promise.promise(deferred);
-            if (func) {
-                func.call(deferred, deferred);
-            }
-            return deferred;
-        },
-        when: function(singleValue) {
-            var remaining = arguments.length, i = remaining, resolveContexts = Array(i), resolveValues = slice.call(arguments), primary = jQuery.Deferred(), updateFunc = function(i) {
-                return function(value) {
-                    resolveContexts[i] = this;
-                    resolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;
-                    if (!--remaining) {
-                        primary.resolveWith(resolveContexts, resolveValues);
-                    }
-                };
-            };
-            if (remaining <= 1) {
-                adoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject, !remaining);
-                if (primary.state() === "pending" || isFunction(resolveValues[i] && resolveValues[i].then)) {
-                    return primary.then();
-                }
-            }
-            while (i--) {
-                adoptValue(resolveValues[i], updateFunc(i), primary.reject);
-            }
-            return primary.promise();
-        }
-    });
-    var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
-    jQuery.Deferred.exceptionHook = function(error, stack) {
-        if (window.console && window.console.warn && error && rerrorNames.test(error.name)) {
-            window.console.warn("jQuery.Deferred exception: " + error.message, error.stack, stack);
-        }
-    };
-    jQuery.readyException = function(error) {
-        window.setTimeout(function() {
-            throw error;
-        });
-    };
-    var readyList = jQuery.Deferred();
-    jQuery.fn.ready = function(fn) {
-        readyList.then(fn).catch(function(error) {
-            jQuery.readyException(error);
-        });
-        return this;
-    };
-    jQuery.extend({
-        isReady: false,
-        readyWait: 1,
-        ready: function(wait) {
-            if (wait === true ? --jQuery.readyWait : jQuery.isReady) {
-                return;
-            }
-            jQuery.isReady = true;
-            if (wait !== true && --jQuery.readyWait > 0) {
-                return;
-            }
-            readyList.resolveWith(document, [ jQuery ]);
-        }
-    });
-    jQuery.ready.then = readyList.then;
-    function completed() {
-        document.removeEventListener("DOMContentLoaded", completed);
-        window.removeEventListener("load", completed);
-        jQuery.ready();
-    }
-    if (document.readyState === "complete" || document.readyState !== "loading" && !document.documentElement.doScroll) {
-        window.setTimeout(jQuery.ready);
-    } else {
-        document.addEventListener("DOMContentLoaded", completed);
-        window.addEventListener("load", completed);
-    }
-    var access = function(elems, fn, key, value, chainable, emptyGet, raw) {
-        var i = 0, len = elems.length, bulk = key == null;
-        if (toType(key) === "object") {
-            chainable = true;
-            for (i in key) {
-                access(elems, fn, i, key[i], true, emptyGet, raw);
-            }
-        } else if (value !== undefined) {
-            chainable = true;
-            if (!isFunction(value)) {
-                raw = true;
-            }
-            if (bulk) {
-                if (raw) {
-                    fn.call(elems, value);
-                    fn = null;
-                } else {
-                    bulk = fn;
-                    fn = function(elem, _key, value) {
-                        return bulk.call(jQuery(elem), value);
-                    };
-                }
-            }
-            if (fn) {
-                for (;i < len; i++) {
-                    fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));
-                }
-            }
-        }
-        if (chainable) {
-            return elems;
-        }
-        if (bulk) {
-            return fn.call(elems);
-        }
-        return len ? fn(elems[0], key) : emptyGet;
-    };
-    var rmsPrefix = /^-ms-/, rdashAlpha = /-([a-z])/g;
-    function fcamelCase(_all, letter) {
-        return letter.toUpperCase();
-    }
-    function camelCase(string) {
-        return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase);
-    }
-    var acceptData = function(owner) {
-        return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;
-    };
-    function Data() {
-        this.expando = jQuery.expando + Data.uid++;
-    }
-    Data.uid = 1;
-    Data.prototype = {
-        cache: function(owner) {
-            var value = owner[this.expando];
-            if (!value) {
-                value = {};
-                if (acceptData(owner)) {
-                    if (owner.nodeType) {
-                        owner[this.expando] = value;
-                    } else {
-                        Object.defineProperty(owner, this.expando, {
-                            value: value,
-                            configurable: true
-                        });
-                    }
-                }
-            }
-            return value;
-        },
-        set: function(owner, data, value) {
-            var prop, cache = this.cache(owner);
-            if (typeof data === "string") {
-                cache[camelCase(data)] = value;
-            } else {
-                for (prop in data) {
-                    cache[camelCase(prop)] = data[prop];
-                }
-            }
-            return cache;
-        },
-        get: function(owner, key) {
-            return key === undefined ? this.cache(owner) : owner[this.expando] && owner[this.expando][camelCase(key)];
-        },
-        access: function(owner, key, value) {
-            if (key === undefined || key && typeof key === "string" && value === undefined) {
-                return this.get(owner, key);
-            }
-            this.set(owner, key, value);
-            return value !== undefined ? value : key;
-        },
-        remove: function(owner, key) {
-            var i, cache = owner[this.expando];
-            if (cache === undefined) {
-                return;
-            }
-            if (key !== undefined) {
-                if (Array.isArray(key)) {
-                    key = key.map(camelCase);
-                } else {
-                    key = camelCase(key);
-                    key = key in cache ? [ key ] : key.match(rnothtmlwhite) || [];
-                }
-                i = key.length;
-                while (i--) {
-                    delete cache[key[i]];
-                }
-            }
-            if (key === undefined || jQuery.isEmptyObject(cache)) {
-                if (owner.nodeType) {
-                    owner[this.expando] = undefined;
-                } else {
-                    delete owner[this.expando];
-                }
-            }
-        },
-        hasData: function(owner) {
-            var cache = owner[this.expando];
-            return cache !== undefined && !jQuery.isEmptyObject(cache);
-        }
-    };
-    var dataPriv = new Data();
-    var dataUser = new Data();
-    var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, rmultiDash = /[A-Z]/g;
-    function getData(data) {
-        if (data === "true") {
-            return true;
-        }
-        if (data === "false") {
-            return false;
-        }
-        if (data === "null") {
-            return null;
-        }
-        if (data === +data + "") {
-            return +data;
-        }
-        if (rbrace.test(data)) {
-            return JSON.parse(data);
-        }
-        return data;
-    }
-    function dataAttr(elem, key, data) {
-        var name;
-        if (data === undefined && elem.nodeType === 1) {
-            name = "data-" + key.replace(rmultiDash, "-$&").toLowerCase();
-            data = elem.getAttribute(name);
-            if (typeof data === "string") {
-                try {
-                    data = getData(data);
-                } catch (e) {}
-                dataUser.set(elem, key, data);
-            } else {
-                data = undefined;
-            }
-        }
-        return data;
-    }
-    jQuery.extend({
-        hasData: function(elem) {
-            return dataUser.hasData(elem) || dataPriv.hasData(elem);
-        },
-        data: function(elem, name, data) {
-            return dataUser.access(elem, name, data);
-        },
-        removeData: function(elem, name) {
-            dataUser.remove(elem, name);
-        },
-        _data: function(elem, name, data) {
-            return dataPriv.access(elem, name, data);
-        },
-        _removeData: function(elem, name) {
-            dataPriv.remove(elem, name);
-        }
-    });
-    jQuery.fn.extend({
-        data: function(key, value) {
-            var i, name, data, elem = this[0], attrs = elem && elem.attributes;
-            if (key === undefined) {
-                if (this.length) {
-                    data = dataUser.get(elem);
-                    if (elem.nodeType === 1 && !dataPriv.get(elem, "hasDataAttrs")) {
-                        i = attrs.length;
-                        while (i--) {
-                            if (attrs[i]) {
-                                name = attrs[i].name;
-                                if (name.indexOf("data-") === 0) {
-                                    name = camelCase(name.slice(5));
-                                    dataAttr(elem, name, data[name]);
-                                }
-                            }
-                        }
-                        dataPriv.set(elem, "hasDataAttrs", true);
-                    }
-                }
-                return data;
-            }
-            if (typeof key === "object") {
-                return this.each(function() {
-                    dataUser.set(this, key);
-                });
-            }
-            return access(this, function(value) {
-                var data;
-                if (elem && value === undefined) {
-                    data = dataUser.get(elem, key);
-                    if (data !== undefined) {
-                        return data;
-                    }
-                    data = dataAttr(elem, key);
-                    if (data !== undefined) {
-                        return data;
-                    }
-                    return;
-                }
-                this.each(function() {
-                    dataUser.set(this, key, value);
-                });
-            }, null, value, arguments.length > 1, null, true);
-        },
-        removeData: function(key) {
-            return this.each(function() {
-                dataUser.remove(this, key);
-            });
-        }
-    });
-    jQuery.extend({
-        queue: function(elem, type, data) {
-            var queue;
-            if (elem) {
-                type = (type || "fx") + "queue";
-                queue = dataPriv.get(elem, type);
-                if (data) {
-                    if (!queue || Array.isArray(data)) {
-                        queue = dataPriv.access(elem, type, jQuery.makeArray(data));
-                    } else {
-                        queue.push(data);
-                    }
-                }
-                return queue || [];
-            }
-        },
-        dequeue: function(elem, type) {
-            type = type || "fx";
-            var queue = jQuery.queue(elem, type), startLength = queue.length, fn = queue.shift(), hooks = jQuery._queueHooks(elem, type), next = function() {
-                jQuery.dequeue(elem, type);
-            };
-            if (fn === "inprogress") {
-                fn = queue.shift();
-                startLength--;
-            }
-            if (fn) {
-                if (type === "fx") {
-                    queue.unshift("inprogress");
-                }
-                delete hooks.stop;
-                fn.call(elem, next, hooks);
-            }
-            if (!startLength && hooks) {
-                hooks.empty.fire();
-            }
-        },
-        _queueHooks: function(elem, type) {
-            var key = type + "queueHooks";
-            return dataPriv.get(elem, key) || dataPriv.access(elem, key, {
-                empty: jQuery.Callbacks("once memory").add(function() {
-                    dataPriv.remove(elem, [ type + "queue", key ]);
-                })
-            });
-        }
-    });
-    jQuery.fn.extend({
-        queue: function(type, data) {
-            var setter = 2;
-            if (typeof type !== "string") {
-                data = type;
-                type = "fx";
-                setter--;
-            }
-            if (arguments.length < setter) {
-                return jQuery.queue(this[0], type);
-            }
-            return data === undefined ? this : this.each(function() {
-                var queue = jQuery.queue(this, type, data);
-                jQuery._queueHooks(this, type);
-                if (type === "fx" && queue[0] !== "inprogress") {
-                    jQuery.dequeue(this, type);
-                }
-            });
-        },
-        dequeue: function(type) {
-            return this.each(function() {
-                jQuery.dequeue(this, type);
-            });
-        },
-        clearQueue: function(type) {
-            return this.queue(type || "fx", []);
-        },
-        promise: function(type, obj) {
-            var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function() {
-                if (!--count) {
-                    defer.resolveWith(elements, [ elements ]);
-                }
-            };
-            if (typeof type !== "string") {
-                obj = type;
-                type = undefined;
-            }
-            type = type || "fx";
-            while (i--) {
-                tmp = dataPriv.get(elements[i], type + "queueHooks");
-                if (tmp && tmp.empty) {
-                    count++;
-                    tmp.empty.add(resolve);
-                }
-            }
-            resolve();
-            return defer.promise(obj);
-        }
-    });
-    var pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;
-    var rcssNum = new RegExp("^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i");
-    var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
-    var documentElement = document.documentElement;
-    var isAttached = function(elem) {
-        return jQuery.contains(elem.ownerDocument, elem);
-    }, composed = {
-        composed: true
-    };
-    if (documentElement.getRootNode) {
-        isAttached = function(elem) {
-            return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;
-        };
-    }
-    var isHiddenWithinTree = function(elem, el) {
-        elem = el || elem;
-        return elem.style.display === "none" || elem.style.display === "" && isAttached(elem) && jQuery.css(elem, "display") === "none";
-    };
-    function adjustCSS(elem, prop, valueParts, tween) {
-        var adjusted, scale, maxIterations = 20, currentValue = tween ? function() {
-            return tween.cur();
-        } : function() {
-            return jQuery.css(elem, prop, "");
-        }, initial = currentValue(), unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? "" : "px"), initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== "px" && +initial) && rcssNum.exec(jQuery.css(elem, prop));
-        if (initialInUnit && initialInUnit[3] !== unit) {
-            initial = initial / 2;
-            unit = unit || initialInUnit[3];
-            initialInUnit = +initial || 1;
-            while (maxIterations--) {
-                jQuery.style(elem, prop, initialInUnit + unit);
-                if ((1 - scale) * (1 - (scale = currentValue() / initial || .5)) <= 0) {
-                    maxIterations = 0;
-                }
-                initialInUnit = initialInUnit / scale;
-            }
-            initialInUnit = initialInUnit * 2;
-            jQuery.style(elem, prop, initialInUnit + unit);
-            valueParts = valueParts || [];
-        }
-        if (valueParts) {
-            initialInUnit = +initialInUnit || +initial || 0;
-            adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];
-            if (tween) {
-                tween.unit = unit;
-                tween.start = initialInUnit;
-                tween.end = adjusted;
-            }
-        }
-        return adjusted;
-    }
-    var defaultDisplayMap = {};
-    function getDefaultDisplay(elem) {
-        var temp, doc = elem.ownerDocument, nodeName = elem.nodeName, display = defaultDisplayMap[nodeName];
-        if (display) {
-            return display;
-        }
-        temp = doc.body.appendChild(doc.createElement(nodeName));
-        display = jQuery.css(temp, "display");
-        temp.parentNode.removeChild(temp);
-        if (display === "none") {
-            display = "block";
-        }
-        defaultDisplayMap[nodeName] = display;
-        return display;
-    }
-    function showHide(elements, show) {
-        var display, elem, values = [], index = 0, length = elements.length;
-        for (;index < length; index++) {
-            elem = elements[index];
-            if (!elem.style) {
-                continue;
-            }
-            display = elem.style.display;
-            if (show) {
-                if (display === "none") {
-                    values[index] = dataPriv.get(elem, "display") || null;
-                    if (!values[index]) {
-                        elem.style.display = "";
-                    }
-                }
-                if (elem.style.display === "" && isHiddenWithinTree(elem)) {
-                    values[index] = getDefaultDisplay(elem);
-                }
-            } else {
-                if (display !== "none") {
-                    values[index] = "none";
-                    dataPriv.set(elem, "display", display);
-                }
-            }
-        }
-        for (index = 0; index < length; index++) {
-            if (values[index] != null) {
-                elements[index].style.display = values[index];
-            }
-        }
-        return elements;
-    }
-    jQuery.fn.extend({
-        show: function() {
-            return showHide(this, true);
-        },
-        hide: function() {
-            return showHide(this);
-        },
-        toggle: function(state) {
-            if (typeof state === "boolean") {
-                return state ? this.show() : this.hide();
-            }
-            return this.each(function() {
-                if (isHiddenWithinTree(this)) {
-                    jQuery(this).show();
-                } else {
-                    jQuery(this).hide();
-                }
-            });
-        }
-    });
-    var rcheckableType = /^(?:checkbox|radio)$/i;
-    var rtagName = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i;
-    var rscriptType = /^$|^module$|\/(?:java|ecma)script/i;
-    (function() {
-        var fragment = document.createDocumentFragment(), div = fragment.appendChild(document.createElement("div")), input = document.createElement("input");
-        input.setAttribute("type", "radio");
-        input.setAttribute("checked", "checked");
-        input.setAttribute("name", "t");
-        div.appendChild(input);
-        support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;
-        div.innerHTML = "<textarea>x</textarea>";
-        support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;
-        div.innerHTML = "<option></option>";
-        support.option = !!div.lastChild;
-    })();
-    var wrapMap = {
-        thead: [ 1, "<table>", "</table>" ],
-        col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
-        tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-        td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-        _default: [ 0, "", "" ]
-    };
-    wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-    wrapMap.th = wrapMap.td;
-    if (!support.option) {
-        wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ];
-    }
-    function getAll(context, tag) {
-        var ret;
-        if (typeof context.getElementsByTagName !== "undefined") {
-            ret = context.getElementsByTagName(tag || "*");
-        } else if (typeof context.querySelectorAll !== "undefined") {
-            ret = context.querySelectorAll(tag || "*");
-        } else {
-            ret = [];
-        }
-        if (tag === undefined || tag && nodeName(context, tag)) {
-            return jQuery.merge([ context ], ret);
-        }
-        return ret;
-    }
-    function setGlobalEval(elems, refElements) {
-        var i = 0, l = elems.length;
-        for (;i < l; i++) {
-            dataPriv.set(elems[i], "globalEval", !refElements || dataPriv.get(refElements[i], "globalEval"));
-        }
-    }
-    var rhtml = /<|&#?\w+;/;
-    function buildFragment(elems, context, scripts, selection, ignored) {
-        var elem, tmp, tag, wrap, attached, j, fragment = context.createDocumentFragment(), nodes = [], i = 0, l = elems.length;
-        for (;i < l; i++) {
-            elem = elems[i];
-            if (elem || elem === 0) {
-                if (toType(elem) === "object") {
-                    jQuery.merge(nodes, elem.nodeType ? [ elem ] : elem);
-                } else if (!rhtml.test(elem)) {
-                    nodes.push(context.createTextNode(elem));
-                } else {
-                    tmp = tmp || fragment.appendChild(context.createElement("div"));
-                    tag = (rtagName.exec(elem) || [ "", "" ])[1].toLowerCase();
-                    wrap = wrapMap[tag] || wrapMap._default;
-                    tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];
-                    j = wrap[0];
-                    while (j--) {
-                        tmp = tmp.lastChild;
-                    }
-                    jQuery.merge(nodes, tmp.childNodes);
-                    tmp = fragment.firstChild;
-                    tmp.textContent = "";
-                }
-            }
-        }
-        fragment.textContent = "";
-        i = 0;
-        while (elem = nodes[i++]) {
-            if (selection && jQuery.inArray(elem, selection) > -1) {
-                if (ignored) {
-                    ignored.push(elem);
-                }
-                continue;
-            }
-            attached = isAttached(elem);
-            tmp = getAll(fragment.appendChild(elem), "script");
-            if (attached) {
-                setGlobalEval(tmp);
-            }
-            if (scripts) {
-                j = 0;
-                while (elem = tmp[j++]) {
-                    if (rscriptType.test(elem.type || "")) {
-                        scripts.push(elem);
-                    }
-                }
-            }
-        }
-        return fragment;
-    }
-    var rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
-    function returnTrue() {
-        return true;
-    }
-    function returnFalse() {
-        return false;
-    }
-    function expectSync(elem, type) {
-        return elem === safeActiveElement() === (type === "focus");
-    }
-    function safeActiveElement() {
-        try {
-            return document.activeElement;
-        } catch (err) {}
-    }
-    function on(elem, types, selector, data, fn, one) {
-        var origFn, type;
-        if (typeof types === "object") {
-            if (typeof selector !== "string") {
-                data = data || selector;
-                selector = undefined;
-            }
-            for (type in types) {
-                on(elem, type, selector, data, types[type], one);
-            }
-            return elem;
-        }
-        if (data == null && fn == null) {
-            fn = selector;
-            data = selector = undefined;
-        } else if (fn == null) {
-            if (typeof selector === "string") {
-                fn = data;
-                data = undefined;
-            } else {
-                fn = data;
-                data = selector;
-                selector = undefined;
-            }
-        }
-        if (fn === false) {
-            fn = returnFalse;
-        } else if (!fn) {
-            return elem;
-        }
-        if (one === 1) {
-            origFn = fn;
-            fn = function(event) {
-                jQuery().off(event);
-                return origFn.apply(this, arguments);
-            };
-            fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);
-        }
-        return elem.each(function() {
-            jQuery.event.add(this, types, fn, data, selector);
-        });
-    }
-    jQuery.event = {
-        global: {},
-        add: function(elem, types, handler, data, selector) {
-            var handleObjIn, eventHandle, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = dataPriv.get(elem);
-            if (!acceptData(elem)) {
-                return;
-            }
-            if (handler.handler) {
-                handleObjIn = handler;
-                handler = handleObjIn.handler;
-                selector = handleObjIn.selector;
-            }
-            if (selector) {
-                jQuery.find.matchesSelector(documentElement, selector);
-            }
-            if (!handler.guid) {
-                handler.guid = jQuery.guid++;
-            }
-            if (!(events = elemData.events)) {
-                events = elemData.events = Object.create(null);
-            }
-            if (!(eventHandle = elemData.handle)) {
-                eventHandle = elemData.handle = function(e) {
-                    return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;
-                };
-            }
-            types = (types || "").match(rnothtmlwhite) || [ "" ];
-            t = types.length;
-            while (t--) {
-                tmp = rtypenamespace.exec(types[t]) || [];
-                type = origType = tmp[1];
-                namespaces = (tmp[2] || "").split(".").sort();
-                if (!type) {
-                    continue;
-                }
-                special = jQuery.event.special[type] || {};
-                type = (selector ? special.delegateType : special.bindType) || type;
-                special = jQuery.event.special[type] || {};
-                handleObj = jQuery.extend({
-                    type: type,
-                    origType: origType,
-                    data: data,
-                    handler: handler,
-                    guid: handler.guid,
-                    selector: selector,
-                    needsContext: selector && jQuery.expr.match.needsContext.test(selector),
-                    namespace: namespaces.join(".")
-                }, handleObjIn);
-                if (!(handlers = events[type])) {
-                    handlers = events[type] = [];
-                    handlers.delegateCount = 0;
-                    if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {
-                        if (elem.addEventListener) {
-                            elem.addEventListener(type, eventHandle);
-                        }
-                    }
-                }
-                if (special.add) {
-                    special.add.call(elem, handleObj);
-                    if (!handleObj.handler.guid) {
-                        handleObj.handler.guid = handler.guid;
-                    }
-                }
-                if (selector) {
-                    handlers.splice(handlers.delegateCount++, 0, handleObj);
-                } else {
-                    handlers.push(handleObj);
-                }
-                jQuery.event.global[type] = true;
-            }
-        },
-        remove: function(elem, types, handler, selector, mappedTypes) {
-            var j, origCount, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = dataPriv.hasData(elem) && dataPriv.get(elem);
-            if (!elemData || !(events = elemData.events)) {
-                return;
-            }
-            types = (types || "").match(rnothtmlwhite) || [ "" ];
-            t = types.length;
-            while (t--) {
-                tmp = rtypenamespace.exec(types[t]) || [];
-                type = origType = tmp[1];
-                namespaces = (tmp[2] || "").split(".").sort();
-                if (!type) {
-                    for (type in events) {
-                        jQuery.event.remove(elem, type + types[t], handler, selector, true);
-                    }
-                    continue;
-                }
-                special = jQuery.event.special[type] || {};
-                type = (selector ? special.delegateType : special.bindType) || type;
-                handlers = events[type] || [];
-                tmp = tmp[2] && new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)");
-                origCount = j = handlers.length;
-                while (j--) {
-                    handleObj = handlers[j];
-                    if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === "**" && handleObj.selector)) {
-                        handlers.splice(j, 1);
-                        if (handleObj.selector) {
-                            handlers.delegateCount--;
-                        }
-                        if (special.remove) {
-                            special.remove.call(elem, handleObj);
-                        }
-                    }
-                }
-                if (origCount && !handlers.length) {
-                    if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {
-                        jQuery.removeEvent(elem, type, elemData.handle);
-                    }
-                    delete events[type];
-                }
-            }
-            if (jQuery.isEmptyObject(events)) {
-                dataPriv.remove(elem, "handle events");
-            }
-        },
-        dispatch: function(nativeEvent) {
-            var i, j, ret, matched, handleObj, handlerQueue, args = new Array(arguments.length), event = jQuery.event.fix(nativeEvent), handlers = (dataPriv.get(this, "events") || Object.create(null))[event.type] || [], special = jQuery.event.special[event.type] || {};
-            args[0] = event;
-            for (i = 1; i < arguments.length; i++) {
-                args[i] = arguments[i];
-            }
-            event.delegateTarget = this;
-            if (special.preDispatch && special.preDispatch.call(this, event) === false) {
-                return;
-            }
-            handlerQueue = jQuery.event.handlers.call(this, event, handlers);
-            i = 0;
-            while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {
-                event.currentTarget = matched.elem;
-                j = 0;
-                while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {
-                    if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {
-                        event.handleObj = handleObj;
-                        event.data = handleObj.data;
-                        ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);
-                        if (ret !== undefined) {
-                            if ((event.result = ret) === false) {
-                                event.preventDefault();
-                                event.stopPropagation();
-                            }
-                        }
-                    }
-                }
-            }
-            if (special.postDispatch) {
-                special.postDispatch.call(this, event);
-            }
-            return event.result;
-        },
-        handlers: function(event, handlers) {
-            var i, handleObj, sel, matchedHandlers, matchedSelectors, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event.target;
-            if (delegateCount && cur.nodeType && !(event.type === "click" && event.button >= 1)) {
-                for (;cur !== this; cur = cur.parentNode || this) {
-                    if (cur.nodeType === 1 && !(event.type === "click" && cur.disabled === true)) {
-                        matchedHandlers = [];
-                        matchedSelectors = {};
-                        for (i = 0; i < delegateCount; i++) {
-                            handleObj = handlers[i];
-                            sel = handleObj.selector + " ";
-                            if (matchedSelectors[sel] === undefined) {
-                                matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [ cur ]).length;
-                            }
-                            if (matchedSelectors[sel]) {
-                                matchedHandlers.push(handleObj);
-                            }
-                        }
-                        if (matchedHandlers.length) {
-                            handlerQueue.push({
-                                elem: cur,
-                                handlers: matchedHandlers
-                            });
-                        }
-                    }
-                }
-            }
-            cur = this;
-            if (delegateCount < handlers.length) {
-                handlerQueue.push({
-                    elem: cur,
-                    handlers: handlers.slice(delegateCount)
-                });
-            }
-            return handlerQueue;
-        },
-        addProp: function(name, hook) {
-            Object.defineProperty(jQuery.Event.prototype, name, {
-                enumerable: true,
-                configurable: true,
-                get: isFunction(hook) ? function() {
-                    if (this.originalEvent) {
-                        return hook(this.originalEvent);
-                    }
-                } : function() {
-                    if (this.originalEvent) {
-                        return this.originalEvent[name];
-                    }
-                },
-                set: function(value) {
-                    Object.defineProperty(this, name, {
-                        enumerable: true,
-                        configurable: true,
-                        writable: true,
-                        value: value
-                    });
-                }
-            });
-        },
-        fix: function(originalEvent) {
-            return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);
-        },
-        special: {
-            load: {
-                noBubble: true
-            },
-            click: {
-                setup: function(data) {
-                    var el = this || data;
-                    if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) {
-                        leverageNative(el, "click", returnTrue);
-                    }
-                    return false;
-                },
-                trigger: function(data) {
-                    var el = this || data;
-                    if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) {
-                        leverageNative(el, "click");
-                    }
-                    return true;
-                },
-                _default: function(event) {
-                    var target = event.target;
-                    return rcheckableType.test(target.type) && target.click && nodeName(target, "input") && dataPriv.get(target, "click") || nodeName(target, "a");
-                }
-            },
-            beforeunload: {
-                postDispatch: function(event) {
-                    if (event.result !== undefined && event.originalEvent) {
-                        event.originalEvent.returnValue = event.result;
-                    }
-                }
-            }
-        }
-    };
-    function leverageNative(el, type, expectSync) {
-        if (!expectSync) {
-            if (dataPriv.get(el, type) === undefined) {
-                jQuery.event.add(el, type, returnTrue);
-            }
-            return;
-        }
-        dataPriv.set(el, type, false);
-        jQuery.event.add(el, type, {
-            namespace: false,
-            handler: function(event) {
-                var notAsync, result, saved = dataPriv.get(this, type);
-                if (event.isTrigger & 1 && this[type]) {
-                    if (!saved.length) {
-                        saved = slice.call(arguments);
-                        dataPriv.set(this, type, saved);
-                        notAsync = expectSync(this, type);
-                        this[type]();
-                        result = dataPriv.get(this, type);
-                        if (saved !== result || notAsync) {
-                            dataPriv.set(this, type, false);
-                        } else {
-                            result = {};
-                        }
-                        if (saved !== result) {
-                            event.stopImmediatePropagation();
-                            event.preventDefault();
-                            return result && result.value;
-                        }
-                    } else if ((jQuery.event.special[type] || {}).delegateType) {
-                        event.stopPropagation();
-                    }
-                } else if (saved.length) {
-                    dataPriv.set(this, type, {
-                        value: jQuery.event.trigger(jQuery.extend(saved[0], jQuery.Event.prototype), saved.slice(1), this)
-                    });
-                    event.stopImmediatePropagation();
-                }
-            }
-        });
-    }
-    jQuery.removeEvent = function(elem, type, handle) {
-        if (elem.removeEventListener) {
-            elem.removeEventListener(type, handle);
-        }
-    };
-    jQuery.Event = function(src, props) {
-        if (!(this instanceof jQuery.Event)) {
-            return new jQuery.Event(src, props);
-        }
-        if (src && src.type) {
-            this.originalEvent = src;
-            this.type = src.type;
-            this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && src.returnValue === false ? returnTrue : returnFalse;
-            this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;
-            this.currentTarget = src.currentTarget;
-            this.relatedTarget = src.relatedTarget;
-        } else {
-            this.type = src;
-        }
-        if (props) {
-            jQuery.extend(this, props);
-        }
-        this.timeStamp = src && src.timeStamp || Date.now();
-        this[jQuery.expando] = true;
-    };
-    jQuery.Event.prototype = {
-        constructor: jQuery.Event,
-        isDefaultPrevented: returnFalse,
-        isPropagationStopped: returnFalse,
-        isImmediatePropagationStopped: returnFalse,
-        isSimulated: false,
-        preventDefault: function() {
-            var e = this.originalEvent;
-            this.isDefaultPrevented = returnTrue;
-            if (e && !this.isSimulated) {
-                e.preventDefault();
-            }
-        },
-        stopPropagation: function() {
-            var e = this.originalEvent;
-            this.isPropagationStopped = returnTrue;
-            if (e && !this.isSimulated) {
-                e.stopPropagation();
-            }
-        },
-        stopImmediatePropagation: function() {
-            var e = this.originalEvent;
-            this.isImmediatePropagationStopped = returnTrue;
-            if (e && !this.isSimulated) {
-                e.stopImmediatePropagation();
-            }
-            this.stopPropagation();
-        }
-    };
-    jQuery.each({
-        altKey: true,
-        bubbles: true,
-        cancelable: true,
-        changedTouches: true,
-        ctrlKey: true,
-        detail: true,
-        eventPhase: true,
-        metaKey: true,
-        pageX: true,
-        pageY: true,
-        shiftKey: true,
-        view: true,
-        char: true,
-        code: true,
-        charCode: true,
-        key: true,
-        keyCode: true,
-        button: true,
-        buttons: true,
-        clientX: true,
-        clientY: true,
-        offsetX: true,
-        offsetY: true,
-        pointerId: true,
-        pointerType: true,
-        screenX: true,
-        screenY: true,
-        targetTouches: true,
-        toElement: true,
-        touches: true,
-        which: true
-    }, jQuery.event.addProp);
-    jQuery.each({
-        focus: "focusin",
-        blur: "focusout"
-    }, function(type, delegateType) {
-        jQuery.event.special[type] = {
-            setup: function() {
-                leverageNative(this, type, expectSync);
-                return false;
-            },
-            trigger: function() {
-                leverageNative(this, type);
-                return true;
-            },
-            _default: function() {
-                return true;
-            },
-            delegateType: delegateType
-        };
-    });
-    jQuery.each({
-        mouseenter: "mouseover",
-        mouseleave: "mouseout",
-        pointerenter: "pointerover",
-        pointerleave: "pointerout"
-    }, function(orig, fix) {
-        jQuery.event.special[orig] = {
-            delegateType: fix,
-            bindType: fix,
-            handle: function(event) {
-                var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj;
-                if (!related || related !== target && !jQuery.contains(target, related)) {
-                    event.type = handleObj.origType;
-                    ret = handleObj.handler.apply(this, arguments);
-                    event.type = fix;
-                }
-                return ret;
-            }
-        };
-    });
-    jQuery.fn.extend({
-        on: function(types, selector, data, fn) {
-            return on(this, types, selector, data, fn);
-        },
-        one: function(types, selector, data, fn) {
-            return on(this, types, selector, data, fn, 1);
-        },
-        off: function(types, selector, fn) {
-            var handleObj, type;
-            if (types && types.preventDefault && types.handleObj) {
-                handleObj = types.handleObj;
-                jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);
-                return this;
-            }
-            if (typeof types === "object") {
-                for (type in types) {
-                    this.off(type, selector, types[type]);
-                }
-                return this;
-            }
-            if (selector === false || typeof selector === "function") {
-                fn = selector;
-                selector = undefined;
-            }
-            if (fn === false) {
-                fn = returnFalse;
-            }
-            return this.each(function() {
-                jQuery.event.remove(this, types, fn, selector);
-            });
-        }
-    });
-    var rnoInnerhtml = /<script|<style|<link/i, rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
-    function manipulationTarget(elem, content) {
-        if (nodeName(elem, "table") && nodeName(content.nodeType !== 11 ? content : content.firstChild, "tr")) {
-            return jQuery(elem).children("tbody")[0] || elem;
-        }
-        return elem;
-    }
-    function disableScript(elem) {
-        elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
-        return elem;
-    }
-    function restoreScript(elem) {
-        if ((elem.type || "").slice(0, 5) === "true/") {
-            elem.type = elem.type.slice(5);
-        } else {
-            elem.removeAttribute("type");
-        }
-        return elem;
-    }
-    function cloneCopyEvent(src, dest) {
-        var i, l, type, pdataOld, udataOld, udataCur, events;
-        if (dest.nodeType !== 1) {
-            return;
-        }
-        if (dataPriv.hasData(src)) {
-            pdataOld = dataPriv.get(src);
-            events = pdataOld.events;
-            if (events) {
-                dataPriv.remove(dest, "handle events");
-                for (type in events) {
-                    for (i = 0, l = events[type].length; i < l; i++) {
-                        jQuery.event.add(dest, type, events[type][i]);
-                    }
-                }
-            }
-        }
-        if (dataUser.hasData(src)) {
-            udataOld = dataUser.access(src);
-            udataCur = jQuery.extend({}, udataOld);
-            dataUser.set(dest, udataCur);
-        }
-    }
-    function fixInput(src, dest) {
-        var nodeName = dest.nodeName.toLowerCase();
-        if (nodeName === "input" && rcheckableType.test(src.type)) {
-            dest.checked = src.checked;
-        } else if (nodeName === "input" || nodeName === "textarea") {
-            dest.defaultValue = src.defaultValue;
-        }
-    }
-    function domManip(collection, args, callback, ignored) {
-        args = flat(args);
-        var fragment, first, scripts, hasScripts, node, doc, i = 0, l = collection.length, iNoClone = l - 1, value = args[0], valueIsFunction = isFunction(value);
-        if (valueIsFunction || l > 1 && typeof value === "string" && !support.checkClone && rchecked.test(value)) {
-            return collection.each(function(index) {
-                var self = collection.eq(index);
-                if (valueIsFunction) {
-                    args[0] = value.call(this, index, self.html());
-                }
-                domManip(self, args, callback, ignored);
-            });
-        }
-        if (l) {
-            fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);
-            first = fragment.firstChild;
-            if (fragment.childNodes.length === 1) {
-                fragment = first;
-            }
-            if (first || ignored) {
-                scripts = jQuery.map(getAll(fragment, "script"), disableScript);
-                hasScripts = scripts.length;
-                for (;i < l; i++) {
-                    node = fragment;
-                    if (i !== iNoClone) {
-                        node = jQuery.clone(node, true, true);
-                        if (hasScripts) {
-                            jQuery.merge(scripts, getAll(node, "script"));
-                        }
-                    }
-                    callback.call(collection[i], node, i);
-                }
-                if (hasScripts) {
-                    doc = scripts[scripts.length - 1].ownerDocument;
-                    jQuery.map(scripts, restoreScript);
-                    for (i = 0; i < hasScripts; i++) {
-                        node = scripts[i];
-                        if (rscriptType.test(node.type || "") && !dataPriv.access(node, "globalEval") && jQuery.contains(doc, node)) {
-                            if (node.src && (node.type || "").toLowerCase() !== "module") {
-                                if (jQuery._evalUrl && !node.noModule) {
-                                    jQuery._evalUrl(node.src, {
-                                        nonce: node.nonce || node.getAttribute("nonce")
-                                    }, doc);
-                                }
-                            } else {
-                                DOMEval(node.textContent.replace(rcleanScript, ""), node, doc);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return collection;
-    }
-    function remove(elem, selector, keepData) {
-        var node, nodes = selector ? jQuery.filter(selector, elem) : elem, i = 0;
-        for (;(node = nodes[i]) != null; i++) {
-            if (!keepData && node.nodeType === 1) {
-                jQuery.cleanData(getAll(node));
-            }
-            if (node.parentNode) {
-                if (keepData && isAttached(node)) {
-                    setGlobalEval(getAll(node, "script"));
-                }
-                node.parentNode.removeChild(node);
-            }
-        }
-        return elem;
-    }
-    jQuery.extend({
-        htmlPrefilter: function(html) {
-            return html;
-        },
-        clone: function(elem, dataAndEvents, deepDataAndEvents) {
-            var i, l, srcElements, destElements, clone = elem.cloneNode(true), inPage = isAttached(elem);
-            if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {
-                destElements = getAll(clone);
-                srcElements = getAll(elem);
-                for (i = 0, l = srcElements.length; i < l; i++) {
-                    fixInput(srcElements[i], destElements[i]);
-                }
-            }
-            if (dataAndEvents) {
-                if (deepDataAndEvents) {
-                    srcElements = srcElements || getAll(elem);
-                    destElements = destElements || getAll(clone);
-                    for (i = 0, l = srcElements.length; i < l; i++) {
-                        cloneCopyEvent(srcElements[i], destElements[i]);
-                    }
-                } else {
-                    cloneCopyEvent(elem, clone);
-                }
-            }
-            destElements = getAll(clone, "script");
-            if (destElements.length > 0) {
-                setGlobalEval(destElements, !inPage && getAll(elem, "script"));
-            }
-            return clone;
-        },
-        cleanData: function(elems) {
-            var data, elem, type, special = jQuery.event.special, i = 0;
-            for (;(elem = elems[i]) !== undefined; i++) {
-                if (acceptData(elem)) {
-                    if (data = elem[dataPriv.expando]) {
-                        if (data.events) {
-                            for (type in data.events) {
-                                if (special[type]) {
-                                    jQuery.event.remove(elem, type);
-                                } else {
-                                    jQuery.removeEvent(elem, type, data.handle);
-                                }
-                            }
-                        }
-                        elem[dataPriv.expando] = undefined;
-                    }
-                    if (elem[dataUser.expando]) {
-                        elem[dataUser.expando] = undefined;
-                    }
-                }
-            }
-        }
-    });
-    jQuery.fn.extend({
-        detach: function(selector) {
-            return remove(this, selector, true);
-        },
-        remove: function(selector) {
-            return remove(this, selector);
-        },
-        text: function(value) {
-            return access(this, function(value) {
-                return value === undefined ? jQuery.text(this) : this.empty().each(function() {
-                    if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
-                        this.textContent = value;
-                    }
-                });
-            }, null, value, arguments.length);
-        },
-        append: function() {
-            return domManip(this, arguments, function(elem) {
-                if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
-                    var target = manipulationTarget(this, elem);
-                    target.appendChild(elem);
-                }
-            });
-        },
-        prepend: function() {
-            return domManip(this, arguments, function(elem) {
-                if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
-                    var target = manipulationTarget(this, elem);
-                    target.insertBefore(elem, target.firstChild);
-                }
-            });
-        },
-        before: function() {
-            return domManip(this, arguments, function(elem) {
-                if (this.parentNode) {
-                    this.parentNode.insertBefore(elem, this);
-                }
-            });
-        },
-        after: function() {
-            return domManip(this, arguments, function(elem) {
-                if (this.parentNode) {
-                    this.parentNode.insertBefore(elem, this.nextSibling);
-                }
-            });
-        },
-        empty: function() {
-            var elem, i = 0;
-            for (;(elem = this[i]) != null; i++) {
-                if (elem.nodeType === 1) {
-                    jQuery.cleanData(getAll(elem, false));
-                    elem.textContent = "";
-                }
-            }
-            return this;
-        },
-        clone: function(dataAndEvents, deepDataAndEvents) {
-            dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
-            deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-            return this.map(function() {
-                return jQuery.clone(this, dataAndEvents, deepDataAndEvents);
-            });
-        },
-        html: function(value) {
-            return access(this, function(value) {
-                var elem = this[0] || {}, i = 0, l = this.length;
-                if (value === undefined && elem.nodeType === 1) {
-                    return elem.innerHTML;
-                }
-                if (typeof value === "string" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || [ "", "" ])[1].toLowerCase()]) {
-                    value = jQuery.htmlPrefilter(value);
-                    try {
-                        for (;i < l; i++) {
-                            elem = this[i] || {};
-                            if (elem.nodeType === 1) {
-                                jQuery.cleanData(getAll(elem, false));
-                                elem.innerHTML = value;
-                            }
-                        }
-                        elem = 0;
-                    } catch (e) {}
-                }
-                if (elem) {
-                    this.empty().append(value);
-                }
-            }, null, value, arguments.length);
-        },
-        replaceWith: function() {
-            var ignored = [];
-            return domManip(this, arguments, function(elem) {
-                var parent = this.parentNode;
-                if (jQuery.inArray(this, ignored) < 0) {
-                    jQuery.cleanData(getAll(this));
-                    if (parent) {
-                        parent.replaceChild(elem, this);
-                    }
-                }
-            }, ignored);
-        }
-    });
-    jQuery.each({
-        appendTo: "append",
-        prependTo: "prepend",
-        insertBefore: "before",
-        insertAfter: "after",
-        replaceAll: "replaceWith"
-    }, function(name, original) {
-        jQuery.fn[name] = function(selector) {
-            var elems, ret = [], insert = jQuery(selector), last = insert.length - 1, i = 0;
-            for (;i <= last; i++) {
-                elems = i === last ? this : this.clone(true);
-                jQuery(insert[i])[original](elems);
-                push.apply(ret, elems.get());
-            }
-            return this.pushStack(ret);
-        };
-    });
-    var rnumnonpx = new RegExp("^(" + pnum + ")(?!px)[a-z%]+$", "i");
-    var getStyles = function(elem) {
-        var view = elem.ownerDocument.defaultView;
-        if (!view || !view.opener) {
-            view = window;
-        }
-        return view.getComputedStyle(elem);
-    };
-    var swap = function(elem, options, callback) {
-        var ret, name, old = {};
-        for (name in options) {
-            old[name] = elem.style[name];
-            elem.style[name] = options[name];
-        }
-        ret = callback.call(elem);
-        for (name in options) {
-            elem.style[name] = old[name];
-        }
-        return ret;
-    };
-    var rboxStyle = new RegExp(cssExpand.join("|"), "i");
-    (function() {
-        function computeStyleTests() {
-            if (!div) {
-                return;
-            }
-            container.style.cssText = "position:absolute;left:-11111px;width:60px;" + "margin-top:1px;padding:0;border:0";
-            div.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + "margin:auto;border:1px;padding:1px;" + "width:60%;top:1%";
-            documentElement.appendChild(container).appendChild(div);
-            var divStyle = window.getComputedStyle(div);
-            pixelPositionVal = divStyle.top !== "1%";
-            reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;
-            div.style.right = "60%";
-            pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;
-            boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;
-            div.style.position = "absolute";
-            scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;
-            documentElement.removeChild(container);
-            div = null;
-        }
-        function roundPixelMeasures(measure) {
-            return Math.round(parseFloat(measure));
-        }
-        var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, reliableTrDimensionsVal, reliableMarginLeftVal, container = document.createElement("div"), div = document.createElement("div");
-        if (!div.style) {
-            return;
-        }
-        div.style.backgroundClip = "content-box";
-        div.cloneNode(true).style.backgroundClip = "";
-        support.clearCloneStyle = div.style.backgroundClip === "content-box";
-        jQuery.extend(support, {
-            boxSizingReliable: function() {
-                computeStyleTests();
-                return boxSizingReliableVal;
-            },
-            pixelBoxStyles: function() {
-                computeStyleTests();
-                return pixelBoxStylesVal;
-            },
-            pixelPosition: function() {
-                computeStyleTests();
-                return pixelPositionVal;
-            },
-            reliableMarginLeft: function() {
-                computeStyleTests();
-                return reliableMarginLeftVal;
-            },
-            scrollboxSize: function() {
-                computeStyleTests();
-                return scrollboxSizeVal;
-            },
-            reliableTrDimensions: function() {
-                var table, tr, trChild, trStyle;
-                if (reliableTrDimensionsVal == null) {
-                    table = document.createElement("table");
-                    tr = document.createElement("tr");
-                    trChild = document.createElement("div");
-                    table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
-                    tr.style.cssText = "border:1px solid";
-                    tr.style.height = "1px";
-                    trChild.style.height = "9px";
-                    trChild.style.display = "block";
-                    documentElement.appendChild(table).appendChild(tr).appendChild(trChild);
-                    trStyle = window.getComputedStyle(tr);
-                    reliableTrDimensionsVal = parseInt(trStyle.height, 10) + parseInt(trStyle.borderTopWidth, 10) + parseInt(trStyle.borderBottomWidth, 10) === tr.offsetHeight;
-                    documentElement.removeChild(table);
-                }
-                return reliableTrDimensionsVal;
-            }
-        });
-    })();
-    function curCSS(elem, name, computed) {
-        var width, minWidth, maxWidth, ret, style = elem.style;
-        computed = computed || getStyles(elem);
-        if (computed) {
-            ret = computed.getPropertyValue(name) || computed[name];
-            if (ret === "" && !isAttached(elem)) {
-                ret = jQuery.style(elem, name);
-            }
-            if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {
-                width = style.width;
-                minWidth = style.minWidth;
-                maxWidth = style.maxWidth;
-                style.minWidth = style.maxWidth = style.width = ret;
-                ret = computed.width;
-                style.width = width;
-                style.minWidth = minWidth;
-                style.maxWidth = maxWidth;
-            }
-        }
-        return ret !== undefined ? ret + "" : ret;
-    }
-    function addGetHookIf(conditionFn, hookFn) {
-        return {
-            get: function() {
-                if (conditionFn()) {
-                    delete this.get;
-                    return;
-                }
-                return (this.get = hookFn).apply(this, arguments);
-            }
-        };
-    }
-    var cssPrefixes = [ "Webkit", "Moz", "ms" ], emptyStyle = document.createElement("div").style, vendorProps = {};
-    function vendorPropName(name) {
-        var capName = name[0].toUpperCase() + name.slice(1), i = cssPrefixes.length;
-        while (i--) {
-            name = cssPrefixes[i] + capName;
-            if (name in emptyStyle) {
-                return name;
-            }
-        }
-    }
-    function finalPropName(name) {
-        var final = jQuery.cssProps[name] || vendorProps[name];
-        if (final) {
-            return final;
-        }
-        if (name in emptyStyle) {
-            return name;
-        }
-        return vendorProps[name] = vendorPropName(name) || name;
-    }
-    var rdisplayswap = /^(none|table(?!-c[ea]).+)/, rcustomProp = /^--/, cssShow = {
-        position: "absolute",
-        visibility: "hidden",
-        display: "block"
-    }, cssNormalTransform = {
-        letterSpacing: "0",
-        fontWeight: "400"
-    };
-    function setPositiveNumber(_elem, value, subtract) {
-        var matches = rcssNum.exec(value);
-        return matches ? Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || "px") : value;
-    }
-    function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {
-        var i = dimension === "width" ? 1 : 0, extra = 0, delta = 0;
-        if (box === (isBorderBox ? "border" : "content")) {
-            return 0;
-        }
-        for (;i < 4; i += 2) {
-            if (box === "margin") {
-                delta += jQuery.css(elem, box + cssExpand[i], true, styles);
-            }
-            if (!isBorderBox) {
-                delta += jQuery.css(elem, "padding" + cssExpand[i], true, styles);
-                if (box !== "padding") {
-                    delta += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
-                } else {
-                    extra += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
-                }
-            } else {
-                if (box === "content") {
-                    delta -= jQuery.css(elem, "padding" + cssExpand[i], true, styles);
-                }
-                if (box !== "margin") {
-                    delta -= jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
-                }
-            }
-        }
-        if (!isBorderBox && computedVal >= 0) {
-            delta += Math.max(0, Math.ceil(elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - .5)) || 0;
-        }
-        return delta;
-    }
-    function getWidthOrHeight(elem, dimension, extra) {
-        var styles = getStyles(elem), boxSizingNeeded = !support.boxSizingReliable() || extra, isBorderBox = boxSizingNeeded && jQuery.css(elem, "boxSizing", false, styles) === "border-box", valueIsBorderBox = isBorderBox, val = curCSS(elem, dimension, styles), offsetProp = "offset" + dimension[0].toUpperCase() + dimension.slice(1);
-        if (rnumnonpx.test(val)) {
-            if (!extra) {
-                return val;
-            }
-            val = "auto";
-        }
-        if ((!support.boxSizingReliable() && isBorderBox || !support.reliableTrDimensions() && nodeName(elem, "tr") || val === "auto" || !parseFloat(val) && jQuery.css(elem, "display", false, styles) === "inline") && elem.getClientRects().length) {
-            isBorderBox = jQuery.css(elem, "boxSizing", false, styles) === "border-box";
-            valueIsBorderBox = offsetProp in elem;
-            if (valueIsBorderBox) {
-                val = elem[offsetProp];
-            }
-        }
-        val = parseFloat(val) || 0;
-        return val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? "border" : "content"), valueIsBorderBox, styles, val) + "px";
-    }
-    jQuery.extend({
-        cssHooks: {
-            opacity: {
-                get: function(elem, computed) {
-                    if (computed) {
-                        var ret = curCSS(elem, "opacity");
-                        return ret === "" ? "1" : ret;
-                    }
-                }
-            }
-        },
-        cssNumber: {
-            animationIterationCount: true,
-            columnCount: true,
-            fillOpacity: true,
-            flexGrow: true,
-            flexShrink: true,
-            fontWeight: true,
-            gridArea: true,
-            gridColumn: true,
-            gridColumnEnd: true,
-            gridColumnStart: true,
-            gridRow: true,
-            gridRowEnd: true,
-            gridRowStart: true,
-            lineHeight: true,
-            opacity: true,
-            order: true,
-            orphans: true,
-            widows: true,
-            zIndex: true,
-            zoom: true
-        },
-        cssProps: {},
-        style: function(elem, name, value, extra) {
-            if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {
-                return;
-            }
-            var ret, type, hooks, origName = camelCase(name), isCustomProp = rcustomProp.test(name), style = elem.style;
-            if (!isCustomProp) {
-                name = finalPropName(origName);
-            }
-            hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
-            if (value !== undefined) {
-                type = typeof value;
-                if (type === "string" && (ret = rcssNum.exec(value)) && ret[1]) {
-                    value = adjustCSS(elem, name, ret);
-                    type = "number";
-                }
-                if (value == null || value !== value) {
-                    return;
-                }
-                if (type === "number" && !isCustomProp) {
-                    value += ret && ret[3] || (jQuery.cssNumber[origName] ? "" : "px");
-                }
-                if (!support.clearCloneStyle && value === "" && name.indexOf("background") === 0) {
-                    style[name] = "inherit";
-                }
-                if (!hooks || !("set" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {
-                    if (isCustomProp) {
-                        style.setProperty(name, value);
-                    } else {
-                        style[name] = value;
-                    }
-                }
-            } else {
-                if (hooks && "get" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {
-                    return ret;
-                }
-                return style[name];
-            }
-        },
-        css: function(elem, name, extra, styles) {
-            var val, num, hooks, origName = camelCase(name), isCustomProp = rcustomProp.test(name);
-            if (!isCustomProp) {
-                name = finalPropName(origName);
-            }
-            hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
-            if (hooks && "get" in hooks) {
-                val = hooks.get(elem, true, extra);
-            }
-            if (val === undefined) {
-                val = curCSS(elem, name, styles);
-            }
-            if (val === "normal" && name in cssNormalTransform) {
-                val = cssNormalTransform[name];
-            }
-            if (extra === "" || extra) {
-                num = parseFloat(val);
-                return extra === true || isFinite(num) ? num || 0 : val;
-            }
-            return val;
-        }
-    });
-    jQuery.each([ "height", "width" ], function(_i, dimension) {
-        jQuery.cssHooks[dimension] = {
-            get: function(elem, computed, extra) {
-                if (computed) {
-                    return rdisplayswap.test(jQuery.css(elem, "display")) && (!elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function() {
-                        return getWidthOrHeight(elem, dimension, extra);
-                    }) : getWidthOrHeight(elem, dimension, extra);
-                }
-            },
-            set: function(elem, value, extra) {
-                var matches, styles = getStyles(elem), scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === "absolute", boxSizingNeeded = scrollboxSizeBuggy || extra, isBorderBox = boxSizingNeeded && jQuery.css(elem, "boxSizing", false, styles) === "border-box", subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0;
-                if (isBorderBox && scrollboxSizeBuggy) {
-                    subtract -= Math.ceil(elem["offset" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, "border", false, styles) - .5);
-                }
-                if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || "px") !== "px") {
-                    elem.style[dimension] = value;
-                    value = jQuery.css(elem, dimension);
-                }
-                return setPositiveNumber(elem, value, subtract);
-            }
-        };
-    });
-    jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function(elem, computed) {
-        if (computed) {
-            return (parseFloat(curCSS(elem, "marginLeft")) || elem.getBoundingClientRect().left - swap(elem, {
-                marginLeft: 0
-            }, function() {
-                return elem.getBoundingClientRect().left;
-            })) + "px";
-        }
-    });
-    jQuery.each({
-        margin: "",
-        padding: "",
-        border: "Width"
-    }, function(prefix, suffix) {
-        jQuery.cssHooks[prefix + suffix] = {
-            expand: function(value) {
-                var i = 0, expanded = {}, parts = typeof value === "string" ? value.split(" ") : [ value ];
-                for (;i < 4; i++) {
-                    expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];
-                }
-                return expanded;
-            }
-        };
-        if (prefix !== "margin") {
-            jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;
-        }
-    });
-    jQuery.fn.extend({
-        css: function(name, value) {
-            return access(this, function(elem, name, value) {
-                var styles, len, map = {}, i = 0;
-                if (Array.isArray(name)) {
-                    styles = getStyles(elem);
-                    len = name.length;
-                    for (;i < len; i++) {
-                        map[name[i]] = jQuery.css(elem, name[i], false, styles);
-                    }
-                    return map;
-                }
-                return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);
-            }, name, value, arguments.length > 1);
-        }
-    });
-    function Tween(elem, options, prop, end, easing) {
-        return new Tween.prototype.init(elem, options, prop, end, easing);
-    }
-    jQuery.Tween = Tween;
-    Tween.prototype = {
-        constructor: Tween,
-        init: function(elem, options, prop, end, easing, unit) {
-            this.elem = elem;
-            this.prop = prop;
-            this.easing = easing || jQuery.easing._default;
-            this.options = options;
-            this.start = this.now = this.cur();
-            this.end = end;
-            this.unit = unit || (jQuery.cssNumber[prop] ? "" : "px");
-        },
-        cur: function() {
-            var hooks = Tween.propHooks[this.prop];
-            return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);
-        },
-        run: function(percent) {
-            var eased, hooks = Tween.propHooks[this.prop];
-            if (this.options.duration) {
-                this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);
-            } else {
-                this.pos = eased = percent;
-            }
-            this.now = (this.end - this.start) * eased + this.start;
-            if (this.options.step) {
-                this.options.step.call(this.elem, this.now, this);
-            }
-            if (hooks && hooks.set) {
-                hooks.set(this);
-            } else {
-                Tween.propHooks._default.set(this);
-            }
-            return this;
-        }
-    };
-    Tween.prototype.init.prototype = Tween.prototype;
-    Tween.propHooks = {
-        _default: {
-            get: function(tween) {
-                var result;
-                if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {
-                    return tween.elem[tween.prop];
-                }
-                result = jQuery.css(tween.elem, tween.prop, "");
-                return !result || result === "auto" ? 0 : result;
-            },
-            set: function(tween) {
-                if (jQuery.fx.step[tween.prop]) {
-                    jQuery.fx.step[tween.prop](tween);
-                } else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {
-                    jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);
-                } else {
-                    tween.elem[tween.prop] = tween.now;
-                }
-            }
-        }
-    };
-    Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
-        set: function(tween) {
-            if (tween.elem.nodeType && tween.elem.parentNode) {
-                tween.elem[tween.prop] = tween.now;
-            }
-        }
-    };
-    jQuery.easing = {
-        linear: function(p) {
-            return p;
-        },
-        swing: function(p) {
-            return .5 - Math.cos(p * Math.PI) / 2;
-        },
-        _default: "swing"
-    };
-    jQuery.fx = Tween.prototype.init;
-    jQuery.fx.step = {};
-    var fxNow, inProgress, rfxtypes = /^(?:toggle|show|hide)$/, rrun = /queueHooks$/;
-    function schedule() {
-        if (inProgress) {
-            if (document.hidden === false && window.requestAnimationFrame) {
-                window.requestAnimationFrame(schedule);
-            } else {
-                window.setTimeout(schedule, jQuery.fx.interval);
-            }
-            jQuery.fx.tick();
-        }
-    }
-    function createFxNow() {
-        window.setTimeout(function() {
-            fxNow = undefined;
-        });
-        return fxNow = Date.now();
-    }
-    function genFx(type, includeWidth) {
-        var which, i = 0, attrs = {
-            height: type
-        };
-        includeWidth = includeWidth ? 1 : 0;
-        for (;i < 4; i += 2 - includeWidth) {
-            which = cssExpand[i];
-            attrs["margin" + which] = attrs["padding" + which] = type;
-        }
-        if (includeWidth) {
-            attrs.opacity = attrs.width = type;
-        }
-        return attrs;
-    }
-    function createTween(value, prop, animation) {
-        var tween, collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners["*"]), index = 0, length = collection.length;
-        for (;index < length; index++) {
-            if (tween = collection[index].call(animation, prop, value)) {
-                return tween;
-            }
-        }
-    }
-    function defaultPrefilter(elem, props, opts) {
-        var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, isBox = "width" in props || "height" in props, anim = this, orig = {}, style = elem.style, hidden = elem.nodeType && isHiddenWithinTree(elem), dataShow = dataPriv.get(elem, "fxshow");
-        if (!opts.queue) {
-            hooks = jQuery._queueHooks(elem, "fx");
-            if (hooks.unqueued == null) {
-                hooks.unqueued = 0;
-                oldfire = hooks.empty.fire;
-                hooks.empty.fire = function() {
-                    if (!hooks.unqueued) {
-                        oldfire();
-                    }
-                };
-            }
-            hooks.unqueued++;
-            anim.always(function() {
-                anim.always(function() {
-                    hooks.unqueued--;
-                    if (!jQuery.queue(elem, "fx").length) {
-                        hooks.empty.fire();
-                    }
-                });
-            });
-        }
-        for (prop in props) {
-            value = props[prop];
-            if (rfxtypes.test(value)) {
-                delete props[prop];
-                toggle = toggle || value === "toggle";
-                if (value === (hidden ? "hide" : "show")) {
-                    if (value === "show" && dataShow && dataShow[prop] !== undefined) {
-                        hidden = true;
-                    } else {
-                        continue;
-                    }
-                }
-                orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);
-            }
-        }
-        propTween = !jQuery.isEmptyObject(props);
-        if (!propTween && jQuery.isEmptyObject(orig)) {
-            return;
-        }
-        if (isBox && elem.nodeType === 1) {
-            opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-            restoreDisplay = dataShow && dataShow.display;
-            if (restoreDisplay == null) {
-                restoreDisplay = dataPriv.get(elem, "display");
-            }
-            display = jQuery.css(elem, "display");
-            if (display === "none") {
-                if (restoreDisplay) {
-                    display = restoreDisplay;
-                } else {
-                    showHide([ elem ], true);
-                    restoreDisplay = elem.style.display || restoreDisplay;
-                    display = jQuery.css(elem, "display");
-                    showHide([ elem ]);
-                }
-            }
-            if (display === "inline" || display === "inline-block" && restoreDisplay != null) {
-                if (jQuery.css(elem, "float") === "none") {
-                    if (!propTween) {
-                        anim.done(function() {
-                            style.display = restoreDisplay;
-                        });
-                        if (restoreDisplay == null) {
-                            display = style.display;
-                            restoreDisplay = display === "none" ? "" : display;
-                        }
-                    }
-                    style.display = "inline-block";
-                }
-            }
-        }
-        if (opts.overflow) {
-            style.overflow = "hidden";
-            anim.always(function() {
-                style.overflow = opts.overflow[0];
-                style.overflowX = opts.overflow[1];
-                style.overflowY = opts.overflow[2];
-            });
-        }
-        propTween = false;
-        for (prop in orig) {
-            if (!propTween) {
-                if (dataShow) {
-                    if ("hidden" in dataShow) {
-                        hidden = dataShow.hidden;
-                    }
-                } else {
-                    dataShow = dataPriv.access(elem, "fxshow", {
-                        display: restoreDisplay
-                    });
-                }
-                if (toggle) {
-                    dataShow.hidden = !hidden;
-                }
-                if (hidden) {
-                    showHide([ elem ], true);
-                }
-                anim.done(function() {
-                    if (!hidden) {
-                        showHide([ elem ]);
-                    }
-                    dataPriv.remove(elem, "fxshow");
-                    for (prop in orig) {
-                        jQuery.style(elem, prop, orig[prop]);
-                    }
-                });
-            }
-            propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);
-            if (!(prop in dataShow)) {
-                dataShow[prop] = propTween.start;
-                if (hidden) {
-                    propTween.end = propTween.start;
-                    propTween.start = 0;
-                }
-            }
-        }
-    }
-    function propFilter(props, specialEasing) {
-        var index, name, easing, value, hooks;
-        for (index in props) {
-            name = camelCase(index);
-            easing = specialEasing[name];
-            value = props[index];
-            if (Array.isArray(value)) {
-                easing = value[1];
-                value = props[index] = value[0];
-            }
-            if (index !== name) {
-                props[name] = value;
-                delete props[index];
-            }
-            hooks = jQuery.cssHooks[name];
-            if (hooks && "expand" in hooks) {
-                value = hooks.expand(value);
-                delete props[name];
-                for (index in value) {
-                    if (!(index in props)) {
-                        props[index] = value[index];
-                        specialEasing[index] = easing;
-                    }
-                }
-            } else {
-                specialEasing[name] = easing;
-            }
-        }
-    }
-    function Animation(elem, properties, options) {
-        var result, stopped, index = 0, length = Animation.prefilters.length, deferred = jQuery.Deferred().always(function() {
-            delete tick.elem;
-        }), tick = function() {
-            if (stopped) {
-                return false;
-            }
-            var currentTime = fxNow || createFxNow(), remaining = Math.max(0, animation.startTime + animation.duration - currentTime), temp = remaining / animation.duration || 0, percent = 1 - temp, index = 0, length = animation.tweens.length;
-            for (;index < length; index++) {
-                animation.tweens[index].run(percent);
-            }
-            deferred.notifyWith(elem, [ animation, percent, remaining ]);
-            if (percent < 1 && length) {
-                return remaining;
-            }
-            if (!length) {
-                deferred.notifyWith(elem, [ animation, 1, 0 ]);
-            }
-            deferred.resolveWith(elem, [ animation ]);
-            return false;
-        }, animation = deferred.promise({
-            elem: elem,
-            props: jQuery.extend({}, properties),
-            opts: jQuery.extend(true, {
-                specialEasing: {},
-                easing: jQuery.easing._default
-            }, options),
-            originalProperties: properties,
-            originalOptions: options,
-            startTime: fxNow || createFxNow(),
-            duration: options.duration,
-            tweens: [],
-            createTween: function(prop, end) {
-                var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);
-                animation.tweens.push(tween);
-                return tween;
-            },
-            stop: function(gotoEnd) {
-                var index = 0, length = gotoEnd ? animation.tweens.length : 0;
-                if (stopped) {
-                    return this;
-                }
-                stopped = true;
-                for (;index < length; index++) {
-                    animation.tweens[index].run(1);
-                }
-                if (gotoEnd) {
-                    deferred.notifyWith(elem, [ animation, 1, 0 ]);
-                    deferred.resolveWith(elem, [ animation, gotoEnd ]);
-                } else {
-                    deferred.rejectWith(elem, [ animation, gotoEnd ]);
-                }
-                return this;
-            }
-        }), props = animation.props;
-        propFilter(props, animation.opts.specialEasing);
-        for (;index < length; index++) {
-            result = Animation.prefilters[index].call(animation, elem, props, animation.opts);
-            if (result) {
-                if (isFunction(result.stop)) {
-                    jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);
-                }
-                return result;
-            }
-        }
-        jQuery.map(props, createTween, animation);
-        if (isFunction(animation.opts.start)) {
-            animation.opts.start.call(elem, animation);
-        }
-        animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);
-        jQuery.fx.timer(jQuery.extend(tick, {
-            elem: elem,
-            anim: animation,
-            queue: animation.opts.queue
-        }));
-        return animation;
-    }
-    jQuery.Animation = jQuery.extend(Animation, {
-        tweeners: {
-            "*": [ function(prop, value) {
-                var tween = this.createTween(prop, value);
-                adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);
-                return tween;
-            } ]
-        },
-        tweener: function(props, callback) {
-            if (isFunction(props)) {
-                callback = props;
-                props = [ "*" ];
-            } else {
-                props = props.match(rnothtmlwhite);
-            }
-            var prop, index = 0, length = props.length;
-            for (;index < length; index++) {
-                prop = props[index];
-                Animation.tweeners[prop] = Animation.tweeners[prop] || [];
-                Animation.tweeners[prop].unshift(callback);
-            }
-        },
-        prefilters: [ defaultPrefilter ],
-        prefilter: function(callback, prepend) {
-            if (prepend) {
-                Animation.prefilters.unshift(callback);
-            } else {
-                Animation.prefilters.push(callback);
-            }
-        }
-    });
-    jQuery.speed = function(speed, easing, fn) {
-        var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
-            complete: fn || !fn && easing || isFunction(speed) && speed,
-            duration: speed,
-            easing: fn && easing || easing && !isFunction(easing) && easing
-        };
-        if (jQuery.fx.off) {
-            opt.duration = 0;
-        } else {
-            if (typeof opt.duration !== "number") {
-                if (opt.duration in jQuery.fx.speeds) {
-                    opt.duration = jQuery.fx.speeds[opt.duration];
-                } else {
-                    opt.duration = jQuery.fx.speeds._default;
-                }
-            }
-        }
-        if (opt.queue == null || opt.queue === true) {
-            opt.queue = "fx";
-        }
-        opt.old = opt.complete;
-        opt.complete = function() {
-            if (isFunction(opt.old)) {
-                opt.old.call(this);
-            }
-            if (opt.queue) {
-                jQuery.dequeue(this, opt.queue);
-            }
-        };
-        return opt;
-    };
-    jQuery.fn.extend({
-        fadeTo: function(speed, to, easing, callback) {
-            return this.filter(isHiddenWithinTree).css("opacity", 0).show().end().animate({
-                opacity: to
-            }, speed, easing, callback);
-        },
-        animate: function(prop, speed, easing, callback) {
-            var empty = jQuery.isEmptyObject(prop), optall = jQuery.speed(speed, easing, callback), doAnimation = function() {
-                var anim = Animation(this, jQuery.extend({}, prop), optall);
-                if (empty || dataPriv.get(this, "finish")) {
-                    anim.stop(true);
-                }
-            };
-            doAnimation.finish = doAnimation;
-            return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);
-        },
-        stop: function(type, clearQueue, gotoEnd) {
-            var stopQueue = function(hooks) {
-                var stop = hooks.stop;
-                delete hooks.stop;
-                stop(gotoEnd);
-            };
-            if (typeof type !== "string") {
-                gotoEnd = clearQueue;
-                clearQueue = type;
-                type = undefined;
-            }
-            if (clearQueue) {
-                this.queue(type || "fx", []);
-            }
-            return this.each(function() {
-                var dequeue = true, index = type != null && type + "queueHooks", timers = jQuery.timers, data = dataPriv.get(this);
-                if (index) {
-                    if (data[index] && data[index].stop) {
-                        stopQueue(data[index]);
-                    }
-                } else {
-                    for (index in data) {
-                        if (data[index] && data[index].stop && rrun.test(index)) {
-                            stopQueue(data[index]);
-                        }
-                    }
-                }
-                for (index = timers.length; index--; ) {
-                    if (timers[index].elem === this && (type == null || timers[index].queue === type)) {
-                        timers[index].anim.stop(gotoEnd);
-                        dequeue = false;
-                        timers.splice(index, 1);
-                    }
-                }
-                if (dequeue || !gotoEnd) {
-                    jQuery.dequeue(this, type);
-                }
-            });
-        },
-        finish: function(type) {
-            if (type !== false) {
-                type = type || "fx";
-            }
-            return this.each(function() {
-                var index, data = dataPriv.get(this), queue = data[type + "queue"], hooks = data[type + "queueHooks"], timers = jQuery.timers, length = queue ? queue.length : 0;
-                data.finish = true;
-                jQuery.queue(this, type, []);
-                if (hooks && hooks.stop) {
-                    hooks.stop.call(this, true);
-                }
-                for (index = timers.length; index--; ) {
-                    if (timers[index].elem === this && timers[index].queue === type) {
-                        timers[index].anim.stop(true);
-                        timers.splice(index, 1);
-                    }
-                }
-                for (index = 0; index < length; index++) {
-                    if (queue[index] && queue[index].finish) {
-                        queue[index].finish.call(this);
-                    }
-                }
-                delete data.finish;
-            });
-        }
-    });
-    jQuery.each([ "toggle", "show", "hide" ], function(_i, name) {
-        var cssFn = jQuery.fn[name];
-        jQuery.fn[name] = function(speed, easing, callback) {
-            return speed == null || typeof speed === "boolean" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);
-        };
-    });
-    jQuery.each({
-        slideDown: genFx("show"),
-        slideUp: genFx("hide"),
-        slideToggle: genFx("toggle"),
-        fadeIn: {
-            opacity: "show"
-        },
-        fadeOut: {
-            opacity: "hide"
-        },
-        fadeToggle: {
-            opacity: "toggle"
-        }
-    }, function(name, props) {
-        jQuery.fn[name] = function(speed, easing, callback) {
-            return this.animate(props, speed, easing, callback);
-        };
-    });
-    jQuery.timers = [];
-    jQuery.fx.tick = function() {
-        var timer, i = 0, timers = jQuery.timers;
-        fxNow = Date.now();
-        for (;i < timers.length; i++) {
-            timer = timers[i];
-            if (!timer() && timers[i] === timer) {
-                timers.splice(i--, 1);
-            }
-        }
-        if (!timers.length) {
-            jQuery.fx.stop();
-        }
-        fxNow = undefined;
-    };
-    jQuery.fx.timer = function(timer) {
-        jQuery.timers.push(timer);
-        jQuery.fx.start();
-    };
-    jQuery.fx.interval = 13;
-    jQuery.fx.start = function() {
-        if (inProgress) {
-            return;
-        }
-        inProgress = true;
-        schedule();
-    };
-    jQuery.fx.stop = function() {
-        inProgress = null;
-    };
-    jQuery.fx.speeds = {
-        slow: 600,
-        fast: 200,
-        _default: 400
-    };
-    jQuery.fn.delay = function(time, type) {
-        time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
-        type = type || "fx";
-        return this.queue(type, function(next, hooks) {
-            var timeout = window.setTimeout(next, time);
-            hooks.stop = function() {
-                window.clearTimeout(timeout);
-            };
-        });
-    };
-    (function() {
-        var input = document.createElement("input"), select = document.createElement("select"), opt = select.appendChild(document.createElement("option"));
-        input.type = "checkbox";
-        support.checkOn = input.value !== "";
-        support.optSelected = opt.selected;
-        input = document.createElement("input");
-        input.value = "t";
-        input.type = "radio";
-        support.radioValue = input.value === "t";
-    })();
-    var boolHook, attrHandle = jQuery.expr.attrHandle;
-    jQuery.fn.extend({
-        attr: function(name, value) {
-            return access(this, jQuery.attr, name, value, arguments.length > 1);
-        },
-        removeAttr: function(name) {
-            return this.each(function() {
-                jQuery.removeAttr(this, name);
-            });
-        }
-    });
-    jQuery.extend({
-        attr: function(elem, name, value) {
-            var ret, hooks, nType = elem.nodeType;
-            if (nType === 3 || nType === 8 || nType === 2) {
-                return;
-            }
-            if (typeof elem.getAttribute === "undefined") {
-                return jQuery.prop(elem, name, value);
-            }
-            if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
-                hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined);
-            }
-            if (value !== undefined) {
-                if (value === null) {
-                    jQuery.removeAttr(elem, name);
-                    return;
-                }
-                if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
-                    return ret;
-                }
-                elem.setAttribute(name, value + "");
-                return value;
-            }
-            if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
-                return ret;
-            }
-            ret = jQuery.find.attr(elem, name);
-            return ret == null ? undefined : ret;
-        },
-        attrHooks: {
-            type: {
-                set: function(elem, value) {
-                    if (!support.radioValue && value === "radio" && nodeName(elem, "input")) {
-                        var val = elem.value;
-                        elem.setAttribute("type", value);
-                        if (val) {
-                            elem.value = val;
-                        }
-                        return value;
-                    }
-                }
-            }
-        },
-        removeAttr: function(elem, value) {
-            var name, i = 0, attrNames = value && value.match(rnothtmlwhite);
-            if (attrNames && elem.nodeType === 1) {
-                while (name = attrNames[i++]) {
-                    elem.removeAttribute(name);
-                }
-            }
-        }
-    });
-    boolHook = {
-        set: function(elem, value, name) {
-            if (value === false) {
-                jQuery.removeAttr(elem, name);
-            } else {
-                elem.setAttribute(name, name);
-            }
-            return name;
-        }
-    };
-    jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g), function(_i, name) {
-        var getter = attrHandle[name] || jQuery.find.attr;
-        attrHandle[name] = function(elem, name, isXML) {
-            var ret, handle, lowercaseName = name.toLowerCase();
-            if (!isXML) {
-                handle = attrHandle[lowercaseName];
-                attrHandle[lowercaseName] = ret;
-                ret = getter(elem, name, isXML) != null ? lowercaseName : null;
-                attrHandle[lowercaseName] = handle;
-            }
-            return ret;
-        };
-    });
-    var rfocusable = /^(?:input|select|textarea|button)$/i, rclickable = /^(?:a|area)$/i;
-    jQuery.fn.extend({
-        prop: function(name, value) {
-            return access(this, jQuery.prop, name, value, arguments.length > 1);
-        },
-        removeProp: function(name) {
-            return this.each(function() {
-                delete this[jQuery.propFix[name] || name];
-            });
-        }
-    });
-    jQuery.extend({
-        prop: function(elem, name, value) {
-            var ret, hooks, nType = elem.nodeType;
-            if (nType === 3 || nType === 8 || nType === 2) {
-                return;
-            }
-            if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
-                name = jQuery.propFix[name] || name;
-                hooks = jQuery.propHooks[name];
-            }
-            if (value !== undefined) {
-                if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
-                    return ret;
-                }
-                return elem[name] = value;
-            }
-            if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
-                return ret;
-            }
-            return elem[name];
-        },
-        propHooks: {
-            tabIndex: {
-                get: function(elem) {
-                    var tabindex = jQuery.find.attr(elem, "tabindex");
-                    if (tabindex) {
-                        return parseInt(tabindex, 10);
-                    }
-                    if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {
-                        return 0;
-                    }
-                    return -1;
-                }
-            }
-        },
-        propFix: {
-            for: "htmlFor",
-            class: "className"
-        }
-    });
-    if (!support.optSelected) {
-        jQuery.propHooks.selected = {
-            get: function(elem) {
-                var parent = elem.parentNode;
-                if (parent && parent.parentNode) {
-                    parent.parentNode.selectedIndex;
-                }
-                return null;
-            },
-            set: function(elem) {
-                var parent = elem.parentNode;
-                if (parent) {
-                    parent.selectedIndex;
-                    if (parent.parentNode) {
-                        parent.parentNode.selectedIndex;
-                    }
-                }
-            }
-        };
-    }
-    jQuery.each([ "tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable" ], function() {
-        jQuery.propFix[this.toLowerCase()] = this;
-    });
-    function stripAndCollapse(value) {
-        var tokens = value.match(rnothtmlwhite) || [];
-        return tokens.join(" ");
-    }
-    function getClass(elem) {
-        return elem.getAttribute && elem.getAttribute("class") || "";
-    }
-    function classesToArray(value) {
-        if (Array.isArray(value)) {
-            return value;
-        }
-        if (typeof value === "string") {
-            return value.match(rnothtmlwhite) || [];
-        }
-        return [];
-    }
-    jQuery.fn.extend({
-        addClass: function(value) {
-            var classes, elem, cur, curValue, clazz, j, finalValue, i = 0;
-            if (isFunction(value)) {
-                return this.each(function(j) {
-                    jQuery(this).addClass(value.call(this, j, getClass(this)));
-                });
-            }
-            classes = classesToArray(value);
-            if (classes.length) {
-                while (elem = this[i++]) {
-                    curValue = getClass(elem);
-                    cur = elem.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";
-                    if (cur) {
-                        j = 0;
-                        while (clazz = classes[j++]) {
-                            if (cur.indexOf(" " + clazz + " ") < 0) {
-                                cur += clazz + " ";
-                            }
-                        }
-                        finalValue = stripAndCollapse(cur);
-                        if (curValue !== finalValue) {
-                            elem.setAttribute("class", finalValue);
-                        }
-                    }
-                }
-            }
-            return this;
-        },
-        removeClass: function(value) {
-            var classes, elem, cur, curValue, clazz, j, finalValue, i = 0;
-            if (isFunction(value)) {
-                return this.each(function(j) {
-                    jQuery(this).removeClass(value.call(this, j, getClass(this)));
-                });
-            }
-            if (!arguments.length) {
-                return this.attr("class", "");
-            }
-            classes = classesToArray(value);
-            if (classes.length) {
-                while (elem = this[i++]) {
-                    curValue = getClass(elem);
-                    cur = elem.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";
-                    if (cur) {
-                        j = 0;
-                        while (clazz = classes[j++]) {
-                            while (cur.indexOf(" " + clazz + " ") > -1) {
-                                cur = cur.replace(" " + clazz + " ", " ");
-                            }
-                        }
-                        finalValue = stripAndCollapse(cur);
-                        if (curValue !== finalValue) {
-                            elem.setAttribute("class", finalValue);
-                        }
-                    }
-                }
-            }
-            return this;
-        },
-        toggleClass: function(value, stateVal) {
-            var type = typeof value, isValidValue = type === "string" || Array.isArray(value);
-            if (typeof stateVal === "boolean" && isValidValue) {
-                return stateVal ? this.addClass(value) : this.removeClass(value);
-            }
-            if (isFunction(value)) {
-                return this.each(function(i) {
-                    jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);
-                });
-            }
-            return this.each(function() {
-                var className, i, self, classNames;
-                if (isValidValue) {
-                    i = 0;
-                    self = jQuery(this);
-                    classNames = classesToArray(value);
-                    while (className = classNames[i++]) {
-                        if (self.hasClass(className)) {
-                            self.removeClass(className);
-                        } else {
-                            self.addClass(className);
-                        }
-                    }
-                } else if (value === undefined || type === "boolean") {
-                    className = getClass(this);
-                    if (className) {
-                        dataPriv.set(this, "__className__", className);
-                    }
-                    if (this.setAttribute) {
-                        this.setAttribute("class", className || value === false ? "" : dataPriv.get(this, "__className__") || "");
-                    }
-                }
-            });
-        },
-        hasClass: function(selector) {
-            var className, elem, i = 0;
-            className = " " + selector + " ";
-            while (elem = this[i++]) {
-                if (elem.nodeType === 1 && (" " + stripAndCollapse(getClass(elem)) + " ").indexOf(className) > -1) {
-                    return true;
-                }
-            }
-            return false;
-        }
-    });
-    var rreturn = /\r/g;
-    jQuery.fn.extend({
-        val: function(value) {
-            var hooks, ret, valueIsFunction, elem = this[0];
-            if (!arguments.length) {
-                if (elem) {
-                    hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];
-                    if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== undefined) {
-                        return ret;
-                    }
-                    ret = elem.value;
-                    if (typeof ret === "string") {
-                        return ret.replace(rreturn, "");
-                    }
-                    return ret == null ? "" : ret;
-                }
-                return;
-            }
-            valueIsFunction = isFunction(value);
-            return this.each(function(i) {
-                var val;
-                if (this.nodeType !== 1) {
-                    return;
-                }
-                if (valueIsFunction) {
-                    val = value.call(this, i, jQuery(this).val());
-                } else {
-                    val = value;
-                }
-                if (val == null) {
-                    val = "";
-                } else if (typeof val === "number") {
-                    val += "";
-                } else if (Array.isArray(val)) {
-                    val = jQuery.map(val, function(value) {
-                        return value == null ? "" : value + "";
-                    });
-                }
-                hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];
-                if (!hooks || !("set" in hooks) || hooks.set(this, val, "value") === undefined) {
-                    this.value = val;
-                }
-            });
-        }
-    });
-    jQuery.extend({
-        valHooks: {
-            option: {
-                get: function(elem) {
-                    var val = jQuery.find.attr(elem, "value");
-                    return val != null ? val : stripAndCollapse(jQuery.text(elem));
-                }
-            },
-            select: {
-                get: function(elem) {
-                    var value, option, i, options = elem.options, index = elem.selectedIndex, one = elem.type === "select-one", values = one ? null : [], max = one ? index + 1 : options.length;
-                    if (index < 0) {
-                        i = max;
-                    } else {
-                        i = one ? index : 0;
-                    }
-                    for (;i < max; i++) {
-                        option = options[i];
-                        if ((option.selected || i === index) && !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, "optgroup"))) {
-                            value = jQuery(option).val();
-                            if (one) {
-                                return value;
-                            }
-                            values.push(value);
-                        }
-                    }
-                    return values;
-                },
-                set: function(elem, value) {
-                    var optionSet, option, options = elem.options, values = jQuery.makeArray(value), i = options.length;
-                    while (i--) {
-                        option = options[i];
-                        if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) {
-                            optionSet = true;
-                        }
-                    }
-                    if (!optionSet) {
-                        elem.selectedIndex = -1;
-                    }
-                    return values;
-                }
-            }
-        }
-    });
-    jQuery.each([ "radio", "checkbox" ], function() {
-        jQuery.valHooks[this] = {
-            set: function(elem, value) {
-                if (Array.isArray(value)) {
-                    return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1;
-                }
-            }
-        };
-        if (!support.checkOn) {
-            jQuery.valHooks[this].get = function(elem) {
-                return elem.getAttribute("value") === null ? "on" : elem.value;
-            };
-        }
-    });
-    support.focusin = "onfocusin" in window;
-    var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, stopPropagationCallback = function(e) {
-        e.stopPropagation();
-    };
-    jQuery.extend(jQuery.event, {
-        trigger: function(event, data, elem, onlyHandlers) {
-            var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, eventPath = [ elem || document ], type = hasOwn.call(event, "type") ? event.type : event, namespaces = hasOwn.call(event, "namespace") ? event.namespace.split(".") : [];
-            cur = lastElement = tmp = elem = elem || document;
-            if (elem.nodeType === 3 || elem.nodeType === 8) {
-                return;
-            }
-            if (rfocusMorph.test(type + jQuery.event.triggered)) {
-                return;
-            }
-            if (type.indexOf(".") > -1) {
-                namespaces = type.split(".");
-                type = namespaces.shift();
-                namespaces.sort();
-            }
-            ontype = type.indexOf(":") < 0 && "on" + type;
-            event = event[jQuery.expando] ? event : new jQuery.Event(type, typeof event === "object" && event);
-            event.isTrigger = onlyHandlers ? 2 : 3;
-            event.namespace = namespaces.join(".");
-            event.rnamespace = event.namespace ? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
-            event.result = undefined;
-            if (!event.target) {
-                event.target = elem;
-            }
-            data = data == null ? [ event ] : jQuery.makeArray(data, [ event ]);
-            special = jQuery.event.special[type] || {};
-            if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {
-                return;
-            }
-            if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {
-                bubbleType = special.delegateType || type;
-                if (!rfocusMorph.test(bubbleType + type)) {
-                    cur = cur.parentNode;
-                }
-                for (;cur; cur = cur.parentNode) {
-                    eventPath.push(cur);
-                    tmp = cur;
-                }
-                if (tmp === (elem.ownerDocument || document)) {
-                    eventPath.push(tmp.defaultView || tmp.parentWindow || window);
-                }
-            }
-            i = 0;
-            while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {
-                lastElement = cur;
-                event.type = i > 1 ? bubbleType : special.bindType || type;
-                handle = (dataPriv.get(cur, "events") || Object.create(null))[event.type] && dataPriv.get(cur, "handle");
-                if (handle) {
-                    handle.apply(cur, data);
-                }
-                handle = ontype && cur[ontype];
-                if (handle && handle.apply && acceptData(cur)) {
-                    event.result = handle.apply(cur, data);
-                    if (event.result === false) {
-                        event.preventDefault();
-                    }
-                }
-            }
-            event.type = type;
-            if (!onlyHandlers && !event.isDefaultPrevented()) {
-                if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {
-                    if (ontype && isFunction(elem[type]) && !isWindow(elem)) {
-                        tmp = elem[ontype];
-                        if (tmp) {
-                            elem[ontype] = null;
-                        }
-                        jQuery.event.triggered = type;
-                        if (event.isPropagationStopped()) {
-                            lastElement.addEventListener(type, stopPropagationCallback);
-                        }
-                        elem[type]();
-                        if (event.isPropagationStopped()) {
-                            lastElement.removeEventListener(type, stopPropagationCallback);
-                        }
-                        jQuery.event.triggered = undefined;
-                        if (tmp) {
-                            elem[ontype] = tmp;
-                        }
-                    }
-                }
-            }
-            return event.result;
-        },
-        simulate: function(type, elem, event) {
-            var e = jQuery.extend(new jQuery.Event(), event, {
-                type: type,
-                isSimulated: true
-            });
-            jQuery.event.trigger(e, null, elem);
-        }
-    });
-    jQuery.fn.extend({
-        trigger: function(type, data) {
-            return this.each(function() {
-                jQuery.event.trigger(type, data, this);
-            });
-        },
-        triggerHandler: function(type, data) {
-            var elem = this[0];
-            if (elem) {
-                return jQuery.event.trigger(type, data, elem, true);
-            }
-        }
-    });
-    if (!support.focusin) {
-        jQuery.each({
-            focus: "focusin",
-            blur: "focusout"
-        }, function(orig, fix) {
-            var handler = function(event) {
-                jQuery.event.simulate(fix, event.target, jQuery.event.fix(event));
-            };
-            jQuery.event.special[fix] = {
-                setup: function() {
-                    var doc = this.ownerDocument || this.document || this, attaches = dataPriv.access(doc, fix);
-                    if (!attaches) {
-                        doc.addEventListener(orig, handler, true);
-                    }
-                    dataPriv.access(doc, fix, (attaches || 0) + 1);
-                },
-                teardown: function() {
-                    var doc = this.ownerDocument || this.document || this, attaches = dataPriv.access(doc, fix) - 1;
-                    if (!attaches) {
-                        doc.removeEventListener(orig, handler, true);
-                        dataPriv.remove(doc, fix);
-                    } else {
-                        dataPriv.access(doc, fix, attaches);
-                    }
-                }
-            };
-        });
-    }
-    var location = window.location;
-    var nonce = {
-        guid: Date.now()
-    };
-    var rquery = /\?/;
-    jQuery.parseXML = function(data) {
-        var xml, parserErrorElem;
-        if (!data || typeof data !== "string") {
-            return null;
-        }
-        try {
-            xml = new window.DOMParser().parseFromString(data, "text/xml");
-        } catch (e) {}
-        parserErrorElem = xml && xml.getElementsByTagName("parsererror")[0];
-        if (!xml || parserErrorElem) {
-            jQuery.error("Invalid XML: " + (parserErrorElem ? jQuery.map(parserErrorElem.childNodes, function(el) {
-                return el.textContent;
-            }).join("\n") : data));
-        }
-        return xml;
-    };
-    var rbracket = /\[\]$/, rCRLF = /\r?\n/g, rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, rsubmittable = /^(?:input|select|textarea|keygen)/i;
-    function buildParams(prefix, obj, traditional, add) {
-        var name;
-        if (Array.isArray(obj)) {
-            jQuery.each(obj, function(i, v) {
-                if (traditional || rbracket.test(prefix)) {
-                    add(prefix, v);
-                } else {
-                    buildParams(prefix + "[" + (typeof v === "object" && v != null ? i : "") + "]", v, traditional, add);
-                }
-            });
-        } else if (!traditional && toType(obj) === "object") {
-            for (name in obj) {
-                buildParams(prefix + "[" + name + "]", obj[name], traditional, add);
-            }
-        } else {
-            add(prefix, obj);
-        }
-    }
-    jQuery.param = function(a, traditional) {
-        var prefix, s = [], add = function(key, valueOrFunction) {
-            var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;
-            s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value == null ? "" : value);
-        };
-        if (a == null) {
-            return "";
-        }
-        if (Array.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) {
-            jQuery.each(a, function() {
-                add(this.name, this.value);
-            });
-        } else {
-            for (prefix in a) {
-                buildParams(prefix, a[prefix], traditional, add);
-            }
-        }
-        return s.join("&");
-    };
-    jQuery.fn.extend({
-        serialize: function() {
-            return jQuery.param(this.serializeArray());
-        },
-        serializeArray: function() {
-            return this.map(function() {
-                var elements = jQuery.prop(this, "elements");
-                return elements ? jQuery.makeArray(elements) : this;
-            }).filter(function() {
-                var type = this.type;
-                return this.name && !jQuery(this).is(":disabled") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));
-            }).map(function(_i, elem) {
-                var val = jQuery(this).val();
-                if (val == null) {
-                    return null;
-                }
-                if (Array.isArray(val)) {
-                    return jQuery.map(val, function(val) {
-                        return {
-                            name: elem.name,
-                            value: val.replace(rCRLF, "\r\n")
-                        };
-                    });
-                }
-                return {
-                    name: elem.name,
-                    value: val.replace(rCRLF, "\r\n")
-                };
-            }).get();
-        }
-    });
-    var r20 = /%20/g, rhash = /#.*$/, rantiCache = /([?&])_=[^&]*/, rheaders = /^(.*?):[ \t]*([^\r\n]*)$/gm, rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, rnoContent = /^(?:GET|HEAD)$/, rprotocol = /^\/\//, prefilters = {}, transports = {}, allTypes = "*/".concat("*"), originAnchor = document.createElement("a");
-    originAnchor.href = location.href;
-    function addToPrefiltersOrTransports(structure) {
-        return function(dataTypeExpression, func) {
-            if (typeof dataTypeExpression !== "string") {
-                func = dataTypeExpression;
-                dataTypeExpression = "*";
-            }
-            var dataType, i = 0, dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];
-            if (isFunction(func)) {
-                while (dataType = dataTypes[i++]) {
-                    if (dataType[0] === "+") {
-                        dataType = dataType.slice(1) || "*";
-                        (structure[dataType] = structure[dataType] || []).unshift(func);
-                    } else {
-                        (structure[dataType] = structure[dataType] || []).push(func);
-                    }
-                }
-            }
-        };
-    }
-    function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {
-        var inspected = {}, seekingTransport = structure === transports;
-        function inspect(dataType) {
-            var selected;
-            inspected[dataType] = true;
-            jQuery.each(structure[dataType] || [], function(_, prefilterOrFactory) {
-                var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);
-                if (typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[dataTypeOrTransport]) {
-                    options.dataTypes.unshift(dataTypeOrTransport);
-                    inspect(dataTypeOrTransport);
-                    return false;
-                } else if (seekingTransport) {
-                    return !(selected = dataTypeOrTransport);
-                }
-            });
-            return selected;
-        }
-        return inspect(options.dataTypes[0]) || !inspected["*"] && inspect("*");
-    }
-    function ajaxExtend(target, src) {
-        var key, deep, flatOptions = jQuery.ajaxSettings.flatOptions || {};
-        for (key in src) {
-            if (src[key] !== undefined) {
-                (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];
-            }
-        }
-        if (deep) {
-            jQuery.extend(true, target, deep);
-        }
-        return target;
-    }
-    function ajaxHandleResponses(s, jqXHR, responses) {
-        var ct, type, finalDataType, firstDataType, contents = s.contents, dataTypes = s.dataTypes;
-        while (dataTypes[0] === "*") {
-            dataTypes.shift();
-            if (ct === undefined) {
-                ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
-            }
-        }
-        if (ct) {
-            for (type in contents) {
-                if (contents[type] && contents[type].test(ct)) {
-                    dataTypes.unshift(type);
-                    break;
-                }
-            }
-        }
-        if (dataTypes[0] in responses) {
-            finalDataType = dataTypes[0];
-        } else {
-            for (type in responses) {
-                if (!dataTypes[0] || s.converters[type + " " + dataTypes[0]]) {
-                    finalDataType = type;
-                    break;
-                }
-                if (!firstDataType) {
-                    firstDataType = type;
-                }
-            }
-            finalDataType = finalDataType || firstDataType;
-        }
-        if (finalDataType) {
-            if (finalDataType !== dataTypes[0]) {
-                dataTypes.unshift(finalDataType);
-            }
-            return responses[finalDataType];
-        }
-    }
-    function ajaxConvert(s, response, jqXHR, isSuccess) {
-        var conv2, current, conv, tmp, prev, converters = {}, dataTypes = s.dataTypes.slice();
-        if (dataTypes[1]) {
-            for (conv in s.converters) {
-                converters[conv.toLowerCase()] = s.converters[conv];
-            }
-        }
-        current = dataTypes.shift();
-        while (current) {
-            if (s.responseFields[current]) {
-                jqXHR[s.responseFields[current]] = response;
-            }
-            if (!prev && isSuccess && s.dataFilter) {
-                response = s.dataFilter(response, s.dataType);
-            }
-            prev = current;
-            current = dataTypes.shift();
-            if (current) {
-                if (current === "*") {
-                    current = prev;
-                } else if (prev !== "*" && prev !== current) {
-                    conv = converters[prev + " " + current] || converters["* " + current];
-                    if (!conv) {
-                        for (conv2 in converters) {
-                            tmp = conv2.split(" ");
-                            if (tmp[1] === current) {
-                                conv = converters[prev + " " + tmp[0]] || converters["* " + tmp[0]];
-                                if (conv) {
-                                    if (conv === true) {
-                                        conv = converters[conv2];
-                                    } else if (converters[conv2] !== true) {
-                                        current = tmp[0];
-                                        dataTypes.unshift(tmp[1]);
-                                    }
-                                    break;
-                                }
-                            }
-                        }
-                    }
-                    if (conv !== true) {
-                        if (conv && s.throws) {
-                            response = conv(response);
-                        } else {
-                            try {
-                                response = conv(response);
-                            } catch (e) {
-                                return {
-                                    state: "parsererror",
-                                    error: conv ? e : "No conversion from " + prev + " to " + current
-                                };
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return {
-            state: "success",
-            data: response
-        };
-    }
-    jQuery.extend({
-        active: 0,
-        lastModified: {},
-        etag: {},
-        ajaxSettings: {
-            url: location.href,
-            type: "GET",
-            isLocal: rlocalProtocol.test(location.protocol),
-            global: true,
-            processData: true,
-            async: true,
-            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
-            accepts: {
-                "*": allTypes,
-                text: "text/plain",
-                html: "text/html",
-                xml: "application/xml, text/xml",
-                json: "application/json, text/javascript"
-            },
-            contents: {
-                xml: /\bxml\b/,
-                html: /\bhtml/,
-                json: /\bjson\b/
-            },
-            responseFields: {
-                xml: "responseXML",
-                text: "responseText",
-                json: "responseJSON"
-            },
-            converters: {
-                "* text": String,
-                "text html": true,
-                "text json": JSON.parse,
-                "text xml": jQuery.parseXML
-            },
-            flatOptions: {
-                url: true,
-                context: true
-            }
-        },
-        ajaxSetup: function(target, settings) {
-            return settings ? ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) : ajaxExtend(jQuery.ajaxSettings, target);
-        },
-        ajaxPrefilter: addToPrefiltersOrTransports(prefilters),
-        ajaxTransport: addToPrefiltersOrTransports(transports),
-        ajax: function(url, options) {
-            if (typeof url === "object") {
-                options = url;
-                url = undefined;
-            }
-            options = options || {};
-            var transport, cacheURL, responseHeadersString, responseHeaders, timeoutTimer, urlAnchor, completed, fireGlobals, i, uncached, s = jQuery.ajaxSetup({}, options), callbackContext = s.context || s, globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event, deferred = jQuery.Deferred(), completeDeferred = jQuery.Callbacks("once memory"), statusCode = s.statusCode || {}, requestHeaders = {}, requestHeadersNames = {}, strAbort = "canceled", jqXHR = {
-                readyState: 0,
-                getResponseHeader: function(key) {
-                    var match;
-                    if (completed) {
-                        if (!responseHeaders) {
-                            responseHeaders = {};
-                            while (match = rheaders.exec(responseHeadersString)) {
-                                responseHeaders[match[1].toLowerCase() + " "] = (responseHeaders[match[1].toLowerCase() + " "] || []).concat(match[2]);
-                            }
-                        }
-                        match = responseHeaders[key.toLowerCase() + " "];
-                    }
-                    return match == null ? null : match.join(", ");
-                },
-                getAllResponseHeaders: function() {
-                    return completed ? responseHeadersString : null;
-                },
-                setRequestHeader: function(name, value) {
-                    if (completed == null) {
-                        name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;
-                        requestHeaders[name] = value;
-                    }
-                    return this;
-                },
-                overrideMimeType: function(type) {
-                    if (completed == null) {
-                        s.mimeType = type;
-                    }
-                    return this;
-                },
-                statusCode: function(map) {
-                    var code;
-                    if (map) {
-                        if (completed) {
-                            jqXHR.always(map[jqXHR.status]);
-                        } else {
-                            for (code in map) {
-                                statusCode[code] = [ statusCode[code], map[code] ];
-                            }
-                        }
-                    }
-                    return this;
-                },
-                abort: function(statusText) {
-                    var finalText = statusText || strAbort;
-                    if (transport) {
-                        transport.abort(finalText);
-                    }
-                    done(0, finalText);
-                    return this;
-                }
-            };
-            deferred.promise(jqXHR);
-            s.url = ((url || s.url || location.href) + "").replace(rprotocol, location.protocol + "//");
-            s.type = options.method || options.type || s.method || s.type;
-            s.dataTypes = (s.dataType || "*").toLowerCase().match(rnothtmlwhite) || [ "" ];
-            if (s.crossDomain == null) {
-                urlAnchor = document.createElement("a");
-                try {
-                    urlAnchor.href = s.url;
-                    urlAnchor.href = urlAnchor.href;
-                    s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== urlAnchor.protocol + "//" + urlAnchor.host;
-                } catch (e) {
-                    s.crossDomain = true;
-                }
-            }
-            if (s.data && s.processData && typeof s.data !== "string") {
-                s.data = jQuery.param(s.data, s.traditional);
-            }
-            inspectPrefiltersOrTransports(prefilters, s, options, jqXHR);
-            if (completed) {
-                return jqXHR;
-            }
-            fireGlobals = jQuery.event && s.global;
-            if (fireGlobals && jQuery.active++ === 0) {
-                jQuery.event.trigger("ajaxStart");
-            }
-            s.type = s.type.toUpperCase();
-            s.hasContent = !rnoContent.test(s.type);
-            cacheURL = s.url.replace(rhash, "");
-            if (!s.hasContent) {
-                uncached = s.url.slice(cacheURL.length);
-                if (s.data && (s.processData || typeof s.data === "string")) {
-                    cacheURL += (rquery.test(cacheURL) ? "&" : "?") + s.data;
-                    delete s.data;
-                }
-                if (s.cache === false) {
-                    cacheURL = cacheURL.replace(rantiCache, "$1");
-                    uncached = (rquery.test(cacheURL) ? "&" : "?") + "_=" + nonce.guid++ + uncached;
-                }
-                s.url = cacheURL + uncached;
-            } else if (s.data && s.processData && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0) {
-                s.data = s.data.replace(r20, "+");
-            }
-            if (s.ifModified) {
-                if (jQuery.lastModified[cacheURL]) {
-                    jqXHR.setRequestHeader("If-Modified-Since", jQuery.lastModified[cacheURL]);
-                }
-                if (jQuery.etag[cacheURL]) {
-                    jqXHR.setRequestHeader("If-None-Match", jQuery.etag[cacheURL]);
-                }
-            }
-            if (s.data && s.hasContent && s.contentType !== false || options.contentType) {
-                jqXHR.setRequestHeader("Content-Type", s.contentType);
-            }
-            jqXHR.setRequestHeader("Accept", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== "*" ? ", " + allTypes + "; q=0.01" : "") : s.accepts["*"]);
-            for (i in s.headers) {
-                jqXHR.setRequestHeader(i, s.headers[i]);
-            }
-            if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {
-                return jqXHR.abort();
-            }
-            strAbort = "abort";
-            completeDeferred.add(s.complete);
-            jqXHR.done(s.success);
-            jqXHR.fail(s.error);
-            transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);
-            if (!transport) {
-                done(-1, "No Transport");
-            } else {
-                jqXHR.readyState = 1;
-                if (fireGlobals) {
-                    globalEventContext.trigger("ajaxSend", [ jqXHR, s ]);
-                }
-                if (completed) {
-                    return jqXHR;
-                }
-                if (s.async && s.timeout > 0) {
-                    timeoutTimer = window.setTimeout(function() {
-                        jqXHR.abort("timeout");
-                    }, s.timeout);
-                }
-                try {
-                    completed = false;
-                    transport.send(requestHeaders, done);
-                } catch (e) {
-                    if (completed) {
-                        throw e;
-                    }
-                    done(-1, e);
-                }
-            }
-            function done(status, nativeStatusText, responses, headers) {
-                var isSuccess, success, error, response, modified, statusText = nativeStatusText;
-                if (completed) {
-                    return;
-                }
-                completed = true;
-                if (timeoutTimer) {
-                    window.clearTimeout(timeoutTimer);
-                }
-                transport = undefined;
-                responseHeadersString = headers || "";
-                jqXHR.readyState = status > 0 ? 4 : 0;
-                isSuccess = status >= 200 && status < 300 || status === 304;
-                if (responses) {
-                    response = ajaxHandleResponses(s, jqXHR, responses);
-                }
-                if (!isSuccess && jQuery.inArray("script", s.dataTypes) > -1 && jQuery.inArray("json", s.dataTypes) < 0) {
-                    s.converters["text script"] = function() {};
-                }
-                response = ajaxConvert(s, response, jqXHR, isSuccess);
-                if (isSuccess) {
-                    if (s.ifModified) {
-                        modified = jqXHR.getResponseHeader("Last-Modified");
-                        if (modified) {
-                            jQuery.lastModified[cacheURL] = modified;
-                        }
-                        modified = jqXHR.getResponseHeader("etag");
-                        if (modified) {
-                            jQuery.etag[cacheURL] = modified;
-                        }
-                    }
-                    if (status === 204 || s.type === "HEAD") {
-                        statusText = "nocontent";
-                    } else if (status === 304) {
-                        statusText = "notmodified";
-                    } else {
-                        statusText = response.state;
-                        success = response.data;
-                        error = response.error;
-                        isSuccess = !error;
-                    }
-                } else {
-                    error = statusText;
-                    if (status || !statusText) {
-                        statusText = "error";
-                        if (status < 0) {
-                            status = 0;
-                        }
-                    }
-                }
-                jqXHR.status = status;
-                jqXHR.statusText = (nativeStatusText || statusText) + "";
-                if (isSuccess) {
-                    deferred.resolveWith(callbackContext, [ success, statusText, jqXHR ]);
-                } else {
-                    deferred.rejectWith(callbackContext, [ jqXHR, statusText, error ]);
-                }
-                jqXHR.statusCode(statusCode);
-                statusCode = undefined;
-                if (fireGlobals) {
-                    globalEventContext.trigger(isSuccess ? "ajaxSuccess" : "ajaxError", [ jqXHR, s, isSuccess ? success : error ]);
-                }
-                completeDeferred.fireWith(callbackContext, [ jqXHR, statusText ]);
-                if (fireGlobals) {
-                    globalEventContext.trigger("ajaxComplete", [ jqXHR, s ]);
-                    if (!--jQuery.active) {
-                        jQuery.event.trigger("ajaxStop");
-                    }
-                }
-            }
-            return jqXHR;
-        },
-        getJSON: function(url, data, callback) {
-            return jQuery.get(url, data, callback, "json");
-        },
-        getScript: function(url, callback) {
-            return jQuery.get(url, undefined, callback, "script");
-        }
-    });
-    jQuery.each([ "get", "post" ], function(_i, method) {
-        jQuery[method] = function(url, data, callback, type) {
-            if (isFunction(data)) {
-                type = type || callback;
-                callback = data;
-                data = undefined;
-            }
-            return jQuery.ajax(jQuery.extend({
-                url: url,
-                type: method,
-                dataType: type,
-                data: data,
-                success: callback
-            }, jQuery.isPlainObject(url) && url));
-        };
-    });
-    jQuery.ajaxPrefilter(function(s) {
-        var i;
-        for (i in s.headers) {
-            if (i.toLowerCase() === "content-type") {
-                s.contentType = s.headers[i] || "";
-            }
-        }
-    });
-    jQuery._evalUrl = function(url, options, doc) {
-        return jQuery.ajax({
-            url: url,
-            type: "GET",
-            dataType: "script",
-            cache: true,
-            async: false,
-            global: false,
-            converters: {
-                "text script": function() {}
-            },
-            dataFilter: function(response) {
-                jQuery.globalEval(response, options, doc);
-            }
-        });
-    };
-    jQuery.fn.extend({
-        wrapAll: function(html) {
-            var wrap;
-            if (this[0]) {
-                if (isFunction(html)) {
-                    html = html.call(this[0]);
-                }
-                wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);
-                if (this[0].parentNode) {
-                    wrap.insertBefore(this[0]);
-                }
-                wrap.map(function() {
-                    var elem = this;
-                    while (elem.firstElementChild) {
-                        elem = elem.firstElementChild;
-                    }
-                    return elem;
-                }).append(this);
-            }
-            return this;
-        },
-        wrapInner: function(html) {
-            if (isFunction(html)) {
-                return this.each(function(i) {
-                    jQuery(this).wrapInner(html.call(this, i));
-                });
-            }
-            return this.each(function() {
-                var self = jQuery(this), contents = self.contents();
-                if (contents.length) {
-                    contents.wrapAll(html);
-                } else {
-                    self.append(html);
-                }
-            });
-        },
-        wrap: function(html) {
-            var htmlIsFunction = isFunction(html);
-            return this.each(function(i) {
-                jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);
-            });
-        },
-        unwrap: function(selector) {
-            this.parent(selector).not("body").each(function() {
-                jQuery(this).replaceWith(this.childNodes);
-            });
-            return this;
-        }
-    });
-    jQuery.expr.pseudos.hidden = function(elem) {
-        return !jQuery.expr.pseudos.visible(elem);
-    };
-    jQuery.expr.pseudos.visible = function(elem) {
-        return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
-    };
-    jQuery.ajaxSettings.xhr = function() {
-        try {
-            return new window.XMLHttpRequest();
-        } catch (e) {}
-    };
-    var xhrSuccessStatus = {
-        0: 200,
-        1223: 204
-    }, xhrSupported = jQuery.ajaxSettings.xhr();
-    support.cors = !!xhrSupported && "withCredentials" in xhrSupported;
-    support.ajax = xhrSupported = !!xhrSupported;
-    jQuery.ajaxTransport(function(options) {
-        var callback, errorCallback;
-        if (support.cors || xhrSupported && !options.crossDomain) {
-            return {
-                send: function(headers, complete) {
-                    var i, xhr = options.xhr();
-                    xhr.open(options.type, options.url, options.async, options.username, options.password);
-                    if (options.xhrFields) {
-                        for (i in options.xhrFields) {
-                            xhr[i] = options.xhrFields[i];
-                        }
-                    }
-                    if (options.mimeType && xhr.overrideMimeType) {
-                        xhr.overrideMimeType(options.mimeType);
-                    }
-                    if (!options.crossDomain && !headers["X-Requested-With"]) {
-                        headers["X-Requested-With"] = "XMLHttpRequest";
-                    }
-                    for (i in headers) {
-                        xhr.setRequestHeader(i, headers[i]);
-                    }
-                    callback = function(type) {
-                        return function() {
-                            if (callback) {
-                                callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;
-                                if (type === "abort") {
-                                    xhr.abort();
-                                } else if (type === "error") {
-                                    if (typeof xhr.status !== "number") {
-                                        complete(0, "error");
-                                    } else {
-                                        complete(xhr.status, xhr.statusText);
-                                    }
-                                } else {
-                                    complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText, (xhr.responseType || "text") !== "text" || typeof xhr.responseText !== "string" ? {
-                                        binary: xhr.response
-                                    } : {
-                                        text: xhr.responseText
-                                    }, xhr.getAllResponseHeaders());
-                                }
-                            }
-                        };
-                    };
-                    xhr.onload = callback();
-                    errorCallback = xhr.onerror = xhr.ontimeout = callback("error");
-                    if (xhr.onabort !== undefined) {
-                        xhr.onabort = errorCallback;
-                    } else {
-                        xhr.onreadystatechange = function() {
-                            if (xhr.readyState === 4) {
-                                window.setTimeout(function() {
-                                    if (callback) {
-                                        errorCallback();
-                                    }
-                                });
-                            }
-                        };
-                    }
-                    callback = callback("abort");
-                    try {
-                        xhr.send(options.hasContent && options.data || null);
-                    } catch (e) {
-                        if (callback) {
-                            throw e;
-                        }
-                    }
-                },
-                abort: function() {
-                    if (callback) {
-                        callback();
-                    }
-                }
-            };
-        }
-    });
-    jQuery.ajaxPrefilter(function(s) {
-        if (s.crossDomain) {
-            s.contents.script = false;
-        }
-    });
-    jQuery.ajaxSetup({
-        accepts: {
-            script: "text/javascript, application/javascript, " + "application/ecmascript, application/x-ecmascript"
-        },
-        contents: {
-            script: /\b(?:java|ecma)script\b/
-        },
-        converters: {
-            "text script": function(text) {
-                jQuery.globalEval(text);
-                return text;
-            }
-        }
-    });
-    jQuery.ajaxPrefilter("script", function(s) {
-        if (s.cache === undefined) {
-            s.cache = false;
-        }
-        if (s.crossDomain) {
-            s.type = "GET";
-        }
-    });
-    jQuery.ajaxTransport("script", function(s) {
-        if (s.crossDomain || s.scriptAttrs) {
-            var script, callback;
-            return {
-                send: function(_, complete) {
-                    script = jQuery("<script>").attr(s.scriptAttrs || {}).prop({
-                        charset: s.scriptCharset,
-                        src: s.url
-                    }).on("load error", callback = function(evt) {
-                        script.remove();
-                        callback = null;
-                        if (evt) {
-                            complete(evt.type === "error" ? 404 : 200, evt.type);
-                        }
-                    });
-                    document.head.appendChild(script[0]);
-                },
-                abort: function() {
-                    if (callback) {
-                        callback();
-                    }
-                }
-            };
-        }
-    });
-    var oldCallbacks = [], rjsonp = /(=)\?(?=&|$)|\?\?/;
-    jQuery.ajaxSetup({
-        jsonp: "callback",
-        jsonpCallback: function() {
-            var callback = oldCallbacks.pop() || jQuery.expando + "_" + nonce.guid++;
-            this[callback] = true;
-            return callback;
-        }
-    });
-    jQuery.ajaxPrefilter("json jsonp", function(s, originalSettings, jqXHR) {
-        var callbackName, overwritten, responseContainer, jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? "url" : typeof s.data === "string" && (s.contentType || "").indexOf("application/x-www-form-urlencoded") === 0 && rjsonp.test(s.data) && "data");
-        if (jsonProp || s.dataTypes[0] === "jsonp") {
-            callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback;
-            if (jsonProp) {
-                s[jsonProp] = s[jsonProp].replace(rjsonp, "$1" + callbackName);
-            } else if (s.jsonp !== false) {
-                s.url += (rquery.test(s.url) ? "&" : "?") + s.jsonp + "=" + callbackName;
-            }
-            s.converters["script json"] = function() {
-                if (!responseContainer) {
-                    jQuery.error(callbackName + " was not called");
-                }
-                return responseContainer[0];
-            };
-            s.dataTypes[0] = "json";
-            overwritten = window[callbackName];
-            window[callbackName] = function() {
-                responseContainer = arguments;
-            };
-            jqXHR.always(function() {
-                if (overwritten === undefined) {
-                    jQuery(window).removeProp(callbackName);
-                } else {
-                    window[callbackName] = overwritten;
-                }
-                if (s[callbackName]) {
-                    s.jsonpCallback = originalSettings.jsonpCallback;
-                    oldCallbacks.push(callbackName);
-                }
-                if (responseContainer && isFunction(overwritten)) {
-                    overwritten(responseContainer[0]);
-                }
-                responseContainer = overwritten = undefined;
-            });
-            return "script";
-        }
-    });
-    support.createHTMLDocument = function() {
-        var body = document.implementation.createHTMLDocument("").body;
-        body.innerHTML = "<form></form><form></form>";
-        return body.childNodes.length === 2;
-    }();
-    jQuery.parseHTML = function(data, context, keepScripts) {
-        if (typeof data !== "string") {
-            return [];
-        }
-        if (typeof context === "boolean") {
-            keepScripts = context;
-            context = false;
-        }
-        var base, parsed, scripts;
-        if (!context) {
-            if (support.createHTMLDocument) {
-                context = document.implementation.createHTMLDocument("");
-                base = context.createElement("base");
-                base.href = document.location.href;
-                context.head.appendChild(base);
-            } else {
-                context = document;
-            }
-        }
-        parsed = rsingleTag.exec(data);
-        scripts = !keepScripts && [];
-        if (parsed) {
-            return [ context.createElement(parsed[1]) ];
-        }
-        parsed = buildFragment([ data ], context, scripts);
-        if (scripts && scripts.length) {
-            jQuery(scripts).remove();
-        }
-        return jQuery.merge([], parsed.childNodes);
-    };
-    jQuery.fn.load = function(url, params, callback) {
-        var selector, type, response, self = this, off = url.indexOf(" ");
-        if (off > -1) {
-            selector = stripAndCollapse(url.slice(off));
-            url = url.slice(0, off);
-        }
-        if (isFunction(params)) {
-            callback = params;
-            params = undefined;
-        } else if (params && typeof params === "object") {
-            type = "POST";
-        }
-        if (self.length > 0) {
-            jQuery.ajax({
-                url: url,
-                type: type || "GET",
-                dataType: "html",
-                data: params
-            }).done(function(responseText) {
-                response = arguments;
-                self.html(selector ? jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) : responseText);
-            }).always(callback && function(jqXHR, status) {
-                self.each(function() {
-                    callback.apply(this, response || [ jqXHR.responseText, status, jqXHR ]);
-                });
-            });
-        }
-        return this;
-    };
-    jQuery.expr.pseudos.animated = function(elem) {
-        return jQuery.grep(jQuery.timers, function(fn) {
-            return elem === fn.elem;
-        }).length;
-    };
-    jQuery.offset = {
-        setOffset: function(elem, options, i) {
-            var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, position = jQuery.css(elem, "position"), curElem = jQuery(elem), props = {};
-            if (position === "static") {
-                elem.style.position = "relative";
-            }
-            curOffset = curElem.offset();
-            curCSSTop = jQuery.css(elem, "top");
-            curCSSLeft = jQuery.css(elem, "left");
-            calculatePosition = (position === "absolute" || position === "fixed") && (curCSSTop + curCSSLeft).indexOf("auto") > -1;
-            if (calculatePosition) {
-                curPosition = curElem.position();
-                curTop = curPosition.top;
-                curLeft = curPosition.left;
-            } else {
-                curTop = parseFloat(curCSSTop) || 0;
-                curLeft = parseFloat(curCSSLeft) || 0;
-            }
-            if (isFunction(options)) {
-                options = options.call(elem, i, jQuery.extend({}, curOffset));
-            }
-            if (options.top != null) {
-                props.top = options.top - curOffset.top + curTop;
-            }
-            if (options.left != null) {
-                props.left = options.left - curOffset.left + curLeft;
-            }
-            if ("using" in options) {
-                options.using.call(elem, props);
-            } else {
-                curElem.css(props);
-            }
-        }
-    };
-    jQuery.fn.extend({
-        offset: function(options) {
-            if (arguments.length) {
-                return options === undefined ? this : this.each(function(i) {
-                    jQuery.offset.setOffset(this, options, i);
-                });
-            }
-            var rect, win, elem = this[0];
-            if (!elem) {
-                return;
-            }
-            if (!elem.getClientRects().length) {
-                return {
-                    top: 0,
-                    left: 0
-                };
-            }
-            rect = elem.getBoundingClientRect();
-            win = elem.ownerDocument.defaultView;
-            return {
-                top: rect.top + win.pageYOffset,
-                left: rect.left + win.pageXOffset
-            };
-        },
-        position: function() {
-            if (!this[0]) {
-                return;
-            }
-            var offsetParent, offset, doc, elem = this[0], parentOffset = {
-                top: 0,
-                left: 0
-            };
-            if (jQuery.css(elem, "position") === "fixed") {
-                offset = elem.getBoundingClientRect();
-            } else {
-                offset = this.offset();
-                doc = elem.ownerDocument;
-                offsetParent = elem.offsetParent || doc.documentElement;
-                while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && jQuery.css(offsetParent, "position") === "static") {
-                    offsetParent = offsetParent.parentNode;
-                }
-                if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {
-                    parentOffset = jQuery(offsetParent).offset();
-                    parentOffset.top += jQuery.css(offsetParent, "borderTopWidth", true);
-                    parentOffset.left += jQuery.css(offsetParent, "borderLeftWidth", true);
-                }
-            }
-            return {
-                top: offset.top - parentOffset.top - jQuery.css(elem, "marginTop", true),
-                left: offset.left - parentOffset.left - jQuery.css(elem, "marginLeft", true)
-            };
-        },
-        offsetParent: function() {
-            return this.map(function() {
-                var offsetParent = this.offsetParent;
-                while (offsetParent && jQuery.css(offsetParent, "position") === "static") {
-                    offsetParent = offsetParent.offsetParent;
-                }
-                return offsetParent || documentElement;
-            });
-        }
-    });
-    jQuery.each({
-        scrollLeft: "pageXOffset",
-        scrollTop: "pageYOffset"
-    }, function(method, prop) {
-        var top = "pageYOffset" === prop;
-        jQuery.fn[method] = function(val) {
-            return access(this, function(elem, method, val) {
-                var win;
-                if (isWindow(elem)) {
-                    win = elem;
-                } else if (elem.nodeType === 9) {
-                    win = elem.defaultView;
-                }
-                if (val === undefined) {
-                    return win ? win[prop] : elem[method];
-                }
-                if (win) {
-                    win.scrollTo(!top ? val : win.pageXOffset, top ? val : win.pageYOffset);
-                } else {
-                    elem[method] = val;
-                }
-            }, method, val, arguments.length);
-        };
-    });
-    jQuery.each([ "top", "left" ], function(_i, prop) {
-        jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition, function(elem, computed) {
-            if (computed) {
-                computed = curCSS(elem, prop);
-                return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + "px" : computed;
-            }
-        });
-    });
-    jQuery.each({
-        Height: "height",
-        Width: "width"
-    }, function(name, type) {
-        jQuery.each({
-            padding: "inner" + name,
-            content: type,
-            "": "outer" + name
-        }, function(defaultExtra, funcName) {
-            jQuery.fn[funcName] = function(margin, value) {
-                var chainable = arguments.length && (defaultExtra || typeof margin !== "boolean"), extra = defaultExtra || (margin === true || value === true ? "margin" : "border");
-                return access(this, function(elem, type, value) {
-                    var doc;
-                    if (isWindow(elem)) {
-                        return funcName.indexOf("outer") === 0 ? elem["inner" + name] : elem.document.documentElement["client" + name];
-                    }
-                    if (elem.nodeType === 9) {
-                        doc = elem.documentElement;
-                        return Math.max(elem.body["scroll" + name], doc["scroll" + name], elem.body["offset" + name], doc["offset" + name], doc["client" + name]);
-                    }
-                    return value === undefined ? jQuery.css(elem, type, extra) : jQuery.style(elem, type, value, extra);
-                }, type, chainable ? margin : undefined, chainable);
-            };
-        });
-    });
-    jQuery.each([ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function(_i, type) {
-        jQuery.fn[type] = function(fn) {
-            return this.on(type, fn);
-        };
-    });
-    jQuery.fn.extend({
-        bind: function(types, data, fn) {
-            return this.on(types, null, data, fn);
-        },
-        unbind: function(types, fn) {
-            return this.off(types, null, fn);
-        },
-        delegate: function(selector, types, data, fn) {
-            return this.on(types, selector, data, fn);
-        },
-        undelegate: function(selector, types, fn) {
-            return arguments.length === 1 ? this.off(selector, "**") : this.off(types, selector || "**", fn);
-        },
-        hover: function(fnOver, fnOut) {
-            return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);
-        }
-    });
-    jQuery.each(("blur focus focusin focusout resize scroll click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup contextmenu").split(" "), function(_i, name) {
-        jQuery.fn[name] = function(data, fn) {
-            return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);
-        };
-    });
-    var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
-    jQuery.proxy = function(fn, context) {
-        var tmp, args, proxy;
-        if (typeof context === "string") {
-            tmp = fn[context];
-            context = fn;
-            fn = tmp;
-        }
-        if (!isFunction(fn)) {
-            return undefined;
-        }
-        args = slice.call(arguments, 2);
-        proxy = function() {
-            return fn.apply(context || this, args.concat(slice.call(arguments)));
-        };
-        proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-        return proxy;
-    };
-    jQuery.holdReady = function(hold) {
-        if (hold) {
-            jQuery.readyWait++;
-        } else {
-            jQuery.ready(true);
-        }
-    };
-    jQuery.isArray = Array.isArray;
-    jQuery.parseJSON = JSON.parse;
-    jQuery.nodeName = nodeName;
-    jQuery.isFunction = isFunction;
-    jQuery.isWindow = isWindow;
-    jQuery.camelCase = camelCase;
-    jQuery.type = toType;
-    jQuery.now = Date.now;
-    jQuery.isNumeric = function(obj) {
-        var type = jQuery.type(obj);
-        return (type === "number" || type === "string") && !isNaN(obj - parseFloat(obj));
-    };
-    jQuery.trim = function(text) {
-        return text == null ? "" : (text + "").replace(rtrim, "");
-    };
-    if (typeof define === "function" && define.amd) {
-        define("jquery", [], function() {
-            return jQuery;
-        });
-    }
-    var _jQuery = window.jQuery, _$ = window.$;
-    jQuery.noConflict = function(deep) {
-        if (window.$ === jQuery) {
-            window.$ = _$;
-        }
-        if (deep && window.jQuery === jQuery) {
-            window.jQuery = _jQuery;
-        }
-        return jQuery;
-    };
-    if (typeof noGlobal === "undefined") {
-        window.jQuery = window.$ = jQuery;
-    }
-    return jQuery;
-});
-
-(function(global, factory) {
-    typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("jquery"), require("popper.js")) : typeof define === "function" && define.amd ? define([ "exports", "jquery", "popper.js" ], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, 
-    factory(global.bootstrap = {}, global.jQuery, global.Popper));
-})(this, function(exports, $, Popper) {
-    "use strict";
-    function _interopDefaultLegacy(e) {
-        return e && typeof e === "object" && "default" in e ? e : {
-            default: e
-        };
-    }
-    var $__default = _interopDefaultLegacy($);
-    var Popper__default = _interopDefaultLegacy(Popper);
-    function _defineProperties(target, props) {
-        for (var i = 0; i < props.length; i++) {
-            var descriptor = props[i];
-            descriptor.enumerable = descriptor.enumerable || false;
-            descriptor.configurable = true;
-            if ("value" in descriptor) descriptor.writable = true;
-            Object.defineProperty(target, descriptor.key, descriptor);
-        }
-    }
-    function _createClass(Constructor, protoProps, staticProps) {
-        if (protoProps) _defineProperties(Constructor.prototype, protoProps);
-        if (staticProps) _defineProperties(Constructor, staticProps);
-        return Constructor;
-    }
-    function _extends() {
-        _extends = Object.assign || function(target) {
-            for (var i = 1; i < arguments.length; i++) {
-                var source = arguments[i];
-                for (var key in source) {
-                    if (Object.prototype.hasOwnProperty.call(source, key)) {
-                        target[key] = source[key];
-                    }
-                }
-            }
-            return target;
-        };
-        return _extends.apply(this, arguments);
-    }
-    function _inheritsLoose(subClass, superClass) {
-        subClass.prototype = Object.create(superClass.prototype);
-        subClass.prototype.constructor = subClass;
-        subClass.__proto__ = superClass;
-    }
-    var TRANSITION_END = "transitionend";
-    var MAX_UID = 1e6;
-    var MILLISECONDS_MULTIPLIER = 1e3;
-    function toType(obj) {
-        if (obj === null || typeof obj === "undefined") {
-            return "" + obj;
-        }
-        return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
-    }
-    function getSpecialTransitionEndEvent() {
-        return {
-            bindType: TRANSITION_END,
-            delegateType: TRANSITION_END,
-            handle: function handle(event) {
-                if ($__default["default"](event.target).is(this)) {
-                    return event.handleObj.handler.apply(this, arguments);
-                }
-                return undefined;
-            }
-        };
-    }
-    function transitionEndEmulator(duration) {
-        var _this = this;
-        var called = false;
-        $__default["default"](this).one(Util.TRANSITION_END, function() {
-            called = true;
-        });
-        setTimeout(function() {
-            if (!called) {
-                Util.triggerTransitionEnd(_this);
-            }
-        }, duration);
-        return this;
-    }
-    function setTransitionEndSupport() {
-        $__default["default"].fn.emulateTransitionEnd = transitionEndEmulator;
-        $__default["default"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
-    }
-    var Util = {
-        TRANSITION_END: "bsTransitionEnd",
-        getUID: function getUID(prefix) {
-            do {
-                prefix += ~~(Math.random() * MAX_UID);
-            } while (document.getElementById(prefix));
-            return prefix;
-        },
-        getSelectorFromElement: function getSelectorFromElement(element) {
-            var selector = element.getAttribute("data-target");
-            if (!selector || selector === "#") {
-                var hrefAttr = element.getAttribute("href");
-                selector = hrefAttr && hrefAttr !== "#" ? hrefAttr.trim() : "";
-            }
-            try {
-                return document.querySelector(selector) ? selector : null;
-            } catch (_) {
-                return null;
-            }
-        },
-        getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
-            if (!element) {
-                return 0;
-            }
-            var transitionDuration = $__default["default"](element).css("transition-duration");
-            var transitionDelay = $__default["default"](element).css("transition-delay");
-            var floatTransitionDuration = parseFloat(transitionDuration);
-            var floatTransitionDelay = parseFloat(transitionDelay);
-            if (!floatTransitionDuration && !floatTransitionDelay) {
-                return 0;
-            }
-            transitionDuration = transitionDuration.split(",")[0];
-            transitionDelay = transitionDelay.split(",")[0];
-            return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
-        },
-        reflow: function reflow(element) {
-            return element.offsetHeight;
-        },
-        triggerTransitionEnd: function triggerTransitionEnd(element) {
-            $__default["default"](element).trigger(TRANSITION_END);
-        },
-        supportsTransitionEnd: function supportsTransitionEnd() {
-            return Boolean(TRANSITION_END);
-        },
-        isElement: function isElement(obj) {
-            return (obj[0] || obj).nodeType;
-        },
-        typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
-            for (var property in configTypes) {
-                if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
-                    var expectedTypes = configTypes[property];
-                    var value = config[property];
-                    var valueType = value && Util.isElement(value) ? "element" : toType(value);
-                    if (!new RegExp(expectedTypes).test(valueType)) {
-                        throw new Error(componentName.toUpperCase() + ": " + ('Option "' + property + '" provided type "' + valueType + '" ') + ('but expected type "' + expectedTypes + '".'));
-                    }
-                }
-            }
-        },
-        findShadowRoot: function findShadowRoot(element) {
-            if (!document.documentElement.attachShadow) {
-                return null;
-            }
-            if (typeof element.getRootNode === "function") {
-                var root = element.getRootNode();
-                return root instanceof ShadowRoot ? root : null;
-            }
-            if (element instanceof ShadowRoot) {
-                return element;
-            }
-            if (!element.parentNode) {
-                return null;
-            }
-            return Util.findShadowRoot(element.parentNode);
-        },
-        jQueryDetection: function jQueryDetection() {
-            if (typeof $__default["default"] === "undefined") {
-                throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");
-            }
-            var version = $__default["default"].fn.jquery.split(" ")[0].split(".");
-            var minMajor = 1;
-            var ltMajor = 2;
-            var minMinor = 9;
-            var minPatch = 1;
-            var maxMajor = 4;
-            if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {
-                throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0");
-            }
-        }
-    };
-    Util.jQueryDetection();
-    setTransitionEndSupport();
-    var NAME = "alert";
-    var VERSION = "4.6.0";
-    var DATA_KEY = "bs.alert";
-    var EVENT_KEY = "." + DATA_KEY;
-    var DATA_API_KEY = ".data-api";
-    var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
-    var SELECTOR_DISMISS = '[data-dismiss="alert"]';
-    var EVENT_CLOSE = "close" + EVENT_KEY;
-    var EVENT_CLOSED = "closed" + EVENT_KEY;
-    var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
-    var CLASS_NAME_ALERT = "alert";
-    var CLASS_NAME_FADE = "fade";
-    var CLASS_NAME_SHOW = "show";
-    var Alert = function() {
-        function Alert(element) {
-            this._element = element;
-        }
-        var _proto = Alert.prototype;
-        _proto.close = function close(element) {
-            var rootElement = this._element;
-            if (element) {
-                rootElement = this._getRootElement(element);
-            }
-            var customEvent = this._triggerCloseEvent(rootElement);
-            if (customEvent.isDefaultPrevented()) {
-                return;
-            }
-            this._removeElement(rootElement);
-        };
-        _proto.dispose = function dispose() {
-            $__default["default"].removeData(this._element, DATA_KEY);
-            this._element = null;
-        };
-        _proto._getRootElement = function _getRootElement(element) {
-            var selector = Util.getSelectorFromElement(element);
-            var parent = false;
-            if (selector) {
-                parent = document.querySelector(selector);
-            }
-            if (!parent) {
-                parent = $__default["default"](element).closest("." + CLASS_NAME_ALERT)[0];
-            }
-            return parent;
-        };
-        _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
-            var closeEvent = $__default["default"].Event(EVENT_CLOSE);
-            $__default["default"](element).trigger(closeEvent);
-            return closeEvent;
-        };
-        _proto._removeElement = function _removeElement(element) {
-            var _this = this;
-            $__default["default"](element).removeClass(CLASS_NAME_SHOW);
-            if (!$__default["default"](element).hasClass(CLASS_NAME_FADE)) {
-                this._destroyElement(element);
-                return;
-            }
-            var transitionDuration = Util.getTransitionDurationFromElement(element);
-            $__default["default"](element).one(Util.TRANSITION_END, function(event) {
-                return _this._destroyElement(element, event);
-            }).emulateTransitionEnd(transitionDuration);
-        };
-        _proto._destroyElement = function _destroyElement(element) {
-            $__default["default"](element).detach().trigger(EVENT_CLOSED).remove();
-        };
-        Alert._jQueryInterface = function _jQueryInterface(config) {
-            return this.each(function() {
-                var $element = $__default["default"](this);
-                var data = $element.data(DATA_KEY);
-                if (!data) {
-                    data = new Alert(this);
-                    $element.data(DATA_KEY, data);
-                }
-                if (config === "close") {
-                    data[config](this);
-                }
-            });
-        };
-        Alert._handleDismiss = function _handleDismiss(alertInstance) {
-            return function(event) {
-                if (event) {
-                    event.preventDefault();
-                }
-                alertInstance.close(this);
-            };
-        };
-        _createClass(Alert, null, [ {
-            key: "VERSION",
-            get: function get() {
-                return VERSION;
-            }
-        } ]);
-        return Alert;
-    }();
-    $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));
-    $__default["default"].fn[NAME] = Alert._jQueryInterface;
-    $__default["default"].fn[NAME].Constructor = Alert;
-    $__default["default"].fn[NAME].noConflict = function() {
-        $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
-        return Alert._jQueryInterface;
-    };
-    var NAME$1 = "button";
-    var VERSION$1 = "4.6.0";
-    var DATA_KEY$1 = "bs.button";
-    var EVENT_KEY$1 = "." + DATA_KEY$1;
-    var DATA_API_KEY$1 = ".data-api";
-    var JQUERY_NO_CONFLICT$1 = $__default["default"].fn[NAME$1];
-    var CLASS_NAME_ACTIVE = "active";
-    var CLASS_NAME_BUTTON = "btn";
-    var CLASS_NAME_FOCUS = "focus";
-    var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]';
-    var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]';
-    var SELECTOR_DATA_TOGGLE = '[data-toggle="button"]';
-    var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn';
-    var SELECTOR_INPUT = 'input:not([type="hidden"])';
-    var SELECTOR_ACTIVE = ".active";
-    var SELECTOR_BUTTON = ".btn";
-    var EVENT_CLICK_DATA_API$1 = "click" + EVENT_KEY$1 + DATA_API_KEY$1;
-    var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1);
-    var EVENT_LOAD_DATA_API = "load" + EVENT_KEY$1 + DATA_API_KEY$1;
-    var Button = function() {
-        function Button(element) {
-            this._element = element;
-            this.shouldAvoidTriggerChange = false;
-        }
-        var _proto = Button.prototype;
-        _proto.toggle = function toggle() {
-            var triggerChangeEvent = true;
-            var addAriaPressed = true;
-            var rootElement = $__default["default"](this._element).closest(SELECTOR_DATA_TOGGLES)[0];
-            if (rootElement) {
-                var input = this._element.querySelector(SELECTOR_INPUT);
-                if (input) {
-                    if (input.type === "radio") {
-                        if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
-                            triggerChangeEvent = false;
-                        } else {
-                            var activeElement = rootElement.querySelector(SELECTOR_ACTIVE);
-                            if (activeElement) {
-                                $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE);
-                            }
-                        }
-                    }
-                    if (triggerChangeEvent) {
-                        if (input.type === "checkbox" || input.type === "radio") {
-                            input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE);
-                        }
-                        if (!this.shouldAvoidTriggerChange) {
-                            $__default["default"](input).trigger("change");
-                        }
-                    }
-                    input.focus();
-                    addAriaPressed = false;
-                }
-            }
-            if (!(this._element.hasAttribute("disabled") || this._element.classList.contains("disabled"))) {
-                if (addAriaPressed) {
-                    this._element.setAttribute("aria-pressed", !this._element.classList.contains(CLASS_NAME_ACTIVE));
-                }
-                if (triggerChangeEvent) {
-                    $__default["default"](this._element).toggleClass(CLASS_NAME_ACTIVE);
-                }
-            }
-        };
-        _proto.dispose = function dispose() {
-            $__default["default"].removeData(this._element, DATA_KEY$1);
-            this._element = null;
-        };
-        Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) {
-            return this.each(function() {
-                var $element = $__default["default"](this);
-                var data = $element.data(DATA_KEY$1);
-                if (!data) {
-                    data = new Button(this);
-                    $element.data(DATA_KEY$1, data);
-                }
-                data.shouldAvoidTriggerChange = avoidTriggerChange;
-                if (config === "toggle") {
-                    data[config]();
-                }
-            });
-        };
-        _createClass(Button, null, [ {
-            key: "VERSION",
-            get: function get() {
-                return VERSION$1;
-            }
-        } ]);
-        return Button;
-    }();
-    $__default["default"](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE_CARROT, function(event) {
-        var button = event.target;
-        var initialButton = button;
-        if (!$__default["default"](button).hasClass(CLASS_NAME_BUTTON)) {
-            button = $__default["default"](button).closest(SELECTOR_BUTTON)[0];
-        }
-        if (!button || button.hasAttribute("disabled") || button.classList.contains("disabled")) {
-            event.preventDefault();
-        } else {
-            var inputBtn = button.querySelector(SELECTOR_INPUT);
-            if (inputBtn && (inputBtn.hasAttribute("disabled") || inputBtn.classList.contains("disabled"))) {
-                event.preventDefault();
-                return;
-            }
-            if (initialButton.tagName === "INPUT" || button.tagName !== "LABEL") {
-                Button._jQueryInterface.call($__default["default"](button), "toggle", initialButton.tagName === "INPUT");
-            }
-        }
-    }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function(event) {
-        var button = $__default["default"](event.target).closest(SELECTOR_BUTTON)[0];
-        $__default["default"](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));
-    });
-    $__default["default"](window).on(EVENT_LOAD_DATA_API, function() {
-        var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));
-        for (var i = 0, len = buttons.length; i < len; i++) {
-            var button = buttons[i];
-            var input = button.querySelector(SELECTOR_INPUT);
-            if (input.checked || input.hasAttribute("checked")) {
-                button.classList.add(CLASS_NAME_ACTIVE);
-            } else {
-                button.classList.remove(CLASS_NAME_ACTIVE);
-            }
-        }
-        buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE));
-        for (var _i = 0, _len = buttons.length; _i < _len; _i++) {
-            var _button = buttons[_i];
-            if (_button.getAttribute("aria-pressed") === "true") {
-                _button.classList.add(CLASS_NAME_ACTIVE);
-            } else {
-                _button.classList.remove(CLASS_NAME_ACTIVE);
-            }
-        }
-    });
-    $__default["default"].fn[NAME$1] = Button._jQueryInterface;
-    $__default["default"].fn[NAME$1].Constructor = Button;
-    $__default["default"].fn[NAME$1].noConflict = function() {
-        $__default["default"].fn[NAME$1] = JQUERY_NO_CONFLICT$1;
-        return Button._jQueryInterface;
-    };
-    var NAME$2 = "carousel";
-    var VERSION$2 = "4.6.0";
-    var DATA_KEY$2 = "bs.carousel";
-    var EVENT_KEY$2 = "." + DATA_KEY$2;
-    var DATA_API_KEY$2 = ".data-api";
-    var JQUERY_NO_CONFLICT$2 = $__default["default"].fn[NAME$2];
-    var ARROW_LEFT_KEYCODE = 37;
-    var ARROW_RIGHT_KEYCODE = 39;
-    var TOUCHEVENT_COMPAT_WAIT = 500;
-    var SWIPE_THRESHOLD = 40;
-    var Default = {
-        interval: 5e3,
-        keyboard: true,
-        slide: false,
-        pause: "hover",
-        wrap: true,
-        touch: true
-    };
-    var DefaultType = {
-        interval: "(number|boolean)",
-        keyboard: "boolean",
-        slide: "(boolean|string)",
-        pause: "(string|boolean)",
-        wrap: "boolean",
-        touch: "boolean"
-    };
-    var DIRECTION_NEXT = "next";
-    var DIRECTION_PREV = "prev";
-    var DIRECTION_LEFT = "left";
-    var DIRECTION_RIGHT = "right";
-    var EVENT_SLIDE = "slide" + EVENT_KEY$2;
-    var EVENT_SLID = "slid" + EVENT_KEY$2;
-    var EVENT_KEYDOWN = "keydown" + EVENT_KEY$2;
-    var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY$2;
-    var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY$2;
-    var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY$2;
-    var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY$2;
-    var EVENT_TOUCHEND = "touchend" + EVENT_KEY$2;
-    var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY$2;
-    var EVENT_POINTERUP = "pointerup" + EVENT_KEY$2;
-    var EVENT_DRAG_START = "dragstart" + EVENT_KEY$2;
-    var EVENT_LOAD_DATA_API$1 = "load" + EVENT_KEY$2 + DATA_API_KEY$2;
-    var EVENT_CLICK_DATA_API$2 = "click" + EVENT_KEY$2 + DATA_API_KEY$2;
-    var CLASS_NAME_CAROUSEL = "carousel";
-    var CLASS_NAME_ACTIVE$1 = "active";
-    var CLASS_NAME_SLIDE = "slide";
-    var CLASS_NAME_RIGHT = "carousel-item-right";
-    var CLASS_NAME_LEFT = "carousel-item-left";
-    var CLASS_NAME_NEXT = "carousel-item-next";
-    var CLASS_NAME_PREV = "carousel-item-prev";
-    var CLASS_NAME_POINTER_EVENT = "pointer-event";
-    var SELECTOR_ACTIVE$1 = ".active";
-    var SELECTOR_ACTIVE_ITEM = ".active.carousel-item";
-    var SELECTOR_ITEM = ".carousel-item";
-    var SELECTOR_ITEM_IMG = ".carousel-item img";
-    var SELECTOR_NEXT_PREV = ".carousel-item-next, .carousel-item-prev";
-    var SELECTOR_INDICATORS = ".carousel-indicators";
-    var SELECTOR_DATA_SLIDE = "[data-slide], [data-slide-to]";
-    var SELECTOR_DATA_RIDE = '[data-ride="carousel"]';
-    var PointerType = {
-        TOUCH: "touch",
-        PEN: "pen"
-    };
-    var Carousel = function() {
-        function Carousel(element, config) {
-            this._items = null;
-            this._interval = null;
-            this._activeElement = null;
-            this._isPaused = false;
-            this._isSliding = false;
-            this.touchTimeout = null;
-            this.touchStartX = 0;
-            this.touchDeltaX = 0;
-            this._config = this._getConfig(config);
-            this._element = element;
-            this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS);
-            this._touchSupported = "ontouchstart" in document.documentElement || navigator.maxTouchPoints > 0;
-            this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
-            this._addEventListeners();
-        }
-        var _proto = Carousel.prototype;
-        _proto.next = function next() {
-            if (!this._isSliding) {
-                this._slide(DIRECTION_NEXT);
-            }
-        };
-        _proto.nextWhenVisible = function nextWhenVisible() {
-            var $element = $__default["default"](this._element);
-            if (!document.hidden && $element.is(":visible") && $element.css("visibility") !== "hidden") {
-                this.next();
-            }
-        };
-        _proto.prev = function prev() {
-            if (!this._isSliding) {
-                this._slide(DIRECTION_PREV);
-            }
-        };
-        _proto.pause = function pause(event) {
-            if (!event) {
-                this._isPaused = true;
-            }
-            if (this._element.querySelector(SELECTOR_NEXT_PREV)) {
-                Util.triggerTransitionEnd(this._element);
-                this.cycle(true);
-            }
-            clearInterval(this._interval);
-            this._interval = null;
-        };
-        _proto.cycle = function cycle(event) {
-            if (!event) {
-                this._isPaused = false;
-            }
-            if (this._interval) {
-                clearInterval(this._interval);
-                this._interval = null;
-            }
-            if (this._config.interval && !this._isPaused) {
-                this._updateInterval();
-                this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
-            }
-        };
-        _proto.to = function to(index) {
-            var _this = this;
-            this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
-            var activeIndex = this._getItemIndex(this._activeElement);
-            if (index > this._items.length - 1 || index < 0) {
-                return;
-            }
-            if (this._isSliding) {
-                $__default["default"](this._element).one(EVENT_SLID, function() {
-                    return _this.to(index);
-                });
-                return;
-            }
-            if (activeIndex === index) {
-                this.pause();
-                this.cycle();
-                return;
-            }
-            var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;
-            this._slide(direction, this._items[index]);
-        };
-        _proto.dispose = function dispose() {
-            $__default["default"](this._element).off(EVENT_KEY$2);
-            $__default["default"].removeData(this._element, DATA_KEY$2);
-            this._items = null;
-            this._config = null;
-            this._element = null;
-            this._interval = null;
-            this._isPaused = null;
-            this._isSliding = null;
-            this._activeElement = null;
-            this._indicatorsElement = null;
-        };
-        _proto._getConfig = function _getConfig(config) {
-            config = _extends({}, Default, config);
-            Util.typeCheckConfig(NAME$2, config, DefaultType);
-            return config;
-        };
-        _proto._handleSwipe = function _handleSwipe() {
-            var absDeltax = Math.abs(this.touchDeltaX);
-            if (absDeltax <= SWIPE_THRESHOLD) {
-                return;
-            }
-            var direction = absDeltax / this.touchDeltaX;
-            this.touchDeltaX = 0;
-            if (direction > 0) {
-                this.prev();
-            }
-            if (direction < 0) {
-                this.next();
-            }
-        };
-        _proto._addEventListeners = function _addEventListeners() {
-            var _this2 = this;
-            if (this._config.keyboard) {
-                $__default["default"](this._element).on(EVENT_KEYDOWN, function(event) {
-                    return _this2._keydown(event);
-                });
-            }
-            if (this._config.pause === "hover") {
-                $__default["default"](this._element).on(EVENT_MOUSEENTER, function(event) {
-                    return _this2.pause(event);
-                }).on(EVENT_MOUSELEAVE, function(event) {
-                    return _this2.cycle(event);
-                });
-            }
-            if (this._config.touch) {
-                this._addTouchEventListeners();
-            }
-        };
-        _proto._addTouchEventListeners = function _addTouchEventListeners() {
-            var _this3 = this;
-            if (!this._touchSupported) {
-                return;
-            }
-            var start = function start(event) {
-                if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
-                    _this3.touchStartX = event.originalEvent.clientX;
-                } else if (!_this3._pointerEvent) {
-                    _this3.touchStartX = event.originalEvent.touches[0].clientX;
-                }
-            };
-            var move = function move(event) {
-                if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {
-                    _this3.touchDeltaX = 0;
-                } else {
-                    _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;
-                }
-            };
-            var end = function end(event) {
-                if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
-                    _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;
-                }
-                _this3._handleSwipe();
-                if (_this3._config.pause === "hover") {
-                    _this3.pause();
-                    if (_this3.touchTimeout) {
-                        clearTimeout(_this3.touchTimeout);
-                    }
-                    _this3.touchTimeout = setTimeout(function(event) {
-                        return _this3.cycle(event);
-                    }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);
-                }
-            };
-            $__default["default"](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function(e) {
-                return e.preventDefault();
-            });
-            if (this._pointerEvent) {
-                $__default["default"](this._element).on(EVENT_POINTERDOWN, function(event) {
-                    return start(event);
-                });
-                $__default["default"](this._element).on(EVENT_POINTERUP, function(event) {
-                    return end(event);
-                });
-                this._element.classList.add(CLASS_NAME_POINTER_EVENT);
-            } else {
-                $__default["default"](this._element).on(EVENT_TOUCHSTART, function(event) {
-                    return start(event);
-                });
-                $__default["default"](this._element).on(EVENT_TOUCHMOVE, function(event) {
-                    return move(event);
-                });
-                $__default["default"](this._element).on(EVENT_TOUCHEND, function(event) {
-                    return end(event);
-                });
-            }
-        };
-        _proto._keydown = function _keydown(event) {
-            if (/input|textarea/i.test(event.target.tagName)) {
-                return;
-            }
-            switch (event.which) {
-              case ARROW_LEFT_KEYCODE:
-                event.preventDefault();
-                this.prev();
-                break;
-
-              case ARROW_RIGHT_KEYCODE:
-                event.preventDefault();
-                this.next();
-                break;
-            }
-        };
-        _proto._getItemIndex = function _getItemIndex(element) {
-            this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [];
-            return this._items.indexOf(element);
-        };
-        _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
-            var isNextDirection = direction === DIRECTION_NEXT;
-            var isPrevDirection = direction === DIRECTION_PREV;
-            var activeIndex = this._getItemIndex(activeElement);
-            var lastItemIndex = this._items.length - 1;
-            var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
-            if (isGoingToWrap && !this._config.wrap) {
-                return activeElement;
-            }
-            var delta = direction === DIRECTION_PREV ? -1 : 1;
-            var itemIndex = (activeIndex + delta) % this._items.length;
-            return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
-        };
-        _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
-            var targetIndex = this._getItemIndex(relatedTarget);
-            var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));
-            var slideEvent = $__default["default"].Event(EVENT_SLIDE, {
-                relatedTarget: relatedTarget,
-                direction: eventDirectionName,
-                from: fromIndex,
-                to: targetIndex
-            });
-            $__default["default"](this._element).trigger(slideEvent);
-            return slideEvent;
-        };
-        _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
-            if (this._indicatorsElement) {
-                var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));
-                $__default["default"](indicators).removeClass(CLASS_NAME_ACTIVE$1);
-                var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
-                if (nextIndicator) {
-                    $__default["default"](nextIndicator).addClass(CLASS_NAME_ACTIVE$1);
-                }
-            }
-        };
-        _proto._updateInterval = function _updateInterval() {
-            var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM);
-            if (!element) {
-                return;
-            }
-            var elementInterval = parseInt(element.getAttribute("data-interval"), 10);
-            if (elementInterval) {
-                this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
-                this._config.interval = elementInterval;
-            } else {
-                this._config.interval = this._config.defaultInterval || this._config.interval;
-            }
-        };
-        _proto._slide = function _slide(direction, element) {
-            var _this4 = this;
-            var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
-            var activeElementIndex = this._getItemIndex(activeElement);
-            var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
-            var nextElementIndex = this._getItemIndex(nextElement);
-            var isCycling = Boolean(this._interval);
-            var directionalClassName;
-            var orderClassName;
-            var eventDirectionName;
-            if (direction === DIRECTION_NEXT) {
-                directionalClassName = CLASS_NAME_LEFT;
-                orderClassName = CLASS_NAME_NEXT;
-                eventDirectionName = DIRECTION_LEFT;
-            } else {
-                directionalClassName = CLASS_NAME_RIGHT;
-                orderClassName = CLASS_NAME_PREV;
-                eventDirectionName = DIRECTION_RIGHT;
-            }
-            if (nextElement && $__default["default"](nextElement).hasClass(CLASS_NAME_ACTIVE$1)) {
-                this._isSliding = false;
-                return;
-            }
-            var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
-            if (slideEvent.isDefaultPrevented()) {
-                return;
-            }
-            if (!activeElement || !nextElement) {
-                return;
-            }
-            this._isSliding = true;
-            if (isCycling) {
-                this.pause();
-            }
-            this._setActiveIndicatorElement(nextElement);
-            this._activeElement = nextElement;
-            var slidEvent = $__default["default"].Event(EVENT_SLID, {
-                relatedTarget: nextElement,
-                direction: eventDirectionName,
-                from: activeElementIndex,
-                to: nextElementIndex
-            });
-            if ($__default["default"](this._element).hasClass(CLASS_NAME_SLIDE)) {
-                $__default["default"](nextElement).addClass(orderClassName);
-                Util.reflow(nextElement);
-                $__default["default"](activeElement).addClass(directionalClassName);
-                $__default["default"](nextElement).addClass(directionalClassName);
-                var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
-                $__default["default"](activeElement).one(Util.TRANSITION_END, function() {
-                    $__default["default"](nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$1);
-                    $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$1 + " " + orderClassName + " " + directionalClassName);
-                    _this4._isSliding = false;
-                    setTimeout(function() {
-                        return $__default["default"](_this4._element).trigger(slidEvent);
-                    }, 0);
-                }).emulateTransitionEnd(transitionDuration);
-            } else {
-                $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$1);
-                $__default["default"](nextElement).addClass(CLASS_NAME_ACTIVE$1);
-                this._isSliding = false;
-                $__default["default"](this._element).trigger(slidEvent);
-            }
-            if (isCycling) {
-                this.cycle();
-            }
-        };
-        Carousel._jQueryInterface = function _jQueryInterface(config) {
-            return this.each(function() {
-                var data = $__default["default"](this).data(DATA_KEY$2);
-                var _config = _extends({}, Default, $__default["default"](this).data());
-                if (typeof config === "object") {
-                    _config = _extends({}, _config, config);
-                }
-                var action = typeof config === "string" ? config : _config.slide;
-                if (!data) {
-                    data = new Carousel(this, _config);
-                    $__default["default"](this).data(DATA_KEY$2, data);
-                }
-                if (typeof config === "number") {
-                    data.to(config);
-                } else if (typeof action === "string") {
-                    if (typeof data[action] === "undefined") {
-                        throw new TypeError('No method named "' + action + '"');
-                    }
-                    data[action]();
-                } else if (_config.interval && _config.ride) {
-                    data.pause();
-                    data.cycle();
-                }
-            });
-        };
-        Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {
-            var selector = Util.getSelectorFromElement(this);
-            if (!selector) {
-                return;
-            }
-            var target = $__default["default"](selector)[0];
-            if (!target || !$__default["default"](target).hasClass(CLASS_NAME_CAROUSEL)) {
-                return;
-            }
-            var config = _extends({}, $__default["default"](target).data(), $__default["default"](this).data());
-            var slideIndex = this.getAttribute("data-slide-to");
-            if (slideIndex) {
-                config.interval = false;
-            }
-            Carousel._jQueryInterface.call($__default["default"](target), config);
-            if (slideIndex) {
-                $__default["default"](target).data(DATA_KEY$2).to(slideIndex);
-            }
-            event.preventDefault();
-        };
-        _createClass(Carousel, null, [ {
-            key: "VERSION",
-            get: function get() {
-                return VERSION$2;
-            }
-        }, {
-            key: "Default",
-            get: function get() {
-                return Default;
-            }
-        } ]);
-        return Carousel;
-    }();
-    $__default["default"](document).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);
-    $__default["default"](window).on(EVENT_LOAD_DATA_API$1, function() {
-        var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));
-        for (var i = 0, len = carousels.length; i < len; i++) {
-            var $carousel = $__default["default"](carousels[i]);
-            Carousel._jQueryInterface.call($carousel, $carousel.data());
-        }
-    });
-    $__default["default"].fn[NAME$2] = Carousel._jQueryInterface;
-    $__default["default"].fn[NAME$2].Constructor = Carousel;
-    $__default["default"].fn[NAME$2].noConflict = function() {
-        $__default["default"].fn[NAME$2] = JQUERY_NO_CONFLICT$2;
-        return Carousel._jQueryInterface;
-    };
-    var NAME$3 = "collapse";
-    var VERSION$3 = "4.6.0";
-    var DATA_KEY$3 = "bs.collapse";
-    var EVENT_KEY$3 = "." + DATA_KEY$3;
-    var DATA_API_KEY$3 = ".data-api";
-    var JQUERY_NO_CONFLICT$3 = $__default["default"].fn[NAME$3];
-    var Default$1 = {
-        toggle: true,
-        parent: ""
-    };
-    var DefaultType$1 = {
-        toggle: "boolean",
-        parent: "(string|element)"
-    };
-    var EVENT_SHOW = "show" + EVENT_KEY$3;
-    var EVENT_SHOWN = "shown" + EVENT_KEY$3;
-    var EVENT_HIDE = "hide" + EVENT_KEY$3;
-    var EVENT_HIDDEN = "hidden" + EVENT_KEY$3;
-    var EVENT_CLICK_DATA_API$3 = "click" + EVENT_KEY$3 + DATA_API_KEY$3;
-    var CLASS_NAME_SHOW$1 = "show";
-    var CLASS_NAME_COLLAPSE = "collapse";
-    var CLASS_NAME_COLLAPSING = "collapsing";
-    var CLASS_NAME_COLLAPSED = "collapsed";
-    var DIMENSION_WIDTH = "width";
-    var DIMENSION_HEIGHT = "height";
-    var SELECTOR_ACTIVES = ".show, .collapsing";
-    var SELECTOR_DATA_TOGGLE$1 = '[data-toggle="collapse"]';
-    var Collapse = function() {
-        function Collapse(element, config) {
-            this._isTransitioning = false;
-            this._element = element;
-            this._config = this._getConfig(config);
-            this._triggerArray = [].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#' + element.id + '"],' + ('[data-toggle="collapse"][data-target="#' + element.id + '"]')));
-            var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$1));
-            for (var i = 0, len = toggleList.length; i < len; i++) {
-                var elem = toggleList[i];
-                var selector = Util.getSelectorFromElement(elem);
-                var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function(foundElem) {
-                    return foundElem === element;
-                });
-                if (selector !== null && filterElement.length > 0) {
-                    this._selector = selector;
-                    this._triggerArray.push(elem);
-                }
-            }
-            this._parent = this._config.parent ? this._getParent() : null;
-            if (!this._config.parent) {
-                this._addAriaAndCollapsedClass(this._element, this._triggerArray);
-            }
-            if (this._config.toggle) {
-                this.toggle();
-            }
-        }
-        var _proto = Collapse.prototype;
-        _proto.toggle = function toggle() {
-            if ($__default["default"](this._element).hasClass(CLASS_NAME_SHOW$1)) {
-                this.hide();
-            } else {
-                this.show();
-            }
-        };
-        _proto.show = function show() {
-            var _this = this;
-            if (this._isTransitioning || $__default["default"](this._element).hasClass(CLASS_NAME_SHOW$1)) {
-                return;
-            }
-            var actives;
-            var activesData;
-            if (this._parent) {
-                actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function(elem) {
-                    if (typeof _this._config.parent === "string") {
-                        return elem.getAttribute("data-parent") === _this._config.parent;
-                    }
-                    return elem.classList.contains(CLASS_NAME_COLLAPSE);
-                });
-                if (actives.length === 0) {
-                    actives = null;
-                }
-            }
-            if (actives) {
-                activesData = $__default["default"](actives).not(this._selector).data(DATA_KEY$3);
-                if (activesData && activesData._isTransitioning) {
-                    return;
-                }
-            }
-            var startEvent = $__default["default"].Event(EVENT_SHOW);
-            $__default["default"](this._element).trigger(startEvent);
-            if (startEvent.isDefaultPrevented()) {
-                return;
-            }
-            if (actives) {
-                Collapse._jQueryInterface.call($__default["default"](actives).not(this._selector), "hide");
-                if (!activesData) {
-                    $__default["default"](actives).data(DATA_KEY$3, null);
-                }
-            }
-            var dimension = this._getDimension();
-            $__default["default"](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);
-            this._element.style[dimension] = 0;
-            if (this._triggerArray.length) {
-                $__default["default"](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr("aria-expanded", true);
-            }
-            this.setTransitioning(true);
-            var complete = function complete() {
-                $__default["default"](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$1);
-                _this._element.style[dimension] = "";
-                _this.setTransitioning(false);
-                $__default["default"](_this._element).trigger(EVENT_SHOWN);
-            };
-            var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
-            var scrollSize = "scroll" + capitalizedDimension;
-            var transitionDuration = Util.getTransitionDurationFromElement(this._element);
-            $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
-            this._element.style[dimension] = this._element[scrollSize] + "px";
-        };
-        _proto.hide = function hide() {
-            var _this2 = this;
-            if (this._isTransitioning || !$__default["default"](this._element).hasClass(CLASS_NAME_SHOW$1)) {
-                return;
-            }
-            var startEvent = $__default["default"].Event(EVENT_HIDE);
-            $__default["default"](this._element).trigger(startEvent);
-            if (startEvent.isDefaultPrevented()) {
-                return;
-            }
-            var dimension = this._getDimension();
-            this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
-            Util.reflow(this._element);
-            $__default["default"](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$1);
-            var triggerArrayLength = this._triggerArray.length;
-            if (triggerArrayLength > 0) {
-                for (var i = 0; i < triggerArrayLength; i++) {
-                    var trigger = this._triggerArray[i];
-                    var selector = Util.getSelectorFromElement(trigger);
-                    if (selector !== null) {
-                        var $elem = $__default["default"]([].slice.call(document.querySelectorAll(selector)));
-                        if (!$elem.hasClass(CLASS_NAME_SHOW$1)) {
-                            $__default["default"](trigger).addClass(CLASS_NAME_COLLAPSED).attr("aria-expanded", false);
-                        }
-                    }
-                }
-            }
-            this.setTransitioning(true);
-            var complete = function complete() {
-                _this2.setTransitioning(false);
-                $__default["default"](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN);
-            };
-            this._element.style[dimension] = "";
-            var transitionDuration = Util.getTransitionDurationFromElement(this._element);
-            $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
-        };
-        _proto.setTransitioning = function setTransitioning(isTransitioning) {
-            this._isTransitioning = isTransitioning;
-        };
-        _proto.dispose = function dispose() {
-            $__default["default"].removeData(this._element, DATA_KEY$3);
-            this._config = null;
-            this._parent = null;
-            this._element = null;
-            this._triggerArray = null;
-            this._isTransitioning = null;
-        };
-        _proto._getConfig = function _getConfig(config) {
-            config = _extends({}, Default$1, config);
-            config.toggle = Boolean(config.toggle);
-            Util.typeCheckConfig(NAME$3, config, DefaultType$1);
-            return config;
-        };
-        _proto._getDimension = function _getDimension() {
-            var hasWidth = $__default["default"](this._element).hasClass(DIMENSION_WIDTH);
-            return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;
-        };
-        _proto._getParent = function _getParent() {
-            var _this3 = this;
-            var parent;
-            if (Util.isElement(this._config.parent)) {
-                parent = this._config.parent;
-                if (typeof this._config.parent.jquery !== "undefined") {
-                    parent = this._config.parent[0];
-                }
-            } else {
-                parent = document.querySelector(this._config.parent);
-            }
-            var selector = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]';
-            var children = [].slice.call(parent.querySelectorAll(selector));
-            $__default["default"](children).each(function(i, element) {
-                _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [ element ]);
-            });
-            return parent;
-        };
-        _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
-            var isOpen = $__default["default"](element).hasClass(CLASS_NAME_SHOW$1);
-            if (triggerArray.length) {
-                $__default["default"](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr("aria-expanded", isOpen);
-            }
-        };
-        Collapse._getTargetFromElement = function _getTargetFromElement(element) {
-            var selector = Util.getSelectorFromElement(element);
-            return selector ? document.querySelector(selector) : null;
-        };
-        Collapse._jQueryInterface = function _jQueryInterface(config) {
-            return this.each(function() {
-                var $element = $__default["default"](this);
-                var data = $element.data(DATA_KEY$3);
-                var _config = _extends({}, Default$1, $element.data(), typeof config === "object" && config ? config : {});
-                if (!data && _config.toggle && typeof config === "string" && /show|hide/.test(config)) {
-                    _config.toggle = false;
-                }
-                if (!data) {
-                    data = new Collapse(this, _config);
-                    $element.data(DATA_KEY$3, data);
-                }
-                if (typeof config === "string") {
-                    if (typeof data[config] === "undefined") {
-                        throw new TypeError('No method named "' + config + '"');
-                    }
-                    data[config]();
-                }
-            });
-        };
-        _createClass(Collapse, null, [ {
-            key: "VERSION",
-            get: function get() {
-                return VERSION$3;
-            }
-        }, {
-            key: "Default",
-            get: function get() {
-                return Default$1;
-            }
-        } ]);
-        return Collapse;
-    }();
-    $__default["default"](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$1, function(event) {
-        if (event.currentTarget.tagName === "A") {
-            event.preventDefault();
-        }
-        var $trigger = $__default["default"](this);
-        var selector = Util.getSelectorFromElement(this);
-        var selectors = [].slice.call(document.querySelectorAll(selector));
-        $__default["default"](selectors).each(function() {
-            var $target = $__default["default"](this);
-            var data = $target.data(DATA_KEY$3);
-            var config = data ? "toggle" : $trigger.data();
-            Collapse._jQueryInterface.call($target, config);
-        });
-    });
-    $__default["default"].fn[NAME$3] = Collapse._jQueryInterface;
-    $__default["default"].fn[NAME$3].Constructor = Collapse;
-    $__default["default"].fn[NAME$3].noConflict = function() {
-        $__default["default"].fn[NAME$3] = JQUERY_NO_CONFLICT$3;
-        return Collapse._jQueryInterface;
-    };
-    var NAME$4 = "dropdown";
-    var VERSION$4 = "4.6.0";
-    var DATA_KEY$4 = "bs.dropdown";
-    var EVENT_KEY$4 = "." + DATA_KEY$4;
-    var DATA_API_KEY$4 = ".data-api";
-    var JQUERY_NO_CONFLICT$4 = $__default["default"].fn[NAME$4];
-    var ESCAPE_KEYCODE = 27;
-    var SPACE_KEYCODE = 32;
-    var TAB_KEYCODE = 9;
-    var ARROW_UP_KEYCODE = 38;
-    var ARROW_DOWN_KEYCODE = 40;
-    var RIGHT_MOUSE_BUTTON_WHICH = 3;
-    var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
-    var EVENT_HIDE$1 = "hide" + EVENT_KEY$4;
-    var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$4;
-    var EVENT_SHOW$1 = "show" + EVENT_KEY$4;
-    var EVENT_SHOWN$1 = "shown" + EVENT_KEY$4;
-    var EVENT_CLICK = "click" + EVENT_KEY$4;
-    var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$4 + DATA_API_KEY$4;
-    var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$4 + DATA_API_KEY$4;
-    var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$4 + DATA_API_KEY$4;
-    var CLASS_NAME_DISABLED = "disabled";
-    var CLASS_NAME_SHOW$2 = "show";
-    var CLASS_NAME_DROPUP = "dropup";
-    var CLASS_NAME_DROPRIGHT = "dropright";
-    var CLASS_NAME_DROPLEFT = "dropleft";
-    var CLASS_NAME_MENURIGHT = "dropdown-menu-right";
-    var CLASS_NAME_POSITION_STATIC = "position-static";
-    var SELECTOR_DATA_TOGGLE$2 = '[data-toggle="dropdown"]';
-    var SELECTOR_FORM_CHILD = ".dropdown form";
-    var SELECTOR_MENU = ".dropdown-menu";
-    var SELECTOR_NAVBAR_NAV = ".navbar-nav";
-    var SELECTOR_VISIBLE_ITEMS = ".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)";
-    var PLACEMENT_TOP = "top-start";
-    var PLACEMENT_TOPEND = "top-end";
-    var PLACEMENT_BOTTOM = "bottom-start";
-    var PLACEMENT_BOTTOMEND = "bottom-end";
-    var PLACEMENT_RIGHT = "right-start";
-    var PLACEMENT_LEFT = "left-start";
-    var Default$2 = {
-        offset: 0,
-        flip: true,
-        boundary: "scrollParent",
-        reference: "toggle",
-        display: "dynamic",
-        popperConfig: null
-    };
-    var DefaultType$2 = {
-        offset: "(number|string|function)",
-        flip: "boolean",
-        boundary: "(string|element)",
-        reference: "(string|element)",
-        display: "string",
-        popperConfig: "(null|object)"
-    };
-    var Dropdown = function() {
-        function Dropdown(element, config) {
-            this._element = element;
-            this._popper = null;
-            this._config = this._getConfig(config);
-            this._menu = this._getMenuElement();
-            this._inNavbar = this._detectNavbar();
-            this._addEventListeners();
-        }
-        var _proto = Dropdown.prototype;
-        _proto.toggle = function toggle() {
-            if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED)) {
-                return;
-            }
-            var isActive = $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$2);
-            Dropdown._clearMenus();
-            if (isActive) {
-                return;
-            }
-            this.show(true);
-        };
-        _proto.show = function show(usePopper) {
-            if (usePopper === void 0) {
-                usePopper = false;
-            }
-            if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED) || $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$2)) {
-                return;
-            }
-            var relatedTarget = {
-                relatedTarget: this._element
-            };
-            var showEvent = $__default["default"].Event(EVENT_SHOW$1, relatedTarget);
-            var parent = Dropdown._getParentFromElement(this._element);
-            $__default["default"](parent).trigger(showEvent);
-            if (showEvent.isDefaultPrevented()) {
-                return;
-            }
-            if (!this._inNavbar && usePopper) {
-                if (typeof Popper__default["default"] === "undefined") {
-                    throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");
-                }
-                var referenceElement = this._element;
-                if (this._config.reference === "parent") {
-                    referenceElement = parent;
-                } else if (Util.isElement(this._config.reference)) {
-                    referenceElement = this._config.reference;
-                    if (typeof this._config.reference.jquery !== "undefined") {
-                        referenceElement = this._config.reference[0];
-                    }
-                }
-                if (this._config.boundary !== "scrollParent") {
-                    $__default["default"](parent).addClass(CLASS_NAME_POSITION_STATIC);
-                }
-                this._popper = new Popper__default["default"](referenceElement, this._menu, this._getPopperConfig());
-            }
-            if ("ontouchstart" in document.documentElement && $__default["default"](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {
-                $__default["default"](document.body).children().on("mouseover", null, $__default["default"].noop);
-            }
-            this._element.focus();
-            this._element.setAttribute("aria-expanded", true);
-            $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$2);
-            $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$2).trigger($__default["default"].Event(EVENT_SHOWN$1, relatedTarget));
-        };
-        _proto.hide = function hide() {
-            if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED) || !$__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$2)) {
-                return;
-            }
-            var relatedTarget = {
-                relatedTarget: this._element
-            };
-            var hideEvent = $__default["default"].Event(EVENT_HIDE$1, relatedTarget);
-            var parent = Dropdown._getParentFromElement(this._element);
-            $__default["default"](parent).trigger(hideEvent);
-            if (hideEvent.isDefaultPrevented()) {
-                return;
-            }
-            if (this._popper) {
-                this._popper.destroy();
-            }
-            $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$2);
-            $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$2).trigger($__default["default"].Event(EVENT_HIDDEN$1, relatedTarget));
-        };
-        _proto.dispose = function dispose() {
-            $__default["default"].removeData(this._element, DATA_KEY$4);
-            $__default["default"](this._element).off(EVENT_KEY$4);
-            this._element = null;
-            this._menu = null;
-            if (this._popper !== null) {
-                this._popper.destroy();
-                this._popper = null;
-            }
-        };
-        _proto.update = function update() {
-            this._inNavbar = this._detectNavbar();
-            if (this._popper !== null) {
-                this._popper.scheduleUpdate();
-            }
-        };
-        _proto._addEventListeners = function _addEventListeners() {
-            var _this = this;
-            $__default["default"](this._element).on(EVENT_CLICK, function(event) {
-                event.preventDefault();
-                event.stopPropagation();
-                _this.toggle();
-            });
-        };
-        _proto._getConfig = function _getConfig(config) {
-            config = _extends({}, this.constructor.Default, $__default["default"](this._element).data(), config);
-            Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
-            return config;
-        };
-        _proto._getMenuElement = function _getMenuElement() {
-            if (!this._menu) {
-                var parent = Dropdown._getParentFromElement(this._element);
-                if (parent) {
-                    this._menu = parent.querySelector(SELECTOR_MENU);
-                }
-            }
-            return this._menu;
-        };
-        _proto._getPlacement = function _getPlacement() {
-            var $parentDropdown = $__default["default"](this._element.parentNode);
-            var placement = PLACEMENT_BOTTOM;
-            if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {
-                placement = $__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
-            } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {
-                placement = PLACEMENT_RIGHT;
-            } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {
-                placement = PLACEMENT_LEFT;
-            } else if ($__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {
-                placement = PLACEMENT_BOTTOMEND;
-            }
-            return placement;
-        };
-        _proto._detectNavbar = function _detectNavbar() {
-            return $__default["default"](this._element).closest(".navbar").length > 0;
-        };
-        _proto._getOffset = function _getOffset() {
-            var _this2 = this;
-            var offset = {};
-            if (typeof this._config.offset === "function") {
-                offset.fn = function(data) {
-                    data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
-                    return data;
-                };
-            } else {
-                offset.offset = this._config.offset;
-            }
-            return offset;
-        };
-        _proto._getPopperConfig = function _getPopperConfig() {
-            var popperConfig = {
-                placement: this._getPlacement(),
-                modifiers: {
-                    offset: this._getOffset(),
-                    flip: {
-                        enabled: this._config.flip
-                    },
-                    preventOverflow: {
-                        boundariesElement: this._config.boundary
-                    }
-                }
-            };
-            if (this._config.display === "static") {
-                popperConfig.modifiers.applyStyle = {
-                    enabled: false
-                };
-            }
-            return _extends({}, popperConfig, this._config.popperConfig);
-        };
-        Dropdown._jQueryInterface = function _jQueryInterface(config) {
-            return this.each(function() {
-                var data = $__default["default"](this).data(DATA_KEY$4);
-                var _config = typeof config === "object" ? config : null;
-                if (!data) {
-                    data = new Dropdown(this, _config);
-                    $__default["default"](this).data(DATA_KEY$4, data);
-                }
-                if (typeof config === "string") {
-                    if (typeof data[config] === "undefined") {
-                        throw new TypeError('No method named "' + config + '"');
-                    }
-                    data[config]();
-                }
-            });
-        };
-        Dropdown._clearMenus = function _clearMenus(event) {
-            if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === "keyup" && event.which !== TAB_KEYCODE)) {
-                return;
-            }
-            var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));
-            for (var i = 0, len = toggles.length; i < len; i++) {
-                var parent = Dropdown._getParentFromElement(toggles[i]);
-                var context = $__default["default"](toggles[i]).data(DATA_KEY$4);
-                var relatedTarget = {
-                    relatedTarget: toggles[i]
-                };
-                if (event && event.type === "click") {
-                    relatedTarget.clickEvent = event;
-                }
-                if (!context) {
-                    continue;
-                }
-                var dropdownMenu = context._menu;
-                if (!$__default["default"](parent).hasClass(CLASS_NAME_SHOW$2)) {
-                    continue;
-                }
-                if (event && (event.type === "click" && /input|textarea/i.test(event.target.tagName) || event.type === "keyup" && event.which === TAB_KEYCODE) && $__default["default"].contains(parent, event.target)) {
-                    continue;
-                }
-                var hideEvent = $__default["default"].Event(EVENT_HIDE$1, relatedTarget);
-                $__default["default"](parent).trigger(hideEvent);
-                if (hideEvent.isDefaultPrevented()) {
-                    continue;
-                }
-                if ("ontouchstart" in document.documentElement) {
-                    $__default["default"](document.body).children().off("mouseover", null, $__default["default"].noop);
-                }
-                toggles[i].setAttribute("aria-expanded", "false");
-                if (context._popper) {
-                    context._popper.destroy();
-                }
-                $__default["default"](dropdownMenu).removeClass(CLASS_NAME_SHOW$2);
-                $__default["default"](parent).removeClass(CLASS_NAME_SHOW$2).trigger($__default["default"].Event(EVENT_HIDDEN$1, relatedTarget));
-            }
-        };
-        Dropdown._getParentFromElement = function _getParentFromElement(element) {
-            var parent;
-            var selector = Util.getSelectorFromElement(element);
-            if (selector) {
-                parent = document.querySelector(selector);
-            }
-            return parent || element.parentNode;
-        };
-        Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
-            if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default["default"](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
-                return;
-            }
-            if (this.disabled || $__default["default"](this).hasClass(CLASS_NAME_DISABLED)) {
-                return;
-            }
-            var parent = Dropdown._getParentFromElement(this);
-            var isActive = $__default["default"](parent).hasClass(CLASS_NAME_SHOW$2);
-            if (!isActive && event.which === ESCAPE_KEYCODE) {
-                return;
-            }
-            event.preventDefault();
-            event.stopPropagation();
-            if (!isActive || event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE) {
-                if (event.which === ESCAPE_KEYCODE) {
-                    $__default["default"](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger("focus");
-                }
-                $__default["default"](this).trigger("click");
-                return;
-            }
-            var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function(item) {
-                return $__default["default"](item).is(":visible");
-            });
-            if (items.length === 0) {
-                return;
-            }
-            var index = items.indexOf(event.target);
-            if (event.which === ARROW_UP_KEYCODE && index > 0) {
-                index--;
-            }
-            if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
-                index++;
-            }
-            if (index < 0) {
-                index = 0;
-            }
-            items[index].focus();
-        };
-        _createClass(Dropdown, null, [ {
-            key: "VERSION",
-            get: function get() {
-                return VERSION$4;
-            }
-        }, {
-            key: "Default",
-            get: function get() {
-                return Default$2;
-            }
-        }, {
-            key: "DefaultType",
-            get: function get() {
-                return DefaultType$2;
-            }
-        } ]);
-        return Dropdown;
-    }();
-    $__default["default"](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$4 + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$2, function(event) {
-        event.preventDefault();
-        event.stopPropagation();
-        Dropdown._jQueryInterface.call($__default["default"](this), "toggle");
-    }).on(EVENT_CLICK_DATA_API$4, SELECTOR_FORM_CHILD, function(e) {
-        e.stopPropagation();
-    });
-    $__default["default"].fn[NAME$4] = Dropdown._jQueryInterface;
-    $__default["default"].fn[NAME$4].Constructor = Dropdown;
-    $__default["default"].fn[NAME$4].noConflict = function() {
-        $__default["default"].fn[NAME$4] = JQUERY_NO_CONFLICT$4;
-        return Dropdown._jQueryInterface;
-    };
-    var NAME$5 = "modal";
-    var VERSION$5 = "4.6.0";
-    var DATA_KEY$5 = "bs.modal";
-    var EVENT_KEY$5 = "." + DATA_KEY$5;
-    var DATA_API_KEY$5 = ".data-api";
-    var JQUERY_NO_CONFLICT$5 = $__default["default"].fn[NAME$5];
-    var ESCAPE_KEYCODE$1 = 27;
-    var Default$3 = {
-        backdrop: true,
-        keyboard: true,
-        focus: true,
-        show: true
-    };
-    var DefaultType$3 = {
-        backdrop: "(boolean|string)",
-        keyboard: "boolean",
-        focus: "boolean",
-        show: "boolean"
-    };
-    var EVENT_HIDE$2 = "hide" + EVENT_KEY$5;
-    var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5;
-    var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5;
-    var EVENT_SHOW$2 = "show" + EVENT_KEY$5;
-    var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5;
-    var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5;
-    var EVENT_RESIZE = "resize" + EVENT_KEY$5;
-    var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY$5;
-    var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5;
-    var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5;
-    var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5;
-    var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$5 + DATA_API_KEY$5;
-    var CLASS_NAME_SCROLLABLE = "modal-dialog-scrollable";
-    var CLASS_NAME_SCROLLBAR_MEASURER = "modal-scrollbar-measure";
-    var CLASS_NAME_BACKDROP = "modal-backdrop";
-    var CLASS_NAME_OPEN = "modal-open";
-    var CLASS_NAME_FADE$1 = "fade";
-    var CLASS_NAME_SHOW$3 = "show";
-    var CLASS_NAME_STATIC = "modal-static";
-    var SELECTOR_DIALOG = ".modal-dialog";
-    var SELECTOR_MODAL_BODY = ".modal-body";
-    var SELECTOR_DATA_TOGGLE$3 = '[data-toggle="modal"]';
-    var SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]';
-    var SELECTOR_FIXED_CONTENT = ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top";
-    var SELECTOR_STICKY_CONTENT = ".sticky-top";
-    var Modal = function() {
-        function Modal(element, config) {
-            this._config = this._getConfig(config);
-            this._element = element;
-            this._dialog = element.querySelector(SELECTOR_DIALOG);
-            this._backdrop = null;
-            this._isShown = false;
-            this._isBodyOverflowing = false;
-            this._ignoreBackdropClick = false;
-            this._isTransitioning = false;
-            this._scrollbarWidth = 0;
-        }
-        var _proto = Modal.prototype;
-        _proto.toggle = function toggle(relatedTarget) {
-            return this._isShown ? this.hide() : this.show(relatedTarget);
-        };
-        _proto.show = function show(relatedTarget) {
-            var _this = this;
-            if (this._isShown || this._isTransitioning) {
-                return;
-            }
-            if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$1)) {
-                this._isTransitioning = true;
-            }
-            var showEvent = $__default["default"].Event(EVENT_SHOW$2, {
-                relatedTarget: relatedTarget
-            });
-            $__default["default"](this._element).trigger(showEvent);
-            if (this._isShown || showEvent.isDefaultPrevented()) {
-                return;
-            }
-            this._isShown = true;
-            this._checkScrollbar();
-            this._setScrollbar();
-            this._adjustDialog();
-            this._setEscapeEvent();
-            this._setResizeEvent();
-            $__default["default"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function(event) {
-                return _this.hide(event);
-            });
-            $__default["default"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function() {
-                $__default["default"](_this._element).one(EVENT_MOUSEUP_DISMISS, function(event) {
-                    if ($__default["default"](event.target).is(_this._element)) {
-                        _this._ignoreBackdropClick = true;
-                    }
-                });
-            });
-            this._showBackdrop(function() {
-                return _this._showElement(relatedTarget);
-            });
-        };
-        _proto.hide = function hide(event) {
-            var _this2 = this;
-            if (event) {
-                event.preventDefault();
-            }
-            if (!this._isShown || this._isTransitioning) {
-                return;
-            }
-            var hideEvent = $__default["default"].Event(EVENT_HIDE$2);
-            $__default["default"](this._element).trigger(hideEvent);
-            if (!this._isShown || hideEvent.isDefaultPrevented()) {
-                return;
-            }
-            this._isShown = false;
-            var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$1);
-            if (transition) {
-                this._isTransitioning = true;
-            }
-            this._setEscapeEvent();
-            this._setResizeEvent();
-            $__default["default"](document).off(EVENT_FOCUSIN);
-            $__default["default"](this._element).removeClass(CLASS_NAME_SHOW$3);
-            $__default["default"](this._element).off(EVENT_CLICK_DISMISS);
-            $__default["default"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
-            if (transition) {
-                var transitionDuration = Util.getTransitionDurationFromElement(this._element);
-                $__default["default"](this._element).one(Util.TRANSITION_END, function(event) {
-                    return _this2._hideModal(event);
-                }).emulateTransitionEnd(transitionDuration);
-            } else {
-                this._hideModal();
-            }
-        };
-        _proto.dispose = function dispose() {
-            [ window, this._element, this._dialog ].forEach(function(htmlElement) {
-                return $__default["default"](htmlElement).off(EVENT_KEY$5);
-            });
-            $__default["default"](document).off(EVENT_FOCUSIN);
-            $__default["default"].removeData(this._element, DATA_KEY$5);
-            this._config = null;
-            this._element = null;
-            this._dialog = null;
-            this._backdrop = null;
-            this._isShown = null;
-            this._isBodyOverflowing = null;
-            this._ignoreBackdropClick = null;
-            this._isTransitioning = null;
-            this._scrollbarWidth = null;
-        };
-        _proto.handleUpdate = function handleUpdate() {
-            this._adjustDialog();
-        };
-        _proto._getConfig = function _getConfig(config) {
-            config = _extends({}, Default$3, config);
-            Util.typeCheckConfig(NAME$5, config, DefaultType$3);
-            return config;
-        };
-        _proto._triggerBackdropTransition = function _triggerBackdropTransition() {
-            var _this3 = this;
-            var hideEventPrevented = $__default["default"].Event(EVENT_HIDE_PREVENTED);
-            $__default["default"](this._element).trigger(hideEventPrevented);
-            if (hideEventPrevented.isDefaultPrevented()) {
-                return;
-            }
-            var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
-            if (!isModalOverflowing) {
-                this._element.style.overflowY = "hidden";
-            }
-            this._element.classList.add(CLASS_NAME_STATIC);
-            var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog);
-            $__default["default"](this._element).off(Util.TRANSITION_END);
-            $__default["default"](this._element).one(Util.TRANSITION_END, function() {
-                _this3._element.classList.remove(CLASS_NAME_STATIC);
-                if (!isModalOverflowing) {
-                    $__default["default"](_this3._element).one(Util.TRANSITION_END, function() {
-                        _this3._element.style.overflowY = "";
-                    }).emulateTransitionEnd(_this3._element, modalTransitionDuration);
-                }
-            }).emulateTransitionEnd(modalTransitionDuration);
-            this._element.focus();
-        };
-        _proto._showElement = function _showElement(relatedTarget) {
-            var _this4 = this;
-            var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$1);
-            var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;
-            if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
-                document.body.appendChild(this._element);
-            }
-            this._element.style.display = "block";
-            this._element.removeAttribute("aria-hidden");
-            this._element.setAttribute("aria-modal", true);
-            this._element.setAttribute("role", "dialog");
-            if ($__default["default"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
-                modalBody.scrollTop = 0;
-            } else {
-                this._element.scrollTop = 0;
-            }
-            if (transition) {
-                Util.reflow(this._element);
-            }
-            $__default["default"](this._element).addClass(CLASS_NAME_SHOW$3);
-            if (this._config.focus) {
-                this._enforceFocus();
-            }
-            var shownEvent = $__default["default"].Event(EVENT_SHOWN$2, {
-                relatedTarget: relatedTarget
-            });
-            var transitionComplete = function transitionComplete() {
-                if (_this4._config.focus) {
-                    _this4._element.focus();
-                }
-                _this4._isTransitioning = false;
-                $__default["default"](_this4._element).trigger(shownEvent);
-            };
-            if (transition) {
-                var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);
-                $__default["default"](this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
-            } else {
-                transitionComplete();
-            }
-        };
-        _proto._enforceFocus = function _enforceFocus() {
-            var _this5 = this;
-            $__default["default"](document).off(EVENT_FOCUSIN).on(EVENT_FOCUSIN, function(event) {
-                if (document !== event.target && _this5._element !== event.target && $__default["default"](_this5._element).has(event.target).length === 0) {
-                    _this5._element.focus();
-                }
-            });
-        };
-        _proto._setEscapeEvent = function _setEscapeEvent() {
-            var _this6 = this;
-            if (this._isShown) {
-                $__default["default"](this._element).on(EVENT_KEYDOWN_DISMISS, function(event) {
-                    if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {
-                        event.preventDefault();
-                        _this6.hide();
-                    } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {
-                        _this6._triggerBackdropTransition();
-                    }
-                });
-            } else if (!this._isShown) {
-                $__default["default"](this._element).off(EVENT_KEYDOWN_DISMISS);
-            }
-        };
-        _proto._setResizeEvent = function _setResizeEvent() {
-            var _this7 = this;
-            if (this._isShown) {
-                $__default["default"](window).on(EVENT_RESIZE, function(event) {
-                    return _this7.handleUpdate(event);
-                });
-            } else {
-                $__default["default"](window).off(EVENT_RESIZE);
-            }
-        };
-        _proto._hideModal = function _hideModal() {
-            var _this8 = this;
-            this._element.style.display = "none";
-            this._element.setAttribute("aria-hidden", true);
-            this._element.removeAttribute("aria-modal");
-            this._element.removeAttribute("role");
-            this._isTransitioning = false;
-            this._showBackdrop(function() {
-                $__default["default"](document.body).removeClass(CLASS_NAME_OPEN);
-                _this8._resetAdjustments();
-                _this8._resetScrollbar();
-                $__default["default"](_this8._element).trigger(EVENT_HIDDEN$2);
-            });
-        };
-        _proto._removeBackdrop = function _removeBackdrop() {
-            if (this._backdrop) {
-                $__default["default"](this._backdrop).remove();
-                this._backdrop = null;
-            }
-        };
-        _proto._showBackdrop = function _showBackdrop(callback) {
-            var _this9 = this;
-            var animate = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$1) ? CLASS_NAME_FADE$1 : "";
-            if (this._isShown && this._config.backdrop) {
-                this._backdrop = document.createElement("div");
-                this._backdrop.className = CLASS_NAME_BACKDROP;
-                if (animate) {
-                    this._backdrop.classList.add(animate);
-                }
-                $__default["default"](this._backdrop).appendTo(document.body);
-                $__default["default"](this._element).on(EVENT_CLICK_DISMISS, function(event) {
-                    if (_this9._ignoreBackdropClick) {
-                        _this9._ignoreBackdropClick = false;
-                        return;
-                    }
-                    if (event.target !== event.currentTarget) {
-                        return;
-                    }
-                    if (_this9._config.backdrop === "static") {
-                        _this9._triggerBackdropTransition();
-                    } else {
-                        _this9.hide();
-                    }
-                });
-                if (animate) {
-                    Util.reflow(this._backdrop);
-                }
-                $__default["default"](this._backdrop).addClass(CLASS_NAME_SHOW$3);
-                if (!callback) {
-                    return;
-                }
-                if (!animate) {
-                    callback();
-                    return;
-                }
-                var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
-                $__default["default"](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
-            } else if (!this._isShown && this._backdrop) {
-                $__default["default"](this._backdrop).removeClass(CLASS_NAME_SHOW$3);
-                var callbackRemove = function callbackRemove() {
-                    _this9._removeBackdrop();
-                    if (callback) {
-                        callback();
-                    }
-                };
-                if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$1)) {
-                    var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
-                    $__default["default"](this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
-                } else {
-                    callbackRemove();
-                }
-            } else if (callback) {
-                callback();
-            }
-        };
-        _proto._adjustDialog = function _adjustDialog() {
-            var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
-            if (!this._isBodyOverflowing && isModalOverflowing) {
-                this._element.style.paddingLeft = this._scrollbarWidth + "px";
-            }
-            if (this._isBodyOverflowing && !isModalOverflowing) {
-                this._element.style.paddingRight = this._scrollbarWidth + "px";
-            }
-        };
-        _proto._resetAdjustments = function _resetAdjustments() {
-            this._element.style.paddingLeft = "";
-            this._element.style.paddingRight = "";
-        };
-        _proto._checkScrollbar = function _checkScrollbar() {
-            var rect = document.body.getBoundingClientRect();
-            this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
-            this._scrollbarWidth = this._getScrollbarWidth();
-        };
-        _proto._setScrollbar = function _setScrollbar() {
-            var _this10 = this;
-            if (this._isBodyOverflowing) {
-                var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
-                var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT));
-                $__default["default"](fixedContent).each(function(index, element) {
-                    var actualPadding = element.style.paddingRight;
-                    var calculatedPadding = $__default["default"](element).css("padding-right");
-                    $__default["default"](element).data("padding-right", actualPadding).css("padding-right", parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px");
-                });
-                $__default["default"](stickyContent).each(function(index, element) {
-                    var actualMargin = element.style.marginRight;
-                    var calculatedMargin = $__default["default"](element).css("margin-right");
-                    $__default["default"](element).data("margin-right", actualMargin).css("margin-right", parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px");
-                });
-                var actualPadding = document.body.style.paddingRight;
-                var calculatedPadding = $__default["default"](document.body).css("padding-right");
-                $__default["default"](document.body).data("padding-right", actualPadding).css("padding-right", parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
-            }
-            $__default["default"](document.body).addClass(CLASS_NAME_OPEN);
-        };
-        _proto._resetScrollbar = function _resetScrollbar() {
-            var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
-            $__default["default"](fixedContent).each(function(index, element) {
-                var padding = $__default["default"](element).data("padding-right");
-                $__default["default"](element).removeData("padding-right");
-                element.style.paddingRight = padding ? padding : "";
-            });
-            var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT));
-            $__default["default"](elements).each(function(index, element) {
-                var margin = $__default["default"](element).data("margin-right");
-                if (typeof margin !== "undefined") {
-                    $__default["default"](element).css("margin-right", margin).removeData("margin-right");
-                }
-            });
-            var padding = $__default["default"](document.body).data("padding-right");
-            $__default["default"](document.body).removeData("padding-right");
-            document.body.style.paddingRight = padding ? padding : "";
-        };
-        _proto._getScrollbarWidth = function _getScrollbarWidth() {
-            var scrollDiv = document.createElement("div");
-            scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
-            document.body.appendChild(scrollDiv);
-            var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
-            document.body.removeChild(scrollDiv);
-            return scrollbarWidth;
-        };
-        Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
-            return this.each(function() {
-                var data = $__default["default"](this).data(DATA_KEY$5);
-                var _config = _extends({}, Default$3, $__default["default"](this).data(), typeof config === "object" && config ? config : {});
-                if (!data) {
-                    data = new Modal(this, _config);
-                    $__default["default"](this).data(DATA_KEY$5, data);
-                }
-                if (typeof config === "string") {
-                    if (typeof data[config] === "undefined") {
-                        throw new TypeError('No method named "' + config + '"');
-                    }
-                    data[config](relatedTarget);
-                } else if (_config.show) {
-                    data.show(relatedTarget);
-                }
-            });
-        };
-        _createClass(Modal, null, [ {
-            key: "VERSION",
-            get: function get() {
-                return VERSION$5;
-            }
-        }, {
-            key: "Default",
-            get: function get() {
-                return Default$3;
-            }
-        } ]);
-        return Modal;
-    }();
-    $__default["default"](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE$3, function(event) {
-        var _this11 = this;
-        var target;
-        var selector = Util.getSelectorFromElement(this);
-        if (selector) {
-            target = document.querySelector(selector);
-        }
-        var config = $__default["default"](target).data(DATA_KEY$5) ? "toggle" : _extends({}, $__default["default"](target).data(), $__default["default"](this).data());
-        if (this.tagName === "A" || this.tagName === "AREA") {
-            event.preventDefault();
-        }
-        var $target = $__default["default"](target).one(EVENT_SHOW$2, function(showEvent) {
-            if (showEvent.isDefaultPrevented()) {
-                return;
-            }
-            $target.one(EVENT_HIDDEN$2, function() {
-                if ($__default["default"](_this11).is(":visible")) {
-                    _this11.focus();
-                }
-            });
-        });
-        Modal._jQueryInterface.call($__default["default"](target), config, this);
-    });
-    $__default["default"].fn[NAME$5] = Modal._jQueryInterface;
-    $__default["default"].fn[NAME$5].Constructor = Modal;
-    $__default["default"].fn[NAME$5].noConflict = function() {
-        $__default["default"].fn[NAME$5] = JQUERY_NO_CONFLICT$5;
-        return Modal._jQueryInterface;
-    };
-    var uriAttrs = [ "background", "cite", "href", "itemtype", "longdesc", "poster", "src", "xlink:href" ];
-    var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
-    var DefaultWhitelist = {
-        "*": [ "class", "dir", "id", "lang", "role", ARIA_ATTRIBUTE_PATTERN ],
-        a: [ "target", "href", "title", "rel" ],
-        area: [],
-        b: [],
-        br: [],
-        col: [],
-        code: [],
-        div: [],
-        em: [],
-        hr: [],
-        h1: [],
-        h2: [],
-        h3: [],
-        h4: [],
-        h5: [],
-        h6: [],
-        i: [],
-        img: [ "src", "srcset", "alt", "title", "width", "height" ],
-        li: [],
-        ol: [],
-        p: [],
-        pre: [],
-        s: [],
-        small: [],
-        span: [],
-        sub: [],
-        sup: [],
-        strong: [],
-        u: [],
-        ul: []
-    };
-    var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi;
-    var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
-    function allowedAttribute(attr, allowedAttributeList) {
-        var attrName = attr.nodeName.toLowerCase();
-        if (allowedAttributeList.indexOf(attrName) !== -1) {
-            if (uriAttrs.indexOf(attrName) !== -1) {
-                return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));
-            }
-            return true;
-        }
-        var regExp = allowedAttributeList.filter(function(attrRegex) {
-            return attrRegex instanceof RegExp;
-        });
-        for (var i = 0, len = regExp.length; i < len; i++) {
-            if (attrName.match(regExp[i])) {
-                return true;
-            }
-        }
-        return false;
-    }
-    function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
-        if (unsafeHtml.length === 0) {
-            return unsafeHtml;
-        }
-        if (sanitizeFn && typeof sanitizeFn === "function") {
-            return sanitizeFn(unsafeHtml);
-        }
-        var domParser = new window.DOMParser();
-        var createdDocument = domParser.parseFromString(unsafeHtml, "text/html");
-        var whitelistKeys = Object.keys(whiteList);
-        var elements = [].slice.call(createdDocument.body.querySelectorAll("*"));
-        var _loop = function _loop(i, len) {
-            var el = elements[i];
-            var elName = el.nodeName.toLowerCase();
-            if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
-                el.parentNode.removeChild(el);
-                return "continue";
-            }
-            var attributeList = [].slice.call(el.attributes);
-            var whitelistedAttributes = [].concat(whiteList["*"] || [], whiteList[elName] || []);
-            attributeList.forEach(function(attr) {
-                if (!allowedAttribute(attr, whitelistedAttributes)) {
-                    el.removeAttribute(attr.nodeName);
-                }
-            });
-        };
-        for (var i = 0, len = elements.length; i < len; i++) {
-            var _ret = _loop(i);
-            if (_ret === "continue") continue;
-        }
-        return createdDocument.body.innerHTML;
-    }
-    var NAME$6 = "tooltip";
-    var VERSION$6 = "4.6.0";
-    var DATA_KEY$6 = "bs.tooltip";
-    var EVENT_KEY$6 = "." + DATA_KEY$6;
-    var JQUERY_NO_CONFLICT$6 = $__default["default"].fn[NAME$6];
-    var CLASS_PREFIX = "bs-tooltip";
-    var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", "g");
-    var DISALLOWED_ATTRIBUTES = [ "sanitize", "whiteList", "sanitizeFn" ];
-    var DefaultType$4 = {
-        animation: "boolean",
-        template: "string",
-        title: "(string|element|function)",
-        trigger: "string",
-        delay: "(number|object)",
-        html: "boolean",
-        selector: "(string|boolean)",
-        placement: "(string|function)",
-        offset: "(number|string|function)",
-        container: "(string|element|boolean)",
-        fallbackPlacement: "(string|array)",
-        boundary: "(string|element)",
-        customClass: "(string|function)",
-        sanitize: "boolean",
-        sanitizeFn: "(null|function)",
-        whiteList: "object",
-        popperConfig: "(null|object)"
-    };
-    var AttachmentMap = {
-        AUTO: "auto",
-        TOP: "top",
-        RIGHT: "right",
-        BOTTOM: "bottom",
-        LEFT: "left"
-    };
-    var Default$4 = {
-        animation: true,
-        template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>',
-        trigger: "hover focus",
-        title: "",
-        delay: 0,
-        html: false,
-        selector: false,
-        placement: "top",
-        offset: 0,
-        container: false,
-        fallbackPlacement: "flip",
-        boundary: "scrollParent",
-        customClass: "",
-        sanitize: true,
-        sanitizeFn: null,
-        whiteList: DefaultWhitelist,
-        popperConfig: null
-    };
-    var HOVER_STATE_SHOW = "show";
-    var HOVER_STATE_OUT = "out";
-    var Event = {
-        HIDE: "hide" + EVENT_KEY$6,
-        HIDDEN: "hidden" + EVENT_KEY$6,
-        SHOW: "show" + EVENT_KEY$6,
-        SHOWN: "shown" + EVENT_KEY$6,
-        INSERTED: "inserted" + EVENT_KEY$6,
-        CLICK: "click" + EVENT_KEY$6,
-        FOCUSIN: "focusin" + EVENT_KEY$6,
-        FOCUSOUT: "focusout" + EVENT_KEY$6,
-        MOUSEENTER: "mouseenter" + EVENT_KEY$6,
-        MOUSELEAVE: "mouseleave" + EVENT_KEY$6
-    };
-    var CLASS_NAME_FADE$2 = "fade";
-    var CLASS_NAME_SHOW$4 = "show";
-    var SELECTOR_TOOLTIP_INNER = ".tooltip-inner";
-    var SELECTOR_ARROW = ".arrow";
-    var TRIGGER_HOVER = "hover";
-    var TRIGGER_FOCUS = "focus";
-    var TRIGGER_CLICK = "click";
-    var TRIGGER_MANUAL = "manual";
-    var Tooltip = function() {
-        function Tooltip(element, config) {
-            if (typeof Popper__default["default"] === "undefined") {
-                throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");
-            }
-            this._isEnabled = true;
-            this._timeout = 0;
-            this._hoverState = "";
-            this._activeTrigger = {};
-            this._popper = null;
-            this.element = element;
-            this.config = this._getConfig(config);
-            this.tip = null;
-            this._setListeners();
-        }
-        var _proto = Tooltip.prototype;
-        _proto.enable = function enable() {
-            this._isEnabled = true;
-        };
-        _proto.disable = function disable() {
-            this._isEnabled = false;
-        };
-        _proto.toggleEnabled = function toggleEnabled() {
-            this._isEnabled = !this._isEnabled;
-        };
-        _proto.toggle = function toggle(event) {
-            if (!this._isEnabled) {
-                return;
-            }
-            if (event) {
-                var dataKey = this.constructor.DATA_KEY;
-                var context = $__default["default"](event.currentTarget).data(dataKey);
-                if (!context) {
-                    context = new this.constructor(event.currentTarget, this._getDelegateConfig());
-                    $__default["default"](event.currentTarget).data(dataKey, context);
-                }
-                context._activeTrigger.click = !context._activeTrigger.click;
-                if (context._isWithActiveTrigger()) {
-                    context._enter(null, context);
-                } else {
-                    context._leave(null, context);
-                }
-            } else {
-                if ($__default["default"](this.getTipElement()).hasClass(CLASS_NAME_SHOW$4)) {
-                    this._leave(null, this);
-                    return;
-                }
-                this._enter(null, this);
-            }
-        };
-        _proto.dispose = function dispose() {
-            clearTimeout(this._timeout);
-            $__default["default"].removeData(this.element, this.constructor.DATA_KEY);
-            $__default["default"](this.element).off(this.constructor.EVENT_KEY);
-            $__default["default"](this.element).closest(".modal").off("hide.bs.modal", this._hideModalHandler);
-            if (this.tip) {
-                $__default["default"](this.tip).remove();
-            }
-            this._isEnabled = null;
-            this._timeout = null;
-            this._hoverState = null;
-            this._activeTrigger = null;
-            if (this._popper) {
-                this._popper.destroy();
-            }
-            this._popper = null;
-            this.element = null;
-            this.config = null;
-            this.tip = null;
-        };
-        _proto.show = function show() {
-            var _this = this;
-            if ($__default["default"](this.element).css("display") === "none") {
-                throw new Error("Please use show on visible elements");
-            }
-            var showEvent = $__default["default"].Event(this.constructor.Event.SHOW);
-            if (this.isWithContent() && this._isEnabled) {
-                $__default["default"](this.element).trigger(showEvent);
-                var shadowRoot = Util.findShadowRoot(this.element);
-                var isInTheDom = $__default["default"].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);
-                if (showEvent.isDefaultPrevented() || !isInTheDom) {
-                    return;
-                }
-                var tip = this.getTipElement();
-                var tipId = Util.getUID(this.constructor.NAME);
-                tip.setAttribute("id", tipId);
-                this.element.setAttribute("aria-describedby", tipId);
-                this.setContent();
-                if (this.config.animation) {
-                    $__default["default"](tip).addClass(CLASS_NAME_FADE$2);
-                }
-                var placement = typeof this.config.placement === "function" ? this.config.placement.call(this, tip, this.element) : this.config.placement;
-                var attachment = this._getAttachment(placement);
-                this.addAttachmentClass(attachment);
-                var container = this._getContainer();
-                $__default["default"](tip).data(this.constructor.DATA_KEY, this);
-                if (!$__default["default"].contains(this.element.ownerDocument.documentElement, this.tip)) {
-                    $__default["default"](tip).appendTo(container);
-                }
-                $__default["default"](this.element).trigger(this.constructor.Event.INSERTED);
-                this._popper = new Popper__default["default"](this.element, tip, this._getPopperConfig(attachment));
-                $__default["default"](tip).addClass(CLASS_NAME_SHOW$4);
-                $__default["default"](tip).addClass(this.config.customClass);
-                if ("ontouchstart" in document.documentElement) {
-                    $__default["default"](document.body).children().on("mouseover", null, $__default["default"].noop);
-                }
-                var complete = function complete() {
-                    if (_this.config.animation) {
-                        _this._fixTransition();
-                    }
-                    var prevHoverState = _this._hoverState;
-                    _this._hoverState = null;
-                    $__default["default"](_this.element).trigger(_this.constructor.Event.SHOWN);
-                    if (prevHoverState === HOVER_STATE_OUT) {
-                        _this._leave(null, _this);
-                    }
-                };
-                if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$2)) {
-                    var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
-                    $__default["default"](this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
-                } else {
-                    complete();
-                }
-            }
-        };
-        _proto.hide = function hide(callback) {
-            var _this2 = this;
-            var tip = this.getTipElement();
-            var hideEvent = $__default["default"].Event(this.constructor.Event.HIDE);
-            var complete = function complete() {
-                if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {
-                    tip.parentNode.removeChild(tip);
-                }
-                _this2._cleanTipClass();
-                _this2.element.removeAttribute("aria-describedby");
-                $__default["default"](_this2.element).trigger(_this2.constructor.Event.HIDDEN);
-                if (_this2._popper !== null) {
-                    _this2._popper.destroy();
-                }
-                if (callback) {
-                    callback();
-                }
-            };
-            $__default["default"](this.element).trigger(hideEvent);
-            if (hideEvent.isDefaultPrevented()) {
-                return;
-            }
-            $__default["default"](tip).removeClass(CLASS_NAME_SHOW$4);
-            if ("ontouchstart" in document.documentElement) {
-                $__default["default"](document.body).children().off("mouseover", null, $__default["default"].noop);
-            }
-            this._activeTrigger[TRIGGER_CLICK] = false;
-            this._activeTrigger[TRIGGER_FOCUS] = false;
-            this._activeTrigger[TRIGGER_HOVER] = false;
-            if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$2)) {
-                var transitionDuration = Util.getTransitionDurationFromElement(tip);
-                $__default["default"](tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
-            } else {
-                complete();
-            }
-            this._hoverState = "";
-        };
-        _proto.update = function update() {
-            if (this._popper !== null) {
-                this._popper.scheduleUpdate();
-            }
-        };
-        _proto.isWithContent = function isWithContent() {
-            return Boolean(this.getTitle());
-        };
-        _proto.addAttachmentClass = function addAttachmentClass(attachment) {
-            $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
-        };
-        _proto.getTipElement = function getTipElement() {
-            this.tip = this.tip || $__default["default"](this.config.template)[0];
-            return this.tip;
-        };
-        _proto.setContent = function setContent() {
-            var tip = this.getTipElement();
-            this.setElementContent($__default["default"](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());
-            $__default["default"](tip).removeClass(CLASS_NAME_FADE$2 + " " + CLASS_NAME_SHOW$4);
-        };
-        _proto.setElementContent = function setElementContent($element, content) {
-            if (typeof content === "object" && (content.nodeType || content.jquery)) {
-                if (this.config.html) {
-                    if (!$__default["default"](content).parent().is($element)) {
-                        $element.empty().append(content);
-                    }
-                } else {
-                    $element.text($__default["default"](content).text());
-                }
-                return;
-            }
-            if (this.config.html) {
-                if (this.config.sanitize) {
-                    content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
-                }
-                $element.html(content);
-            } else {
-                $element.text(content);
-            }
-        };
-        _proto.getTitle = function getTitle() {
-            var title = this.element.getAttribute("data-original-title");
-            if (!title) {
-                title = typeof this.config.title === "function" ? this.config.title.call(this.element) : this.config.title;
-            }
-            return title;
-        };
-        _proto._getPopperConfig = function _getPopperConfig(attachment) {
-            var _this3 = this;
-            var defaultBsConfig = {
-                placement: attachment,
-                modifiers: {
-                    offset: this._getOffset(),
-                    flip: {
-                        behavior: this.config.fallbackPlacement
-                    },
-                    arrow: {
-                        element: SELECTOR_ARROW
-                    },
-                    preventOverflow: {
-                        boundariesElement: this.config.boundary
-                    }
-                },
-                onCreate: function onCreate(data) {
-                    if (data.originalPlacement !== data.placement) {
-                        _this3._handlePopperPlacementChange(data);
-                    }
-                },
-                onUpdate: function onUpdate(data) {
-                    return _this3._handlePopperPlacementChange(data);
-                }
-            };
-            return _extends({}, defaultBsConfig, this.config.popperConfig);
-        };
-        _proto._getOffset = function _getOffset() {
-            var _this4 = this;
-            var offset = {};
-            if (typeof this.config.offset === "function") {
-                offset.fn = function(data) {
-                    data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element) || {});
-                    return data;
-                };
-            } else {
-                offset.offset = this.config.offset;
-            }
-            return offset;
-        };
-        _proto._getContainer = function _getContainer() {
-            if (this.config.container === false) {
-                return document.body;
-            }
-            if (Util.isElement(this.config.container)) {
-                return $__default["default"](this.config.container);
-            }
-            return $__default["default"](document).find(this.config.container);
-        };
-        _proto._getAttachment = function _getAttachment(placement) {
-            return AttachmentMap[placement.toUpperCase()];
-        };
-        _proto._setListeners = function _setListeners() {
-            var _this5 = this;
-            var triggers = this.config.trigger.split(" ");
-            triggers.forEach(function(trigger) {
-                if (trigger === "click") {
-                    $__default["default"](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function(event) {
-                        return _this5.toggle(event);
-                    });
-                } else if (trigger !== TRIGGER_MANUAL) {
-                    var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;
-                    var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;
-                    $__default["default"](_this5.element).on(eventIn, _this5.config.selector, function(event) {
-                        return _this5._enter(event);
-                    }).on(eventOut, _this5.config.selector, function(event) {
-                        return _this5._leave(event);
-                    });
-                }
-            });
-            this._hideModalHandler = function() {
-                if (_this5.element) {
-                    _this5.hide();
-                }
-            };
-            $__default["default"](this.element).closest(".modal").on("hide.bs.modal", this._hideModalHandler);
-            if (this.config.selector) {
-                this.config = _extends({}, this.config, {
-                    trigger: "manual",
-                    selector: ""
-                });
-            } else {
-                this._fixTitle();
-            }
-        };
-        _proto._fixTitle = function _fixTitle() {
-            var titleType = typeof this.element.getAttribute("data-original-title");
-            if (this.element.getAttribute("title") || titleType !== "string") {
-                this.element.setAttribute("data-original-title", this.element.getAttribute("title") || "");
-                this.element.setAttribute("title", "");
-            }
-        };
-        _proto._enter = function _enter(event, context) {
-            var dataKey = this.constructor.DATA_KEY;
-            context = context || $__default["default"](event.currentTarget).data(dataKey);
-            if (!context) {
-                context = new this.constructor(event.currentTarget, this._getDelegateConfig());
-                $__default["default"](event.currentTarget).data(dataKey, context);
-            }
-            if (event) {
-                context._activeTrigger[event.type === "focusin" ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
-            }
-            if ($__default["default"](context.getTipElement()).hasClass(CLASS_NAME_SHOW$4) || context._hoverState === HOVER_STATE_SHOW) {
-                context._hoverState = HOVER_STATE_SHOW;
-                return;
-            }
-            clearTimeout(context._timeout);
-            context._hoverState = HOVER_STATE_SHOW;
-            if (!context.config.delay || !context.config.delay.show) {
-                context.show();
-                return;
-            }
-            context._timeout = setTimeout(function() {
-                if (context._hoverState === HOVER_STATE_SHOW) {
-                    context.show();
-                }
-            }, context.config.delay.show);
-        };
-        _proto._leave = function _leave(event, context) {
-            var dataKey = this.constructor.DATA_KEY;
-            context = context || $__default["default"](event.currentTarget).data(dataKey);
-            if (!context) {
-                context = new this.constructor(event.currentTarget, this._getDelegateConfig());
-                $__default["default"](event.currentTarget).data(dataKey, context);
-            }
-            if (event) {
-                context._activeTrigger[event.type === "focusout" ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;
-            }
-            if (context._isWithActiveTrigger()) {
-                return;
-            }
-            clearTimeout(context._timeout);
-            context._hoverState = HOVER_STATE_OUT;
-            if (!context.config.delay || !context.config.delay.hide) {
-                context.hide();
-                return;
-            }
-            context._timeout = setTimeout(function() {
-                if (context._hoverState === HOVER_STATE_OUT) {
-                    context.hide();
-                }
-            }, context.config.delay.hide);
-        };
-        _proto._isWithActiveTrigger = function _isWithActiveTrigger() {
-            for (var trigger in this._activeTrigger) {
-                if (this._activeTrigger[trigger]) {
-                    return true;
-                }
-            }
-            return false;
-        };
-        _proto._getConfig = function _getConfig(config) {
-            var dataAttributes = $__default["default"](this.element).data();
-            Object.keys(dataAttributes).forEach(function(dataAttr) {
-                if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
-                    delete dataAttributes[dataAttr];
-                }
-            });
-            config = _extends({}, this.constructor.Default, dataAttributes, typeof config === "object" && config ? config : {});
-            if (typeof config.delay === "number") {
-                config.delay = {
-                    show: config.delay,
-                    hide: config.delay
-                };
-            }
-            if (typeof config.title === "number") {
-                config.title = config.title.toString();
-            }
-            if (typeof config.content === "number") {
-                config.content = config.content.toString();
-            }
-            Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
-            if (config.sanitize) {
-                config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
-            }
-            return config;
-        };
-        _proto._getDelegateConfig = function _getDelegateConfig() {
-            var config = {};
-            if (this.config) {
-                for (var key in this.config) {
-                    if (this.constructor.Default[key] !== this.config[key]) {
-                        config[key] = this.config[key];
-                    }
-                }
-            }
-            return config;
-        };
-        _proto._cleanTipClass = function _cleanTipClass() {
-            var $tip = $__default["default"](this.getTipElement());
-            var tabClass = $tip.attr("class").match(BSCLS_PREFIX_REGEX);
-            if (tabClass !== null && tabClass.length) {
-                $tip.removeClass(tabClass.join(""));
-            }
-        };
-        _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
-            this.tip = popperData.instance.popper;
-            this._cleanTipClass();
-            this.addAttachmentClass(this._getAttachment(popperData.placement));
-        };
-        _proto._fixTransition = function _fixTransition() {
-            var tip = this.getTipElement();
-            var initConfigAnimation = this.config.animation;
-            if (tip.getAttribute("x-placement") !== null) {
-                return;
-            }
-            $__default["default"](tip).removeClass(CLASS_NAME_FADE$2);
-            this.config.animation = false;
-            this.hide();
-            this.show();
-            this.config.animation = initConfigAnimation;
-        };
-        Tooltip._jQueryInterface = function _jQueryInterface(config) {
-            return this.each(function() {
-                var $element = $__default["default"](this);
-                var data = $element.data(DATA_KEY$6);
-                var _config = typeof config === "object" && config;
-                if (!data && /dispose|hide/.test(config)) {
-                    return;
-                }
-                if (!data) {
-                    data = new Tooltip(this, _config);
-                    $element.data(DATA_KEY$6, data);
-                }
-                if (typeof config === "string") {
-                    if (typeof data[config] === "undefined") {
-                        throw new TypeError('No method named "' + config + '"');
-                    }
-                    data[config]();
-                }
-            });
-        };
-        _createClass(Tooltip, null, [ {
-            key: "VERSION",
-            get: function get() {
-                return VERSION$6;
-            }
-        }, {
-            key: "Default",
-            get: function get() {
-                return Default$4;
-            }
-        }, {
-            key: "NAME",
-            get: function get() {
-                return NAME$6;
-            }
-        }, {
-            key: "DATA_KEY",
-            get: function get() {
-                return DATA_KEY$6;
-            }
-        }, {
-            key: "Event",
-            get: function get() {
-                return Event;
-            }
-        }, {
-            key: "EVENT_KEY",
-            get: function get() {
-                return EVENT_KEY$6;
-            }
-        }, {
-            key: "DefaultType",
-            get: function get() {
-                return DefaultType$4;
-            }
-        } ]);
-        return Tooltip;
-    }();
-    $__default["default"].fn[NAME$6] = Tooltip._jQueryInterface;
-    $__default["default"].fn[NAME$6].Constructor = Tooltip;
-    $__default["default"].fn[NAME$6].noConflict = function() {
-        $__default["default"].fn[NAME$6] = JQUERY_NO_CONFLICT$6;
-        return Tooltip._jQueryInterface;
-    };
-    var NAME$7 = "popover";
-    var VERSION$7 = "4.6.0";
-    var DATA_KEY$7 = "bs.popover";
-    var EVENT_KEY$7 = "." + DATA_KEY$7;
-    var JQUERY_NO_CONFLICT$7 = $__default["default"].fn[NAME$7];
-    var CLASS_PREFIX$1 = "bs-popover";
-    var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", "g");
-    var Default$5 = _extends({}, Tooltip.Default, {
-        placement: "right",
-        trigger: "click",
-        content: "",
-        template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
-    });
-    var DefaultType$5 = _extends({}, Tooltip.DefaultType, {
-        content: "(string|element|function)"
-    });
-    var CLASS_NAME_FADE$3 = "fade";
-    var CLASS_NAME_SHOW$5 = "show";
-    var SELECTOR_TITLE = ".popover-header";
-    var SELECTOR_CONTENT = ".popover-body";
-    var Event$1 = {
-        HIDE: "hide" + EVENT_KEY$7,
-        HIDDEN: "hidden" + EVENT_KEY$7,
-        SHOW: "show" + EVENT_KEY$7,
-        SHOWN: "shown" + EVENT_KEY$7,
-        INSERTED: "inserted" + EVENT_KEY$7,
-        CLICK: "click" + EVENT_KEY$7,
-        FOCUSIN: "focusin" + EVENT_KEY$7,
-        FOCUSOUT: "focusout" + EVENT_KEY$7,
-        MOUSEENTER: "mouseenter" + EVENT_KEY$7,
-        MOUSELEAVE: "mouseleave" + EVENT_KEY$7
-    };
-    var Popover = function(_Tooltip) {
-        _inheritsLoose(Popover, _Tooltip);
-        function Popover() {
-            return _Tooltip.apply(this, arguments) || this;
-        }
-        var _proto = Popover.prototype;
-        _proto.isWithContent = function isWithContent() {
-            return this.getTitle() || this._getContent();
-        };
-        _proto.addAttachmentClass = function addAttachmentClass(attachment) {
-            $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment);
-        };
-        _proto.getTipElement = function getTipElement() {
-            this.tip = this.tip || $__default["default"](this.config.template)[0];
-            return this.tip;
-        };
-        _proto.setContent = function setContent() {
-            var $tip = $__default["default"](this.getTipElement());
-            this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());
-            var content = this._getContent();
-            if (typeof content === "function") {
-                content = content.call(this.element);
-            }
-            this.setElementContent($tip.find(SELECTOR_CONTENT), content);
-            $tip.removeClass(CLASS_NAME_FADE$3 + " " + CLASS_NAME_SHOW$5);
-        };
-        _proto._getContent = function _getContent() {
-            return this.element.getAttribute("data-content") || this.config.content;
-        };
-        _proto._cleanTipClass = function _cleanTipClass() {
-            var $tip = $__default["default"](this.getTipElement());
-            var tabClass = $tip.attr("class").match(BSCLS_PREFIX_REGEX$1);
-            if (tabClass !== null && tabClass.length > 0) {
-                $tip.removeClass(tabClass.join(""));
-            }
-        };
-        Popover._jQueryInterface = function _jQueryInterface(config) {
-            return this.each(function() {
-                var data = $__default["default"](this).data(DATA_KEY$7);
-                var _config = typeof config === "object" ? config : null;
-                if (!data && /dispose|hide/.test(config)) {
-                    return;
-                }
-                if (!data) {
-                    data = new Popover(this, _config);
-                    $__default["default"](this).data(DATA_KEY$7, data);
-                }
-                if (typeof config === "string") {
-                    if (typeof data[config] === "undefined") {
-                        throw new TypeError('No method named "' + config + '"');
-                    }
-                    data[config]();
-                }
-            });
-        };
-        _createClass(Popover, null, [ {
-            key: "VERSION",
-            get: function get() {
-                return VERSION$7;
-            }
-        }, {
-            key: "Default",
-            get: function get() {
-                return Default$5;
-            }
-        }, {
-            key: "NAME",
-            get: function get() {
-                return NAME$7;
-            }
-        }, {
-            key: "DATA_KEY",
-            get: function get() {
-                return DATA_KEY$7;
-            }
-        }, {
-            key: "Event",
-            get: function get() {
-                return Event$1;
-            }
-        }, {
-            key: "EVENT_KEY",
-            get: function get() {
-                return EVENT_KEY$7;
-            }
-        }, {
-            key: "DefaultType",
-            get: function get() {
-                return DefaultType$5;
-            }
-        } ]);
-        return Popover;
-    }(Tooltip);
-    $__default["default"].fn[NAME$7] = Popover._jQueryInterface;
-    $__default["default"].fn[NAME$7].Constructor = Popover;
-    $__default["default"].fn[NAME$7].noConflict = function() {
-        $__default["default"].fn[NAME$7] = JQUERY_NO_CONFLICT$7;
-        return Popover._jQueryInterface;
-    };
-    var NAME$8 = "scrollspy";
-    var VERSION$8 = "4.6.0";
-    var DATA_KEY$8 = "bs.scrollspy";
-    var EVENT_KEY$8 = "." + DATA_KEY$8;
-    var DATA_API_KEY$6 = ".data-api";
-    var JQUERY_NO_CONFLICT$8 = $__default["default"].fn[NAME$8];
-    var Default$6 = {
-        offset: 10,
-        method: "auto",
-        target: ""
-    };
-    var DefaultType$6 = {
-        offset: "number",
-        method: "string",
-        target: "(string|element)"
-    };
-    var EVENT_ACTIVATE = "activate" + EVENT_KEY$8;
-    var EVENT_SCROLL = "scroll" + EVENT_KEY$8;
-    var EVENT_LOAD_DATA_API$2 = "load" + EVENT_KEY$8 + DATA_API_KEY$6;
-    var CLASS_NAME_DROPDOWN_ITEM = "dropdown-item";
-    var CLASS_NAME_ACTIVE$2 = "active";
-    var SELECTOR_DATA_SPY = '[data-spy="scroll"]';
-    var SELECTOR_NAV_LIST_GROUP = ".nav, .list-group";
-    var SELECTOR_NAV_LINKS = ".nav-link";
-    var SELECTOR_NAV_ITEMS = ".nav-item";
-    var SELECTOR_LIST_ITEMS = ".list-group-item";
-    var SELECTOR_DROPDOWN = ".dropdown";
-    var SELECTOR_DROPDOWN_ITEMS = ".dropdown-item";
-    var SELECTOR_DROPDOWN_TOGGLE = ".dropdown-toggle";
-    var METHOD_OFFSET = "offset";
-    var METHOD_POSITION = "position";
-    var ScrollSpy = function() {
-        function ScrollSpy(element, config) {
-            var _this = this;
-            this._element = element;
-            this._scrollElement = element.tagName === "BODY" ? window : element;
-            this._config = this._getConfig(config);
-            this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS);
-            this._offsets = [];
-            this._targets = [];
-            this._activeTarget = null;
-            this._scrollHeight = 0;
-            $__default["default"](this._scrollElement).on(EVENT_SCROLL, function(event) {
-                return _this._process(event);
-            });
-            this.refresh();
-            this._process();
-        }
-        var _proto = ScrollSpy.prototype;
-        _proto.refresh = function refresh() {
-            var _this2 = this;
-            var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
-            var offsetMethod = this._config.method === "auto" ? autoMethod : this._config.method;
-            var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
-            this._offsets = [];
-            this._targets = [];
-            this._scrollHeight = this._getScrollHeight();
-            var targets = [].slice.call(document.querySelectorAll(this._selector));
-            targets.map(function(element) {
-                var target;
-                var targetSelector = Util.getSelectorFromElement(element);
-                if (targetSelector) {
-                    target = document.querySelector(targetSelector);
-                }
-                if (target) {
-                    var targetBCR = target.getBoundingClientRect();
-                    if (targetBCR.width || targetBCR.height) {
-                        return [ $__default["default"](target)[offsetMethod]().top + offsetBase, targetSelector ];
-                    }
-                }
-                return null;
-            }).filter(function(item) {
-                return item;
-            }).sort(function(a, b) {
-                return a[0] - b[0];
-            }).forEach(function(item) {
-                _this2._offsets.push(item[0]);
-                _this2._targets.push(item[1]);
-            });
-        };
-        _proto.dispose = function dispose() {
-            $__default["default"].removeData(this._element, DATA_KEY$8);
-            $__default["default"](this._scrollElement).off(EVENT_KEY$8);
-            this._element = null;
-            this._scrollElement = null;
-            this._config = null;
-            this._selector = null;
-            this._offsets = null;
-            this._targets = null;
-            this._activeTarget = null;
-            this._scrollHeight = null;
-        };
-        _proto._getConfig = function _getConfig(config) {
-            config = _extends({}, Default$6, typeof config === "object" && config ? config : {});
-            if (typeof config.target !== "string" && Util.isElement(config.target)) {
-                var id = $__default["default"](config.target).attr("id");
-                if (!id) {
-                    id = Util.getUID(NAME$8);
-                    $__default["default"](config.target).attr("id", id);
-                }
-                config.target = "#" + id;
-            }
-            Util.typeCheckConfig(NAME$8, config, DefaultType$6);
-            return config;
-        };
-        _proto._getScrollTop = function _getScrollTop() {
-            return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
-        };
-        _proto._getScrollHeight = function _getScrollHeight() {
-            return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
-        };
-        _proto._getOffsetHeight = function _getOffsetHeight() {
-            return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
-        };
-        _proto._process = function _process() {
-            var scrollTop = this._getScrollTop() + this._config.offset;
-            var scrollHeight = this._getScrollHeight();
-            var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
-            if (this._scrollHeight !== scrollHeight) {
-                this.refresh();
-            }
-            if (scrollTop >= maxScroll) {
-                var target = this._targets[this._targets.length - 1];
-                if (this._activeTarget !== target) {
-                    this._activate(target);
-                }
-                return;
-            }
-            if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
-                this._activeTarget = null;
-                this._clear();
-                return;
-            }
-            for (var i = this._offsets.length; i--; ) {
-                var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === "undefined" || scrollTop < this._offsets[i + 1]);
-                if (isActiveTarget) {
-                    this._activate(this._targets[i]);
-                }
-            }
-        };
-        _proto._activate = function _activate(target) {
-            this._activeTarget = target;
-            this._clear();
-            var queries = this._selector.split(",").map(function(selector) {
-                return selector + '[data-target="' + target + '"],' + selector + '[href="' + target + '"]';
-            });
-            var $link = $__default["default"]([].slice.call(document.querySelectorAll(queries.join(","))));
-            if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {
-                $link.closest(SELECTOR_DROPDOWN).find(SELECTOR_DROPDOWN_TOGGLE).addClass(CLASS_NAME_ACTIVE$2);
-                $link.addClass(CLASS_NAME_ACTIVE$2);
-            } else {
-                $link.addClass(CLASS_NAME_ACTIVE$2);
-                $link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$2);
-                $link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$2);
-            }
-            $__default["default"](this._scrollElement).trigger(EVENT_ACTIVATE, {
-                relatedTarget: target
-            });
-        };
-        _proto._clear = function _clear() {
-            [].slice.call(document.querySelectorAll(this._selector)).filter(function(node) {
-                return node.classList.contains(CLASS_NAME_ACTIVE$2);
-            }).forEach(function(node) {
-                return node.classList.remove(CLASS_NAME_ACTIVE$2);
-            });
-        };
-        ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
-            return this.each(function() {
-                var data = $__default["default"](this).data(DATA_KEY$8);
-                var _config = typeof config === "object" && config;
-                if (!data) {
-                    data = new ScrollSpy(this, _config);
-                    $__default["default"](this).data(DATA_KEY$8, data);
-                }
-                if (typeof config === "string") {
-                    if (typeof data[config] === "undefined") {
-                        throw new TypeError('No method named "' + config + '"');
-                    }
-                    data[config]();
-                }
-            });
-        };
-        _createClass(ScrollSpy, null, [ {
-            key: "VERSION",
-            get: function get() {
-                return VERSION$8;
-            }
-        }, {
-            key: "Default",
-            get: function get() {
-                return Default$6;
-            }
-        } ]);
-        return ScrollSpy;
-    }();
-    $__default["default"](window).on(EVENT_LOAD_DATA_API$2, function() {
-        var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));
-        var scrollSpysLength = scrollSpys.length;
-        for (var i = scrollSpysLength; i--; ) {
-            var $spy = $__default["default"](scrollSpys[i]);
-            ScrollSpy._jQueryInterface.call($spy, $spy.data());
-        }
-    });
-    $__default["default"].fn[NAME$8] = ScrollSpy._jQueryInterface;
-    $__default["default"].fn[NAME$8].Constructor = ScrollSpy;
-    $__default["default"].fn[NAME$8].noConflict = function() {
-        $__default["default"].fn[NAME$8] = JQUERY_NO_CONFLICT$8;
-        return ScrollSpy._jQueryInterface;
-    };
-    var NAME$9 = "tab";
-    var VERSION$9 = "4.6.0";
-    var DATA_KEY$9 = "bs.tab";
-    var EVENT_KEY$9 = "." + DATA_KEY$9;
-    var DATA_API_KEY$7 = ".data-api";
-    var JQUERY_NO_CONFLICT$9 = $__default["default"].fn[NAME$9];
-    var EVENT_HIDE$3 = "hide" + EVENT_KEY$9;
-    var EVENT_HIDDEN$3 = "hidden" + EVENT_KEY$9;
-    var EVENT_SHOW$3 = "show" + EVENT_KEY$9;
-    var EVENT_SHOWN$3 = "shown" + EVENT_KEY$9;
-    var EVENT_CLICK_DATA_API$6 = "click" + EVENT_KEY$9 + DATA_API_KEY$7;
-    var CLASS_NAME_DROPDOWN_MENU = "dropdown-menu";
-    var CLASS_NAME_ACTIVE$3 = "active";
-    var CLASS_NAME_DISABLED$1 = "disabled";
-    var CLASS_NAME_FADE$4 = "fade";
-    var CLASS_NAME_SHOW$6 = "show";
-    var SELECTOR_DROPDOWN$1 = ".dropdown";
-    var SELECTOR_NAV_LIST_GROUP$1 = ".nav, .list-group";
-    var SELECTOR_ACTIVE$2 = ".active";
-    var SELECTOR_ACTIVE_UL = "> li > .active";
-    var SELECTOR_DATA_TOGGLE$4 = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]';
-    var SELECTOR_DROPDOWN_TOGGLE$1 = ".dropdown-toggle";
-    var SELECTOR_DROPDOWN_ACTIVE_CHILD = "> .dropdown-menu .active";
-    var Tab = function() {
-        function Tab(element) {
-            this._element = element;
-        }
-        var _proto = Tab.prototype;
-        _proto.show = function show() {
-            var _this = this;
-            if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default["default"](this._element).hasClass(CLASS_NAME_ACTIVE$3) || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1)) {
-                return;
-            }
-            var target;
-            var previous;
-            var listElement = $__default["default"](this._element).closest(SELECTOR_NAV_LIST_GROUP$1)[0];
-            var selector = Util.getSelectorFromElement(this._element);
-            if (listElement) {
-                var itemSelector = listElement.nodeName === "UL" || listElement.nodeName === "OL" ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE$2;
-                previous = $__default["default"].makeArray($__default["default"](listElement).find(itemSelector));
-                previous = previous[previous.length - 1];
-            }
-            var hideEvent = $__default["default"].Event(EVENT_HIDE$3, {
-                relatedTarget: this._element
-            });
-            var showEvent = $__default["default"].Event(EVENT_SHOW$3, {
-                relatedTarget: previous
-            });
-            if (previous) {
-                $__default["default"](previous).trigger(hideEvent);
-            }
-            $__default["default"](this._element).trigger(showEvent);
-            if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
-                return;
-            }
-            if (selector) {
-                target = document.querySelector(selector);
-            }
-            this._activate(this._element, listElement);
-            var complete = function complete() {
-                var hiddenEvent = $__default["default"].Event(EVENT_HIDDEN$3, {
-                    relatedTarget: _this._element
-                });
-                var shownEvent = $__default["default"].Event(EVENT_SHOWN$3, {
-                    relatedTarget: previous
-                });
-                $__default["default"](previous).trigger(hiddenEvent);
-                $__default["default"](_this._element).trigger(shownEvent);
-            };
-            if (target) {
-                this._activate(target, target.parentNode, complete);
-            } else {
-                complete();
-            }
-        };
-        _proto.dispose = function dispose() {
-            $__default["default"].removeData(this._element, DATA_KEY$9);
-            this._element = null;
-        };
-        _proto._activate = function _activate(element, container, callback) {
-            var _this2 = this;
-            var activeElements = container && (container.nodeName === "UL" || container.nodeName === "OL") ? $__default["default"](container).find(SELECTOR_ACTIVE_UL) : $__default["default"](container).children(SELECTOR_ACTIVE$2);
-            var active = activeElements[0];
-            var isTransitioning = callback && active && $__default["default"](active).hasClass(CLASS_NAME_FADE$4);
-            var complete = function complete() {
-                return _this2._transitionComplete(element, active, callback);
-            };
-            if (active && isTransitioning) {
-                var transitionDuration = Util.getTransitionDurationFromElement(active);
-                $__default["default"](active).removeClass(CLASS_NAME_SHOW$6).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
-            } else {
-                complete();
-            }
-        };
-        _proto._transitionComplete = function _transitionComplete(element, active, callback) {
-            if (active) {
-                $__default["default"](active).removeClass(CLASS_NAME_ACTIVE$3);
-                var dropdownChild = $__default["default"](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];
-                if (dropdownChild) {
-                    $__default["default"](dropdownChild).removeClass(CLASS_NAME_ACTIVE$3);
-                }
-                if (active.getAttribute("role") === "tab") {
-                    active.setAttribute("aria-selected", false);
-                }
-            }
-            $__default["default"](element).addClass(CLASS_NAME_ACTIVE$3);
-            if (element.getAttribute("role") === "tab") {
-                element.setAttribute("aria-selected", true);
-            }
-            Util.reflow(element);
-            if (element.classList.contains(CLASS_NAME_FADE$4)) {
-                element.classList.add(CLASS_NAME_SHOW$6);
-            }
-            if (element.parentNode && $__default["default"](element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
-                var dropdownElement = $__default["default"](element).closest(SELECTOR_DROPDOWN$1)[0];
-                if (dropdownElement) {
-                    var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE$1));
-                    $__default["default"](dropdownToggleList).addClass(CLASS_NAME_ACTIVE$3);
-                }
-                element.setAttribute("aria-expanded", true);
-            }
-            if (callback) {
-                callback();
-            }
-        };
-        Tab._jQueryInterface = function _jQueryInterface(config) {
-            return this.each(function() {
-                var $this = $__default["default"](this);
-                var data = $this.data(DATA_KEY$9);
-                if (!data) {
-                    data = new Tab(this);
-                    $this.data(DATA_KEY$9, data);
-                }
-                if (typeof config === "string") {
-                    if (typeof data[config] === "undefined") {
-                        throw new TypeError('No method named "' + config + '"');
-                    }
-                    data[config]();
-                }
-            });
-        };
-        _createClass(Tab, null, [ {
-            key: "VERSION",
-            get: function get() {
-                return VERSION$9;
-            }
-        } ]);
-        return Tab;
-    }();
-    $__default["default"](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$4, function(event) {
-        event.preventDefault();
-        Tab._jQueryInterface.call($__default["default"](this), "show");
-    });
-    $__default["default"].fn[NAME$9] = Tab._jQueryInterface;
-    $__default["default"].fn[NAME$9].Constructor = Tab;
-    $__default["default"].fn[NAME$9].noConflict = function() {
-        $__default["default"].fn[NAME$9] = JQUERY_NO_CONFLICT$9;
-        return Tab._jQueryInterface;
-    };
-    var NAME$a = "toast";
-    var VERSION$a = "4.6.0";
-    var DATA_KEY$a = "bs.toast";
-    var EVENT_KEY$a = "." + DATA_KEY$a;
-    var JQUERY_NO_CONFLICT$a = $__default["default"].fn[NAME$a];
-    var EVENT_CLICK_DISMISS$1 = "click.dismiss" + EVENT_KEY$a;
-    var EVENT_HIDE$4 = "hide" + EVENT_KEY$a;
-    var EVENT_HIDDEN$4 = "hidden" + EVENT_KEY$a;
-    var EVENT_SHOW$4 = "show" + EVENT_KEY$a;
-    var EVENT_SHOWN$4 = "shown" + EVENT_KEY$a;
-    var CLASS_NAME_FADE$5 = "fade";
-    var CLASS_NAME_HIDE = "hide";
-    var CLASS_NAME_SHOW$7 = "show";
-    var CLASS_NAME_SHOWING = "showing";
-    var DefaultType$7 = {
-        animation: "boolean",
-        autohide: "boolean",
-        delay: "number"
-    };
-    var Default$7 = {
-        animation: true,
-        autohide: true,
-        delay: 500
-    };
-    var SELECTOR_DATA_DISMISS$1 = '[data-dismiss="toast"]';
-    var Toast = function() {
-        function Toast(element, config) {
-            this._element = element;
-            this._config = this._getConfig(config);
-            this._timeout = null;
-            this._setListeners();
-        }
-        var _proto = Toast.prototype;
-        _proto.show = function show() {
-            var _this = this;
-            var showEvent = $__default["default"].Event(EVENT_SHOW$4);
-            $__default["default"](this._element).trigger(showEvent);
-            if (showEvent.isDefaultPrevented()) {
-                return;
-            }
-            this._clearTimeout();
-            if (this._config.animation) {
-                this._element.classList.add(CLASS_NAME_FADE$5);
-            }
-            var complete = function complete() {
-                _this._element.classList.remove(CLASS_NAME_SHOWING);
-                _this._element.classList.add(CLASS_NAME_SHOW$7);
-                $__default["default"](_this._element).trigger(EVENT_SHOWN$4);
-                if (_this._config.autohide) {
-                    _this._timeout = setTimeout(function() {
-                        _this.hide();
-                    }, _this._config.delay);
-                }
-            };
-            this._element.classList.remove(CLASS_NAME_HIDE);
-            Util.reflow(this._element);
-            this._element.classList.add(CLASS_NAME_SHOWING);
-            if (this._config.animation) {
-                var transitionDuration = Util.getTransitionDurationFromElement(this._element);
-                $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
-            } else {
-                complete();
-            }
-        };
-        _proto.hide = function hide() {
-            if (!this._element.classList.contains(CLASS_NAME_SHOW$7)) {
-                return;
-            }
-            var hideEvent = $__default["default"].Event(EVENT_HIDE$4);
-            $__default["default"](this._element).trigger(hideEvent);
-            if (hideEvent.isDefaultPrevented()) {
-                return;
-            }
-            this._close();
-        };
-        _proto.dispose = function dispose() {
-            this._clearTimeout();
-            if (this._element.classList.contains(CLASS_NAME_SHOW$7)) {
-                this._element.classList.remove(CLASS_NAME_SHOW$7);
-            }
-            $__default["default"](this._element).off(EVENT_CLICK_DISMISS$1);
-            $__default["default"].removeData(this._element, DATA_KEY$a);
-            this._element = null;
-            this._config = null;
-        };
-        _proto._getConfig = function _getConfig(config) {
-            config = _extends({}, Default$7, $__default["default"](this._element).data(), typeof config === "object" && config ? config : {});
-            Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);
-            return config;
-        };
-        _proto._setListeners = function _setListeners() {
-            var _this2 = this;
-            $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function() {
-                return _this2.hide();
-            });
-        };
-        _proto._close = function _close() {
-            var _this3 = this;
-            var complete = function complete() {
-                _this3._element.classList.add(CLASS_NAME_HIDE);
-                $__default["default"](_this3._element).trigger(EVENT_HIDDEN$4);
-            };
-            this._element.classList.remove(CLASS_NAME_SHOW$7);
-            if (this._config.animation) {
-                var transitionDuration = Util.getTransitionDurationFromElement(this._element);
-                $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
-            } else {
-                complete();
-            }
-        };
-        _proto._clearTimeout = function _clearTimeout() {
-            clearTimeout(this._timeout);
-            this._timeout = null;
-        };
-        Toast._jQueryInterface = function _jQueryInterface(config) {
-            return this.each(function() {
-                var $element = $__default["default"](this);
-                var data = $element.data(DATA_KEY$a);
-                var _config = typeof config === "object" && config;
-                if (!data) {
-                    data = new Toast(this, _config);
-                    $element.data(DATA_KEY$a, data);
-                }
-                if (typeof config === "string") {
-                    if (typeof data[config] === "undefined") {
-                        throw new TypeError('No method named "' + config + '"');
-                    }
-                    data[config](this);
-                }
-            });
-        };
-        _createClass(Toast, null, [ {
-            key: "VERSION",
-            get: function get() {
-                return VERSION$a;
-            }
-        }, {
-            key: "DefaultType",
-            get: function get() {
-                return DefaultType$7;
-            }
-        }, {
-            key: "Default",
-            get: function get() {
-                return Default$7;
-            }
-        } ]);
-        return Toast;
-    }();
-    $__default["default"].fn[NAME$a] = Toast._jQueryInterface;
-    $__default["default"].fn[NAME$a].Constructor = Toast;
-    $__default["default"].fn[NAME$a].noConflict = function() {
-        $__default["default"].fn[NAME$a] = JQUERY_NO_CONFLICT$a;
-        return Toast._jQueryInterface;
-    };
-    exports.Alert = Alert;
-    exports.Button = Button;
-    exports.Carousel = Carousel;
-    exports.Collapse = Collapse;
-    exports.Dropdown = Dropdown;
-    exports.Modal = Modal;
-    exports.Popover = Popover;
-    exports.Scrollspy = ScrollSpy;
-    exports.Tab = Tab;
-    exports.Toast = Toast;
-    exports.Tooltip = Tooltip;
-    exports.Util = Util;
-    Object.defineProperty(exports, "__esModule", {
-        value: true
-    });
-});
-
-!function(a, b) {
-    "function" == typeof define && define.amd && define.amd.dust === !0 ? define("dust.core", [], b) : "object" == typeof exports ? module.exports = b() : a.dust = b();
-}(this, function() {
-    function getTemplate(a, b) {
-        return a ? "function" == typeof a && a.template ? a.template : dust.isTemplateFn(a) ? a : b !== !1 ? dust.cache[a] : void 0 : void 0;
-    }
-    function load(a, b, c) {
-        if (!a) return b.setError(new Error("No template or template name provided to render"));
-        var d = getTemplate(a, dust.config.cache);
-        return d ? d(b, Context.wrap(c, d.templateName)) : dust.onLoad ? b.map(function(b) {
-            function d(a, d) {
-                var f;
-                if (a) return b.setError(a);
-                if (f = getTemplate(d, !1) || getTemplate(e, dust.config.cache), !f) {
-                    if (!dust.compile) return b.setError(new Error("Dust compiler not available"));
-                    f = dust.loadSource(dust.compile(d, e));
-                }
-                f(b, Context.wrap(c, f.templateName)).end();
-            }
-            var e = a;
-            3 === dust.onLoad.length ? dust.onLoad(e, c.options, d) : dust.onLoad(e, d);
-        }) : b.setError(new Error("Template Not Found: " + a));
-    }
-    function Context(a, b, c, d, e) {
-        void 0 === a || a instanceof Stack || (a = new Stack(a)), this.stack = a, this.global = b, 
-        this.options = c, this.blocks = d, this.templateName = e, this._isContext = !0;
-    }
-    function getWithResolvedData(a, b, c) {
-        return function(d) {
-            return a.push(d)._get(b, c);
-        };
-    }
-    function Stack(a, b, c, d) {
-        this.tail = b, this.isObject = a && "object" == typeof a, this.head = a, this.index = c, 
-        this.of = d;
-    }
-    function Stub(a) {
-        this.head = new Chunk(this), this.callback = a, this.out = "";
-    }
-    function Stream() {
-        this.head = new Chunk(this);
-    }
-    function Chunk(a, b, c) {
-        this.root = a, this.next = b, this.data = [], this.flushable = !1, this.taps = c;
-    }
-    function Tap(a, b) {
-        this.head = a, this.tail = b;
-    }
-    var dust = {
-        version: "2.7.5"
-    }, NONE = "NONE", ERROR = "ERROR", WARN = "WARN", INFO = "INFO", DEBUG = "DEBUG", EMPTY_FUNC = function() {};
-    dust.config = {
-        whitespace: !1,
-        amd: !1,
-        cjs: !1,
-        cache: !0
-    }, dust._aliases = {
-        write: "w",
-        end: "e",
-        map: "m",
-        render: "r",
-        reference: "f",
-        section: "s",
-        exists: "x",
-        notexists: "nx",
-        block: "b",
-        partial: "p",
-        helper: "h"
-    }, function() {
-        var a, b, c = {
-            DEBUG: 0,
-            INFO: 1,
-            WARN: 2,
-            ERROR: 3,
-            NONE: 4
-        };
-        "undefined" != typeof console && console.log ? (a = console.log, b = "function" == typeof a ? function() {
-            a.apply(console, arguments);
-        } : function() {
-            a(Array.prototype.slice.apply(arguments).join(" "));
-        }) : b = EMPTY_FUNC, dust.log = function(a, d) {
-            d = d || INFO, c[d] >= c[dust.debugLevel] && b("[DUST:" + d + "]", a);
-        }, dust.debugLevel = NONE, "undefined" != typeof process && process.env && /\bdust\b/.test(process.env.DEBUG) && (dust.debugLevel = DEBUG);
-    }(), dust.helpers = {}, dust.cache = {}, dust.register = function(a, b) {
-        a && (b.templateName = a, dust.config.cache !== !1 && (dust.cache[a] = b));
-    }, dust.render = function(a, b, c) {
-        var d = new Stub(c).head;
-        try {
-            load(a, d, b).end();
-        } catch (e) {
-            d.setError(e);
-        }
-    }, dust.stream = function(a, b) {
-        var c = new Stream(), d = c.head;
-        return dust.nextTick(function() {
-            try {
-                load(a, d, b).end();
-            } catch (c) {
-                d.setError(c);
-            }
-        }), c;
-    }, dust.loadSource = function(source) {
-        return eval(source);
-    }, dust.isArray = Array.isArray ? Array.isArray : function(a) {
-        return "[object Array]" === Object.prototype.toString.call(a);
-    }, dust.nextTick = function() {
-        return function(a) {
-            setTimeout(a, 0);
-        };
-    }(), dust.isEmpty = function(a) {
-        return 0 === a ? !1 : dust.isArray(a) && !a.length ? !0 : !a;
-    }, dust.isEmptyObject = function(a) {
-        var b;
-        if (null === a) return !1;
-        if (void 0 === a) return !1;
-        if (a.length > 0) return !1;
-        for (b in a) if (Object.prototype.hasOwnProperty.call(a, b)) return !1;
-        return !0;
-    }, dust.isTemplateFn = function(a) {
-        return "function" == typeof a && a.__dustBody;
-    }, dust.isThenable = function(a) {
-        return a && "object" == typeof a && "function" == typeof a.then;
-    }, dust.isStreamable = function(a) {
-        return a && "function" == typeof a.on && "function" == typeof a.pipe;
-    }, dust.filter = function(a, b, c, d) {
-        var e, f, g, h;
-        if (c) for (e = 0, f = c.length; f > e; e++) g = c[e], g.length && (h = dust.filters[g], 
-        "s" === g ? b = null : "function" == typeof h ? a = h(a, d) : dust.log("Invalid filter `" + g + "`", WARN));
-        return b && (a = dust.filters[b](a, d)), a;
-    }, dust.filters = {
-        h: function(a) {
-            return dust.escapeHtml(a);
-        },
-        j: function(a) {
-            return dust.escapeJs(a);
-        },
-        u: encodeURI,
-        uc: encodeURIComponent,
-        js: function(a) {
-            return dust.escapeJSON(a);
-        },
-        jp: function(a) {
-            return JSON ? JSON.parse(a) : (dust.log("JSON is undefined; could not parse `" + a + "`", WARN), 
-            a);
-        }
-    }, dust.makeBase = dust.context = function(a, b) {
-        return new Context(void 0, a, b);
-    }, dust.isContext = function(a) {
-        return "object" == typeof a && a._isContext === !0;
-    }, Context.wrap = function(a, b) {
-        return dust.isContext(a) ? a : new Context(a, {}, {}, null, b);
-    }, Context.prototype.get = function(a, b) {
-        return "string" == typeof a && ("." === a[0] && (b = !0, a = a.substr(1)), a = a.split(".")), 
-        this._get(b, a);
-    }, Context.prototype._get = function(a, b) {
-        var c, d, e, f, g, h = this.stack || {}, i = 1;
-        if (d = b[0], e = b.length, a && 0 === e) f = h, h = h.head; else {
-            if (a) h && (h = h.head ? h.head[d] : void 0); else {
-                for (;h && (!h.isObject || (f = h.head, c = h.head[d], void 0 === c)); ) h = h.tail;
-                h = void 0 !== c ? c : this.global && this.global[d];
-            }
-            for (;h && e > i; ) {
-                if (dust.isThenable(h)) return h.then(getWithResolvedData(this, a, b.slice(i)));
-                f = h, h = h[b[i]], i++;
-            }
-        }
-        return "function" == typeof h ? (g = function() {
-            try {
-                return h.apply(f, arguments);
-            } catch (a) {
-                throw dust.log(a, ERROR), a;
-            }
-        }, g.__dustBody = !!h.__dustBody, g) : (void 0 === h && dust.log("Cannot find reference `{" + b.join(".") + "}` in template `" + this.getTemplateName() + "`", INFO), 
-        h);
-    }, Context.prototype.getPath = function(a, b) {
-        return this._get(a, b);
-    }, Context.prototype.push = function(a, b, c) {
-        return void 0 === a ? (dust.log("Not pushing an undefined variable onto the context", INFO), 
-        this) : this.rebase(new Stack(a, this.stack, b, c));
-    }, Context.prototype.pop = function() {
-        var a = this.current();
-        return this.stack = this.stack && this.stack.tail, a;
-    }, Context.prototype.rebase = function(a) {
-        return new Context(a, this.global, this.options, this.blocks, this.getTemplateName());
-    }, Context.prototype.clone = function() {
-        var a = this.rebase();
-        return a.stack = this.stack, a;
-    }, Context.prototype.current = function() {
-        return this.stack && this.stack.head;
-    }, Context.prototype.getBlock = function(a) {
-        var b, c, d;
-        if ("function" == typeof a && (a = a(new Chunk(), this).data.join("")), b = this.blocks, 
-        !b) return dust.log("No blocks for context `" + a + "` in template `" + this.getTemplateName() + "`", DEBUG), 
-        !1;
-        for (c = b.length; c--; ) if (d = b[c][a]) return d;
-        return dust.log("Malformed template `" + this.getTemplateName() + "` was missing one or more blocks."), 
-        !1;
-    }, Context.prototype.shiftBlocks = function(a) {
-        var b, c = this.blocks;
-        return a ? (b = c ? c.concat([ a ]) : [ a ], new Context(this.stack, this.global, this.options, b, this.getTemplateName())) : this;
-    }, Context.prototype.resolve = function(a) {
-        var b;
-        return "function" != typeof a ? a : (b = new Chunk().render(a, this), b instanceof Chunk ? b.data.join("") : b);
-    }, Context.prototype.getTemplateName = function() {
-        return this.templateName;
-    }, Stub.prototype.flush = function() {
-        for (var a = this.head; a; ) {
-            if (!a.flushable) return a.error ? (this.callback(a.error), dust.log("Rendering failed with error `" + a.error + "`", ERROR), 
-            void (this.flush = EMPTY_FUNC)) : void 0;
-            this.out += a.data.join(""), a = a.next, this.head = a;
-        }
-        this.callback(null, this.out);
-    }, Stream.prototype.flush = function() {
-        for (var a = this.head; a; ) {
-            if (!a.flushable) return a.error ? (this.emit("error", a.error), this.emit("end"), 
-            dust.log("Streaming failed with error `" + a.error + "`", ERROR), void (this.flush = EMPTY_FUNC)) : void 0;
-            this.emit("data", a.data.join("")), a = a.next, this.head = a;
-        }
-        this.emit("end");
-    }, Stream.prototype.emit = function(a, b) {
-        var c, d, e = this.events || {}, f = e[a] || [];
-        if (!f.length) return dust.log("Stream broadcasting, but no listeners for `" + a + "`", DEBUG), 
-        !1;
-        for (f = f.slice(0), c = 0, d = f.length; d > c; c++) f[c](b);
-        return !0;
-    }, Stream.prototype.on = function(a, b) {
-        var c = this.events = this.events || {}, d = c[a] = c[a] || [];
-        return "function" != typeof b ? dust.log("No callback function provided for `" + a + "` event listener", WARN) : d.push(b), 
-        this;
-    }, Stream.prototype.pipe = function(a) {
-        if ("function" != typeof a.write || "function" != typeof a.end) return dust.log("Incompatible stream passed to `pipe`", WARN), 
-        this;
-        var b = !1;
-        return "function" == typeof a.emit && a.emit("pipe", this), "function" == typeof a.on && a.on("error", function() {
-            b = !0;
-        }), this.on("data", function(c) {
-            if (!b) try {
-                a.write(c, "utf8");
-            } catch (d) {
-                dust.log(d, ERROR);
-            }
-        }).on("end", function() {
-            if (!b) try {
-                a.end(), b = !0;
-            } catch (c) {
-                dust.log(c, ERROR);
-            }
-        });
-    }, Chunk.prototype.write = function(a) {
-        var b = this.taps;
-        return b && (a = b.go(a)), this.data.push(a), this;
-    }, Chunk.prototype.end = function(a) {
-        return a && this.write(a), this.flushable = !0, this.root.flush(), this;
-    }, Chunk.prototype.map = function(a) {
-        var b = new Chunk(this.root, this.next, this.taps), c = new Chunk(this.root, b, this.taps);
-        this.next = c, this.flushable = !0;
-        try {
-            a(c);
-        } catch (d) {
-            dust.log(d, ERROR), c.setError(d);
-        }
-        return b;
-    }, Chunk.prototype.tap = function(a) {
-        var b = this.taps;
-        return this.taps = b ? b.push(a) : new Tap(a), this;
-    }, Chunk.prototype.untap = function() {
-        return this.taps = this.taps.tail, this;
-    }, Chunk.prototype.render = function(a, b) {
-        return a(this, b);
-    }, Chunk.prototype.reference = function(a, b, c, d) {
-        return "function" == typeof a ? (a = a.apply(b.current(), [ this, b, null, {
-            auto: c,
-            filters: d
-        } ]), a instanceof Chunk ? a : this.reference(a, b, c, d)) : dust.isThenable(a) ? this.await(a, b, null, c, d) : dust.isStreamable(a) ? this.stream(a, b, null, c, d) : dust.isEmpty(a) ? this : this.write(dust.filter(a, c, d, b));
-    }, Chunk.prototype.section = function(a, b, c, d) {
-        var e, f, g, h = c.block, i = c["else"], j = this;
-        if ("function" == typeof a && !dust.isTemplateFn(a)) {
-            try {
-                a = a.apply(b.current(), [ this, b, c, d ]);
-            } catch (k) {
-                return dust.log(k, ERROR), this.setError(k);
-            }
-            if (a instanceof Chunk) return a;
-        }
-        if (dust.isEmptyObject(c)) return j;
-        if (dust.isEmptyObject(d) || (b = b.push(d)), dust.isArray(a)) {
-            if (h) {
-                if (f = a.length, f > 0) {
-                    for (g = b.stack && b.stack.head || {}, g.$len = f, e = 0; f > e; e++) g.$idx = e, 
-                    j = h(j, b.push(a[e], e, f));
-                    return g.$idx = void 0, g.$len = void 0, j;
-                }
-                if (i) return i(this, b);
-            }
-        } else {
-            if (dust.isThenable(a)) return this.await(a, b, c);
-            if (dust.isStreamable(a)) return this.stream(a, b, c);
-            if (a === !0) {
-                if (h) return h(this, b);
-            } else if (a || 0 === a) {
-                if (h) return h(this, b.push(a));
-            } else if (i) return i(this, b);
-        }
-        return dust.log("Section without corresponding key in template `" + b.getTemplateName() + "`", DEBUG), 
-        this;
-    }, Chunk.prototype.exists = function(a, b, c) {
-        var d = c.block, e = c["else"];
-        if (dust.isEmpty(a)) {
-            if (e) return e(this, b);
-        } else {
-            if (d) return d(this, b);
-            dust.log("No block for exists check in template `" + b.getTemplateName() + "`", DEBUG);
-        }
-        return this;
-    }, Chunk.prototype.notexists = function(a, b, c) {
-        var d = c.block, e = c["else"];
-        if (dust.isEmpty(a)) {
-            if (d) return d(this, b);
-            dust.log("No block for not-exists check in template `" + b.getTemplateName() + "`", DEBUG);
-        } else if (e) return e(this, b);
-        return this;
-    }, Chunk.prototype.block = function(a, b, c) {
-        var d = a || c.block;
-        return d ? d(this, b) : this;
-    }, Chunk.prototype.partial = function(a, b, c, d) {
-        var e;
-        return void 0 === d && (d = c, c = b), dust.isEmptyObject(d) || (c = c.clone(), 
-        e = c.pop(), c = c.push(d).push(e)), dust.isTemplateFn(a) ? this.capture(a, b, function(a, b) {
-            c.templateName = a, load(a, b, c).end();
-        }) : (c.templateName = a, load(a, this, c));
-    }, Chunk.prototype.helper = function(a, b, c, d, e) {
-        var f, g = this, h = d.filters;
-        if (void 0 === e && (e = "h"), !dust.helpers[a]) return dust.log("Helper `" + a + "` does not exist", WARN), 
-        g;
-        try {
-            return f = dust.helpers[a](g, b, c, d), f instanceof Chunk ? f : ("string" == typeof h && (h = h.split("|")), 
-            dust.isEmptyObject(c) ? g.reference(f, b, e, h) : g.section(f, b, c, d));
-        } catch (i) {
-            return dust.log("Error in helper `" + a + "`: " + i.message, ERROR), g.setError(i);
-        }
-    }, Chunk.prototype.await = function(a, b, c, d, e) {
-        return this.map(function(f) {
-            a.then(function(a) {
-                f = c ? f.section(a, b, c) : f.reference(a, b, d, e), f.end();
-            }, function(a) {
-                var d = c && c.error;
-                d ? f.render(d, b.push(a)).end() : (dust.log("Unhandled promise rejection in `" + b.getTemplateName() + "`", INFO), 
-                f.end());
-            });
-        });
-    }, Chunk.prototype.stream = function(a, b, c, d, e) {
-        var f = c && c.block, g = c && c.error;
-        return this.map(function(h) {
-            var i = !1;
-            a.on("data", function(a) {
-                i || (f ? h = h.map(function(c) {
-                    c.render(f, b.push(a)).end();
-                }) : c || (h = h.reference(a, b, d, e)));
-            }).on("error", function(a) {
-                i || (g ? h.render(g, b.push(a)) : dust.log("Unhandled stream error in `" + b.getTemplateName() + "`", INFO), 
-                i || (i = !0, h.end()));
-            }).on("end", function() {
-                i || (i = !0, h.end());
-            });
-        });
-    }, Chunk.prototype.capture = function(a, b, c) {
-        return this.map(function(d) {
-            var e = new Stub(function(a, b) {
-                a ? d.setError(a) : c(b, d);
-            });
-            a(e.head, b).end();
-        });
-    }, Chunk.prototype.setError = function(a) {
-        return this.error = a, this.root.flush(), this;
-    };
-    for (var f in Chunk.prototype) dust._aliases[f] && (Chunk.prototype[dust._aliases[f]] = Chunk.prototype[f]);
-    Tap.prototype.push = function(a) {
-        return new Tap(a, this);
-    }, Tap.prototype.go = function(a) {
-        for (var b = this; b; ) a = b.head(a), b = b.tail;
-        return a;
-    };
-    var HCHARS = /[&<>"']/, AMP = /&/g, LT = /</g, GT = />/g, QUOT = /\"/g, SQUOT = /\'/g;
-    dust.escapeHtml = function(a) {
-        return "string" == typeof a || a && "function" == typeof a.toString ? ("string" != typeof a && (a = a.toString()), 
-        HCHARS.test(a) ? a.replace(AMP, "&amp;").replace(LT, "&lt;").replace(GT, "&gt;").replace(QUOT, "&quot;").replace(SQUOT, "&#39;") : a) : a;
-    };
-    var BS = /\\/g, FS = /\//g, CR = /\r/g, LS = /\u2028/g, PS = /\u2029/g, NL = /\n/g, LF = /\f/g, SQ = /'/g, DQ = /"/g, TB = /\t/g;
-    return dust.escapeJs = function(a) {
-        return "string" == typeof a ? a.replace(BS, "\\\\").replace(FS, "\\/").replace(DQ, '\\"').replace(SQ, "\\'").replace(CR, "\\r").replace(LS, "\\u2028").replace(PS, "\\u2029").replace(NL, "\\n").replace(LF, "\\f").replace(TB, "\\t") : a;
-    }, dust.escapeJSON = function(a) {
-        return JSON ? JSON.stringify(a).replace(LS, "\\u2028").replace(PS, "\\u2029").replace(LT, "\\u003c") : (dust.log("JSON is undefined; could not escape `" + a + "`", WARN), 
-        a);
-    }, dust;
-}), function(a, b) {
-    "function" == typeof define && define.amd && define.amd.dust === !0 ? define("dust.parse", [ "dust.core" ], function(dust) {
-        return b(dust).parse;
-    }) : "object" == typeof exports ? module.exports = b(require("./dust")) : b(a.dust);
-}(this, function(dust) {
-    var a = function() {
-        function a(a, b) {
-            function c() {
-                this.constructor = a;
-            }
-            c.prototype = b.prototype, a.prototype = new c();
-        }
-        function b(a, b, c, d, e, f) {
-            this.message = a, this.expected = b, this.found = c, this.offset = d, this.line = e, 
-            this.column = f, this.name = "SyntaxError";
-        }
-        function c(a) {
-            function c() {
-                return f(wc).line;
-            }
-            function d() {
-                return f(wc).column;
-            }
-            function e(a) {
-                throw h(a, null, wc);
-            }
-            function f(b) {
-                function c(b, c, d) {
-                    var e, f;
-                    for (e = c; d > e; e++) f = a.charAt(e), "\n" === f ? (b.seenCR || b.line++, b.column = 1, 
-                    b.seenCR = !1) : "\r" === f || "\u2028" === f || "\u2029" === f ? (b.line++, b.column = 1, 
-                    b.seenCR = !0) : (b.column++, b.seenCR = !1);
-                }
-                return xc !== b && (xc > b && (xc = 0, yc = {
-                    line: 1,
-                    column: 1,
-                    seenCR: !1
-                }), c(yc, xc, b), xc = b), yc;
-            }
-            function g(a) {
-                zc > vc || (vc > zc && (zc = vc, Ac = []), Ac.push(a));
-            }
-            function h(c, d, e) {
-                function g(a) {
-                    var b = 1;
-                    for (a.sort(function(a, b) {
-                        return a.description < b.description ? -1 : a.description > b.description ? 1 : 0;
-                    }); b < a.length; ) a[b - 1] === a[b] ? a.splice(b, 1) : b++;
-                }
-                function h(a, b) {
-                    function c(a) {
-                        function b(a) {
-                            return a.charCodeAt(0).toString(16).toUpperCase();
-                        }
-                        return a.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\x08/g, "\\b").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\f/g, "\\f").replace(/\r/g, "\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(a) {
-                            return "\\x0" + b(a);
-                        }).replace(/[\x10-\x1F\x80-\xFF]/g, function(a) {
-                            return "\\x" + b(a);
-                        }).replace(/[\u0180-\u0FFF]/g, function(a) {
-                            return "\\u0" + b(a);
-                        }).replace(/[\u1080-\uFFFF]/g, function(a) {
-                            return "\\u" + b(a);
-                        });
-                    }
-                    var d, e, f, g = new Array(a.length);
-                    for (f = 0; f < a.length; f++) g[f] = a[f].description;
-                    return d = a.length > 1 ? g.slice(0, -1).join(", ") + " or " + g[a.length - 1] : g[0], 
-                    e = b ? '"' + c(b) + '"' : "end of input", "Expected " + d + " but " + e + " found.";
-                }
-                var i = f(e), j = e < a.length ? a.charAt(e) : null;
-                return null !== d && g(d), new b(null !== c ? c : h(d, j), d, j, e, i.line, i.column);
-            }
-            function i() {
-                var a;
-                return a = j();
-            }
-            function j() {
-                var a, b, c;
-                for (a = vc, b = [], c = k(); c !== X; ) b.push(c), c = k();
-                return b !== X && (wc = a, b = $(b)), a = b;
-            }
-            function k() {
-                var a;
-                return a = K(), a === X && (a = L(), a === X && (a = l(), a === X && (a = s(), a === X && (a = u(), 
-                a === X && (a = r(), a === X && (a = H())))))), a;
-            }
-            function l() {
-                var b, c, d, e, f, h, i, k;
-                if (Bc++, b = vc, c = m(), c !== X) {
-                    for (d = [], e = S(); e !== X; ) d.push(e), e = S();
-                    d !== X ? (e = O(), e !== X ? (f = j(), f !== X ? (h = q(), h !== X ? (i = n(), 
-                    i === X && (i = ba), i !== X ? (wc = vc, k = ca(c, f, h, i), k = k ? da : aa, k !== X ? (wc = b, 
-                    c = ea(c, f, h, i), b = c) : (vc = b, b = aa)) : (vc = b, b = aa)) : (vc = b, b = aa)) : (vc = b, 
-                    b = aa)) : (vc = b, b = aa)) : (vc = b, b = aa);
-                } else vc = b, b = aa;
-                if (b === X) if (b = vc, c = m(), c !== X) {
-                    for (d = [], e = S(); e !== X; ) d.push(e), e = S();
-                    d !== X ? (47 === a.charCodeAt(vc) ? (e = fa, vc++) : (e = X, 0 === Bc && g(ga)), 
-                    e !== X ? (f = O(), f !== X ? (wc = b, c = ha(c), b = c) : (vc = b, b = aa)) : (vc = b, 
-                    b = aa)) : (vc = b, b = aa);
-                } else vc = b, b = aa;
-                return Bc--, b === X && (c = X, 0 === Bc && g(_)), b;
-            }
-            function m() {
-                var b, c, d, e, f, h, i;
-                if (b = vc, c = N(), c !== X) if (ia.test(a.charAt(vc)) ? (d = a.charAt(vc), vc++) : (d = X, 
-                0 === Bc && g(ja)), d !== X) {
-                    for (e = [], f = S(); f !== X; ) e.push(f), f = S();
-                    e !== X ? (f = v(), f !== X ? (h = o(), h !== X ? (i = p(), i !== X ? (wc = b, c = ka(d, f, h, i), 
-                    b = c) : (vc = b, b = aa)) : (vc = b, b = aa)) : (vc = b, b = aa)) : (vc = b, b = aa);
-                } else vc = b, b = aa; else vc = b, b = aa;
-                return b;
-            }
-            function n() {
-                var b, c, d, e, f, h, i;
-                if (Bc++, b = vc, c = N(), c !== X) if (47 === a.charCodeAt(vc) ? (d = fa, vc++) : (d = X, 
-                0 === Bc && g(ga)), d !== X) {
-                    for (e = [], f = S(); f !== X; ) e.push(f), f = S();
-                    if (e !== X) if (f = v(), f !== X) {
-                        for (h = [], i = S(); i !== X; ) h.push(i), i = S();
-                        h !== X ? (i = O(), i !== X ? (wc = b, c = ma(f), b = c) : (vc = b, b = aa)) : (vc = b, 
-                        b = aa);
-                    } else vc = b, b = aa; else vc = b, b = aa;
-                } else vc = b, b = aa; else vc = b, b = aa;
-                return Bc--, b === X && (c = X, 0 === Bc && g(la)), b;
-            }
-            function o() {
-                var b, c, d, e;
-                return b = vc, c = vc, 58 === a.charCodeAt(vc) ? (d = na, vc++) : (d = X, 0 === Bc && g(oa)), 
-                d !== X ? (e = v(), e !== X ? (wc = c, d = pa(e), c = d) : (vc = c, c = aa)) : (vc = c, 
-                c = aa), c === X && (c = ba), c !== X && (wc = b, c = qa(c)), b = c;
-            }
-            function p() {
-                var b, c, d, e, f, h, i;
-                if (Bc++, b = vc, c = [], d = vc, e = [], f = S(), f !== X) for (;f !== X; ) e.push(f), 
-                f = S(); else e = aa;
-                for (e !== X ? (f = C(), f !== X ? (61 === a.charCodeAt(vc) ? (h = sa, vc++) : (h = X, 
-                0 === Bc && g(ta)), h !== X ? (i = w(), i === X && (i = v(), i === X && (i = F())), 
-                i !== X ? (wc = d, e = ua(f, i), d = e) : (vc = d, d = aa)) : (vc = d, d = aa)) : (vc = d, 
-                d = aa)) : (vc = d, d = aa); d !== X; ) {
-                    if (c.push(d), d = vc, e = [], f = S(), f !== X) for (;f !== X; ) e.push(f), f = S(); else e = aa;
-                    e !== X ? (f = C(), f !== X ? (61 === a.charCodeAt(vc) ? (h = sa, vc++) : (h = X, 
-                    0 === Bc && g(ta)), h !== X ? (i = w(), i === X && (i = v(), i === X && (i = F())), 
-                    i !== X ? (wc = d, e = ua(f, i), d = e) : (vc = d, d = aa)) : (vc = d, d = aa)) : (vc = d, 
-                    d = aa)) : (vc = d, d = aa);
-                }
-                return c !== X && (wc = b, c = va(c)), b = c, Bc--, b === X && (c = X, 0 === Bc && g(ra)), 
-                b;
-            }
-            function q() {
-                var b, c, d, e, f, h, i, k;
-                for (Bc++, b = vc, c = [], d = vc, e = N(), e !== X ? (58 === a.charCodeAt(vc) ? (f = na, 
-                vc++) : (f = X, 0 === Bc && g(oa)), f !== X ? (h = C(), h !== X ? (i = O(), i !== X ? (k = j(), 
-                k !== X ? (wc = d, e = ua(h, k), d = e) : (vc = d, d = aa)) : (vc = d, d = aa)) : (vc = d, 
-                d = aa)) : (vc = d, d = aa)) : (vc = d, d = aa); d !== X; ) c.push(d), d = vc, e = N(), 
-                e !== X ? (58 === a.charCodeAt(vc) ? (f = na, vc++) : (f = X, 0 === Bc && g(oa)), 
-                f !== X ? (h = C(), h !== X ? (i = O(), i !== X ? (k = j(), k !== X ? (wc = d, e = ua(h, k), 
-                d = e) : (vc = d, d = aa)) : (vc = d, d = aa)) : (vc = d, d = aa)) : (vc = d, d = aa)) : (vc = d, 
-                d = aa);
-                return c !== X && (wc = b, c = xa(c)), b = c, Bc--, b === X && (c = X, 0 === Bc && g(wa)), 
-                b;
-            }
-            function r() {
-                var a, b, c, d, e;
-                return Bc++, a = vc, b = N(), b !== X ? (c = v(), c !== X ? (d = t(), d !== X ? (e = O(), 
-                e !== X ? (wc = a, b = za(c, d), a = b) : (vc = a, a = aa)) : (vc = a, a = aa)) : (vc = a, 
-                a = aa)) : (vc = a, a = aa), Bc--, a === X && (b = X, 0 === Bc && g(ya)), a;
-            }
-            function s() {
-                var b, c, d, e, f, h, i, j, k, l;
-                if (Bc++, b = vc, c = N(), c !== X) if (62 === a.charCodeAt(vc) ? (d = Ba, vc++) : (d = X, 
-                0 === Bc && g(Ca)), d === X && (43 === a.charCodeAt(vc) ? (d = Da, vc++) : (d = X, 
-                0 === Bc && g(Ea))), d !== X) {
-                    for (e = [], f = S(); f !== X; ) e.push(f), f = S();
-                    if (e !== X) if (f = vc, h = C(), h !== X && (wc = f, h = Fa(h)), f = h, f === X && (f = F()), 
-                    f !== X) if (h = o(), h !== X) if (i = p(), i !== X) {
-                        for (j = [], k = S(); k !== X; ) j.push(k), k = S();
-                        j !== X ? (47 === a.charCodeAt(vc) ? (k = fa, vc++) : (k = X, 0 === Bc && g(ga)), 
-                        k !== X ? (l = O(), l !== X ? (wc = b, c = Ga(d, f, h, i), b = c) : (vc = b, b = aa)) : (vc = b, 
-                        b = aa)) : (vc = b, b = aa);
-                    } else vc = b, b = aa; else vc = b, b = aa; else vc = b, b = aa; else vc = b, b = aa;
-                } else vc = b, b = aa; else vc = b, b = aa;
-                return Bc--, b === X && (c = X, 0 === Bc && g(Aa)), b;
-            }
-            function t() {
-                var b, c, d, e, f;
-                for (Bc++, b = vc, c = [], d = vc, 124 === a.charCodeAt(vc) ? (e = Ia, vc++) : (e = X, 
-                0 === Bc && g(Ja)), e !== X ? (f = C(), f !== X ? (wc = d, e = pa(f), d = e) : (vc = d, 
-                d = aa)) : (vc = d, d = aa); d !== X; ) c.push(d), d = vc, 124 === a.charCodeAt(vc) ? (e = Ia, 
-                vc++) : (e = X, 0 === Bc && g(Ja)), e !== X ? (f = C(), f !== X ? (wc = d, e = pa(f), 
-                d = e) : (vc = d, d = aa)) : (vc = d, d = aa);
-                return c !== X && (wc = b, c = Ka(c)), b = c, Bc--, b === X && (c = X, 0 === Bc && g(Ha)), 
-                b;
-            }
-            function u() {
-                var b, c, d, e, f;
-                return Bc++, b = vc, c = N(), c !== X ? (126 === a.charCodeAt(vc) ? (d = Ma, vc++) : (d = X, 
-                0 === Bc && g(Na)), d !== X ? (e = C(), e !== X ? (f = O(), f !== X ? (wc = b, c = Oa(e), 
-                b = c) : (vc = b, b = aa)) : (vc = b, b = aa)) : (vc = b, b = aa)) : (vc = b, b = aa), 
-                Bc--, b === X && (c = X, 0 === Bc && g(La)), b;
-            }
-            function v() {
-                var a, b;
-                return Bc++, a = vc, b = B(), b !== X && (wc = a, b = Qa(b)), a = b, a === X && (a = vc, 
-                b = C(), b !== X && (wc = a, b = Ra(b)), a = b), Bc--, a === X && (b = X, 0 === Bc && g(Pa)), 
-                a;
-            }
-            function w() {
-                var a, b;
-                return Bc++, a = vc, b = x(), b === X && (b = A()), b !== X && (wc = a, b = Ta(b)), 
-                a = b, Bc--, a === X && (b = X, 0 === Bc && g(Sa)), a;
-            }
-            function x() {
-                var b, c, d, e;
-                return Bc++, b = vc, c = A(), c !== X ? (46 === a.charCodeAt(vc) ? (d = Va, vc++) : (d = X, 
-                0 === Bc && g(Wa)), d !== X ? (e = y(), e !== X ? (wc = b, c = Xa(c, e), b = c) : (vc = b, 
-                b = aa)) : (vc = b, b = aa)) : (vc = b, b = aa), Bc--, b === X && (c = X, 0 === Bc && g(Ua)), 
-                b;
-            }
-            function y() {
-                var b, c, d;
-                if (Bc++, b = vc, c = [], Za.test(a.charAt(vc)) ? (d = a.charAt(vc), vc++) : (d = X, 
-                0 === Bc && g($a)), d !== X) for (;d !== X; ) c.push(d), Za.test(a.charAt(vc)) ? (d = a.charAt(vc), 
-                vc++) : (d = X, 0 === Bc && g($a)); else c = aa;
-                return c !== X && (wc = b, c = _a(c)), b = c, Bc--, b === X && (c = X, 0 === Bc && g(Ya)), 
-                b;
-            }
-            function z() {
-                var b, c, d;
-                return Bc++, b = vc, 45 === a.charCodeAt(vc) ? (c = bb, vc++) : (c = X, 0 === Bc && g(cb)), 
-                c !== X ? (d = y(), d !== X ? (wc = b, c = db(c, d), b = c) : (vc = b, b = aa)) : (vc = b, 
-                b = aa), Bc--, b === X && (c = X, 0 === Bc && g(ab)), b;
-            }
-            function A() {
-                var a, b;
-                return Bc++, a = z(), a === X && (a = y()), Bc--, a === X && (b = X, 0 === Bc && g(eb)), 
-                a;
-            }
-            function B() {
-                var b, c, d, e;
-                if (Bc++, b = vc, c = C(), c === X && (c = ba), c !== X) {
-                    if (d = [], e = E(), e === X && (e = D()), e !== X) for (;e !== X; ) d.push(e), 
-                    e = E(), e === X && (e = D()); else d = aa;
-                    d !== X ? (wc = b, c = gb(c, d), b = c) : (vc = b, b = aa);
-                } else vc = b, b = aa;
-                if (b === X) if (b = vc, 46 === a.charCodeAt(vc) ? (c = Va, vc++) : (c = X, 0 === Bc && g(Wa)), 
-                c !== X) {
-                    for (d = [], e = E(), e === X && (e = D()); e !== X; ) d.push(e), e = E(), e === X && (e = D());
-                    d !== X ? (wc = b, c = hb(d), b = c) : (vc = b, b = aa);
-                } else vc = b, b = aa;
-                return Bc--, b === X && (c = X, 0 === Bc && g(fb)), b;
-            }
-            function C() {
-                var b, c, d, e;
-                if (Bc++, b = vc, jb.test(a.charAt(vc)) ? (c = a.charAt(vc), vc++) : (c = X, 0 === Bc && g(kb)), 
-                c !== X) {
-                    for (d = [], lb.test(a.charAt(vc)) ? (e = a.charAt(vc), vc++) : (e = X, 0 === Bc && g(mb)); e !== X; ) d.push(e), 
-                    lb.test(a.charAt(vc)) ? (e = a.charAt(vc), vc++) : (e = X, 0 === Bc && g(mb));
-                    d !== X ? (wc = b, c = nb(c, d), b = c) : (vc = b, b = aa);
-                } else vc = b, b = aa;
-                return Bc--, b === X && (c = X, 0 === Bc && g(ib)), b;
-            }
-            function D() {
-                var b, c, d, e, f, h;
-                if (Bc++, b = vc, c = vc, d = P(), d !== X) {
-                    if (e = vc, f = [], Za.test(a.charAt(vc)) ? (h = a.charAt(vc), vc++) : (h = X, 0 === Bc && g($a)), 
-                    h !== X) for (;h !== X; ) f.push(h), Za.test(a.charAt(vc)) ? (h = a.charAt(vc), 
-                    vc++) : (h = X, 0 === Bc && g($a)); else f = aa;
-                    f !== X && (wc = e, f = pb(f)), e = f, e === X && (e = v()), e !== X ? (f = Q(), 
-                    f !== X ? (wc = c, d = qb(e), c = d) : (vc = c, c = aa)) : (vc = c, c = aa);
-                } else vc = c, c = aa;
-                return c !== X ? (d = E(), d === X && (d = ba), d !== X ? (wc = b, c = rb(c, d), 
-                b = c) : (vc = b, b = aa)) : (vc = b, b = aa), Bc--, b === X && (c = X, 0 === Bc && g(ob)), 
-                b;
-            }
-            function E() {
-                var b, c, d, e, f;
-                if (Bc++, b = vc, c = [], d = vc, 46 === a.charCodeAt(vc) ? (e = Va, vc++) : (e = X, 
-                0 === Bc && g(Wa)), e !== X ? (f = C(), f !== X ? (wc = d, e = tb(f), d = e) : (vc = d, 
-                d = aa)) : (vc = d, d = aa), d !== X) for (;d !== X; ) c.push(d), d = vc, 46 === a.charCodeAt(vc) ? (e = Va, 
-                vc++) : (e = X, 0 === Bc && g(Wa)), e !== X ? (f = C(), f !== X ? (wc = d, e = tb(f), 
-                d = e) : (vc = d, d = aa)) : (vc = d, d = aa); else c = aa;
-                return c !== X ? (d = D(), d === X && (d = ba), d !== X ? (wc = b, c = ub(c, d), 
-                b = c) : (vc = b, b = aa)) : (vc = b, b = aa), Bc--, b === X && (c = X, 0 === Bc && g(sb)), 
-                b;
-            }
-            function F() {
-                var b, c, d, e;
-                if (Bc++, b = vc, 34 === a.charCodeAt(vc) ? (c = wb, vc++) : (c = X, 0 === Bc && g(xb)), 
-                c !== X ? (34 === a.charCodeAt(vc) ? (d = wb, vc++) : (d = X, 0 === Bc && g(xb)), 
-                d !== X ? (wc = b, c = yb(), b = c) : (vc = b, b = aa)) : (vc = b, b = aa), b === X && (b = vc, 
-                34 === a.charCodeAt(vc) ? (c = wb, vc++) : (c = X, 0 === Bc && g(xb)), c !== X ? (d = I(), 
-                d !== X ? (34 === a.charCodeAt(vc) ? (e = wb, vc++) : (e = X, 0 === Bc && g(xb)), 
-                e !== X ? (wc = b, c = zb(d), b = c) : (vc = b, b = aa)) : (vc = b, b = aa)) : (vc = b, 
-                b = aa), b === X)) if (b = vc, 34 === a.charCodeAt(vc) ? (c = wb, vc++) : (c = X, 
-                0 === Bc && g(xb)), c !== X) {
-                    if (d = [], e = G(), e !== X) for (;e !== X; ) d.push(e), e = G(); else d = aa;
-                    d !== X ? (34 === a.charCodeAt(vc) ? (e = wb, vc++) : (e = X, 0 === Bc && g(xb)), 
-                    e !== X ? (wc = b, c = Ab(d), b = c) : (vc = b, b = aa)) : (vc = b, b = aa);
-                } else vc = b, b = aa;
-                return Bc--, b === X && (c = X, 0 === Bc && g(vb)), b;
-            }
-            function G() {
-                var a, b;
-                return a = u(), a === X && (a = r(), a === X && (a = vc, b = I(), b !== X && (wc = a, 
-                b = Bb(b)), a = b)), a;
-            }
-            function H() {
-                var b, c, d, e, f, h, i, j;
-                if (Bc++, b = vc, c = R(), c !== X) {
-                    for (d = [], e = S(); e !== X; ) d.push(e), e = S();
-                    d !== X ? (wc = b, c = Db(c, d), b = c) : (vc = b, b = aa);
-                } else vc = b, b = aa;
-                if (b === X) {
-                    if (b = vc, c = [], d = vc, e = vc, Bc++, f = M(), Bc--, f === X ? e = da : (vc = e, 
-                    e = aa), e !== X ? (f = vc, Bc++, h = K(), Bc--, h === X ? f = da : (vc = f, f = aa), 
-                    f !== X ? (h = vc, Bc++, i = L(), Bc--, i === X ? h = da : (vc = h, h = aa), h !== X ? (i = vc, 
-                    Bc++, j = R(), Bc--, j === X ? i = da : (vc = i, i = aa), i !== X ? (a.length > vc ? (j = a.charAt(vc), 
-                    vc++) : (j = X, 0 === Bc && g(Eb)), j !== X ? (wc = d, e = Fb(j), d = e) : (vc = d, 
-                    d = aa)) : (vc = d, d = aa)) : (vc = d, d = aa)) : (vc = d, d = aa)) : (vc = d, 
-                    d = aa), d !== X) for (;d !== X; ) c.push(d), d = vc, e = vc, Bc++, f = M(), Bc--, 
-                    f === X ? e = da : (vc = e, e = aa), e !== X ? (f = vc, Bc++, h = K(), Bc--, h === X ? f = da : (vc = f, 
-                    f = aa), f !== X ? (h = vc, Bc++, i = L(), Bc--, i === X ? h = da : (vc = h, h = aa), 
-                    h !== X ? (i = vc, Bc++, j = R(), Bc--, j === X ? i = da : (vc = i, i = aa), i !== X ? (a.length > vc ? (j = a.charAt(vc), 
-                    vc++) : (j = X, 0 === Bc && g(Eb)), j !== X ? (wc = d, e = Fb(j), d = e) : (vc = d, 
-                    d = aa)) : (vc = d, d = aa)) : (vc = d, d = aa)) : (vc = d, d = aa)) : (vc = d, 
-                    d = aa); else c = aa;
-                    c !== X && (wc = b, c = Gb(c)), b = c;
-                }
-                return Bc--, b === X && (c = X, 0 === Bc && g(Cb)), b;
-            }
-            function I() {
-                var b, c, d, e, f;
-                if (Bc++, b = vc, c = [], d = vc, e = vc, Bc++, f = M(), Bc--, f === X ? e = da : (vc = e, 
-                e = aa), e !== X ? (f = J(), f === X && (Ib.test(a.charAt(vc)) ? (f = a.charAt(vc), 
-                vc++) : (f = X, 0 === Bc && g(Jb))), f !== X ? (wc = d, e = Fb(f), d = e) : (vc = d, 
-                d = aa)) : (vc = d, d = aa), d !== X) for (;d !== X; ) c.push(d), d = vc, e = vc, 
-                Bc++, f = M(), Bc--, f === X ? e = da : (vc = e, e = aa), e !== X ? (f = J(), f === X && (Ib.test(a.charAt(vc)) ? (f = a.charAt(vc), 
-                vc++) : (f = X, 0 === Bc && g(Jb))), f !== X ? (wc = d, e = Fb(f), d = e) : (vc = d, 
-                d = aa)) : (vc = d, d = aa); else c = aa;
-                return c !== X && (wc = b, c = Kb(c)), b = c, Bc--, b === X && (c = X, 0 === Bc && g(Hb)), 
-                b;
-            }
-            function J() {
-                var b, c;
-                return b = vc, a.substr(vc, 2) === Lb ? (c = Lb, vc += 2) : (c = X, 0 === Bc && g(Mb)), 
-                c !== X && (wc = b, c = Nb()), b = c;
-            }
-            function K() {
-                var b, c, d, e, f, h;
-                if (Bc++, b = vc, a.substr(vc, 2) === Pb ? (c = Pb, vc += 2) : (c = X, 0 === Bc && g(Qb)), 
-                c !== X) {
-                    for (d = [], e = vc, f = vc, Bc++, a.substr(vc, 2) === Rb ? (h = Rb, vc += 2) : (h = X, 
-                    0 === Bc && g(Sb)), Bc--, h === X ? f = da : (vc = f, f = aa), f !== X ? (a.length > vc ? (h = a.charAt(vc), 
-                    vc++) : (h = X, 0 === Bc && g(Eb)), h !== X ? (wc = e, f = Tb(h), e = f) : (vc = e, 
-                    e = aa)) : (vc = e, e = aa); e !== X; ) d.push(e), e = vc, f = vc, Bc++, a.substr(vc, 2) === Rb ? (h = Rb, 
-                    vc += 2) : (h = X, 0 === Bc && g(Sb)), Bc--, h === X ? f = da : (vc = f, f = aa), 
-                    f !== X ? (a.length > vc ? (h = a.charAt(vc), vc++) : (h = X, 0 === Bc && g(Eb)), 
-                    h !== X ? (wc = e, f = Tb(h), e = f) : (vc = e, e = aa)) : (vc = e, e = aa);
-                    d !== X ? (a.substr(vc, 2) === Rb ? (e = Rb, vc += 2) : (e = X, 0 === Bc && g(Sb)), 
-                    e !== X ? (wc = b, c = Ub(d), b = c) : (vc = b, b = aa)) : (vc = b, b = aa);
-                } else vc = b, b = aa;
-                return Bc--, b === X && (c = X, 0 === Bc && g(Ob)), b;
-            }
-            function L() {
-                var b, c, d, e, f, h;
-                if (Bc++, b = vc, a.substr(vc, 2) === Wb ? (c = Wb, vc += 2) : (c = X, 0 === Bc && g(Xb)), 
-                c !== X) {
-                    for (d = [], e = vc, f = vc, Bc++, a.substr(vc, 2) === Yb ? (h = Yb, vc += 2) : (h = X, 
-                    0 === Bc && g(Zb)), Bc--, h === X ? f = da : (vc = f, f = aa), f !== X ? (a.length > vc ? (h = a.charAt(vc), 
-                    vc++) : (h = X, 0 === Bc && g(Eb)), h !== X ? (wc = e, f = Fb(h), e = f) : (vc = e, 
-                    e = aa)) : (vc = e, e = aa); e !== X; ) d.push(e), e = vc, f = vc, Bc++, a.substr(vc, 2) === Yb ? (h = Yb, 
-                    vc += 2) : (h = X, 0 === Bc && g(Zb)), Bc--, h === X ? f = da : (vc = f, f = aa), 
-                    f !== X ? (a.length > vc ? (h = a.charAt(vc), vc++) : (h = X, 0 === Bc && g(Eb)), 
-                    h !== X ? (wc = e, f = Fb(h), e = f) : (vc = e, e = aa)) : (vc = e, e = aa);
-                    d !== X ? (a.substr(vc, 2) === Yb ? (e = Yb, vc += 2) : (e = X, 0 === Bc && g(Zb)), 
-                    e !== X ? (wc = b, c = $b(d), b = c) : (vc = b, b = aa)) : (vc = b, b = aa);
-                } else vc = b, b = aa;
-                return Bc--, b === X && (c = X, 0 === Bc && g(Vb)), b;
-            }
-            function M() {
-                var b, c, d, e, f, h, i, j, k, l;
-                if (b = vc, c = N(), c !== X) {
-                    for (d = [], e = S(); e !== X; ) d.push(e), e = S();
-                    if (d !== X) if (_b.test(a.charAt(vc)) ? (e = a.charAt(vc), vc++) : (e = X, 0 === Bc && g(ac)), 
-                    e !== X) {
-                        for (f = [], h = S(); h !== X; ) f.push(h), h = S();
-                        if (f !== X) {
-                            if (h = [], i = vc, j = vc, Bc++, k = O(), Bc--, k === X ? j = da : (vc = j, j = aa), 
-                            j !== X ? (k = vc, Bc++, l = R(), Bc--, l === X ? k = da : (vc = k, k = aa), k !== X ? (a.length > vc ? (l = a.charAt(vc), 
-                            vc++) : (l = X, 0 === Bc && g(Eb)), l !== X ? (j = [ j, k, l ], i = j) : (vc = i, 
-                            i = aa)) : (vc = i, i = aa)) : (vc = i, i = aa), i !== X) for (;i !== X; ) h.push(i), 
-                            i = vc, j = vc, Bc++, k = O(), Bc--, k === X ? j = da : (vc = j, j = aa), j !== X ? (k = vc, 
-                            Bc++, l = R(), Bc--, l === X ? k = da : (vc = k, k = aa), k !== X ? (a.length > vc ? (l = a.charAt(vc), 
-                            vc++) : (l = X, 0 === Bc && g(Eb)), l !== X ? (j = [ j, k, l ], i = j) : (vc = i, 
-                            i = aa)) : (vc = i, i = aa)) : (vc = i, i = aa); else h = aa;
-                            if (h !== X) {
-                                for (i = [], j = S(); j !== X; ) i.push(j), j = S();
-                                i !== X ? (j = O(), j !== X ? (c = [ c, d, e, f, h, i, j ], b = c) : (vc = b, b = aa)) : (vc = b, 
-                                b = aa);
-                            } else vc = b, b = aa;
-                        } else vc = b, b = aa;
-                    } else vc = b, b = aa; else vc = b, b = aa;
-                } else vc = b, b = aa;
-                return b === X && (b = r()), b;
-            }
-            function N() {
-                var b;
-                return 123 === a.charCodeAt(vc) ? (b = bc, vc++) : (b = X, 0 === Bc && g(cc)), b;
-            }
-            function O() {
-                var b;
-                return 125 === a.charCodeAt(vc) ? (b = dc, vc++) : (b = X, 0 === Bc && g(ec)), b;
-            }
-            function P() {
-                var b;
-                return 91 === a.charCodeAt(vc) ? (b = fc, vc++) : (b = X, 0 === Bc && g(gc)), b;
-            }
-            function Q() {
-                var b;
-                return 93 === a.charCodeAt(vc) ? (b = hc, vc++) : (b = X, 0 === Bc && g(ic)), b;
-            }
-            function R() {
-                var b;
-                return 10 === a.charCodeAt(vc) ? (b = jc, vc++) : (b = X, 0 === Bc && g(kc)), b === X && (a.substr(vc, 2) === lc ? (b = lc, 
-                vc += 2) : (b = X, 0 === Bc && g(mc)), b === X && (13 === a.charCodeAt(vc) ? (b = nc, 
-                vc++) : (b = X, 0 === Bc && g(oc)), b === X && (8232 === a.charCodeAt(vc) ? (b = pc, 
-                vc++) : (b = X, 0 === Bc && g(qc)), b === X && (8233 === a.charCodeAt(vc) ? (b = rc, 
-                vc++) : (b = X, 0 === Bc && g(sc)))))), b;
-            }
-            function S() {
-                var b;
-                return tc.test(a.charAt(vc)) ? (b = a.charAt(vc), vc++) : (b = X, 0 === Bc && g(uc)), 
-                b === X && (b = R()), b;
-            }
-            function T(a) {
-                return parseInt(a.join(""), 10);
-            }
-            function U(a) {
-                return a.concat([ [ "line", c() ], [ "col", d() ] ]);
-            }
-            var V, W = arguments.length > 1 ? arguments[1] : {}, X = {}, Y = {
-                start: i
-            }, Z = i, $ = function(a) {
-                var b = [ "body" ].concat(a);
-                return U(b);
-            }, _ = {
-                type: "other",
-                description: "section"
-            }, aa = X, ba = null, ca = function(a, b, c, d) {
-                return d && a[1].text === d.text || e("Expected end tag for " + a[1].text + " but it was not found."), 
-                !0;
-            }, da = void 0, ea = function(a, b, c) {
-                return c.push([ "param", [ "literal", "block" ], b ]), a.push(c, [ "filters" ]), 
-                U(a);
-            }, fa = "/", ga = {
-                type: "literal",
-                value: "/",
-                description: '"/"'
-            }, ha = function(a) {
-                return a.push([ "bodies" ], [ "filters" ]), U(a);
-            }, ia = /^[#?\^<+@%]/, ja = {
-                type: "class",
-                value: "[#?\\^<+@%]",
-                description: "[#?\\^<+@%]"
-            }, ka = function(a, b, c, d) {
-                return [ a, b, c, d ];
-            }, la = {
-                type: "other",
-                description: "end tag"
-            }, ma = function(a) {
-                return a;
-            }, na = ":", oa = {
-                type: "literal",
-                value: ":",
-                description: '":"'
-            }, pa = function(a) {
-                return a;
-            }, qa = function(a) {
-                return a ? [ "context", a ] : [ "context" ];
-            }, ra = {
-                type: "other",
-                description: "params"
-            }, sa = "=", ta = {
-                type: "literal",
-                value: "=",
-                description: '"="'
-            }, ua = function(a, b) {
-                return [ "param", [ "literal", a ], b ];
-            }, va = function(a) {
-                return [ "params" ].concat(a);
-            }, wa = {
-                type: "other",
-                description: "bodies"
-            }, xa = function(a) {
-                return [ "bodies" ].concat(a);
-            }, ya = {
-                type: "other",
-                description: "reference"
-            }, za = function(a, b) {
-                return U([ "reference", a, b ]);
-            }, Aa = {
-                type: "other",
-                description: "partial"
-            }, Ba = ">", Ca = {
-                type: "literal",
-                value: ">",
-                description: '">"'
-            }, Da = "+", Ea = {
-                type: "literal",
-                value: "+",
-                description: '"+"'
-            }, Fa = function(a) {
-                return [ "literal", a ];
-            }, Ga = function(a, b, c, d) {
-                var e = ">" === a ? "partial" : a;
-                return U([ e, b, c, d ]);
-            }, Ha = {
-                type: "other",
-                description: "filters"
-            }, Ia = "|", Ja = {
-                type: "literal",
-                value: "|",
-                description: '"|"'
-            }, Ka = function(a) {
-                return [ "filters" ].concat(a);
-            }, La = {
-                type: "other",
-                description: "special"
-            }, Ma = "~", Na = {
-                type: "literal",
-                value: "~",
-                description: '"~"'
-            }, Oa = function(a) {
-                return U([ "special", a ]);
-            }, Pa = {
-                type: "other",
-                description: "identifier"
-            }, Qa = function(a) {
-                var b = [ "path" ].concat(a);
-                return b.text = a[1].join(".").replace(/,line,\d+,col,\d+/g, ""), b;
-            }, Ra = function(a) {
-                var b = [ "key", a ];
-                return b.text = a, b;
-            }, Sa = {
-                type: "other",
-                description: "number"
-            }, Ta = function(a) {
-                return [ "literal", a ];
-            }, Ua = {
-                type: "other",
-                description: "float"
-            }, Va = ".", Wa = {
-                type: "literal",
-                value: ".",
-                description: '"."'
-            }, Xa = function(a, b) {
-                return parseFloat(a + "." + b);
-            }, Ya = {
-                type: "other",
-                description: "unsigned_integer"
-            }, Za = /^[0-9]/, $a = {
-                type: "class",
-                value: "[0-9]",
-                description: "[0-9]"
-            }, _a = function(a) {
-                return T(a);
-            }, ab = {
-                type: "other",
-                description: "signed_integer"
-            }, bb = "-", cb = {
-                type: "literal",
-                value: "-",
-                description: '"-"'
-            }, db = function(a, b) {
-                return -1 * b;
-            }, eb = {
-                type: "other",
-                description: "integer"
-            }, fb = {
-                type: "other",
-                description: "path"
-            }, gb = function(a, b) {
-                return b = b[0], a && b ? (b.unshift(a), U([ !1, b ])) : U([ !0, b ]);
-            }, hb = function(a) {
-                return U(a.length > 0 ? [ !0, a[0] ] : [ !0, [] ]);
-            }, ib = {
-                type: "other",
-                description: "key"
-            }, jb = /^[a-zA-Z_$]/, kb = {
-                type: "class",
-                value: "[a-zA-Z_$]",
-                description: "[a-zA-Z_$]"
-            }, lb = /^[0-9a-zA-Z_$\-]/, mb = {
-                type: "class",
-                value: "[0-9a-zA-Z_$\\-]",
-                description: "[0-9a-zA-Z_$\\-]"
-            }, nb = function(a, b) {
-                return a + b.join("");
-            }, ob = {
-                type: "other",
-                description: "array"
-            }, pb = function(a) {
-                return a.join("");
-            }, qb = function(a) {
-                return a;
-            }, rb = function(a, b) {
-                return b ? b.unshift(a) : b = [ a ], b;
-            }, sb = {
-                type: "other",
-                description: "array_part"
-            }, tb = function(a) {
-                return a;
-            }, ub = function(a, b) {
-                return b ? a.concat(b) : a;
-            }, vb = {
-                type: "other",
-                description: "inline"
-            }, wb = '"', xb = {
-                type: "literal",
-                value: '"',
-                description: '"\\""'
-            }, yb = function() {
-                return U([ "literal", "" ]);
-            }, zb = function(a) {
-                return U([ "literal", a ]);
-            }, Ab = function(a) {
-                return U([ "body" ].concat(a));
-            }, Bb = function(a) {
-                return [ "buffer", a ];
-            }, Cb = {
-                type: "other",
-                description: "buffer"
-            }, Db = function(a, b) {
-                return U([ "format", a, b.join("") ]);
-            }, Eb = {
-                type: "any",
-                description: "any character"
-            }, Fb = function(a) {
-                return a;
-            }, Gb = function(a) {
-                return U([ "buffer", a.join("") ]);
-            }, Hb = {
-                type: "other",
-                description: "literal"
-            }, Ib = /^[^"]/, Jb = {
-                type: "class",
-                value: '[^"]',
-                description: '[^"]'
-            }, Kb = function(a) {
-                return a.join("");
-            }, Lb = '\\"', Mb = {
-                type: "literal",
-                value: '\\"',
-                description: '"\\\\\\""'
-            }, Nb = function() {
-                return '"';
-            }, Ob = {
-                type: "other",
-                description: "raw"
-            }, Pb = "{`", Qb = {
-                type: "literal",
-                value: "{`",
-                description: '"{`"'
-            }, Rb = "`}", Sb = {
-                type: "literal",
-                value: "`}",
-                description: '"`}"'
-            }, Tb = function(a) {
-                return a;
-            }, Ub = function(a) {
-                return U([ "raw", a.join("") ]);
-            }, Vb = {
-                type: "other",
-                description: "comment"
-            }, Wb = "{!", Xb = {
-                type: "literal",
-                value: "{!",
-                description: '"{!"'
-            }, Yb = "!}", Zb = {
-                type: "literal",
-                value: "!}",
-                description: '"!}"'
-            }, $b = function(a) {
-                return U([ "comment", a.join("") ]);
-            }, _b = /^[#?\^><+%:@\/~%]/, ac = {
-                type: "class",
-                value: "[#?\\^><+%:@\\/~%]",
-                description: "[#?\\^><+%:@\\/~%]"
-            }, bc = "{", cc = {
-                type: "literal",
-                value: "{",
-                description: '"{"'
-            }, dc = "}", ec = {
-                type: "literal",
-                value: "}",
-                description: '"}"'
-            }, fc = "[", gc = {
-                type: "literal",
-                value: "[",
-                description: '"["'
-            }, hc = "]", ic = {
-                type: "literal",
-                value: "]",
-                description: '"]"'
-            }, jc = "\n", kc = {
-                type: "literal",
-                value: "\n",
-                description: '"\\n"'
-            }, lc = "\r\n", mc = {
-                type: "literal",
-                value: "\r\n",
-                description: '"\\r\\n"'
-            }, nc = "\r", oc = {
-                type: "literal",
-                value: "\r",
-                description: '"\\r"'
-            }, pc = "\u2028", qc = {
-                type: "literal",
-                value: "\u2028",
-                description: '"\\u2028"'
-            }, rc = "\u2029", sc = {
-                type: "literal",
-                value: "\u2029",
-                description: '"\\u2029"'
-            }, tc = /^[\t\x0B\f \xA0\uFEFF]/, uc = {
-                type: "class",
-                value: "[\\t\\x0B\\f \\xA0\\uFEFF]",
-                description: "[\\t\\x0B\\f \\xA0\\uFEFF]"
-            }, vc = 0, wc = 0, xc = 0, yc = {
-                line: 1,
-                column: 1,
-                seenCR: !1
-            }, zc = 0, Ac = [], Bc = 0;
-            if ("startRule" in W) {
-                if (!(W.startRule in Y)) throw new Error("Can't start parsing from rule \"" + W.startRule + '".');
-                Z = Y[W.startRule];
-            }
-            if (V = Z(), V !== X && vc === a.length) return V;
-            throw V !== X && vc < a.length && g({
-                type: "end",
-                description: "end of input"
-            }), h(null, Ac, zc);
-        }
-        return a(b, Error), {
-            SyntaxError: b,
-            parse: c
-        };
-    }();
-    return dust.parse = a.parse, a;
-}), function(a, b) {
-    "function" == typeof define && define.amd && define.amd.dust === !0 ? define("dust.compile", [ "dust.core", "dust.parse" ], function(dust, a) {
-        return b(a, dust).compile;
-    }) : "object" == typeof exports ? module.exports = b(require("./parser").parse, require("./dust")) : b(a.dust.parse, a.dust);
-}(this, function(a, dust) {
-    function b(a) {
-        var b = {};
-        return r.filterNode(b, a);
-    }
-    function c(a, b) {
-        var c, d, e, f = [ b[0] ];
-        for (c = 1, d = b.length; d > c; c++) e = r.filterNode(a, b[c]), e && f.push(e);
-        return f;
-    }
-    function d(a, b) {
-        var c, d, e, f, g = [ b[0] ];
-        for (d = 1, e = b.length; e > d; d++) f = r.filterNode(a, b[d]), f && ("buffer" === f[0] || "format" === f[0] ? c ? (c[0] = "buffer" === f[0] ? "buffer" : c[0], 
-        c[1] += f.slice(1, -2).join("")) : (c = f, g.push(f)) : (c = null, g.push(f)));
-        return g;
-    }
-    function e(a, b) {
-        return [ "buffer", t[b[1]], b[2], b[3] ];
-    }
-    function f(a, b) {
-        return b;
-    }
-    function g() {}
-    function h(a, b) {
-        return dust.config.whitespace ? (b.splice(1, 2, b.slice(1, -2).join("")), b) : null;
-    }
-    function i(a, b) {
-        var c, d = {
-            name: b,
-            bodies: [],
-            blocks: {},
-            index: 0,
-            auto: "h"
-        }, e = dust.escapeJs(b), f = b ? '"' + e + '",' : "", g = "function(dust){", h = r.compileNode(d, a);
-        return b && (g += 'dust.register("' + e + '",' + h + ");"), g += j(d) + k(d) + "return " + h + "}", 
-        c = "(" + g + "(dust));", dust.config.amd ? "define(" + f + '["dust.core"],' + g + ");" : dust.config.cjs ? "module.exports=function(dust){var tmpl=" + c + "var f=" + q().toString() + ";f.template=tmpl;return f}" : c;
-    }
-    function j(a) {
-        var b, c = [], d = a.blocks;
-        for (b in d) c.push('"' + b + '":' + d[b]);
-        return c.length ? (a.blocks = "ctx=ctx.shiftBlocks(blocks);", "var blocks={" + c.join(",") + "};") : (a.blocks = "", 
-        a.blocks);
-    }
-    function k(a) {
-        var b, c, d = [], e = a.bodies, f = a.blocks;
-        for (b = 0, c = e.length; c > b; b++) d[b] = "function body_" + b + "(chk,ctx){" + f + "return chk" + e[b] + ";}body_" + b + ".__dustBody=!0;";
-        return d.join("");
-    }
-    function l(a, b) {
-        var c, d, e = "";
-        for (c = 1, d = b.length; d > c; c++) e += r.compileNode(a, b[c]);
-        return e;
-    }
-    function m(a, b, c) {
-        return "." + (dust._aliases[c] || c) + "(" + r.compileNode(a, b[1]) + "," + r.compileNode(a, b[2]) + "," + r.compileNode(a, b[4]) + "," + r.compileNode(a, b[3]) + ")";
-    }
-    function n(a) {
-        return a.replace(u, "\\\\").replace(v, '\\"').replace(w, "\\f").replace(x, "\\n").replace(y, "\\r").replace(z, "\\t");
-    }
-    function o(a, b, c) {
-        var d = dust.loadSource(dust.compile(a));
-        return q(d)(b, c);
-    }
-    function p(a, b) {
-        var c = dust.loadSource(dust.compile(a, b));
-        return q(c);
-    }
-    function q(a) {
-        return function(b, c) {
-            var d = c ? "render" : "stream";
-            return dust[d](a, b, c);
-        };
-    }
-    var r = {}, s = dust.isArray;
-    r.compile = function(c, d) {
-        try {
-            var e = b(a(c));
-            return i(e, d);
-        } catch (f) {
-            if (!f.line || !f.column) throw f;
-            throw new SyntaxError(f.message + " At line : " + f.line + ", column : " + f.column);
-        }
-    }, r.filterNode = function(a, b) {
-        return r.optimizers[b[0]](a, b);
-    }, r.optimizers = {
-        body: d,
-        buffer: f,
-        special: e,
-        format: h,
-        reference: c,
-        "#": c,
-        "?": c,
-        "^": c,
-        "<": c,
-        "+": c,
-        "@": c,
-        "%": c,
-        partial: c,
-        context: c,
-        params: c,
-        bodies: c,
-        param: c,
-        filters: f,
-        key: f,
-        path: f,
-        literal: f,
-        raw: f,
-        comment: g,
-        line: g,
-        col: g
-    }, r.pragmas = {
-        esc: function(a, b, c) {
-            var d, e = a.auto;
-            return b || (b = "h"), a.auto = "s" === b ? "" : b, d = l(a, c.block), a.auto = e, 
-            d;
-        }
-    };
-    var t = {
-        s: " ",
-        n: "\n",
-        r: "\r",
-        lb: "{",
-        rb: "}"
-    };
-    r.compileNode = function(a, b) {
-        return r.nodes[b[0]](a, b);
-    }, r.nodes = {
-        body: function(a, b) {
-            var c = a.index++, d = "body_" + c;
-            return a.bodies[c] = l(a, b), d;
-        },
-        buffer: function(a, b) {
-            return ".w(" + A(b[1]) + ")";
-        },
-        format: function(a, b) {
-            return ".w(" + A(b[1]) + ")";
-        },
-        reference: function(a, b) {
-            return ".f(" + r.compileNode(a, b[1]) + ",ctx," + r.compileNode(a, b[2]) + ")";
-        },
-        "#": function(a, b) {
-            return m(a, b, "section");
-        },
-        "?": function(a, b) {
-            return m(a, b, "exists");
-        },
-        "^": function(a, b) {
-            return m(a, b, "notexists");
-        },
-        "<": function(a, b) {
-            for (var c = b[4], d = 1, e = c.length; e > d; d++) {
-                var f = c[d], g = f[1][1];
-                if ("block" === g) return a.blocks[b[1].text] = r.compileNode(a, f[2]), "";
-            }
-            return "";
-        },
-        "+": function(a, b) {
-            return "undefined" == typeof b[1].text && "undefined" == typeof b[4] ? ".b(ctx.getBlock(" + r.compileNode(a, b[1]) + ",chk, ctx)," + r.compileNode(a, b[2]) + ", {}," + r.compileNode(a, b[3]) + ")" : ".b(ctx.getBlock(" + A(b[1].text) + ")," + r.compileNode(a, b[2]) + "," + r.compileNode(a, b[4]) + "," + r.compileNode(a, b[3]) + ")";
-        },
-        "@": function(a, b) {
-            return ".h(" + A(b[1].text) + "," + r.compileNode(a, b[2]) + "," + r.compileNode(a, b[4]) + "," + r.compileNode(a, b[3]) + "," + r.compileNode(a, b[5]) + ")";
-        },
-        "%": function(a, b) {
-            var c, d, e, f, g, h, i, j, k, l = b[1][1];
-            if (!r.pragmas[l]) return "";
-            for (c = b[4], d = {}, j = 1, k = c.length; k > j; j++) h = c[j], d[h[1][1]] = h[2];
-            for (e = b[3], f = {}, j = 1, k = e.length; k > j; j++) i = e[j], f[i[1][1]] = i[2][1];
-            return g = b[2][1] ? b[2][1].text : null, r.pragmas[l](a, g, d, f);
-        },
-        partial: function(a, b) {
-            return ".p(" + r.compileNode(a, b[1]) + ",ctx," + r.compileNode(a, b[2]) + "," + r.compileNode(a, b[3]) + ")";
-        },
-        context: function(a, b) {
-            return b[1] ? "ctx.rebase(" + r.compileNode(a, b[1]) + ")" : "ctx";
-        },
-        params: function(a, b) {
-            for (var c = [], d = 1, e = b.length; e > d; d++) c.push(r.compileNode(a, b[d]));
-            return c.length ? "{" + c.join(",") + "}" : "{}";
-        },
-        bodies: function(a, b) {
-            for (var c = [], d = 1, e = b.length; e > d; d++) c.push(r.compileNode(a, b[d]));
-            return "{" + c.join(",") + "}";
-        },
-        param: function(a, b) {
-            return r.compileNode(a, b[1]) + ":" + r.compileNode(a, b[2]);
-        },
-        filters: function(a, b) {
-            for (var c = [], d = 1, e = b.length; e > d; d++) {
-                var f = b[d];
-                c.push('"' + f + '"');
-            }
-            return '"' + a.auto + '"' + (c.length ? ",[" + c.join(",") + "]" : "");
-        },
-        key: function(a, b) {
-            return 'ctx.get(["' + b[1] + '"], false)';
-        },
-        path: function(a, b) {
-            for (var c = b[1], d = b[2], e = [], f = 0, g = d.length; g > f; f++) e.push(s(d[f]) ? r.compileNode(a, d[f]) : '"' + d[f] + '"');
-            return "ctx.getPath(" + c + ", [" + e.join(",") + "])";
-        },
-        literal: function(a, b) {
-            return A(b[1]);
-        },
-        raw: function(a, b) {
-            return ".w(" + A(b[1]) + ")";
-        }
-    };
-    var u = /\\/g, v = /"/g, w = /\f/g, x = /\n/g, y = /\r/g, z = /\t/g, A = "undefined" == typeof JSON ? function(a) {
-        return '"' + n(a) + '"';
-    } : JSON.stringify;
-    return dust.compiler = r, dust.compile = dust.compiler.compile, dust.renderSource = o, 
-    dust.compileFn = p, dust.filterNode = r.filterNode, dust.optimizers = r.optimizers, 
-    dust.pragmas = r.pragmas, dust.compileNode = r.compileNode, dust.nodes = r.nodes, 
-    r;
-}), "function" == typeof define && define.amd && define.amd.dust === !0 && define([ "require", "dust.core", "dust.compile" ], function(require, dust) {
-    return dust.onLoad = function(a, b) {
-        require([ a ], function() {
-            b();
-        });
-    }, dust;
-});
-
-!function(a, b) {
-    "function" == typeof define && define.amd && define.amd.dust === !0 ? define([ "dust.core" ], b) : "object" == typeof exports ? (module.exports = b(require("dustjs-linkedin")), 
-    module.exports.registerWith = b) : b(a.dust);
-}(this, function(dust) {
-    function a(a, b, c) {
-        c = c || "INFO", a = a ? "{@" + a + "}: " : "", dust.log(a + b, c);
-    }
-    function b(b) {
-        k[b] || (a(b, "Deprecation warning: " + b + " is deprecated and will be removed in a future version of dustjs-helpers", "WARN"), 
-        a(null, "For help and a deprecation timeline, see https://github.com/linkedin/dustjs-helpers/wiki/Deprecated-Features#" + b.replace(/\W+/g, ""), "WARN"), 
-        k[b] = !0);
-    }
-    function c(a) {
-        return a.stack.tail && a.stack.tail.head && "undefined" != typeof a.stack.tail.head.__select__;
-    }
-    function d(a) {
-        return c(a) && a.get("__select__");
-    }
-    function e(a, b) {
-        var c, d = a.stack.head, e = a.rebase();
-        a.stack && a.stack.tail && (e.stack = a.stack.tail);
-        var f = {
-            isPending: !1,
-            isResolved: !1,
-            isDeferredComplete: !1,
-            deferreds: []
-        };
-        for (c in b) f[c] = b[c];
-        return e.push({
-            __select__: f
-        }).push(d, a.stack.index, a.stack.of);
-    }
-    function f(a) {
-        var b, c;
-        if (a.isDeferredPending = !0, a.deferreds.length) for (a.isDeferredComplete = !0, 
-        b = 0, c = a.deferreds.length; c > b; b++) a.deferreds[b]();
-        a.isDeferredPending = !1;
-    }
-    function g(a, b) {
-        return "function" == typeof b ? b.toString().replace(/(^\s+|\s+$)/gm, "").replace(/\n/gm, "").replace(/,\s*/gm, ", ").replace(/\)\{/gm, ") {") : b;
-    }
-    function h(a, b) {
-        return function(c, d, e, f) {
-            return i(c, d, e, f, a, b);
-        };
-    }
-    function i(b, c, e, f, g, h) {
-        var i, k, l, m, n = e.block, o = e["else"], p = d(c) || {};
-        if (p.isResolved && !p.isDeferredPending) return b;
-        if (f.hasOwnProperty("key")) k = f.key; else {
-            if (!p.hasOwnProperty("key")) return a(g, "No key specified", "WARN"), b;
-            k = p.key;
-        }
-        return m = f.type || p.type, k = j(c.resolve(k), m), l = j(c.resolve(f.value), m), 
-        h(k, l) ? (p.isPending || (i = !0, p.isPending = !0), n && (b = b.render(n, c)), 
-        i && (p.isResolved = !0)) : o && (b = b.render(o, c)), b;
-    }
-    function j(a, b) {
-        switch (b && (b = b.toLowerCase()), b) {
-          case "number":
-            return +a;
-
-          case "string":
-            return String(a);
-
-          case "boolean":
-            return a = "false" === a ? !1 : a, Boolean(a);
-
-          case "date":
-            return new Date(a);
-        }
-        return a;
-    }
-    var k = {}, l = {
-        tap: function(a, c, d) {
-            return b("tap"), d.resolve(a);
-        },
-        sep: function(a, b, c) {
-            var d = c.block;
-            return b.stack.index === b.stack.of - 1 ? a : d ? d(a, b) : a;
-        },
-        first: function(a, b, c) {
-            return 0 === b.stack.index ? c.block(a, b) : a;
-        },
-        last: function(a, b, c) {
-            return b.stack.index === b.stack.of - 1 ? c.block(a, b) : a;
-        },
-        contextDump: function(b, c, d, e) {
-            var f, h, i = c.resolve(e.to), j = c.resolve(e.key);
-            switch (j) {
-              case "full":
-                f = c.stack;
-                break;
-
-              default:
-                f = c.stack.head;
-            }
-            switch (h = JSON.stringify(f, g, 2), i) {
-              case "console":
-                a("contextDump", h);
-                break;
-
-              default:
-                h = h.replace(/</g, "\\u003c"), b = b.write(h);
-            }
-            return b;
-        },
-        math: function(b, c, g, h) {
-            var i, j = h.key, k = h.method, l = h.operand, m = h.round;
-            if (!h.hasOwnProperty("key") || !h.method) return a("math", "`key` or `method` was not provided", "ERROR"), 
-            b;
-            switch (j = parseFloat(c.resolve(j)), l = parseFloat(c.resolve(l)), k) {
-              case "mod":
-                0 === l && a("math", "Division by 0", "ERROR"), i = j % l;
-                break;
-
-              case "add":
-                i = j + l;
-                break;
-
-              case "subtract":
-                i = j - l;
-                break;
-
-              case "multiply":
-                i = j * l;
-                break;
-
-              case "divide":
-                0 === l && a("math", "Division by 0", "ERROR"), i = j / l;
-                break;
-
-              case "ceil":
-              case "floor":
-              case "round":
-              case "abs":
-                i = Math[k](j);
-                break;
-
-              case "toint":
-                i = parseInt(j, 10);
-                break;
-
-              default:
-                a("math", "Method `" + k + "` is not supported", "ERROR");
-            }
-            return "undefined" != typeof i && (m && (i = Math.round(i)), g && g.block ? (c = e(c, {
-                key: i
-            }), b = b.render(g.block, c), f(d(c))) : b = b.write(i)), b;
-        },
-        select: function(b, c, g, h) {
-            var i = g.block, j = {};
-            return h.hasOwnProperty("key") && (j.key = c.resolve(h.key)), h.hasOwnProperty("type") && (j.type = h.type), 
-            i ? (c = e(c, j), b = b.render(i, c), f(d(c))) : a("select", "Missing body block", "WARN"), 
-            b;
-        },
-        eq: h("eq", function(a, b) {
-            return a === b;
-        }),
-        ne: h("ne", function(a, b) {
-            return a !== b;
-        }),
-        lt: h("lt", function(a, b) {
-            return b > a;
-        }),
-        lte: h("lte", function(a, b) {
-            return b >= a;
-        }),
-        gt: h("gt", function(a, b) {
-            return a > b;
-        }),
-        gte: h("gte", function(a, b) {
-            return a >= b;
-        }),
-        any: function(b, c, e) {
-            var f = d(c);
-            return f ? f.isDeferredComplete ? a("any", "Must not be nested inside {@any} or {@none} block", "ERROR") : b = b.map(function(a) {
-                f.deferreds.push(function() {
-                    f.isResolved && (a = a.render(e.block, c)), a.end();
-                });
-            }) : a("any", "Must be used inside a {@select} block", "ERROR"), b;
-        },
-        none: function(b, c, e) {
-            var f = d(c);
-            return f ? f.isDeferredComplete ? a("none", "Must not be nested inside {@any} or {@none} block", "ERROR") : b = b.map(function(a) {
-                f.deferreds.push(function() {
-                    f.isResolved || (a = a.render(e.block, c)), a.end();
-                });
-            }) : a("none", "Must be used inside a {@select} block", "ERROR"), b;
-        },
-        size: function(a, b, c, d) {
-            var e, f, g = d.key;
-            if (g = b.resolve(d.key), g && g !== !0) if (dust.isArray(g)) e = g.length; else if (!isNaN(parseFloat(g)) && isFinite(g)) e = g; else if ("object" == typeof g) {
-                e = 0;
-                for (f in g) g.hasOwnProperty(f) && e++;
-            } else e = (g + "").length; else e = 0;
-            return a.write(e);
-        }
-    };
-    for (var m in l) dust.helpers[m] = l[m];
-    return dust;
-});
-
-(function() {
-    function n(n, t, r) {
-        switch (r.length) {
-          case 0:
-            return n.call(t);
-
-          case 1:
-            return n.call(t, r[0]);
-
-          case 2:
-            return n.call(t, r[0], r[1]);
-
-          case 3:
-            return n.call(t, r[0], r[1], r[2]);
-        }
-        return n.apply(t, r);
-    }
-    function t(n, t, r, e) {
-        for (var u = -1, i = null == n ? 0 : n.length; ++u < i; ) {
-            var o = n[u];
-            t(e, o, r(o), n);
-        }
-        return e;
-    }
-    function r(n, t) {
-        for (var r = -1, e = null == n ? 0 : n.length; ++r < e && t(n[r], r, n) !== !1; ) ;
-        return n;
-    }
-    function e(n, t) {
-        for (var r = null == n ? 0 : n.length; r-- && t(n[r], r, n) !== !1; ) ;
-        return n;
-    }
-    function u(n, t) {
-        for (var r = -1, e = null == n ? 0 : n.length; ++r < e; ) if (!t(n[r], r, n)) return !1;
-        return !0;
-    }
-    function i(n, t) {
-        for (var r = -1, e = null == n ? 0 : n.length, u = 0, i = []; ++r < e; ) {
-            var o = n[r];
-            t(o, r, n) && (i[u++] = o);
-        }
-        return i;
-    }
-    function o(n, t) {
-        return !!(null == n ? 0 : n.length) && y(n, t, 0) > -1;
-    }
-    function f(n, t, r) {
-        for (var e = -1, u = null == n ? 0 : n.length; ++e < u; ) if (r(t, n[e])) return !0;
-        return !1;
-    }
-    function c(n, t) {
-        for (var r = -1, e = null == n ? 0 : n.length, u = Array(e); ++r < e; ) u[r] = t(n[r], r, n);
-        return u;
-    }
-    function a(n, t) {
-        for (var r = -1, e = t.length, u = n.length; ++r < e; ) n[u + r] = t[r];
-        return n;
-    }
-    function l(n, t, r, e) {
-        var u = -1, i = null == n ? 0 : n.length;
-        for (e && i && (r = n[++u]); ++u < i; ) r = t(r, n[u], u, n);
-        return r;
-    }
-    function s(n, t, r, e) {
-        var u = null == n ? 0 : n.length;
-        for (e && u && (r = n[--u]); u--; ) r = t(r, n[u], u, n);
-        return r;
-    }
-    function h(n, t) {
-        for (var r = -1, e = null == n ? 0 : n.length; ++r < e; ) if (t(n[r], r, n)) return !0;
-        return !1;
-    }
-    function p(n) {
-        return n.split("");
-    }
-    function _(n) {
-        return n.match($t) || [];
-    }
-    function v(n, t, r) {
-        var e;
-        return r(n, function(n, r, u) {
-            if (t(n, r, u)) return e = r, !1;
-        }), e;
-    }
-    function g(n, t, r, e) {
-        for (var u = n.length, i = r + (e ? 1 : -1); e ? i-- : ++i < u; ) if (t(n[i], i, n)) return i;
-        return -1;
-    }
-    function y(n, t, r) {
-        return t === t ? Z(n, t, r) : g(n, b, r);
-    }
-    function d(n, t, r, e) {
-        for (var u = r - 1, i = n.length; ++u < i; ) if (e(n[u], t)) return u;
-        return -1;
-    }
-    function b(n) {
-        return n !== n;
-    }
-    function w(n, t) {
-        var r = null == n ? 0 : n.length;
-        return r ? k(n, t) / r : Cn;
-    }
-    function m(n) {
-        return function(t) {
-            return null == t ? X : t[n];
-        };
-    }
-    function x(n) {
-        return function(t) {
-            return null == n ? X : n[t];
-        };
-    }
-    function j(n, t, r, e, u) {
-        return u(n, function(n, u, i) {
-            r = e ? (e = !1, n) : t(r, n, u, i);
-        }), r;
-    }
-    function A(n, t) {
-        var r = n.length;
-        for (n.sort(t); r--; ) n[r] = n[r].value;
-        return n;
-    }
-    function k(n, t) {
-        for (var r, e = -1, u = n.length; ++e < u; ) {
-            var i = t(n[e]);
-            i !== X && (r = r === X ? i : r + i);
-        }
-        return r;
-    }
-    function O(n, t) {
-        for (var r = -1, e = Array(n); ++r < n; ) e[r] = t(r);
-        return e;
-    }
-    function I(n, t) {
-        return c(t, function(t) {
-            return [ t, n[t] ];
-        });
-    }
-    function R(n) {
-        return n ? n.slice(0, H(n) + 1).replace(Lt, "") : n;
-    }
-    function z(n) {
-        return function(t) {
-            return n(t);
-        };
-    }
-    function E(n, t) {
-        return c(t, function(t) {
-            return n[t];
-        });
-    }
-    function S(n, t) {
-        return n.has(t);
-    }
-    function W(n, t) {
-        for (var r = -1, e = n.length; ++r < e && y(t, n[r], 0) > -1; ) ;
-        return r;
-    }
-    function L(n, t) {
-        for (var r = n.length; r-- && y(t, n[r], 0) > -1; ) ;
-        return r;
-    }
-    function C(n, t) {
-        for (var r = n.length, e = 0; r--; ) n[r] === t && ++e;
-        return e;
-    }
-    function U(n) {
-        return "\\" + Yr[n];
-    }
-    function B(n, t) {
-        return null == n ? X : n[t];
-    }
-    function T(n) {
-        return Nr.test(n);
-    }
-    function $(n) {
-        return Pr.test(n);
-    }
-    function D(n) {
-        for (var t, r = []; !(t = n.next()).done; ) r.push(t.value);
-        return r;
-    }
-    function M(n) {
-        var t = -1, r = Array(n.size);
-        return n.forEach(function(n, e) {
-            r[++t] = [ e, n ];
-        }), r;
-    }
-    function F(n, t) {
-        return function(r) {
-            return n(t(r));
-        };
-    }
-    function N(n, t) {
-        for (var r = -1, e = n.length, u = 0, i = []; ++r < e; ) {
-            var o = n[r];
-            o !== t && o !== cn || (n[r] = cn, i[u++] = r);
-        }
-        return i;
-    }
-    function P(n) {
-        var t = -1, r = Array(n.size);
-        return n.forEach(function(n) {
-            r[++t] = n;
-        }), r;
-    }
-    function q(n) {
-        var t = -1, r = Array(n.size);
-        return n.forEach(function(n) {
-            r[++t] = [ n, n ];
-        }), r;
-    }
-    function Z(n, t, r) {
-        for (var e = r - 1, u = n.length; ++e < u; ) if (n[e] === t) return e;
-        return -1;
-    }
-    function K(n, t, r) {
-        for (var e = r + 1; e--; ) if (n[e] === t) return e;
-        return e;
-    }
-    function V(n) {
-        return T(n) ? J(n) : _e(n);
-    }
-    function G(n) {
-        return T(n) ? Y(n) : p(n);
-    }
-    function H(n) {
-        for (var t = n.length; t-- && Ct.test(n.charAt(t)); ) ;
-        return t;
-    }
-    function J(n) {
-        for (var t = Mr.lastIndex = 0; Mr.test(n); ) ++t;
-        return t;
-    }
-    function Y(n) {
-        return n.match(Mr) || [];
-    }
-    function Q(n) {
-        return n.match(Fr) || [];
-    }
-    var X, nn = "4.17.21", tn = 200, rn = "Unsupported core-js use. Try https://npms.io/search?q=ponyfill.", en = "Expected a function", un = "Invalid `variable` option passed into `_.template`", on = "__lodash_hash_undefined__", fn = 500, cn = "__lodash_placeholder__", an = 1, ln = 2, sn = 4, hn = 1, pn = 2, _n = 1, vn = 2, gn = 4, yn = 8, dn = 16, bn = 32, wn = 64, mn = 128, xn = 256, jn = 512, An = 30, kn = "...", On = 800, In = 16, Rn = 1, zn = 2, En = 3, Sn = 1 / 0, Wn = 9007199254740991, Ln = 17976931348623157e292, Cn = NaN, Un = 4294967295, Bn = Un - 1, Tn = Un >>> 1, $n = [ [ "ary", mn ], [ "bind", _n ], [ "bindKey", vn ], [ "curry", yn ], [ "curryRight", dn ], [ "flip", jn ], [ "partial", bn ], [ "partialRight", wn ], [ "rearg", xn ] ], Dn = "[object Arguments]", Mn = "[object Array]", Fn = "[object AsyncFunction]", Nn = "[object Boolean]", Pn = "[object Date]", qn = "[object DOMException]", Zn = "[object Error]", Kn = "[object Function]", Vn = "[object GeneratorFunction]", Gn = "[object Map]", Hn = "[object Number]", Jn = "[object Null]", Yn = "[object Object]", Qn = "[object Promise]", Xn = "[object Proxy]", nt = "[object RegExp]", tt = "[object Set]", rt = "[object String]", et = "[object Symbol]", ut = "[object Undefined]", it = "[object WeakMap]", ot = "[object WeakSet]", ft = "[object ArrayBuffer]", ct = "[object DataView]", at = "[object Float32Array]", lt = "[object Float64Array]", st = "[object Int8Array]", ht = "[object Int16Array]", pt = "[object Int32Array]", _t = "[object Uint8Array]", vt = "[object Uint8ClampedArray]", gt = "[object Uint16Array]", yt = "[object Uint32Array]", dt = /\b__p \+= '';/g, bt = /\b(__p \+=) '' \+/g, wt = /(__e\(.*?\)|\b__t\)) \+\n'';/g, mt = /&(?:amp|lt|gt|quot|#39);/g, xt = /[&<>"']/g, jt = RegExp(mt.source), At = RegExp(xt.source), kt = /<%-([\s\S]+?)%>/g, Ot = /<%([\s\S]+?)%>/g, It = /<%=([\s\S]+?)%>/g, Rt = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, zt = /^\w*$/, Et = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, St = /[\\^$.*+?()[\]{}|]/g, Wt = RegExp(St.source), Lt = /^\s+/, Ct = /\s/, Ut = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, Bt = /\{\n\/\* \[wrapped with (.+)\] \*/, Tt = /,? & /, $t = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g, Dt = /[()=,{}\[\]\/\s]/, Mt = /\\(\\)?/g, Ft = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g, Nt = /\w*$/, Pt = /^[-+]0x[0-9a-f]+$/i, qt = /^0b[01]+$/i, Zt = /^\[object .+?Constructor\]$/, Kt = /^0o[0-7]+$/i, Vt = /^(?:0|[1-9]\d*)$/, Gt = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g, Ht = /($^)/, Jt = /['\n\r\u2028\u2029\\]/g, Yt = "\\ud800-\\udfff", Qt = "\\u0300-\\u036f", Xt = "\\ufe20-\\ufe2f", nr = "\\u20d0-\\u20ff", tr = Qt + Xt + nr, rr = "\\u2700-\\u27bf", er = "a-z\\xdf-\\xf6\\xf8-\\xff", ur = "\\xac\\xb1\\xd7\\xf7", ir = "\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf", or = "\\u2000-\\u206f", fr = " \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000", cr = "A-Z\\xc0-\\xd6\\xd8-\\xde", ar = "\\ufe0e\\ufe0f", lr = ur + ir + or + fr, sr = "['’]", hr = "[" + Yt + "]", pr = "[" + lr + "]", _r = "[" + tr + "]", vr = "\\d+", gr = "[" + rr + "]", yr = "[" + er + "]", dr = "[^" + Yt + lr + vr + rr + er + cr + "]", br = "\\ud83c[\\udffb-\\udfff]", wr = "(?:" + _r + "|" + br + ")", mr = "[^" + Yt + "]", xr = "(?:\\ud83c[\\udde6-\\uddff]){2}", jr = "[\\ud800-\\udbff][\\udc00-\\udfff]", Ar = "[" + cr + "]", kr = "\\u200d", Or = "(?:" + yr + "|" + dr + ")", Ir = "(?:" + Ar + "|" + dr + ")", Rr = "(?:" + sr + "(?:d|ll|m|re|s|t|ve))?", zr = "(?:" + sr + "(?:D|LL|M|RE|S|T|VE))?", Er = wr + "?", Sr = "[" + ar + "]?", Wr = "(?:" + kr + "(?:" + [ mr, xr, jr ].join("|") + ")" + Sr + Er + ")*", Lr = "\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])", Cr = "\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])", Ur = Sr + Er + Wr, Br = "(?:" + [ gr, xr, jr ].join("|") + ")" + Ur, Tr = "(?:" + [ mr + _r + "?", _r, xr, jr, hr ].join("|") + ")", $r = RegExp(sr, "g"), Dr = RegExp(_r, "g"), Mr = RegExp(br + "(?=" + br + ")|" + Tr + Ur, "g"), Fr = RegExp([ Ar + "?" + yr + "+" + Rr + "(?=" + [ pr, Ar, "$" ].join("|") + ")", Ir + "+" + zr + "(?=" + [ pr, Ar + Or, "$" ].join("|") + ")", Ar + "?" + Or + "+" + Rr, Ar + "+" + zr, Cr, Lr, vr, Br ].join("|"), "g"), Nr = RegExp("[" + kr + Yt + tr + ar + "]"), Pr = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/, qr = [ "Array", "Buffer", "DataView", "Date", "Error", "Float32Array", "Float64Array", "Function", "Int8Array", "Int16Array", "Int32Array", "Map", "Math", "Object", "Promise", "RegExp", "Set", "String", "Symbol", "TypeError", "Uint8Array", "Uint8ClampedArray", "Uint16Array", "Uint32Array", "WeakMap", "_", "clearTimeout", "isFinite", "parseInt", "setTimeout" ], Zr = -1, Kr = {};
-    Kr[at] = Kr[lt] = Kr[st] = Kr[ht] = Kr[pt] = Kr[_t] = Kr[vt] = Kr[gt] = Kr[yt] = !0, 
-    Kr[Dn] = Kr[Mn] = Kr[ft] = Kr[Nn] = Kr[ct] = Kr[Pn] = Kr[Zn] = Kr[Kn] = Kr[Gn] = Kr[Hn] = Kr[Yn] = Kr[nt] = Kr[tt] = Kr[rt] = Kr[it] = !1;
-    var Vr = {};
-    Vr[Dn] = Vr[Mn] = Vr[ft] = Vr[ct] = Vr[Nn] = Vr[Pn] = Vr[at] = Vr[lt] = Vr[st] = Vr[ht] = Vr[pt] = Vr[Gn] = Vr[Hn] = Vr[Yn] = Vr[nt] = Vr[tt] = Vr[rt] = Vr[et] = Vr[_t] = Vr[vt] = Vr[gt] = Vr[yt] = !0, 
-    Vr[Zn] = Vr[Kn] = Vr[it] = !1;
-    var Gr = {
-        "À": "A",
-        "Á": "A",
-        "Â": "A",
-        "Ã": "A",
-        "Ä": "A",
-        "Ã…": "A",
-        "à": "a",
-        "á": "a",
-        "â": "a",
-        "ã": "a",
-        "ä": "a",
-        "Ã¥": "a",
-        "Ç": "C",
-        "ç": "c",
-        "Ð": "D",
-        "ð": "d",
-        "È": "E",
-        "É": "E",
-        "Ê": "E",
-        "Ë": "E",
-        "è": "e",
-        "é": "e",
-        "ê": "e",
-        "ë": "e",
-        "Ì": "I",
-        "Í": "I",
-        "ÃŽ": "I",
-        "Ï": "I",
-        "ì": "i",
-        "í": "i",
-        "î": "i",
-        "ï": "i",
-        "Ñ": "N",
-        "ñ": "n",
-        "Ã’": "O",
-        "Ó": "O",
-        "Ô": "O",
-        "Õ": "O",
-        "Ö": "O",
-        "Ø": "O",
-        "ò": "o",
-        "ó": "o",
-        "ô": "o",
-        "õ": "o",
-        "ö": "o",
-        "ø": "o",
-        "Ù": "U",
-        "Ú": "U",
-        "Û": "U",
-        "Ü": "U",
-        "ù": "u",
-        "ú": "u",
-        "û": "u",
-        "ü": "u",
-        "Ý": "Y",
-        "ý": "y",
-        "ÿ": "y",
-        "Æ": "Ae",
-        "æ": "ae",
-        "Þ": "Th",
-        "þ": "th",
-        "ß": "ss",
-        "Ä€": "A",
-        "Ä‚": "A",
-        "Ä„": "A",
-        "ā": "a",
-        "ă": "a",
-        "Ä…": "a",
-        "Ć": "C",
-        "Ĉ": "C",
-        "ÄŠ": "C",
-        "Č": "C",
-        "ć": "c",
-        "ĉ": "c",
-        "Ä‹": "c",
-        "č": "c",
-        "ÄŽ": "D",
-        "Đ": "D",
-        "ď": "d",
-        "Ä‘": "d",
-        "Ä’": "E",
-        "Ä”": "E",
-        "Ä–": "E",
-        "Ę": "E",
-        "Äš": "E",
-        "Ä“": "e",
-        "Ä•": "e",
-        "Ä—": "e",
-        "Ä™": "e",
-        "Ä›": "e",
-        "Ĝ": "G",
-        "Äž": "G",
-        "Ä ": "G",
-        "Ä¢": "G",
-        "ĝ": "g",
-        "ÄŸ": "g",
-        "Ä¡": "g",
-        "Ä£": "g",
-        "Ĥ": "H",
-        "Ħ": "H",
-        "Ä¥": "h",
-        "ħ": "h",
-        "Ĩ": "I",
-        "Ī": "I",
-        "Ĭ": "I",
-        "Ä®": "I",
-        "Ä°": "I",
-        "Ä©": "i",
-        "Ä«": "i",
-        "Ä­": "i",
-        "į": "i",
-        "ı": "i",
-        "Ä´": "J",
-        "ĵ": "j",
-        "Ķ": "K",
-        "Ä·": "k",
-        "ĸ": "k",
-        "Ĺ": "L",
-        "Ä»": "L",
-        "Ľ": "L",
-        "Ä¿": "L",
-        "Ł": "L",
-        "ĺ": "l",
-        "ļ": "l",
-        "ľ": "l",
-        "Å€": "l",
-        "Å‚": "l",
-        "Ń": "N",
-        "Å…": "N",
-        "Ň": "N",
-        "ÅŠ": "N",
-        "Å„": "n",
-        "ņ": "n",
-        "ň": "n",
-        "Å‹": "n",
-        "Ō": "O",
-        "ÅŽ": "O",
-        "Ő": "O",
-        "ō": "o",
-        "ŏ": "o",
-        "Å‘": "o",
-        "Å”": "R",
-        "Å–": "R",
-        "Ř": "R",
-        "Å•": "r",
-        "Å—": "r",
-        "Å™": "r",
-        "Åš": "S",
-        "Ŝ": "S",
-        "Åž": "S",
-        "Å ": "S",
-        "Å›": "s",
-        "ŝ": "s",
-        "ÅŸ": "s",
-        "Å¡": "s",
-        "Å¢": "T",
-        "Ť": "T",
-        "Ŧ": "T",
-        "Å£": "t",
-        "Å¥": "t",
-        "ŧ": "t",
-        "Ũ": "U",
-        "Ū": "U",
-        "Ŭ": "U",
-        "Å®": "U",
-        "Å°": "U",
-        "Ų": "U",
-        "Å©": "u",
-        "Å«": "u",
-        "Å­": "u",
-        "ů": "u",
-        "ű": "u",
-        "ų": "u",
-        "Å´": "W",
-        "ŵ": "w",
-        "Ŷ": "Y",
-        "Å·": "y",
-        "Ÿ": "Y",
-        "Ź": "Z",
-        "Å»": "Z",
-        "Ž": "Z",
-        "ź": "z",
-        "ż": "z",
-        "ž": "z",
-        "IJ": "IJ",
-        "ij": "ij",
-        "Å’": "Oe",
-        "Å“": "oe",
-        "ʼn": "'n",
-        "Å¿": "s"
-    }, Hr = {
-        "&": "&amp;",
-        "<": "&lt;",
-        ">": "&gt;",
-        '"': "&quot;",
-        "'": "&#39;"
-    }, Jr = {
-        "&amp;": "&",
-        "&lt;": "<",
-        "&gt;": ">",
-        "&quot;": '"',
-        "&#39;": "'"
-    }, Yr = {
-        "\\": "\\",
-        "'": "'",
-        "\n": "n",
-        "\r": "r",
-        "\u2028": "u2028",
-        "\u2029": "u2029"
-    }, Qr = parseFloat, Xr = parseInt, ne = "object" == typeof global && global && global.Object === Object && global, te = "object" == typeof self && self && self.Object === Object && self, re = ne || te || Function("return this")(), ee = "object" == typeof exports && exports && !exports.nodeType && exports, ue = ee && "object" == typeof module && module && !module.nodeType && module, ie = ue && ue.exports === ee, oe = ie && ne.process, fe = function() {
-        try {
-            var n = ue && ue.require && ue.require("util").types;
-            return n ? n : oe && oe.binding && oe.binding("util");
-        } catch (n) {}
-    }(), ce = fe && fe.isArrayBuffer, ae = fe && fe.isDate, le = fe && fe.isMap, se = fe && fe.isRegExp, he = fe && fe.isSet, pe = fe && fe.isTypedArray, _e = m("length"), ve = x(Gr), ge = x(Hr), ye = x(Jr), de = function p(x) {
-        function Z(n) {
-            if (cc(n) && !bh(n) && !(n instanceof Ct)) {
-                if (n instanceof Y) return n;
-                if (bl.call(n, "__wrapped__")) return eo(n);
-            }
-            return new Y(n);
-        }
-        function J() {}
-        function Y(n, t) {
-            this.__wrapped__ = n, this.__actions__ = [], this.__chain__ = !!t, this.__index__ = 0, 
-            this.__values__ = X;
-        }
-        function Ct(n) {
-            this.__wrapped__ = n, this.__actions__ = [], this.__dir__ = 1, this.__filtered__ = !1, 
-            this.__iteratees__ = [], this.__takeCount__ = Un, this.__views__ = [];
-        }
-        function $t() {
-            var n = new Ct(this.__wrapped__);
-            return n.__actions__ = Tu(this.__actions__), n.__dir__ = this.__dir__, n.__filtered__ = this.__filtered__, 
-            n.__iteratees__ = Tu(this.__iteratees__), n.__takeCount__ = this.__takeCount__, 
-            n.__views__ = Tu(this.__views__), n;
-        }
-        function Yt() {
-            if (this.__filtered__) {
-                var n = new Ct(this);
-                n.__dir__ = -1, n.__filtered__ = !0;
-            } else n = this.clone(), n.__dir__ *= -1;
-            return n;
-        }
-        function Qt() {
-            var n = this.__wrapped__.value(), t = this.__dir__, r = bh(n), e = t < 0, u = r ? n.length : 0, i = Oi(0, u, this.__views__), o = i.start, f = i.end, c = f - o, a = e ? f : o - 1, l = this.__iteratees__, s = l.length, h = 0, p = Hl(c, this.__takeCount__);
-            if (!r || !e && u == c && p == c) return wu(n, this.__actions__);
-            var _ = [];
-            n: for (;c-- && h < p; ) {
-                a += t;
-                for (var v = -1, g = n[a]; ++v < s; ) {
-                    var y = l[v], d = y.iteratee, b = y.type, w = d(g);
-                    if (b == zn) g = w; else if (!w) {
-                        if (b == Rn) continue n;
-                        break n;
-                    }
-                }
-                _[h++] = g;
-            }
-            return _;
-        }
-        function Xt(n) {
-            var t = -1, r = null == n ? 0 : n.length;
-            for (this.clear(); ++t < r; ) {
-                var e = n[t];
-                this.set(e[0], e[1]);
-            }
-        }
-        function nr() {
-            this.__data__ = is ? is(null) : {}, this.size = 0;
-        }
-        function tr(n) {
-            var t = this.has(n) && delete this.__data__[n];
-            return this.size -= t ? 1 : 0, t;
-        }
-        function rr(n) {
-            var t = this.__data__;
-            if (is) {
-                var r = t[n];
-                return r === on ? X : r;
-            }
-            return bl.call(t, n) ? t[n] : X;
-        }
-        function er(n) {
-            var t = this.__data__;
-            return is ? t[n] !== X : bl.call(t, n);
-        }
-        function ur(n, t) {
-            var r = this.__data__;
-            return this.size += this.has(n) ? 0 : 1, r[n] = is && t === X ? on : t, this;
-        }
-        function ir(n) {
-            var t = -1, r = null == n ? 0 : n.length;
-            for (this.clear(); ++t < r; ) {
-                var e = n[t];
-                this.set(e[0], e[1]);
-            }
-        }
-        function or() {
-            this.__data__ = [], this.size = 0;
-        }
-        function fr(n) {
-            var t = this.__data__, r = Wr(t, n);
-            return !(r < 0) && (r == t.length - 1 ? t.pop() : Ll.call(t, r, 1), --this.size, 
-            !0);
-        }
-        function cr(n) {
-            var t = this.__data__, r = Wr(t, n);
-            return r < 0 ? X : t[r][1];
-        }
-        function ar(n) {
-            return Wr(this.__data__, n) > -1;
-        }
-        function lr(n, t) {
-            var r = this.__data__, e = Wr(r, n);
-            return e < 0 ? (++this.size, r.push([ n, t ])) : r[e][1] = t, this;
-        }
-        function sr(n) {
-            var t = -1, r = null == n ? 0 : n.length;
-            for (this.clear(); ++t < r; ) {
-                var e = n[t];
-                this.set(e[0], e[1]);
-            }
-        }
-        function hr() {
-            this.size = 0, this.__data__ = {
-                hash: new Xt(),
-                map: new (ts || ir)(),
-                string: new Xt()
-            };
-        }
-        function pr(n) {
-            var t = xi(this, n).delete(n);
-            return this.size -= t ? 1 : 0, t;
-        }
-        function _r(n) {
-            return xi(this, n).get(n);
-        }
-        function vr(n) {
-            return xi(this, n).has(n);
-        }
-        function gr(n, t) {
-            var r = xi(this, n), e = r.size;
-            return r.set(n, t), this.size += r.size == e ? 0 : 1, this;
-        }
-        function yr(n) {
-            var t = -1, r = null == n ? 0 : n.length;
-            for (this.__data__ = new sr(); ++t < r; ) this.add(n[t]);
-        }
-        function dr(n) {
-            return this.__data__.set(n, on), this;
-        }
-        function br(n) {
-            return this.__data__.has(n);
-        }
-        function wr(n) {
-            this.size = (this.__data__ = new ir(n)).size;
-        }
-        function mr() {
-            this.__data__ = new ir(), this.size = 0;
-        }
-        function xr(n) {
-            var t = this.__data__, r = t.delete(n);
-            return this.size = t.size, r;
-        }
-        function jr(n) {
-            return this.__data__.get(n);
-        }
-        function Ar(n) {
-            return this.__data__.has(n);
-        }
-        function kr(n, t) {
-            var r = this.__data__;
-            if (r instanceof ir) {
-                var e = r.__data__;
-                if (!ts || e.length < tn - 1) return e.push([ n, t ]), this.size = ++r.size, this;
-                r = this.__data__ = new sr(e);
-            }
-            return r.set(n, t), this.size = r.size, this;
-        }
-        function Or(n, t) {
-            var r = bh(n), e = !r && dh(n), u = !r && !e && mh(n), i = !r && !e && !u && Oh(n), o = r || e || u || i, f = o ? O(n.length, hl) : [], c = f.length;
-            for (var a in n) !t && !bl.call(n, a) || o && ("length" == a || u && ("offset" == a || "parent" == a) || i && ("buffer" == a || "byteLength" == a || "byteOffset" == a) || Ci(a, c)) || f.push(a);
-            return f;
-        }
-        function Ir(n) {
-            var t = n.length;
-            return t ? n[tu(0, t - 1)] : X;
-        }
-        function Rr(n, t) {
-            return Xi(Tu(n), Mr(t, 0, n.length));
-        }
-        function zr(n) {
-            return Xi(Tu(n));
-        }
-        function Er(n, t, r) {
-            (r === X || Gf(n[t], r)) && (r !== X || t in n) || Br(n, t, r);
-        }
-        function Sr(n, t, r) {
-            var e = n[t];
-            bl.call(n, t) && Gf(e, r) && (r !== X || t in n) || Br(n, t, r);
-        }
-        function Wr(n, t) {
-            for (var r = n.length; r--; ) if (Gf(n[r][0], t)) return r;
-            return -1;
-        }
-        function Lr(n, t, r, e) {
-            return ys(n, function(n, u, i) {
-                t(e, n, r(n), i);
-            }), e;
-        }
-        function Cr(n, t) {
-            return n && $u(t, Pc(t), n);
-        }
-        function Ur(n, t) {
-            return n && $u(t, qc(t), n);
-        }
-        function Br(n, t, r) {
-            "__proto__" == t && Tl ? Tl(n, t, {
-                configurable: !0,
-                enumerable: !0,
-                value: r,
-                writable: !0
-            }) : n[t] = r;
-        }
-        function Tr(n, t) {
-            for (var r = -1, e = t.length, u = il(e), i = null == n; ++r < e; ) u[r] = i ? X : Mc(n, t[r]);
-            return u;
-        }
-        function Mr(n, t, r) {
-            return n === n && (r !== X && (n = n <= r ? n : r), t !== X && (n = n >= t ? n : t)), 
-            n;
-        }
-        function Fr(n, t, e, u, i, o) {
-            var f, c = t & an, a = t & ln, l = t & sn;
-            if (e && (f = i ? e(n, u, i, o) : e(n)), f !== X) return f;
-            if (!fc(n)) return n;
-            var s = bh(n);
-            if (s) {
-                if (f = zi(n), !c) return Tu(n, f);
-            } else {
-                var h = zs(n), p = h == Kn || h == Vn;
-                if (mh(n)) return Iu(n, c);
-                if (h == Yn || h == Dn || p && !i) {
-                    if (f = a || p ? {} : Ei(n), !c) return a ? Mu(n, Ur(f, n)) : Du(n, Cr(f, n));
-                } else {
-                    if (!Vr[h]) return i ? n : {};
-                    f = Si(n, h, c);
-                }
-            }
-            o || (o = new wr());
-            var _ = o.get(n);
-            if (_) return _;
-            o.set(n, f), kh(n) ? n.forEach(function(r) {
-                f.add(Fr(r, t, e, r, n, o));
-            }) : jh(n) && n.forEach(function(r, u) {
-                f.set(u, Fr(r, t, e, u, n, o));
-            });
-            var v = l ? a ? di : yi : a ? qc : Pc, g = s ? X : v(n);
-            return r(g || n, function(r, u) {
-                g && (u = r, r = n[u]), Sr(f, u, Fr(r, t, e, u, n, o));
-            }), f;
-        }
-        function Nr(n) {
-            var t = Pc(n);
-            return function(r) {
-                return Pr(r, n, t);
-            };
-        }
-        function Pr(n, t, r) {
-            var e = r.length;
-            if (null == n) return !e;
-            for (n = ll(n); e--; ) {
-                var u = r[e], i = t[u], o = n[u];
-                if (o === X && !(u in n) || !i(o)) return !1;
-            }
-            return !0;
-        }
-        function Gr(n, t, r) {
-            if ("function" != typeof n) throw new pl(en);
-            return Ws(function() {
-                n.apply(X, r);
-            }, t);
-        }
-        function Hr(n, t, r, e) {
-            var u = -1, i = o, a = !0, l = n.length, s = [], h = t.length;
-            if (!l) return s;
-            r && (t = c(t, z(r))), e ? (i = f, a = !1) : t.length >= tn && (i = S, a = !1, t = new yr(t));
-            n: for (;++u < l; ) {
-                var p = n[u], _ = null == r ? p : r(p);
-                if (p = e || 0 !== p ? p : 0, a && _ === _) {
-                    for (var v = h; v--; ) if (t[v] === _) continue n;
-                    s.push(p);
-                } else i(t, _, e) || s.push(p);
-            }
-            return s;
-        }
-        function Jr(n, t) {
-            var r = !0;
-            return ys(n, function(n, e, u) {
-                return r = !!t(n, e, u);
-            }), r;
-        }
-        function Yr(n, t, r) {
-            for (var e = -1, u = n.length; ++e < u; ) {
-                var i = n[e], o = t(i);
-                if (null != o && (f === X ? o === o && !bc(o) : r(o, f))) var f = o, c = i;
-            }
-            return c;
-        }
-        function ne(n, t, r, e) {
-            var u = n.length;
-            for (r = kc(r), r < 0 && (r = -r > u ? 0 : u + r), e = e === X || e > u ? u : kc(e), 
-            e < 0 && (e += u), e = r > e ? 0 : Oc(e); r < e; ) n[r++] = t;
-            return n;
-        }
-        function te(n, t) {
-            var r = [];
-            return ys(n, function(n, e, u) {
-                t(n, e, u) && r.push(n);
-            }), r;
-        }
-        function ee(n, t, r, e, u) {
-            var i = -1, o = n.length;
-            for (r || (r = Li), u || (u = []); ++i < o; ) {
-                var f = n[i];
-                t > 0 && r(f) ? t > 1 ? ee(f, t - 1, r, e, u) : a(u, f) : e || (u[u.length] = f);
-            }
-            return u;
-        }
-        function ue(n, t) {
-            return n && bs(n, t, Pc);
-        }
-        function oe(n, t) {
-            return n && ws(n, t, Pc);
-        }
-        function fe(n, t) {
-            return i(t, function(t) {
-                return uc(n[t]);
-            });
-        }
-        function _e(n, t) {
-            t = ku(t, n);
-            for (var r = 0, e = t.length; null != n && r < e; ) n = n[no(t[r++])];
-            return r && r == e ? n : X;
-        }
-        function de(n, t, r) {
-            var e = t(n);
-            return bh(n) ? e : a(e, r(n));
-        }
-        function we(n) {
-            return null == n ? n === X ? ut : Jn : Bl && Bl in ll(n) ? ki(n) : Ki(n);
-        }
-        function me(n, t) {
-            return n > t;
-        }
-        function xe(n, t) {
-            return null != n && bl.call(n, t);
-        }
-        function je(n, t) {
-            return null != n && t in ll(n);
-        }
-        function Ae(n, t, r) {
-            return n >= Hl(t, r) && n < Gl(t, r);
-        }
-        function ke(n, t, r) {
-            for (var e = r ? f : o, u = n[0].length, i = n.length, a = i, l = il(i), s = 1 / 0, h = []; a--; ) {
-                var p = n[a];
-                a && t && (p = c(p, z(t))), s = Hl(p.length, s), l[a] = !r && (t || u >= 120 && p.length >= 120) ? new yr(a && p) : X;
-            }
-            p = n[0];
-            var _ = -1, v = l[0];
-            n: for (;++_ < u && h.length < s; ) {
-                var g = p[_], y = t ? t(g) : g;
-                if (g = r || 0 !== g ? g : 0, !(v ? S(v, y) : e(h, y, r))) {
-                    for (a = i; --a; ) {
-                        var d = l[a];
-                        if (!(d ? S(d, y) : e(n[a], y, r))) continue n;
-                    }
-                    v && v.push(y), h.push(g);
-                }
-            }
-            return h;
-        }
-        function Oe(n, t, r, e) {
-            return ue(n, function(n, u, i) {
-                t(e, r(n), u, i);
-            }), e;
-        }
-        function Ie(t, r, e) {
-            r = ku(r, t), t = Gi(t, r);
-            var u = null == t ? t : t[no(jo(r))];
-            return null == u ? X : n(u, t, e);
-        }
-        function Re(n) {
-            return cc(n) && we(n) == Dn;
-        }
-        function ze(n) {
-            return cc(n) && we(n) == ft;
-        }
-        function Ee(n) {
-            return cc(n) && we(n) == Pn;
-        }
-        function Se(n, t, r, e, u) {
-            return n === t || (null == n || null == t || !cc(n) && !cc(t) ? n !== n && t !== t : We(n, t, r, e, Se, u));
-        }
-        function We(n, t, r, e, u, i) {
-            var o = bh(n), f = bh(t), c = o ? Mn : zs(n), a = f ? Mn : zs(t);
-            c = c == Dn ? Yn : c, a = a == Dn ? Yn : a;
-            var l = c == Yn, s = a == Yn, h = c == a;
-            if (h && mh(n)) {
-                if (!mh(t)) return !1;
-                o = !0, l = !1;
-            }
-            if (h && !l) return i || (i = new wr()), o || Oh(n) ? pi(n, t, r, e, u, i) : _i(n, t, c, r, e, u, i);
-            if (!(r & hn)) {
-                var p = l && bl.call(n, "__wrapped__"), _ = s && bl.call(t, "__wrapped__");
-                if (p || _) {
-                    var v = p ? n.value() : n, g = _ ? t.value() : t;
-                    return i || (i = new wr()), u(v, g, r, e, i);
-                }
-            }
-            return !!h && (i || (i = new wr()), vi(n, t, r, e, u, i));
-        }
-        function Le(n) {
-            return cc(n) && zs(n) == Gn;
-        }
-        function Ce(n, t, r, e) {
-            var u = r.length, i = u, o = !e;
-            if (null == n) return !i;
-            for (n = ll(n); u--; ) {
-                var f = r[u];
-                if (o && f[2] ? f[1] !== n[f[0]] : !(f[0] in n)) return !1;
-            }
-            for (;++u < i; ) {
-                f = r[u];
-                var c = f[0], a = n[c], l = f[1];
-                if (o && f[2]) {
-                    if (a === X && !(c in n)) return !1;
-                } else {
-                    var s = new wr();
-                    if (e) var h = e(a, l, c, n, t, s);
-                    if (!(h === X ? Se(l, a, hn | pn, e, s) : h)) return !1;
-                }
-            }
-            return !0;
-        }
-        function Ue(n) {
-            return !(!fc(n) || Di(n)) && (uc(n) ? kl : Zt).test(to(n));
-        }
-        function Be(n) {
-            return cc(n) && we(n) == nt;
-        }
-        function Te(n) {
-            return cc(n) && zs(n) == tt;
-        }
-        function $e(n) {
-            return cc(n) && oc(n.length) && !!Kr[we(n)];
-        }
-        function De(n) {
-            return "function" == typeof n ? n : null == n ? La : "object" == typeof n ? bh(n) ? Ze(n[0], n[1]) : qe(n) : Fa(n);
-        }
-        function Me(n) {
-            if (!Mi(n)) return Vl(n);
-            var t = [];
-            for (var r in ll(n)) bl.call(n, r) && "constructor" != r && t.push(r);
-            return t;
-        }
-        function Fe(n) {
-            if (!fc(n)) return Zi(n);
-            var t = Mi(n), r = [];
-            for (var e in n) ("constructor" != e || !t && bl.call(n, e)) && r.push(e);
-            return r;
-        }
-        function Ne(n, t) {
-            return n < t;
-        }
-        function Pe(n, t) {
-            var r = -1, e = Hf(n) ? il(n.length) : [];
-            return ys(n, function(n, u, i) {
-                e[++r] = t(n, u, i);
-            }), e;
-        }
-        function qe(n) {
-            var t = ji(n);
-            return 1 == t.length && t[0][2] ? Ni(t[0][0], t[0][1]) : function(r) {
-                return r === n || Ce(r, n, t);
-            };
-        }
-        function Ze(n, t) {
-            return Bi(n) && Fi(t) ? Ni(no(n), t) : function(r) {
-                var e = Mc(r, n);
-                return e === X && e === t ? Nc(r, n) : Se(t, e, hn | pn);
-            };
-        }
-        function Ke(n, t, r, e, u) {
-            n !== t && bs(t, function(i, o) {
-                if (u || (u = new wr()), fc(i)) Ve(n, t, o, r, Ke, e, u); else {
-                    var f = e ? e(Ji(n, o), i, o + "", n, t, u) : X;
-                    f === X && (f = i), Er(n, o, f);
-                }
-            }, qc);
-        }
-        function Ve(n, t, r, e, u, i, o) {
-            var f = Ji(n, r), c = Ji(t, r), a = o.get(c);
-            if (a) return Er(n, r, a), X;
-            var l = i ? i(f, c, r + "", n, t, o) : X, s = l === X;
-            if (s) {
-                var h = bh(c), p = !h && mh(c), _ = !h && !p && Oh(c);
-                l = c, h || p || _ ? bh(f) ? l = f : Jf(f) ? l = Tu(f) : p ? (s = !1, l = Iu(c, !0)) : _ ? (s = !1, 
-                l = Wu(c, !0)) : l = [] : gc(c) || dh(c) ? (l = f, dh(f) ? l = Rc(f) : fc(f) && !uc(f) || (l = Ei(c))) : s = !1;
-            }
-            s && (o.set(c, l), u(l, c, e, i, o), o.delete(c)), Er(n, r, l);
-        }
-        function Ge(n, t) {
-            var r = n.length;
-            if (r) return t += t < 0 ? r : 0, Ci(t, r) ? n[t] : X;
-        }
-        function He(n, t, r) {
-            t = t.length ? c(t, function(n) {
-                return bh(n) ? function(t) {
-                    return _e(t, 1 === n.length ? n[0] : n);
-                } : n;
-            }) : [ La ];
-            var e = -1;
-            return t = c(t, z(mi())), A(Pe(n, function(n, r, u) {
-                return {
-                    criteria: c(t, function(t) {
-                        return t(n);
-                    }),
-                    index: ++e,
-                    value: n
-                };
-            }), function(n, t) {
-                return Cu(n, t, r);
-            });
-        }
-        function Je(n, t) {
-            return Ye(n, t, function(t, r) {
-                return Nc(n, r);
-            });
-        }
-        function Ye(n, t, r) {
-            for (var e = -1, u = t.length, i = {}; ++e < u; ) {
-                var o = t[e], f = _e(n, o);
-                r(f, o) && fu(i, ku(o, n), f);
-            }
-            return i;
-        }
-        function Qe(n) {
-            return function(t) {
-                return _e(t, n);
-            };
-        }
-        function Xe(n, t, r, e) {
-            var u = e ? d : y, i = -1, o = t.length, f = n;
-            for (n === t && (t = Tu(t)), r && (f = c(n, z(r))); ++i < o; ) for (var a = 0, l = t[i], s = r ? r(l) : l; (a = u(f, s, a, e)) > -1; ) f !== n && Ll.call(f, a, 1), 
-            Ll.call(n, a, 1);
-            return n;
-        }
-        function nu(n, t) {
-            for (var r = n ? t.length : 0, e = r - 1; r--; ) {
-                var u = t[r];
-                if (r == e || u !== i) {
-                    var i = u;
-                    Ci(u) ? Ll.call(n, u, 1) : yu(n, u);
-                }
-            }
-            return n;
-        }
-        function tu(n, t) {
-            return n + Nl(Ql() * (t - n + 1));
-        }
-        function ru(n, t, r, e) {
-            for (var u = -1, i = Gl(Fl((t - n) / (r || 1)), 0), o = il(i); i--; ) o[e ? i : ++u] = n, 
-            n += r;
-            return o;
-        }
-        function eu(n, t) {
-            var r = "";
-            if (!n || t < 1 || t > Wn) return r;
-            do {
-                t % 2 && (r += n), t = Nl(t / 2), t && (n += n);
-            } while (t);
-            return r;
-        }
-        function uu(n, t) {
-            return Ls(Vi(n, t, La), n + "");
-        }
-        function iu(n) {
-            return Ir(ra(n));
-        }
-        function ou(n, t) {
-            var r = ra(n);
-            return Xi(r, Mr(t, 0, r.length));
-        }
-        function fu(n, t, r, e) {
-            if (!fc(n)) return n;
-            t = ku(t, n);
-            for (var u = -1, i = t.length, o = i - 1, f = n; null != f && ++u < i; ) {
-                var c = no(t[u]), a = r;
-                if ("__proto__" === c || "constructor" === c || "prototype" === c) return n;
-                if (u != o) {
-                    var l = f[c];
-                    a = e ? e(l, c, f) : X, a === X && (a = fc(l) ? l : Ci(t[u + 1]) ? [] : {});
-                }
-                Sr(f, c, a), f = f[c];
-            }
-            return n;
-        }
-        function cu(n) {
-            return Xi(ra(n));
-        }
-        function au(n, t, r) {
-            var e = -1, u = n.length;
-            t < 0 && (t = -t > u ? 0 : u + t), r = r > u ? u : r, r < 0 && (r += u), u = t > r ? 0 : r - t >>> 0, 
-            t >>>= 0;
-            for (var i = il(u); ++e < u; ) i[e] = n[e + t];
-            return i;
-        }
-        function lu(n, t) {
-            var r;
-            return ys(n, function(n, e, u) {
-                return r = t(n, e, u), !r;
-            }), !!r;
-        }
-        function su(n, t, r) {
-            var e = 0, u = null == n ? e : n.length;
-            if ("number" == typeof t && t === t && u <= Tn) {
-                for (;e < u; ) {
-                    var i = e + u >>> 1, o = n[i];
-                    null !== o && !bc(o) && (r ? o <= t : o < t) ? e = i + 1 : u = i;
-                }
-                return u;
-            }
-            return hu(n, t, La, r);
-        }
-        function hu(n, t, r, e) {
-            var u = 0, i = null == n ? 0 : n.length;
-            if (0 === i) return 0;
-            t = r(t);
-            for (var o = t !== t, f = null === t, c = bc(t), a = t === X; u < i; ) {
-                var l = Nl((u + i) / 2), s = r(n[l]), h = s !== X, p = null === s, _ = s === s, v = bc(s);
-                if (o) var g = e || _; else g = a ? _ && (e || h) : f ? _ && h && (e || !p) : c ? _ && h && !p && (e || !v) : !p && !v && (e ? s <= t : s < t);
-                g ? u = l + 1 : i = l;
-            }
-            return Hl(i, Bn);
-        }
-        function pu(n, t) {
-            for (var r = -1, e = n.length, u = 0, i = []; ++r < e; ) {
-                var o = n[r], f = t ? t(o) : o;
-                if (!r || !Gf(f, c)) {
-                    var c = f;
-                    i[u++] = 0 === o ? 0 : o;
-                }
-            }
-            return i;
-        }
-        function _u(n) {
-            return "number" == typeof n ? n : bc(n) ? Cn : +n;
-        }
-        function vu(n) {
-            if ("string" == typeof n) return n;
-            if (bh(n)) return c(n, vu) + "";
-            if (bc(n)) return vs ? vs.call(n) : "";
-            var t = n + "";
-            return "0" == t && 1 / n == -Sn ? "-0" : t;
-        }
-        function gu(n, t, r) {
-            var e = -1, u = o, i = n.length, c = !0, a = [], l = a;
-            if (r) c = !1, u = f; else if (i >= tn) {
-                var s = t ? null : ks(n);
-                if (s) return P(s);
-                c = !1, u = S, l = new yr();
-            } else l = t ? [] : a;
-            n: for (;++e < i; ) {
-                var h = n[e], p = t ? t(h) : h;
-                if (h = r || 0 !== h ? h : 0, c && p === p) {
-                    for (var _ = l.length; _--; ) if (l[_] === p) continue n;
-                    t && l.push(p), a.push(h);
-                } else u(l, p, r) || (l !== a && l.push(p), a.push(h));
-            }
-            return a;
-        }
-        function yu(n, t) {
-            return t = ku(t, n), n = Gi(n, t), null == n || delete n[no(jo(t))];
-        }
-        function du(n, t, r, e) {
-            return fu(n, t, r(_e(n, t)), e);
-        }
-        function bu(n, t, r, e) {
-            for (var u = n.length, i = e ? u : -1; (e ? i-- : ++i < u) && t(n[i], i, n); ) ;
-            return r ? au(n, e ? 0 : i, e ? i + 1 : u) : au(n, e ? i + 1 : 0, e ? u : i);
-        }
-        function wu(n, t) {
-            var r = n;
-            return r instanceof Ct && (r = r.value()), l(t, function(n, t) {
-                return t.func.apply(t.thisArg, a([ n ], t.args));
-            }, r);
-        }
-        function mu(n, t, r) {
-            var e = n.length;
-            if (e < 2) return e ? gu(n[0]) : [];
-            for (var u = -1, i = il(e); ++u < e; ) for (var o = n[u], f = -1; ++f < e; ) f != u && (i[u] = Hr(i[u] || o, n[f], t, r));
-            return gu(ee(i, 1), t, r);
-        }
-        function xu(n, t, r) {
-            for (var e = -1, u = n.length, i = t.length, o = {}; ++e < u; ) {
-                r(o, n[e], e < i ? t[e] : X);
-            }
-            return o;
-        }
-        function ju(n) {
-            return Jf(n) ? n : [];
-        }
-        function Au(n) {
-            return "function" == typeof n ? n : La;
-        }
-        function ku(n, t) {
-            return bh(n) ? n : Bi(n, t) ? [ n ] : Cs(Ec(n));
-        }
-        function Ou(n, t, r) {
-            var e = n.length;
-            return r = r === X ? e : r, !t && r >= e ? n : au(n, t, r);
-        }
-        function Iu(n, t) {
-            if (t) return n.slice();
-            var r = n.length, e = zl ? zl(r) : new n.constructor(r);
-            return n.copy(e), e;
-        }
-        function Ru(n) {
-            var t = new n.constructor(n.byteLength);
-            return new Rl(t).set(new Rl(n)), t;
-        }
-        function zu(n, t) {
-            return new n.constructor(t ? Ru(n.buffer) : n.buffer, n.byteOffset, n.byteLength);
-        }
-        function Eu(n) {
-            var t = new n.constructor(n.source, Nt.exec(n));
-            return t.lastIndex = n.lastIndex, t;
-        }
-        function Su(n) {
-            return _s ? ll(_s.call(n)) : {};
-        }
-        function Wu(n, t) {
-            return new n.constructor(t ? Ru(n.buffer) : n.buffer, n.byteOffset, n.length);
-        }
-        function Lu(n, t) {
-            if (n !== t) {
-                var r = n !== X, e = null === n, u = n === n, i = bc(n), o = t !== X, f = null === t, c = t === t, a = bc(t);
-                if (!f && !a && !i && n > t || i && o && c && !f && !a || e && o && c || !r && c || !u) return 1;
-                if (!e && !i && !a && n < t || a && r && u && !e && !i || f && r && u || !o && u || !c) return -1;
-            }
-            return 0;
-        }
-        function Cu(n, t, r) {
-            for (var e = -1, u = n.criteria, i = t.criteria, o = u.length, f = r.length; ++e < o; ) {
-                var c = Lu(u[e], i[e]);
-                if (c) {
-                    if (e >= f) return c;
-                    return c * ("desc" == r[e] ? -1 : 1);
-                }
-            }
-            return n.index - t.index;
-        }
-        function Uu(n, t, r, e) {
-            for (var u = -1, i = n.length, o = r.length, f = -1, c = t.length, a = Gl(i - o, 0), l = il(c + a), s = !e; ++f < c; ) l[f] = t[f];
-            for (;++u < o; ) (s || u < i) && (l[r[u]] = n[u]);
-            for (;a--; ) l[f++] = n[u++];
-            return l;
-        }
-        function Bu(n, t, r, e) {
-            for (var u = -1, i = n.length, o = -1, f = r.length, c = -1, a = t.length, l = Gl(i - f, 0), s = il(l + a), h = !e; ++u < l; ) s[u] = n[u];
-            for (var p = u; ++c < a; ) s[p + c] = t[c];
-            for (;++o < f; ) (h || u < i) && (s[p + r[o]] = n[u++]);
-            return s;
-        }
-        function Tu(n, t) {
-            var r = -1, e = n.length;
-            for (t || (t = il(e)); ++r < e; ) t[r] = n[r];
-            return t;
-        }
-        function $u(n, t, r, e) {
-            var u = !r;
-            r || (r = {});
-            for (var i = -1, o = t.length; ++i < o; ) {
-                var f = t[i], c = e ? e(r[f], n[f], f, r, n) : X;
-                c === X && (c = n[f]), u ? Br(r, f, c) : Sr(r, f, c);
-            }
-            return r;
-        }
-        function Du(n, t) {
-            return $u(n, Is(n), t);
-        }
-        function Mu(n, t) {
-            return $u(n, Rs(n), t);
-        }
-        function Fu(n, r) {
-            return function(e, u) {
-                var i = bh(e) ? t : Lr, o = r ? r() : {};
-                return i(e, n, mi(u, 2), o);
-            };
-        }
-        function Nu(n) {
-            return uu(function(t, r) {
-                var e = -1, u = r.length, i = u > 1 ? r[u - 1] : X, o = u > 2 ? r[2] : X;
-                for (i = n.length > 3 && "function" == typeof i ? (u--, i) : X, o && Ui(r[0], r[1], o) && (i = u < 3 ? X : i, 
-                u = 1), t = ll(t); ++e < u; ) {
-                    var f = r[e];
-                    f && n(t, f, e, i);
-                }
-                return t;
-            });
-        }
-        function Pu(n, t) {
-            return function(r, e) {
-                if (null == r) return r;
-                if (!Hf(r)) return n(r, e);
-                for (var u = r.length, i = t ? u : -1, o = ll(r); (t ? i-- : ++i < u) && e(o[i], i, o) !== !1; ) ;
-                return r;
-            };
-        }
-        function qu(n) {
-            return function(t, r, e) {
-                for (var u = -1, i = ll(t), o = e(t), f = o.length; f--; ) {
-                    var c = o[n ? f : ++u];
-                    if (r(i[c], c, i) === !1) break;
-                }
-                return t;
-            };
-        }
-        function Zu(n, t, r) {
-            function e() {
-                return (this && this !== re && this instanceof e ? i : n).apply(u ? r : this, arguments);
-            }
-            var u = t & _n, i = Gu(n);
-            return e;
-        }
-        function Ku(n) {
-            return function(t) {
-                t = Ec(t);
-                var r = T(t) ? G(t) : X, e = r ? r[0] : t.charAt(0), u = r ? Ou(r, 1).join("") : t.slice(1);
-                return e[n]() + u;
-            };
-        }
-        function Vu(n) {
-            return function(t) {
-                return l(Ra(ca(t).replace($r, "")), n, "");
-            };
-        }
-        function Gu(n) {
-            return function() {
-                var t = arguments;
-                switch (t.length) {
-                  case 0:
-                    return new n();
-
-                  case 1:
-                    return new n(t[0]);
-
-                  case 2:
-                    return new n(t[0], t[1]);
-
-                  case 3:
-                    return new n(t[0], t[1], t[2]);
-
-                  case 4:
-                    return new n(t[0], t[1], t[2], t[3]);
-
-                  case 5:
-                    return new n(t[0], t[1], t[2], t[3], t[4]);
-
-                  case 6:
-                    return new n(t[0], t[1], t[2], t[3], t[4], t[5]);
-
-                  case 7:
-                    return new n(t[0], t[1], t[2], t[3], t[4], t[5], t[6]);
-                }
-                var r = gs(n.prototype), e = n.apply(r, t);
-                return fc(e) ? e : r;
-            };
-        }
-        function Hu(t, r, e) {
-            function u() {
-                for (var o = arguments.length, f = il(o), c = o, a = wi(u); c--; ) f[c] = arguments[c];
-                var l = o < 3 && f[0] !== a && f[o - 1] !== a ? [] : N(f, a);
-                return o -= l.length, o < e ? oi(t, r, Qu, u.placeholder, X, f, l, X, X, e - o) : n(this && this !== re && this instanceof u ? i : t, this, f);
-            }
-            var i = Gu(t);
-            return u;
-        }
-        function Ju(n) {
-            return function(t, r, e) {
-                var u = ll(t);
-                if (!Hf(t)) {
-                    var i = mi(r, 3);
-                    t = Pc(t), r = function(n) {
-                        return i(u[n], n, u);
-                    };
-                }
-                var o = n(t, r, e);
-                return o > -1 ? u[i ? t[o] : o] : X;
-            };
-        }
-        function Yu(n) {
-            return gi(function(t) {
-                var r = t.length, e = r, u = Y.prototype.thru;
-                for (n && t.reverse(); e--; ) {
-                    var i = t[e];
-                    if ("function" != typeof i) throw new pl(en);
-                    if (u && !o && "wrapper" == bi(i)) var o = new Y([], !0);
-                }
-                for (e = o ? e : r; ++e < r; ) {
-                    i = t[e];
-                    var f = bi(i), c = "wrapper" == f ? Os(i) : X;
-                    o = c && $i(c[0]) && c[1] == (mn | yn | bn | xn) && !c[4].length && 1 == c[9] ? o[bi(c[0])].apply(o, c[3]) : 1 == i.length && $i(i) ? o[f]() : o.thru(i);
-                }
-                return function() {
-                    var n = arguments, e = n[0];
-                    if (o && 1 == n.length && bh(e)) return o.plant(e).value();
-                    for (var u = 0, i = r ? t[u].apply(this, n) : e; ++u < r; ) i = t[u].call(this, i);
-                    return i;
-                };
-            });
-        }
-        function Qu(n, t, r, e, u, i, o, f, c, a) {
-            function l() {
-                for (var y = arguments.length, d = il(y), b = y; b--; ) d[b] = arguments[b];
-                if (_) var w = wi(l), m = C(d, w);
-                if (e && (d = Uu(d, e, u, _)), i && (d = Bu(d, i, o, _)), y -= m, _ && y < a) {
-                    return oi(n, t, Qu, l.placeholder, r, d, N(d, w), f, c, a - y);
-                }
-                var x = h ? r : this, j = p ? x[n] : n;
-                return y = d.length, f ? d = Hi(d, f) : v && y > 1 && d.reverse(), s && c < y && (d.length = c), 
-                this && this !== re && this instanceof l && (j = g || Gu(j)), j.apply(x, d);
-            }
-            var s = t & mn, h = t & _n, p = t & vn, _ = t & (yn | dn), v = t & jn, g = p ? X : Gu(n);
-            return l;
-        }
-        function Xu(n, t) {
-            return function(r, e) {
-                return Oe(r, n, t(e), {});
-            };
-        }
-        function ni(n, t) {
-            return function(r, e) {
-                var u;
-                if (r === X && e === X) return t;
-                if (r !== X && (u = r), e !== X) {
-                    if (u === X) return e;
-                    "string" == typeof r || "string" == typeof e ? (r = vu(r), e = vu(e)) : (r = _u(r), 
-                    e = _u(e)), u = n(r, e);
-                }
-                return u;
-            };
-        }
-        function ti(t) {
-            return gi(function(r) {
-                return r = c(r, z(mi())), uu(function(e) {
-                    var u = this;
-                    return t(r, function(t) {
-                        return n(t, u, e);
-                    });
-                });
-            });
-        }
-        function ri(n, t) {
-            t = t === X ? " " : vu(t);
-            var r = t.length;
-            if (r < 2) return r ? eu(t, n) : t;
-            var e = eu(t, Fl(n / V(t)));
-            return T(t) ? Ou(G(e), 0, n).join("") : e.slice(0, n);
-        }
-        function ei(t, r, e, u) {
-            function i() {
-                for (var r = -1, c = arguments.length, a = -1, l = u.length, s = il(l + c), h = this && this !== re && this instanceof i ? f : t; ++a < l; ) s[a] = u[a];
-                for (;c--; ) s[a++] = arguments[++r];
-                return n(h, o ? e : this, s);
-            }
-            var o = r & _n, f = Gu(t);
-            return i;
-        }
-        function ui(n) {
-            return function(t, r, e) {
-                return e && "number" != typeof e && Ui(t, r, e) && (r = e = X), t = Ac(t), r === X ? (r = t, 
-                t = 0) : r = Ac(r), e = e === X ? t < r ? 1 : -1 : Ac(e), ru(t, r, e, n);
-            };
-        }
-        function ii(n) {
-            return function(t, r) {
-                return "string" == typeof t && "string" == typeof r || (t = Ic(t), r = Ic(r)), n(t, r);
-            };
-        }
-        function oi(n, t, r, e, u, i, o, f, c, a) {
-            var l = t & yn, s = l ? o : X, h = l ? X : o, p = l ? i : X, _ = l ? X : i;
-            t |= l ? bn : wn, t &= ~(l ? wn : bn), t & gn || (t &= ~(_n | vn));
-            var v = [ n, t, u, p, s, _, h, f, c, a ], g = r.apply(X, v);
-            return $i(n) && Ss(g, v), g.placeholder = e, Yi(g, n, t);
-        }
-        function fi(n) {
-            var t = al[n];
-            return function(n, r) {
-                if (n = Ic(n), r = null == r ? 0 : Hl(kc(r), 292), r && Zl(n)) {
-                    var e = (Ec(n) + "e").split("e");
-                    return e = (Ec(t(e[0] + "e" + (+e[1] + r))) + "e").split("e"), +(e[0] + "e" + (+e[1] - r));
-                }
-                return t(n);
-            };
-        }
-        function ci(n) {
-            return function(t) {
-                var r = zs(t);
-                return r == Gn ? M(t) : r == tt ? q(t) : I(t, n(t));
-            };
-        }
-        function ai(n, t, r, e, u, i, o, f) {
-            var c = t & vn;
-            if (!c && "function" != typeof n) throw new pl(en);
-            var a = e ? e.length : 0;
-            if (a || (t &= ~(bn | wn), e = u = X), o = o === X ? o : Gl(kc(o), 0), f = f === X ? f : kc(f), 
-            a -= u ? u.length : 0, t & wn) {
-                var l = e, s = u;
-                e = u = X;
-            }
-            var h = c ? X : Os(n), p = [ n, t, r, e, u, l, s, i, o, f ];
-            if (h && qi(p, h), n = p[0], t = p[1], r = p[2], e = p[3], u = p[4], f = p[9] = p[9] === X ? c ? 0 : n.length : Gl(p[9] - a, 0), 
-            !f && t & (yn | dn) && (t &= ~(yn | dn)), t && t != _n) _ = t == yn || t == dn ? Hu(n, t, f) : t != bn && t != (_n | bn) || u.length ? Qu.apply(X, p) : ei(n, t, r, e); else var _ = Zu(n, t, r);
-            return Yi((h ? ms : Ss)(_, p), n, t);
-        }
-        function li(n, t, r, e) {
-            return n === X || Gf(n, gl[r]) && !bl.call(e, r) ? t : n;
-        }
-        function si(n, t, r, e, u, i) {
-            return fc(n) && fc(t) && (i.set(t, n), Ke(n, t, X, si, i), i.delete(t)), n;
-        }
-        function hi(n) {
-            return gc(n) ? X : n;
-        }
-        function pi(n, t, r, e, u, i) {
-            var o = r & hn, f = n.length, c = t.length;
-            if (f != c && !(o && c > f)) return !1;
-            var a = i.get(n), l = i.get(t);
-            if (a && l) return a == t && l == n;
-            var s = -1, p = !0, _ = r & pn ? new yr() : X;
-            for (i.set(n, t), i.set(t, n); ++s < f; ) {
-                var v = n[s], g = t[s];
-                if (e) var y = o ? e(g, v, s, t, n, i) : e(v, g, s, n, t, i);
-                if (y !== X) {
-                    if (y) continue;
-                    p = !1;
-                    break;
-                }
-                if (_) {
-                    if (!h(t, function(n, t) {
-                        if (!S(_, t) && (v === n || u(v, n, r, e, i))) return _.push(t);
-                    })) {
-                        p = !1;
-                        break;
-                    }
-                } else if (v !== g && !u(v, g, r, e, i)) {
-                    p = !1;
-                    break;
-                }
-            }
-            return i.delete(n), i.delete(t), p;
-        }
-        function _i(n, t, r, e, u, i, o) {
-            switch (r) {
-              case ct:
-                if (n.byteLength != t.byteLength || n.byteOffset != t.byteOffset) return !1;
-                n = n.buffer, t = t.buffer;
-
-              case ft:
-                return !(n.byteLength != t.byteLength || !i(new Rl(n), new Rl(t)));
-
-              case Nn:
-              case Pn:
-              case Hn:
-                return Gf(+n, +t);
-
-              case Zn:
-                return n.name == t.name && n.message == t.message;
-
-              case nt:
-              case rt:
-                return n == t + "";
-
-              case Gn:
-                var f = M;
-
-              case tt:
-                var c = e & hn;
-                if (f || (f = P), n.size != t.size && !c) return !1;
-                var a = o.get(n);
-                if (a) return a == t;
-                e |= pn, o.set(n, t);
-                var l = pi(f(n), f(t), e, u, i, o);
-                return o.delete(n), l;
-
-              case et:
-                if (_s) return _s.call(n) == _s.call(t);
-            }
-            return !1;
-        }
-        function vi(n, t, r, e, u, i) {
-            var o = r & hn, f = yi(n), c = f.length;
-            if (c != yi(t).length && !o) return !1;
-            for (var a = c; a--; ) {
-                var l = f[a];
-                if (!(o ? l in t : bl.call(t, l))) return !1;
-            }
-            var s = i.get(n), h = i.get(t);
-            if (s && h) return s == t && h == n;
-            var p = !0;
-            i.set(n, t), i.set(t, n);
-            for (var _ = o; ++a < c; ) {
-                l = f[a];
-                var v = n[l], g = t[l];
-                if (e) var y = o ? e(g, v, l, t, n, i) : e(v, g, l, n, t, i);
-                if (!(y === X ? v === g || u(v, g, r, e, i) : y)) {
-                    p = !1;
-                    break;
-                }
-                _ || (_ = "constructor" == l);
-            }
-            if (p && !_) {
-                var d = n.constructor, b = t.constructor;
-                d != b && "constructor" in n && "constructor" in t && !("function" == typeof d && d instanceof d && "function" == typeof b && b instanceof b) && (p = !1);
-            }
-            return i.delete(n), i.delete(t), p;
-        }
-        function gi(n) {
-            return Ls(Vi(n, X, _o), n + "");
-        }
-        function yi(n) {
-            return de(n, Pc, Is);
-        }
-        function di(n) {
-            return de(n, qc, Rs);
-        }
-        function bi(n) {
-            for (var t = n.name + "", r = fs[t], e = bl.call(fs, t) ? r.length : 0; e--; ) {
-                var u = r[e], i = u.func;
-                if (null == i || i == n) return u.name;
-            }
-            return t;
-        }
-        function wi(n) {
-            return (bl.call(Z, "placeholder") ? Z : n).placeholder;
-        }
-        function mi() {
-            var n = Z.iteratee || Ca;
-            return n = n === Ca ? De : n, arguments.length ? n(arguments[0], arguments[1]) : n;
-        }
-        function xi(n, t) {
-            var r = n.__data__;
-            return Ti(t) ? r["string" == typeof t ? "string" : "hash"] : r.map;
-        }
-        function ji(n) {
-            for (var t = Pc(n), r = t.length; r--; ) {
-                var e = t[r], u = n[e];
-                t[r] = [ e, u, Fi(u) ];
-            }
-            return t;
-        }
-        function Ai(n, t) {
-            var r = B(n, t);
-            return Ue(r) ? r : X;
-        }
-        function ki(n) {
-            var t = bl.call(n, Bl), r = n[Bl];
-            try {
-                n[Bl] = X;
-                var e = !0;
-            } catch (n) {}
-            var u = xl.call(n);
-            return e && (t ? n[Bl] = r : delete n[Bl]), u;
-        }
-        function Oi(n, t, r) {
-            for (var e = -1, u = r.length; ++e < u; ) {
-                var i = r[e], o = i.size;
-                switch (i.type) {
-                  case "drop":
-                    n += o;
-                    break;
-
-                  case "dropRight":
-                    t -= o;
-                    break;
-
-                  case "take":
-                    t = Hl(t, n + o);
-                    break;
-
-                  case "takeRight":
-                    n = Gl(n, t - o);
-                }
-            }
-            return {
-                start: n,
-                end: t
-            };
-        }
-        function Ii(n) {
-            var t = n.match(Bt);
-            return t ? t[1].split(Tt) : [];
-        }
-        function Ri(n, t, r) {
-            t = ku(t, n);
-            for (var e = -1, u = t.length, i = !1; ++e < u; ) {
-                var o = no(t[e]);
-                if (!(i = null != n && r(n, o))) break;
-                n = n[o];
-            }
-            return i || ++e != u ? i : (u = null == n ? 0 : n.length, !!u && oc(u) && Ci(o, u) && (bh(n) || dh(n)));
-        }
-        function zi(n) {
-            var t = n.length, r = new n.constructor(t);
-            return t && "string" == typeof n[0] && bl.call(n, "index") && (r.index = n.index, 
-            r.input = n.input), r;
-        }
-        function Ei(n) {
-            return "function" != typeof n.constructor || Mi(n) ? {} : gs(El(n));
-        }
-        function Si(n, t, r) {
-            var e = n.constructor;
-            switch (t) {
-              case ft:
-                return Ru(n);
-
-              case Nn:
-              case Pn:
-                return new e(+n);
-
-              case ct:
-                return zu(n, r);
-
-              case at:
-              case lt:
-              case st:
-              case ht:
-              case pt:
-              case _t:
-              case vt:
-              case gt:
-              case yt:
-                return Wu(n, r);
-
-              case Gn:
-                return new e();
-
-              case Hn:
-              case rt:
-                return new e(n);
-
-              case nt:
-                return Eu(n);
-
-              case tt:
-                return new e();
-
-              case et:
-                return Su(n);
-            }
-        }
-        function Wi(n, t) {
-            var r = t.length;
-            if (!r) return n;
-            var e = r - 1;
-            return t[e] = (r > 1 ? "& " : "") + t[e], t = t.join(r > 2 ? ", " : " "), n.replace(Ut, "{\n/* [wrapped with " + t + "] */\n");
-        }
-        function Li(n) {
-            return bh(n) || dh(n) || !!(Cl && n && n[Cl]);
-        }
-        function Ci(n, t) {
-            var r = typeof n;
-            return t = null == t ? Wn : t, !!t && ("number" == r || "symbol" != r && Vt.test(n)) && n > -1 && n % 1 == 0 && n < t;
-        }
-        function Ui(n, t, r) {
-            if (!fc(r)) return !1;
-            var e = typeof t;
-            return !!("number" == e ? Hf(r) && Ci(t, r.length) : "string" == e && t in r) && Gf(r[t], n);
-        }
-        function Bi(n, t) {
-            if (bh(n)) return !1;
-            var r = typeof n;
-            return !("number" != r && "symbol" != r && "boolean" != r && null != n && !bc(n)) || (zt.test(n) || !Rt.test(n) || null != t && n in ll(t));
-        }
-        function Ti(n) {
-            var t = typeof n;
-            return "string" == t || "number" == t || "symbol" == t || "boolean" == t ? "__proto__" !== n : null === n;
-        }
-        function $i(n) {
-            var t = bi(n), r = Z[t];
-            if ("function" != typeof r || !(t in Ct.prototype)) return !1;
-            if (n === r) return !0;
-            var e = Os(r);
-            return !!e && n === e[0];
-        }
-        function Di(n) {
-            return !!ml && ml in n;
-        }
-        function Mi(n) {
-            var t = n && n.constructor;
-            return n === ("function" == typeof t && t.prototype || gl);
-        }
-        function Fi(n) {
-            return n === n && !fc(n);
-        }
-        function Ni(n, t) {
-            return function(r) {
-                return null != r && (r[n] === t && (t !== X || n in ll(r)));
-            };
-        }
-        function Pi(n) {
-            var t = Cf(n, function(n) {
-                return r.size === fn && r.clear(), n;
-            }), r = t.cache;
-            return t;
-        }
-        function qi(n, t) {
-            var r = n[1], e = t[1], u = r | e, i = u < (_n | vn | mn), o = e == mn && r == yn || e == mn && r == xn && n[7].length <= t[8] || e == (mn | xn) && t[7].length <= t[8] && r == yn;
-            if (!i && !o) return n;
-            e & _n && (n[2] = t[2], u |= r & _n ? 0 : gn);
-            var f = t[3];
-            if (f) {
-                var c = n[3];
-                n[3] = c ? Uu(c, f, t[4]) : f, n[4] = c ? N(n[3], cn) : t[4];
-            }
-            return f = t[5], f && (c = n[5], n[5] = c ? Bu(c, f, t[6]) : f, n[6] = c ? N(n[5], cn) : t[6]), 
-            f = t[7], f && (n[7] = f), e & mn && (n[8] = null == n[8] ? t[8] : Hl(n[8], t[8])), 
-            null == n[9] && (n[9] = t[9]), n[0] = t[0], n[1] = u, n;
-        }
-        function Zi(n) {
-            var t = [];
-            if (null != n) for (var r in ll(n)) t.push(r);
-            return t;
-        }
-        function Ki(n) {
-            return xl.call(n);
-        }
-        function Vi(t, r, e) {
-            return r = Gl(r === X ? t.length - 1 : r, 0), function() {
-                for (var u = arguments, i = -1, o = Gl(u.length - r, 0), f = il(o); ++i < o; ) f[i] = u[r + i];
-                i = -1;
-                for (var c = il(r + 1); ++i < r; ) c[i] = u[i];
-                return c[r] = e(f), n(t, this, c);
-            };
-        }
-        function Gi(n, t) {
-            return t.length < 2 ? n : _e(n, au(t, 0, -1));
-        }
-        function Hi(n, t) {
-            for (var r = n.length, e = Hl(t.length, r), u = Tu(n); e--; ) {
-                var i = t[e];
-                n[e] = Ci(i, r) ? u[i] : X;
-            }
-            return n;
-        }
-        function Ji(n, t) {
-            if (("constructor" !== t || "function" != typeof n[t]) && "__proto__" != t) return n[t];
-        }
-        function Yi(n, t, r) {
-            var e = t + "";
-            return Ls(n, Wi(e, ro(Ii(e), r)));
-        }
-        function Qi(n) {
-            var t = 0, r = 0;
-            return function() {
-                var e = Jl(), u = In - (e - r);
-                if (r = e, u > 0) {
-                    if (++t >= On) return arguments[0];
-                } else t = 0;
-                return n.apply(X, arguments);
-            };
-        }
-        function Xi(n, t) {
-            var r = -1, e = n.length, u = e - 1;
-            for (t = t === X ? e : t; ++r < t; ) {
-                var i = tu(r, u), o = n[i];
-                n[i] = n[r], n[r] = o;
-            }
-            return n.length = t, n;
-        }
-        function no(n) {
-            if ("string" == typeof n || bc(n)) return n;
-            var t = n + "";
-            return "0" == t && 1 / n == -Sn ? "-0" : t;
-        }
-        function to(n) {
-            if (null != n) {
-                try {
-                    return dl.call(n);
-                } catch (n) {}
-                try {
-                    return n + "";
-                } catch (n) {}
-            }
-            return "";
-        }
-        function ro(n, t) {
-            return r($n, function(r) {
-                var e = "_." + r[0];
-                t & r[1] && !o(n, e) && n.push(e);
-            }), n.sort();
-        }
-        function eo(n) {
-            if (n instanceof Ct) return n.clone();
-            var t = new Y(n.__wrapped__, n.__chain__);
-            return t.__actions__ = Tu(n.__actions__), t.__index__ = n.__index__, t.__values__ = n.__values__, 
-            t;
-        }
-        function uo(n, t, r) {
-            t = (r ? Ui(n, t, r) : t === X) ? 1 : Gl(kc(t), 0);
-            var e = null == n ? 0 : n.length;
-            if (!e || t < 1) return [];
-            for (var u = 0, i = 0, o = il(Fl(e / t)); u < e; ) o[i++] = au(n, u, u += t);
-            return o;
-        }
-        function io(n) {
-            for (var t = -1, r = null == n ? 0 : n.length, e = 0, u = []; ++t < r; ) {
-                var i = n[t];
-                i && (u[e++] = i);
-            }
-            return u;
-        }
-        function oo() {
-            var n = arguments.length;
-            if (!n) return [];
-            for (var t = il(n - 1), r = arguments[0], e = n; e--; ) t[e - 1] = arguments[e];
-            return a(bh(r) ? Tu(r) : [ r ], ee(t, 1));
-        }
-        function fo(n, t, r) {
-            var e = null == n ? 0 : n.length;
-            return e ? (t = r || t === X ? 1 : kc(t), au(n, t < 0 ? 0 : t, e)) : [];
-        }
-        function co(n, t, r) {
-            var e = null == n ? 0 : n.length;
-            return e ? (t = r || t === X ? 1 : kc(t), t = e - t, au(n, 0, t < 0 ? 0 : t)) : [];
-        }
-        function ao(n, t) {
-            return n && n.length ? bu(n, mi(t, 3), !0, !0) : [];
-        }
-        function lo(n, t) {
-            return n && n.length ? bu(n, mi(t, 3), !0) : [];
-        }
-        function so(n, t, r, e) {
-            var u = null == n ? 0 : n.length;
-            return u ? (r && "number" != typeof r && Ui(n, t, r) && (r = 0, e = u), ne(n, t, r, e)) : [];
-        }
-        function ho(n, t, r) {
-            var e = null == n ? 0 : n.length;
-            if (!e) return -1;
-            var u = null == r ? 0 : kc(r);
-            return u < 0 && (u = Gl(e + u, 0)), g(n, mi(t, 3), u);
-        }
-        function po(n, t, r) {
-            var e = null == n ? 0 : n.length;
-            if (!e) return -1;
-            var u = e - 1;
-            return r !== X && (u = kc(r), u = r < 0 ? Gl(e + u, 0) : Hl(u, e - 1)), g(n, mi(t, 3), u, !0);
-        }
-        function _o(n) {
-            return (null == n ? 0 : n.length) ? ee(n, 1) : [];
-        }
-        function vo(n) {
-            return (null == n ? 0 : n.length) ? ee(n, Sn) : [];
-        }
-        function go(n, t) {
-            return (null == n ? 0 : n.length) ? (t = t === X ? 1 : kc(t), ee(n, t)) : [];
-        }
-        function yo(n) {
-            for (var t = -1, r = null == n ? 0 : n.length, e = {}; ++t < r; ) {
-                var u = n[t];
-                e[u[0]] = u[1];
-            }
-            return e;
-        }
-        function bo(n) {
-            return n && n.length ? n[0] : X;
-        }
-        function wo(n, t, r) {
-            var e = null == n ? 0 : n.length;
-            if (!e) return -1;
-            var u = null == r ? 0 : kc(r);
-            return u < 0 && (u = Gl(e + u, 0)), y(n, t, u);
-        }
-        function mo(n) {
-            return (null == n ? 0 : n.length) ? au(n, 0, -1) : [];
-        }
-        function xo(n, t) {
-            return null == n ? "" : Kl.call(n, t);
-        }
-        function jo(n) {
-            var t = null == n ? 0 : n.length;
-            return t ? n[t - 1] : X;
-        }
-        function Ao(n, t, r) {
-            var e = null == n ? 0 : n.length;
-            if (!e) return -1;
-            var u = e;
-            return r !== X && (u = kc(r), u = u < 0 ? Gl(e + u, 0) : Hl(u, e - 1)), t === t ? K(n, t, u) : g(n, b, u, !0);
-        }
-        function ko(n, t) {
-            return n && n.length ? Ge(n, kc(t)) : X;
-        }
-        function Oo(n, t) {
-            return n && n.length && t && t.length ? Xe(n, t) : n;
-        }
-        function Io(n, t, r) {
-            return n && n.length && t && t.length ? Xe(n, t, mi(r, 2)) : n;
-        }
-        function Ro(n, t, r) {
-            return n && n.length && t && t.length ? Xe(n, t, X, r) : n;
-        }
-        function zo(n, t) {
-            var r = [];
-            if (!n || !n.length) return r;
-            var e = -1, u = [], i = n.length;
-            for (t = mi(t, 3); ++e < i; ) {
-                var o = n[e];
-                t(o, e, n) && (r.push(o), u.push(e));
-            }
-            return nu(n, u), r;
-        }
-        function Eo(n) {
-            return null == n ? n : Xl.call(n);
-        }
-        function So(n, t, r) {
-            var e = null == n ? 0 : n.length;
-            return e ? (r && "number" != typeof r && Ui(n, t, r) ? (t = 0, r = e) : (t = null == t ? 0 : kc(t), 
-            r = r === X ? e : kc(r)), au(n, t, r)) : [];
-        }
-        function Wo(n, t) {
-            return su(n, t);
-        }
-        function Lo(n, t, r) {
-            return hu(n, t, mi(r, 2));
-        }
-        function Co(n, t) {
-            var r = null == n ? 0 : n.length;
-            if (r) {
-                var e = su(n, t);
-                if (e < r && Gf(n[e], t)) return e;
-            }
-            return -1;
-        }
-        function Uo(n, t) {
-            return su(n, t, !0);
-        }
-        function Bo(n, t, r) {
-            return hu(n, t, mi(r, 2), !0);
-        }
-        function To(n, t) {
-            if (null == n ? 0 : n.length) {
-                var r = su(n, t, !0) - 1;
-                if (Gf(n[r], t)) return r;
-            }
-            return -1;
-        }
-        function $o(n) {
-            return n && n.length ? pu(n) : [];
-        }
-        function Do(n, t) {
-            return n && n.length ? pu(n, mi(t, 2)) : [];
-        }
-        function Mo(n) {
-            var t = null == n ? 0 : n.length;
-            return t ? au(n, 1, t) : [];
-        }
-        function Fo(n, t, r) {
-            return n && n.length ? (t = r || t === X ? 1 : kc(t), au(n, 0, t < 0 ? 0 : t)) : [];
-        }
-        function No(n, t, r) {
-            var e = null == n ? 0 : n.length;
-            return e ? (t = r || t === X ? 1 : kc(t), t = e - t, au(n, t < 0 ? 0 : t, e)) : [];
-        }
-        function Po(n, t) {
-            return n && n.length ? bu(n, mi(t, 3), !1, !0) : [];
-        }
-        function qo(n, t) {
-            return n && n.length ? bu(n, mi(t, 3)) : [];
-        }
-        function Zo(n) {
-            return n && n.length ? gu(n) : [];
-        }
-        function Ko(n, t) {
-            return n && n.length ? gu(n, mi(t, 2)) : [];
-        }
-        function Vo(n, t) {
-            return t = "function" == typeof t ? t : X, n && n.length ? gu(n, X, t) : [];
-        }
-        function Go(n) {
-            if (!n || !n.length) return [];
-            var t = 0;
-            return n = i(n, function(n) {
-                if (Jf(n)) return t = Gl(n.length, t), !0;
-            }), O(t, function(t) {
-                return c(n, m(t));
-            });
-        }
-        function Ho(t, r) {
-            if (!t || !t.length) return [];
-            var e = Go(t);
-            return null == r ? e : c(e, function(t) {
-                return n(r, X, t);
-            });
-        }
-        function Jo(n, t) {
-            return xu(n || [], t || [], Sr);
-        }
-        function Yo(n, t) {
-            return xu(n || [], t || [], fu);
-        }
-        function Qo(n) {
-            var t = Z(n);
-            return t.__chain__ = !0, t;
-        }
-        function Xo(n, t) {
-            return t(n), n;
-        }
-        function nf(n, t) {
-            return t(n);
-        }
-        function tf() {
-            return Qo(this);
-        }
-        function rf() {
-            return new Y(this.value(), this.__chain__);
-        }
-        function ef() {
-            this.__values__ === X && (this.__values__ = jc(this.value()));
-            var n = this.__index__ >= this.__values__.length;
-            return {
-                done: n,
-                value: n ? X : this.__values__[this.__index__++]
-            };
-        }
-        function uf() {
-            return this;
-        }
-        function of(n) {
-            for (var t, r = this; r instanceof J; ) {
-                var e = eo(r);
-                e.__index__ = 0, e.__values__ = X, t ? u.__wrapped__ = e : t = e;
-                var u = e;
-                r = r.__wrapped__;
-            }
-            return u.__wrapped__ = n, t;
-        }
-        function ff() {
-            var n = this.__wrapped__;
-            if (n instanceof Ct) {
-                var t = n;
-                return this.__actions__.length && (t = new Ct(this)), t = t.reverse(), t.__actions__.push({
-                    func: nf,
-                    args: [ Eo ],
-                    thisArg: X
-                }), new Y(t, this.__chain__);
-            }
-            return this.thru(Eo);
-        }
-        function cf() {
-            return wu(this.__wrapped__, this.__actions__);
-        }
-        function af(n, t, r) {
-            var e = bh(n) ? u : Jr;
-            return r && Ui(n, t, r) && (t = X), e(n, mi(t, 3));
-        }
-        function lf(n, t) {
-            return (bh(n) ? i : te)(n, mi(t, 3));
-        }
-        function sf(n, t) {
-            return ee(yf(n, t), 1);
-        }
-        function hf(n, t) {
-            return ee(yf(n, t), Sn);
-        }
-        function pf(n, t, r) {
-            return r = r === X ? 1 : kc(r), ee(yf(n, t), r);
-        }
-        function _f(n, t) {
-            return (bh(n) ? r : ys)(n, mi(t, 3));
-        }
-        function vf(n, t) {
-            return (bh(n) ? e : ds)(n, mi(t, 3));
-        }
-        function gf(n, t, r, e) {
-            n = Hf(n) ? n : ra(n), r = r && !e ? kc(r) : 0;
-            var u = n.length;
-            return r < 0 && (r = Gl(u + r, 0)), dc(n) ? r <= u && n.indexOf(t, r) > -1 : !!u && y(n, t, r) > -1;
-        }
-        function yf(n, t) {
-            return (bh(n) ? c : Pe)(n, mi(t, 3));
-        }
-        function df(n, t, r, e) {
-            return null == n ? [] : (bh(t) || (t = null == t ? [] : [ t ]), r = e ? X : r, bh(r) || (r = null == r ? [] : [ r ]), 
-            He(n, t, r));
-        }
-        function bf(n, t, r) {
-            var e = bh(n) ? l : j, u = arguments.length < 3;
-            return e(n, mi(t, 4), r, u, ys);
-        }
-        function wf(n, t, r) {
-            var e = bh(n) ? s : j, u = arguments.length < 3;
-            return e(n, mi(t, 4), r, u, ds);
-        }
-        function mf(n, t) {
-            return (bh(n) ? i : te)(n, Uf(mi(t, 3)));
-        }
-        function xf(n) {
-            return (bh(n) ? Ir : iu)(n);
-        }
-        function jf(n, t, r) {
-            return t = (r ? Ui(n, t, r) : t === X) ? 1 : kc(t), (bh(n) ? Rr : ou)(n, t);
-        }
-        function Af(n) {
-            return (bh(n) ? zr : cu)(n);
-        }
-        function kf(n) {
-            if (null == n) return 0;
-            if (Hf(n)) return dc(n) ? V(n) : n.length;
-            var t = zs(n);
-            return t == Gn || t == tt ? n.size : Me(n).length;
-        }
-        function Of(n, t, r) {
-            var e = bh(n) ? h : lu;
-            return r && Ui(n, t, r) && (t = X), e(n, mi(t, 3));
-        }
-        function If(n, t) {
-            if ("function" != typeof t) throw new pl(en);
-            return n = kc(n), function() {
-                if (--n < 1) return t.apply(this, arguments);
-            };
-        }
-        function Rf(n, t, r) {
-            return t = r ? X : t, t = n && null == t ? n.length : t, ai(n, mn, X, X, X, X, t);
-        }
-        function zf(n, t) {
-            var r;
-            if ("function" != typeof t) throw new pl(en);
-            return n = kc(n), function() {
-                return --n > 0 && (r = t.apply(this, arguments)), n <= 1 && (t = X), r;
-            };
-        }
-        function Ef(n, t, r) {
-            t = r ? X : t;
-            var e = ai(n, yn, X, X, X, X, X, t);
-            return e.placeholder = Ef.placeholder, e;
-        }
-        function Sf(n, t, r) {
-            t = r ? X : t;
-            var e = ai(n, dn, X, X, X, X, X, t);
-            return e.placeholder = Sf.placeholder, e;
-        }
-        function Wf(n, t, r) {
-            function e(t) {
-                var r = h, e = p;
-                return h = p = X, d = t, v = n.apply(e, r);
-            }
-            function u(n) {
-                return d = n, g = Ws(f, t), b ? e(n) : v;
-            }
-            function i(n) {
-                var r = n - y, e = n - d, u = t - r;
-                return w ? Hl(u, _ - e) : u;
-            }
-            function o(n) {
-                var r = n - y, e = n - d;
-                return y === X || r >= t || r < 0 || w && e >= _;
-            }
-            function f() {
-                var n = fh();
-                return o(n) ? c(n) : (g = Ws(f, i(n)), X);
-            }
-            function c(n) {
-                return g = X, m && h ? e(n) : (h = p = X, v);
-            }
-            function a() {
-                g !== X && As(g), d = 0, h = y = p = g = X;
-            }
-            function l() {
-                return g === X ? v : c(fh());
-            }
-            function s() {
-                var n = fh(), r = o(n);
-                if (h = arguments, p = this, y = n, r) {
-                    if (g === X) return u(y);
-                    if (w) return As(g), g = Ws(f, t), e(y);
-                }
-                return g === X && (g = Ws(f, t)), v;
-            }
-            var h, p, _, v, g, y, d = 0, b = !1, w = !1, m = !0;
-            if ("function" != typeof n) throw new pl(en);
-            return t = Ic(t) || 0, fc(r) && (b = !!r.leading, w = "maxWait" in r, _ = w ? Gl(Ic(r.maxWait) || 0, t) : _, 
-            m = "trailing" in r ? !!r.trailing : m), s.cancel = a, s.flush = l, s;
-        }
-        function Lf(n) {
-            return ai(n, jn);
-        }
-        function Cf(n, t) {
-            if ("function" != typeof n || null != t && "function" != typeof t) throw new pl(en);
-            var r = function() {
-                var e = arguments, u = t ? t.apply(this, e) : e[0], i = r.cache;
-                if (i.has(u)) return i.get(u);
-                var o = n.apply(this, e);
-                return r.cache = i.set(u, o) || i, o;
-            };
-            return r.cache = new (Cf.Cache || sr)(), r;
-        }
-        function Uf(n) {
-            if ("function" != typeof n) throw new pl(en);
-            return function() {
-                var t = arguments;
-                switch (t.length) {
-                  case 0:
-                    return !n.call(this);
-
-                  case 1:
-                    return !n.call(this, t[0]);
-
-                  case 2:
-                    return !n.call(this, t[0], t[1]);
-
-                  case 3:
-                    return !n.call(this, t[0], t[1], t[2]);
-                }
-                return !n.apply(this, t);
-            };
-        }
-        function Bf(n) {
-            return zf(2, n);
-        }
-        function Tf(n, t) {
-            if ("function" != typeof n) throw new pl(en);
-            return t = t === X ? t : kc(t), uu(n, t);
-        }
-        function $f(t, r) {
-            if ("function" != typeof t) throw new pl(en);
-            return r = null == r ? 0 : Gl(kc(r), 0), uu(function(e) {
-                var u = e[r], i = Ou(e, 0, r);
-                return u && a(i, u), n(t, this, i);
-            });
-        }
-        function Df(n, t, r) {
-            var e = !0, u = !0;
-            if ("function" != typeof n) throw new pl(en);
-            return fc(r) && (e = "leading" in r ? !!r.leading : e, u = "trailing" in r ? !!r.trailing : u), 
-            Wf(n, t, {
-                leading: e,
-                maxWait: t,
-                trailing: u
-            });
-        }
-        function Mf(n) {
-            return Rf(n, 1);
-        }
-        function Ff(n, t) {
-            return ph(Au(t), n);
-        }
-        function Nf() {
-            if (!arguments.length) return [];
-            var n = arguments[0];
-            return bh(n) ? n : [ n ];
-        }
-        function Pf(n) {
-            return Fr(n, sn);
-        }
-        function qf(n, t) {
-            return t = "function" == typeof t ? t : X, Fr(n, sn, t);
-        }
-        function Zf(n) {
-            return Fr(n, an | sn);
-        }
-        function Kf(n, t) {
-            return t = "function" == typeof t ? t : X, Fr(n, an | sn, t);
-        }
-        function Vf(n, t) {
-            return null == t || Pr(n, t, Pc(t));
-        }
-        function Gf(n, t) {
-            return n === t || n !== n && t !== t;
-        }
-        function Hf(n) {
-            return null != n && oc(n.length) && !uc(n);
-        }
-        function Jf(n) {
-            return cc(n) && Hf(n);
-        }
-        function Yf(n) {
-            return n === !0 || n === !1 || cc(n) && we(n) == Nn;
-        }
-        function Qf(n) {
-            return cc(n) && 1 === n.nodeType && !gc(n);
-        }
-        function Xf(n) {
-            if (null == n) return !0;
-            if (Hf(n) && (bh(n) || "string" == typeof n || "function" == typeof n.splice || mh(n) || Oh(n) || dh(n))) return !n.length;
-            var t = zs(n);
-            if (t == Gn || t == tt) return !n.size;
-            if (Mi(n)) return !Me(n).length;
-            for (var r in n) if (bl.call(n, r)) return !1;
-            return !0;
-        }
-        function nc(n, t) {
-            return Se(n, t);
-        }
-        function tc(n, t, r) {
-            r = "function" == typeof r ? r : X;
-            var e = r ? r(n, t) : X;
-            return e === X ? Se(n, t, X, r) : !!e;
-        }
-        function rc(n) {
-            if (!cc(n)) return !1;
-            var t = we(n);
-            return t == Zn || t == qn || "string" == typeof n.message && "string" == typeof n.name && !gc(n);
-        }
-        function ec(n) {
-            return "number" == typeof n && Zl(n);
-        }
-        function uc(n) {
-            if (!fc(n)) return !1;
-            var t = we(n);
-            return t == Kn || t == Vn || t == Fn || t == Xn;
-        }
-        function ic(n) {
-            return "number" == typeof n && n == kc(n);
-        }
-        function oc(n) {
-            return "number" == typeof n && n > -1 && n % 1 == 0 && n <= Wn;
-        }
-        function fc(n) {
-            var t = typeof n;
-            return null != n && ("object" == t || "function" == t);
-        }
-        function cc(n) {
-            return null != n && "object" == typeof n;
-        }
-        function ac(n, t) {
-            return n === t || Ce(n, t, ji(t));
-        }
-        function lc(n, t, r) {
-            return r = "function" == typeof r ? r : X, Ce(n, t, ji(t), r);
-        }
-        function sc(n) {
-            return vc(n) && n != +n;
-        }
-        function hc(n) {
-            if (Es(n)) throw new fl(rn);
-            return Ue(n);
-        }
-        function pc(n) {
-            return null === n;
-        }
-        function _c(n) {
-            return null == n;
-        }
-        function vc(n) {
-            return "number" == typeof n || cc(n) && we(n) == Hn;
-        }
-        function gc(n) {
-            if (!cc(n) || we(n) != Yn) return !1;
-            var t = El(n);
-            if (null === t) return !0;
-            var r = bl.call(t, "constructor") && t.constructor;
-            return "function" == typeof r && r instanceof r && dl.call(r) == jl;
-        }
-        function yc(n) {
-            return ic(n) && n >= -Wn && n <= Wn;
-        }
-        function dc(n) {
-            return "string" == typeof n || !bh(n) && cc(n) && we(n) == rt;
-        }
-        function bc(n) {
-            return "symbol" == typeof n || cc(n) && we(n) == et;
-        }
-        function wc(n) {
-            return n === X;
-        }
-        function mc(n) {
-            return cc(n) && zs(n) == it;
-        }
-        function xc(n) {
-            return cc(n) && we(n) == ot;
-        }
-        function jc(n) {
-            if (!n) return [];
-            if (Hf(n)) return dc(n) ? G(n) : Tu(n);
-            if (Ul && n[Ul]) return D(n[Ul]());
-            var t = zs(n);
-            return (t == Gn ? M : t == tt ? P : ra)(n);
-        }
-        function Ac(n) {
-            if (!n) return 0 === n ? n : 0;
-            if (n = Ic(n), n === Sn || n === -Sn) {
-                return (n < 0 ? -1 : 1) * Ln;
-            }
-            return n === n ? n : 0;
-        }
-        function kc(n) {
-            var t = Ac(n), r = t % 1;
-            return t === t ? r ? t - r : t : 0;
-        }
-        function Oc(n) {
-            return n ? Mr(kc(n), 0, Un) : 0;
-        }
-        function Ic(n) {
-            if ("number" == typeof n) return n;
-            if (bc(n)) return Cn;
-            if (fc(n)) {
-                var t = "function" == typeof n.valueOf ? n.valueOf() : n;
-                n = fc(t) ? t + "" : t;
-            }
-            if ("string" != typeof n) return 0 === n ? n : +n;
-            n = R(n);
-            var r = qt.test(n);
-            return r || Kt.test(n) ? Xr(n.slice(2), r ? 2 : 8) : Pt.test(n) ? Cn : +n;
-        }
-        function Rc(n) {
-            return $u(n, qc(n));
-        }
-        function zc(n) {
-            return n ? Mr(kc(n), -Wn, Wn) : 0 === n ? n : 0;
-        }
-        function Ec(n) {
-            return null == n ? "" : vu(n);
-        }
-        function Sc(n, t) {
-            var r = gs(n);
-            return null == t ? r : Cr(r, t);
-        }
-        function Wc(n, t) {
-            return v(n, mi(t, 3), ue);
-        }
-        function Lc(n, t) {
-            return v(n, mi(t, 3), oe);
-        }
-        function Cc(n, t) {
-            return null == n ? n : bs(n, mi(t, 3), qc);
-        }
-        function Uc(n, t) {
-            return null == n ? n : ws(n, mi(t, 3), qc);
-        }
-        function Bc(n, t) {
-            return n && ue(n, mi(t, 3));
-        }
-        function Tc(n, t) {
-            return n && oe(n, mi(t, 3));
-        }
-        function $c(n) {
-            return null == n ? [] : fe(n, Pc(n));
-        }
-        function Dc(n) {
-            return null == n ? [] : fe(n, qc(n));
-        }
-        function Mc(n, t, r) {
-            var e = null == n ? X : _e(n, t);
-            return e === X ? r : e;
-        }
-        function Fc(n, t) {
-            return null != n && Ri(n, t, xe);
-        }
-        function Nc(n, t) {
-            return null != n && Ri(n, t, je);
-        }
-        function Pc(n) {
-            return Hf(n) ? Or(n) : Me(n);
-        }
-        function qc(n) {
-            return Hf(n) ? Or(n, !0) : Fe(n);
-        }
-        function Zc(n, t) {
-            var r = {};
-            return t = mi(t, 3), ue(n, function(n, e, u) {
-                Br(r, t(n, e, u), n);
-            }), r;
-        }
-        function Kc(n, t) {
-            var r = {};
-            return t = mi(t, 3), ue(n, function(n, e, u) {
-                Br(r, e, t(n, e, u));
-            }), r;
-        }
-        function Vc(n, t) {
-            return Gc(n, Uf(mi(t)));
-        }
-        function Gc(n, t) {
-            if (null == n) return {};
-            var r = c(di(n), function(n) {
-                return [ n ];
-            });
-            return t = mi(t), Ye(n, r, function(n, r) {
-                return t(n, r[0]);
-            });
-        }
-        function Hc(n, t, r) {
-            t = ku(t, n);
-            var e = -1, u = t.length;
-            for (u || (u = 1, n = X); ++e < u; ) {
-                var i = null == n ? X : n[no(t[e])];
-                i === X && (e = u, i = r), n = uc(i) ? i.call(n) : i;
-            }
-            return n;
-        }
-        function Jc(n, t, r) {
-            return null == n ? n : fu(n, t, r);
-        }
-        function Yc(n, t, r, e) {
-            return e = "function" == typeof e ? e : X, null == n ? n : fu(n, t, r, e);
-        }
-        function Qc(n, t, e) {
-            var u = bh(n), i = u || mh(n) || Oh(n);
-            if (t = mi(t, 4), null == e) {
-                var o = n && n.constructor;
-                e = i ? u ? new o() : [] : fc(n) && uc(o) ? gs(El(n)) : {};
-            }
-            return (i ? r : ue)(n, function(n, r, u) {
-                return t(e, n, r, u);
-            }), e;
-        }
-        function Xc(n, t) {
-            return null == n || yu(n, t);
-        }
-        function na(n, t, r) {
-            return null == n ? n : du(n, t, Au(r));
-        }
-        function ta(n, t, r, e) {
-            return e = "function" == typeof e ? e : X, null == n ? n : du(n, t, Au(r), e);
-        }
-        function ra(n) {
-            return null == n ? [] : E(n, Pc(n));
-        }
-        function ea(n) {
-            return null == n ? [] : E(n, qc(n));
-        }
-        function ua(n, t, r) {
-            return r === X && (r = t, t = X), r !== X && (r = Ic(r), r = r === r ? r : 0), t !== X && (t = Ic(t), 
-            t = t === t ? t : 0), Mr(Ic(n), t, r);
-        }
-        function ia(n, t, r) {
-            return t = Ac(t), r === X ? (r = t, t = 0) : r = Ac(r), n = Ic(n), Ae(n, t, r);
-        }
-        function oa(n, t, r) {
-            if (r && "boolean" != typeof r && Ui(n, t, r) && (t = r = X), r === X && ("boolean" == typeof t ? (r = t, 
-            t = X) : "boolean" == typeof n && (r = n, n = X)), n === X && t === X ? (n = 0, 
-            t = 1) : (n = Ac(n), t === X ? (t = n, n = 0) : t = Ac(t)), n > t) {
-                var e = n;
-                n = t, t = e;
-            }
-            if (r || n % 1 || t % 1) {
-                var u = Ql();
-                return Hl(n + u * (t - n + Qr("1e-" + ((u + "").length - 1))), t);
-            }
-            return tu(n, t);
-        }
-        function fa(n) {
-            return Qh(Ec(n).toLowerCase());
-        }
-        function ca(n) {
-            return n = Ec(n), n && n.replace(Gt, ve).replace(Dr, "");
-        }
-        function aa(n, t, r) {
-            n = Ec(n), t = vu(t);
-            var e = n.length;
-            r = r === X ? e : Mr(kc(r), 0, e);
-            var u = r;
-            return r -= t.length, r >= 0 && n.slice(r, u) == t;
-        }
-        function la(n) {
-            return n = Ec(n), n && At.test(n) ? n.replace(xt, ge) : n;
-        }
-        function sa(n) {
-            return n = Ec(n), n && Wt.test(n) ? n.replace(St, "\\$&") : n;
-        }
-        function ha(n, t, r) {
-            n = Ec(n), t = kc(t);
-            var e = t ? V(n) : 0;
-            if (!t || e >= t) return n;
-            var u = (t - e) / 2;
-            return ri(Nl(u), r) + n + ri(Fl(u), r);
-        }
-        function pa(n, t, r) {
-            n = Ec(n), t = kc(t);
-            var e = t ? V(n) : 0;
-            return t && e < t ? n + ri(t - e, r) : n;
-        }
-        function _a(n, t, r) {
-            n = Ec(n), t = kc(t);
-            var e = t ? V(n) : 0;
-            return t && e < t ? ri(t - e, r) + n : n;
-        }
-        function va(n, t, r) {
-            return r || null == t ? t = 0 : t && (t = +t), Yl(Ec(n).replace(Lt, ""), t || 0);
-        }
-        function ga(n, t, r) {
-            return t = (r ? Ui(n, t, r) : t === X) ? 1 : kc(t), eu(Ec(n), t);
-        }
-        function ya() {
-            var n = arguments, t = Ec(n[0]);
-            return n.length < 3 ? t : t.replace(n[1], n[2]);
-        }
-        function da(n, t, r) {
-            return r && "number" != typeof r && Ui(n, t, r) && (t = r = X), (r = r === X ? Un : r >>> 0) ? (n = Ec(n), 
-            n && ("string" == typeof t || null != t && !Ah(t)) && (t = vu(t), !t && T(n)) ? Ou(G(n), 0, r) : n.split(t, r)) : [];
-        }
-        function ba(n, t, r) {
-            return n = Ec(n), r = null == r ? 0 : Mr(kc(r), 0, n.length), t = vu(t), n.slice(r, r + t.length) == t;
-        }
-        function wa(n, t, r) {
-            var e = Z.templateSettings;
-            r && Ui(n, t, r) && (t = X), n = Ec(n), t = Sh({}, t, e, li);
-            var u, i, o = Sh({}, t.imports, e.imports, li), f = Pc(o), c = E(o, f), a = 0, l = t.interpolate || Ht, s = "__p += '", h = sl((t.escape || Ht).source + "|" + l.source + "|" + (l === It ? Ft : Ht).source + "|" + (t.evaluate || Ht).source + "|$", "g"), p = "//# sourceURL=" + (bl.call(t, "sourceURL") ? (t.sourceURL + "").replace(/\s/g, " ") : "lodash.templateSources[" + ++Zr + "]") + "\n";
-            n.replace(h, function(t, r, e, o, f, c) {
-                return e || (e = o), s += n.slice(a, c).replace(Jt, U), r && (u = !0, s += "' +\n__e(" + r + ") +\n'"), 
-                f && (i = !0, s += "';\n" + f + ";\n__p += '"), e && (s += "' +\n((__t = (" + e + ")) == null ? '' : __t) +\n'"), 
-                a = c + t.length, t;
-            }), s += "';\n";
-            var _ = bl.call(t, "variable") && t.variable;
-            if (_) {
-                if (Dt.test(_)) throw new fl(un);
-            } else s = "with (obj) {\n" + s + "\n}\n";
-            s = (i ? s.replace(dt, "") : s).replace(bt, "$1").replace(wt, "$1;"), s = "function(" + (_ || "obj") + ") {\n" + (_ ? "" : "obj || (obj = {});\n") + "var __t, __p = ''" + (u ? ", __e = _.escape" : "") + (i ? ", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n" : ";\n") + s + "return __p\n}";
-            var v = Xh(function() {
-                return cl(f, p + "return " + s).apply(X, c);
-            });
-            if (v.source = s, rc(v)) throw v;
-            return v;
-        }
-        function ma(n) {
-            return Ec(n).toLowerCase();
-        }
-        function xa(n) {
-            return Ec(n).toUpperCase();
-        }
-        function ja(n, t, r) {
-            if (n = Ec(n), n && (r || t === X)) return R(n);
-            if (!n || !(t = vu(t))) return n;
-            var e = G(n), u = G(t);
-            return Ou(e, W(e, u), L(e, u) + 1).join("");
-        }
-        function Aa(n, t, r) {
-            if (n = Ec(n), n && (r || t === X)) return n.slice(0, H(n) + 1);
-            if (!n || !(t = vu(t))) return n;
-            var e = G(n);
-            return Ou(e, 0, L(e, G(t)) + 1).join("");
-        }
-        function ka(n, t, r) {
-            if (n = Ec(n), n && (r || t === X)) return n.replace(Lt, "");
-            if (!n || !(t = vu(t))) return n;
-            var e = G(n);
-            return Ou(e, W(e, G(t))).join("");
-        }
-        function Oa(n, t) {
-            var r = An, e = kn;
-            if (fc(t)) {
-                var u = "separator" in t ? t.separator : u;
-                r = "length" in t ? kc(t.length) : r, e = "omission" in t ? vu(t.omission) : e;
-            }
-            n = Ec(n);
-            var i = n.length;
-            if (T(n)) {
-                var o = G(n);
-                i = o.length;
-            }
-            if (r >= i) return n;
-            var f = r - V(e);
-            if (f < 1) return e;
-            var c = o ? Ou(o, 0, f).join("") : n.slice(0, f);
-            if (u === X) return c + e;
-            if (o && (f += c.length - f), Ah(u)) {
-                if (n.slice(f).search(u)) {
-                    var a, l = c;
-                    for (u.global || (u = sl(u.source, Ec(Nt.exec(u)) + "g")), u.lastIndex = 0; a = u.exec(l); ) var s = a.index;
-                    c = c.slice(0, s === X ? f : s);
-                }
-            } else if (n.indexOf(vu(u), f) != f) {
-                var h = c.lastIndexOf(u);
-                h > -1 && (c = c.slice(0, h));
-            }
-            return c + e;
-        }
-        function Ia(n) {
-            return n = Ec(n), n && jt.test(n) ? n.replace(mt, ye) : n;
-        }
-        function Ra(n, t, r) {
-            return n = Ec(n), t = r ? X : t, t === X ? $(n) ? Q(n) : _(n) : n.match(t) || [];
-        }
-        function za(t) {
-            var r = null == t ? 0 : t.length, e = mi();
-            return t = r ? c(t, function(n) {
-                if ("function" != typeof n[1]) throw new pl(en);
-                return [ e(n[0]), n[1] ];
-            }) : [], uu(function(e) {
-                for (var u = -1; ++u < r; ) {
-                    var i = t[u];
-                    if (n(i[0], this, e)) return n(i[1], this, e);
-                }
-            });
-        }
-        function Ea(n) {
-            return Nr(Fr(n, an));
-        }
-        function Sa(n) {
-            return function() {
-                return n;
-            };
-        }
-        function Wa(n, t) {
-            return null == n || n !== n ? t : n;
-        }
-        function La(n) {
-            return n;
-        }
-        function Ca(n) {
-            return De("function" == typeof n ? n : Fr(n, an));
-        }
-        function Ua(n) {
-            return qe(Fr(n, an));
-        }
-        function Ba(n, t) {
-            return Ze(n, Fr(t, an));
-        }
-        function Ta(n, t, e) {
-            var u = Pc(t), i = fe(t, u);
-            null != e || fc(t) && (i.length || !u.length) || (e = t, t = n, n = this, i = fe(t, Pc(t)));
-            var o = !(fc(e) && "chain" in e && !e.chain), f = uc(n);
-            return r(i, function(r) {
-                var e = t[r];
-                n[r] = e, f && (n.prototype[r] = function() {
-                    var t = this.__chain__;
-                    if (o || t) {
-                        var r = n(this.__wrapped__);
-                        return (r.__actions__ = Tu(this.__actions__)).push({
-                            func: e,
-                            args: arguments,
-                            thisArg: n
-                        }), r.__chain__ = t, r;
-                    }
-                    return e.apply(n, a([ this.value() ], arguments));
-                });
-            }), n;
-        }
-        function $a() {
-            return re._ === this && (re._ = Al), this;
-        }
-        function Da() {}
-        function Ma(n) {
-            return n = kc(n), uu(function(t) {
-                return Ge(t, n);
-            });
-        }
-        function Fa(n) {
-            return Bi(n) ? m(no(n)) : Qe(n);
-        }
-        function Na(n) {
-            return function(t) {
-                return null == n ? X : _e(n, t);
-            };
-        }
-        function Pa() {
-            return [];
-        }
-        function qa() {
-            return !1;
-        }
-        function Za() {
-            return {};
-        }
-        function Ka() {
-            return "";
-        }
-        function Va() {
-            return !0;
-        }
-        function Ga(n, t) {
-            if (n = kc(n), n < 1 || n > Wn) return [];
-            var r = Un, e = Hl(n, Un);
-            t = mi(t), n -= Un;
-            for (var u = O(e, t); ++r < n; ) t(r);
-            return u;
-        }
-        function Ha(n) {
-            return bh(n) ? c(n, no) : bc(n) ? [ n ] : Tu(Cs(Ec(n)));
-        }
-        function Ja(n) {
-            var t = ++wl;
-            return Ec(n) + t;
-        }
-        function Ya(n) {
-            return n && n.length ? Yr(n, La, me) : X;
-        }
-        function Qa(n, t) {
-            return n && n.length ? Yr(n, mi(t, 2), me) : X;
-        }
-        function Xa(n) {
-            return w(n, La);
-        }
-        function nl(n, t) {
-            return w(n, mi(t, 2));
-        }
-        function tl(n) {
-            return n && n.length ? Yr(n, La, Ne) : X;
-        }
-        function rl(n, t) {
-            return n && n.length ? Yr(n, mi(t, 2), Ne) : X;
-        }
-        function el(n) {
-            return n && n.length ? k(n, La) : 0;
-        }
-        function ul(n, t) {
-            return n && n.length ? k(n, mi(t, 2)) : 0;
-        }
-        x = null == x ? re : be.defaults(re.Object(), x, be.pick(re, qr));
-        var il = x.Array, ol = x.Date, fl = x.Error, cl = x.Function, al = x.Math, ll = x.Object, sl = x.RegExp, hl = x.String, pl = x.TypeError, _l = il.prototype, vl = cl.prototype, gl = ll.prototype, yl = x["__core-js_shared__"], dl = vl.toString, bl = gl.hasOwnProperty, wl = 0, ml = function() {
-            var n = /[^.]+$/.exec(yl && yl.keys && yl.keys.IE_PROTO || "");
-            return n ? "Symbol(src)_1." + n : "";
-        }(), xl = gl.toString, jl = dl.call(ll), Al = re._, kl = sl("^" + dl.call(bl).replace(St, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"), Ol = ie ? x.Buffer : X, Il = x.Symbol, Rl = x.Uint8Array, zl = Ol ? Ol.allocUnsafe : X, El = F(ll.getPrototypeOf, ll), Sl = ll.create, Wl = gl.propertyIsEnumerable, Ll = _l.splice, Cl = Il ? Il.isConcatSpreadable : X, Ul = Il ? Il.iterator : X, Bl = Il ? Il.toStringTag : X, Tl = function() {
-            try {
-                var n = Ai(ll, "defineProperty");
-                return n({}, "", {}), n;
-            } catch (n) {}
-        }(), $l = x.clearTimeout !== re.clearTimeout && x.clearTimeout, Dl = ol && ol.now !== re.Date.now && ol.now, Ml = x.setTimeout !== re.setTimeout && x.setTimeout, Fl = al.ceil, Nl = al.floor, Pl = ll.getOwnPropertySymbols, ql = Ol ? Ol.isBuffer : X, Zl = x.isFinite, Kl = _l.join, Vl = F(ll.keys, ll), Gl = al.max, Hl = al.min, Jl = ol.now, Yl = x.parseInt, Ql = al.random, Xl = _l.reverse, ns = Ai(x, "DataView"), ts = Ai(x, "Map"), rs = Ai(x, "Promise"), es = Ai(x, "Set"), us = Ai(x, "WeakMap"), is = Ai(ll, "create"), os = us && new us(), fs = {}, cs = to(ns), as = to(ts), ls = to(rs), ss = to(es), hs = to(us), ps = Il ? Il.prototype : X, _s = ps ? ps.valueOf : X, vs = ps ? ps.toString : X, gs = function() {
-            function n() {}
-            return function(t) {
-                if (!fc(t)) return {};
-                if (Sl) return Sl(t);
-                n.prototype = t;
-                var r = new n();
-                return n.prototype = X, r;
-            };
-        }();
-        Z.templateSettings = {
-            escape: kt,
-            evaluate: Ot,
-            interpolate: It,
-            variable: "",
-            imports: {
-                _: Z
-            }
-        }, Z.prototype = J.prototype, Z.prototype.constructor = Z, Y.prototype = gs(J.prototype), 
-        Y.prototype.constructor = Y, Ct.prototype = gs(J.prototype), Ct.prototype.constructor = Ct, 
-        Xt.prototype.clear = nr, Xt.prototype.delete = tr, Xt.prototype.get = rr, Xt.prototype.has = er, 
-        Xt.prototype.set = ur, ir.prototype.clear = or, ir.prototype.delete = fr, ir.prototype.get = cr, 
-        ir.prototype.has = ar, ir.prototype.set = lr, sr.prototype.clear = hr, sr.prototype.delete = pr, 
-        sr.prototype.get = _r, sr.prototype.has = vr, sr.prototype.set = gr, yr.prototype.add = yr.prototype.push = dr, 
-        yr.prototype.has = br, wr.prototype.clear = mr, wr.prototype.delete = xr, wr.prototype.get = jr, 
-        wr.prototype.has = Ar, wr.prototype.set = kr;
-        var ys = Pu(ue), ds = Pu(oe, !0), bs = qu(), ws = qu(!0), ms = os ? function(n, t) {
-            return os.set(n, t), n;
-        } : La, xs = Tl ? function(n, t) {
-            return Tl(n, "toString", {
-                configurable: !0,
-                enumerable: !1,
-                value: Sa(t),
-                writable: !0
-            });
-        } : La, js = uu, As = $l || function(n) {
-            return re.clearTimeout(n);
-        }, ks = es && 1 / P(new es([ , -0 ]))[1] == Sn ? function(n) {
-            return new es(n);
-        } : Da, Os = os ? function(n) {
-            return os.get(n);
-        } : Da, Is = Pl ? function(n) {
-            return null == n ? [] : (n = ll(n), i(Pl(n), function(t) {
-                return Wl.call(n, t);
-            }));
-        } : Pa, Rs = Pl ? function(n) {
-            for (var t = []; n; ) a(t, Is(n)), n = El(n);
-            return t;
-        } : Pa, zs = we;
-        (ns && zs(new ns(new ArrayBuffer(1))) != ct || ts && zs(new ts()) != Gn || rs && zs(rs.resolve()) != Qn || es && zs(new es()) != tt || us && zs(new us()) != it) && (zs = function(n) {
-            var t = we(n), r = t == Yn ? n.constructor : X, e = r ? to(r) : "";
-            if (e) switch (e) {
-              case cs:
-                return ct;
-
-              case as:
-                return Gn;
-
-              case ls:
-                return Qn;
-
-              case ss:
-                return tt;
-
-              case hs:
-                return it;
-            }
-            return t;
-        });
-        var Es = yl ? uc : qa, Ss = Qi(ms), Ws = Ml || function(n, t) {
-            return re.setTimeout(n, t);
-        }, Ls = Qi(xs), Cs = Pi(function(n) {
-            var t = [];
-            return 46 === n.charCodeAt(0) && t.push(""), n.replace(Et, function(n, r, e, u) {
-                t.push(e ? u.replace(Mt, "$1") : r || n);
-            }), t;
-        }), Us = uu(function(n, t) {
-            return Jf(n) ? Hr(n, ee(t, 1, Jf, !0)) : [];
-        }), Bs = uu(function(n, t) {
-            var r = jo(t);
-            return Jf(r) && (r = X), Jf(n) ? Hr(n, ee(t, 1, Jf, !0), mi(r, 2)) : [];
-        }), Ts = uu(function(n, t) {
-            var r = jo(t);
-            return Jf(r) && (r = X), Jf(n) ? Hr(n, ee(t, 1, Jf, !0), X, r) : [];
-        }), $s = uu(function(n) {
-            var t = c(n, ju);
-            return t.length && t[0] === n[0] ? ke(t) : [];
-        }), Ds = uu(function(n) {
-            var t = jo(n), r = c(n, ju);
-            return t === jo(r) ? t = X : r.pop(), r.length && r[0] === n[0] ? ke(r, mi(t, 2)) : [];
-        }), Ms = uu(function(n) {
-            var t = jo(n), r = c(n, ju);
-            return t = "function" == typeof t ? t : X, t && r.pop(), r.length && r[0] === n[0] ? ke(r, X, t) : [];
-        }), Fs = uu(Oo), Ns = gi(function(n, t) {
-            var r = null == n ? 0 : n.length, e = Tr(n, t);
-            return nu(n, c(t, function(n) {
-                return Ci(n, r) ? +n : n;
-            }).sort(Lu)), e;
-        }), Ps = uu(function(n) {
-            return gu(ee(n, 1, Jf, !0));
-        }), qs = uu(function(n) {
-            var t = jo(n);
-            return Jf(t) && (t = X), gu(ee(n, 1, Jf, !0), mi(t, 2));
-        }), Zs = uu(function(n) {
-            var t = jo(n);
-            return t = "function" == typeof t ? t : X, gu(ee(n, 1, Jf, !0), X, t);
-        }), Ks = uu(function(n, t) {
-            return Jf(n) ? Hr(n, t) : [];
-        }), Vs = uu(function(n) {
-            return mu(i(n, Jf));
-        }), Gs = uu(function(n) {
-            var t = jo(n);
-            return Jf(t) && (t = X), mu(i(n, Jf), mi(t, 2));
-        }), Hs = uu(function(n) {
-            var t = jo(n);
-            return t = "function" == typeof t ? t : X, mu(i(n, Jf), X, t);
-        }), Js = uu(Go), Ys = uu(function(n) {
-            var t = n.length, r = t > 1 ? n[t - 1] : X;
-            return r = "function" == typeof r ? (n.pop(), r) : X, Ho(n, r);
-        }), Qs = gi(function(n) {
-            var t = n.length, r = t ? n[0] : 0, e = this.__wrapped__, u = function(t) {
-                return Tr(t, n);
-            };
-            return !(t > 1 || this.__actions__.length) && e instanceof Ct && Ci(r) ? (e = e.slice(r, +r + (t ? 1 : 0)), 
-            e.__actions__.push({
-                func: nf,
-                args: [ u ],
-                thisArg: X
-            }), new Y(e, this.__chain__).thru(function(n) {
-                return t && !n.length && n.push(X), n;
-            })) : this.thru(u);
-        }), Xs = Fu(function(n, t, r) {
-            bl.call(n, r) ? ++n[r] : Br(n, r, 1);
-        }), nh = Ju(ho), th = Ju(po), rh = Fu(function(n, t, r) {
-            bl.call(n, r) ? n[r].push(t) : Br(n, r, [ t ]);
-        }), eh = uu(function(t, r, e) {
-            var u = -1, i = "function" == typeof r, o = Hf(t) ? il(t.length) : [];
-            return ys(t, function(t) {
-                o[++u] = i ? n(r, t, e) : Ie(t, r, e);
-            }), o;
-        }), uh = Fu(function(n, t, r) {
-            Br(n, r, t);
-        }), ih = Fu(function(n, t, r) {
-            n[r ? 0 : 1].push(t);
-        }, function() {
-            return [ [], [] ];
-        }), oh = uu(function(n, t) {
-            if (null == n) return [];
-            var r = t.length;
-            return r > 1 && Ui(n, t[0], t[1]) ? t = [] : r > 2 && Ui(t[0], t[1], t[2]) && (t = [ t[0] ]), 
-            He(n, ee(t, 1), []);
-        }), fh = Dl || function() {
-            return re.Date.now();
-        }, ch = uu(function(n, t, r) {
-            var e = _n;
-            if (r.length) {
-                var u = N(r, wi(ch));
-                e |= bn;
-            }
-            return ai(n, e, t, r, u);
-        }), ah = uu(function(n, t, r) {
-            var e = _n | vn;
-            if (r.length) {
-                var u = N(r, wi(ah));
-                e |= bn;
-            }
-            return ai(t, e, n, r, u);
-        }), lh = uu(function(n, t) {
-            return Gr(n, 1, t);
-        }), sh = uu(function(n, t, r) {
-            return Gr(n, Ic(t) || 0, r);
-        });
-        Cf.Cache = sr;
-        var hh = js(function(t, r) {
-            r = 1 == r.length && bh(r[0]) ? c(r[0], z(mi())) : c(ee(r, 1), z(mi()));
-            var e = r.length;
-            return uu(function(u) {
-                for (var i = -1, o = Hl(u.length, e); ++i < o; ) u[i] = r[i].call(this, u[i]);
-                return n(t, this, u);
-            });
-        }), ph = uu(function(n, t) {
-            return ai(n, bn, X, t, N(t, wi(ph)));
-        }), _h = uu(function(n, t) {
-            return ai(n, wn, X, t, N(t, wi(_h)));
-        }), vh = gi(function(n, t) {
-            return ai(n, xn, X, X, X, t);
-        }), gh = ii(me), yh = ii(function(n, t) {
-            return n >= t;
-        }), dh = Re(function() {
-            return arguments;
-        }()) ? Re : function(n) {
-            return cc(n) && bl.call(n, "callee") && !Wl.call(n, "callee");
-        }, bh = il.isArray, wh = ce ? z(ce) : ze, mh = ql || qa, xh = ae ? z(ae) : Ee, jh = le ? z(le) : Le, Ah = se ? z(se) : Be, kh = he ? z(he) : Te, Oh = pe ? z(pe) : $e, Ih = ii(Ne), Rh = ii(function(n, t) {
-            return n <= t;
-        }), zh = Nu(function(n, t) {
-            if (Mi(t) || Hf(t)) return $u(t, Pc(t), n), X;
-            for (var r in t) bl.call(t, r) && Sr(n, r, t[r]);
-        }), Eh = Nu(function(n, t) {
-            $u(t, qc(t), n);
-        }), Sh = Nu(function(n, t, r, e) {
-            $u(t, qc(t), n, e);
-        }), Wh = Nu(function(n, t, r, e) {
-            $u(t, Pc(t), n, e);
-        }), Lh = gi(Tr), Ch = uu(function(n, t) {
-            n = ll(n);
-            var r = -1, e = t.length, u = e > 2 ? t[2] : X;
-            for (u && Ui(t[0], t[1], u) && (e = 1); ++r < e; ) for (var i = t[r], o = qc(i), f = -1, c = o.length; ++f < c; ) {
-                var a = o[f], l = n[a];
-                (l === X || Gf(l, gl[a]) && !bl.call(n, a)) && (n[a] = i[a]);
-            }
-            return n;
-        }), Uh = uu(function(t) {
-            return t.push(X, si), n(Mh, X, t);
-        }), Bh = Xu(function(n, t, r) {
-            null != t && "function" != typeof t.toString && (t = xl.call(t)), n[t] = r;
-        }, Sa(La)), Th = Xu(function(n, t, r) {
-            null != t && "function" != typeof t.toString && (t = xl.call(t)), bl.call(n, t) ? n[t].push(r) : n[t] = [ r ];
-        }, mi), $h = uu(Ie), Dh = Nu(function(n, t, r) {
-            Ke(n, t, r);
-        }), Mh = Nu(function(n, t, r, e) {
-            Ke(n, t, r, e);
-        }), Fh = gi(function(n, t) {
-            var r = {};
-            if (null == n) return r;
-            var e = !1;
-            t = c(t, function(t) {
-                return t = ku(t, n), e || (e = t.length > 1), t;
-            }), $u(n, di(n), r), e && (r = Fr(r, an | ln | sn, hi));
-            for (var u = t.length; u--; ) yu(r, t[u]);
-            return r;
-        }), Nh = gi(function(n, t) {
-            return null == n ? {} : Je(n, t);
-        }), Ph = ci(Pc), qh = ci(qc), Zh = Vu(function(n, t, r) {
-            return t = t.toLowerCase(), n + (r ? fa(t) : t);
-        }), Kh = Vu(function(n, t, r) {
-            return n + (r ? "-" : "") + t.toLowerCase();
-        }), Vh = Vu(function(n, t, r) {
-            return n + (r ? " " : "") + t.toLowerCase();
-        }), Gh = Ku("toLowerCase"), Hh = Vu(function(n, t, r) {
-            return n + (r ? "_" : "") + t.toLowerCase();
-        }), Jh = Vu(function(n, t, r) {
-            return n + (r ? " " : "") + Qh(t);
-        }), Yh = Vu(function(n, t, r) {
-            return n + (r ? " " : "") + t.toUpperCase();
-        }), Qh = Ku("toUpperCase"), Xh = uu(function(t, r) {
-            try {
-                return n(t, X, r);
-            } catch (n) {
-                return rc(n) ? n : new fl(n);
-            }
-        }), np = gi(function(n, t) {
-            return r(t, function(t) {
-                t = no(t), Br(n, t, ch(n[t], n));
-            }), n;
-        }), tp = Yu(), rp = Yu(!0), ep = uu(function(n, t) {
-            return function(r) {
-                return Ie(r, n, t);
-            };
-        }), up = uu(function(n, t) {
-            return function(r) {
-                return Ie(n, r, t);
-            };
-        }), ip = ti(c), op = ti(u), fp = ti(h), cp = ui(), ap = ui(!0), lp = ni(function(n, t) {
-            return n + t;
-        }, 0), sp = fi("ceil"), hp = ni(function(n, t) {
-            return n / t;
-        }, 1), pp = fi("floor"), _p = ni(function(n, t) {
-            return n * t;
-        }, 1), vp = fi("round"), gp = ni(function(n, t) {
-            return n - t;
-        }, 0);
-        return Z.after = If, Z.ary = Rf, Z.assign = zh, Z.assignIn = Eh, Z.assignInWith = Sh, 
-        Z.assignWith = Wh, Z.at = Lh, Z.before = zf, Z.bind = ch, Z.bindAll = np, Z.bindKey = ah, 
-        Z.castArray = Nf, Z.chain = Qo, Z.chunk = uo, Z.compact = io, Z.concat = oo, Z.cond = za, 
-        Z.conforms = Ea, Z.constant = Sa, Z.countBy = Xs, Z.create = Sc, Z.curry = Ef, Z.curryRight = Sf, 
-        Z.debounce = Wf, Z.defaults = Ch, Z.defaultsDeep = Uh, Z.defer = lh, Z.delay = sh, 
-        Z.difference = Us, Z.differenceBy = Bs, Z.differenceWith = Ts, Z.drop = fo, Z.dropRight = co, 
-        Z.dropRightWhile = ao, Z.dropWhile = lo, Z.fill = so, Z.filter = lf, Z.flatMap = sf, 
-        Z.flatMapDeep = hf, Z.flatMapDepth = pf, Z.flatten = _o, Z.flattenDeep = vo, Z.flattenDepth = go, 
-        Z.flip = Lf, Z.flow = tp, Z.flowRight = rp, Z.fromPairs = yo, Z.functions = $c, 
-        Z.functionsIn = Dc, Z.groupBy = rh, Z.initial = mo, Z.intersection = $s, Z.intersectionBy = Ds, 
-        Z.intersectionWith = Ms, Z.invert = Bh, Z.invertBy = Th, Z.invokeMap = eh, Z.iteratee = Ca, 
-        Z.keyBy = uh, Z.keys = Pc, Z.keysIn = qc, Z.map = yf, Z.mapKeys = Zc, Z.mapValues = Kc, 
-        Z.matches = Ua, Z.matchesProperty = Ba, Z.memoize = Cf, Z.merge = Dh, Z.mergeWith = Mh, 
-        Z.method = ep, Z.methodOf = up, Z.mixin = Ta, Z.negate = Uf, Z.nthArg = Ma, Z.omit = Fh, 
-        Z.omitBy = Vc, Z.once = Bf, Z.orderBy = df, Z.over = ip, Z.overArgs = hh, Z.overEvery = op, 
-        Z.overSome = fp, Z.partial = ph, Z.partialRight = _h, Z.partition = ih, Z.pick = Nh, 
-        Z.pickBy = Gc, Z.property = Fa, Z.propertyOf = Na, Z.pull = Fs, Z.pullAll = Oo, 
-        Z.pullAllBy = Io, Z.pullAllWith = Ro, Z.pullAt = Ns, Z.range = cp, Z.rangeRight = ap, 
-        Z.rearg = vh, Z.reject = mf, Z.remove = zo, Z.rest = Tf, Z.reverse = Eo, Z.sampleSize = jf, 
-        Z.set = Jc, Z.setWith = Yc, Z.shuffle = Af, Z.slice = So, Z.sortBy = oh, Z.sortedUniq = $o, 
-        Z.sortedUniqBy = Do, Z.split = da, Z.spread = $f, Z.tail = Mo, Z.take = Fo, Z.takeRight = No, 
-        Z.takeRightWhile = Po, Z.takeWhile = qo, Z.tap = Xo, Z.throttle = Df, Z.thru = nf, 
-        Z.toArray = jc, Z.toPairs = Ph, Z.toPairsIn = qh, Z.toPath = Ha, Z.toPlainObject = Rc, 
-        Z.transform = Qc, Z.unary = Mf, Z.union = Ps, Z.unionBy = qs, Z.unionWith = Zs, 
-        Z.uniq = Zo, Z.uniqBy = Ko, Z.uniqWith = Vo, Z.unset = Xc, Z.unzip = Go, Z.unzipWith = Ho, 
-        Z.update = na, Z.updateWith = ta, Z.values = ra, Z.valuesIn = ea, Z.without = Ks, 
-        Z.words = Ra, Z.wrap = Ff, Z.xor = Vs, Z.xorBy = Gs, Z.xorWith = Hs, Z.zip = Js, 
-        Z.zipObject = Jo, Z.zipObjectDeep = Yo, Z.zipWith = Ys, Z.entries = Ph, Z.entriesIn = qh, 
-        Z.extend = Eh, Z.extendWith = Sh, Ta(Z, Z), Z.add = lp, Z.attempt = Xh, Z.camelCase = Zh, 
-        Z.capitalize = fa, Z.ceil = sp, Z.clamp = ua, Z.clone = Pf, Z.cloneDeep = Zf, Z.cloneDeepWith = Kf, 
-        Z.cloneWith = qf, Z.conformsTo = Vf, Z.deburr = ca, Z.defaultTo = Wa, Z.divide = hp, 
-        Z.endsWith = aa, Z.eq = Gf, Z.escape = la, Z.escapeRegExp = sa, Z.every = af, Z.find = nh, 
-        Z.findIndex = ho, Z.findKey = Wc, Z.findLast = th, Z.findLastIndex = po, Z.findLastKey = Lc, 
-        Z.floor = pp, Z.forEach = _f, Z.forEachRight = vf, Z.forIn = Cc, Z.forInRight = Uc, 
-        Z.forOwn = Bc, Z.forOwnRight = Tc, Z.get = Mc, Z.gt = gh, Z.gte = yh, Z.has = Fc, 
-        Z.hasIn = Nc, Z.head = bo, Z.identity = La, Z.includes = gf, Z.indexOf = wo, Z.inRange = ia, 
-        Z.invoke = $h, Z.isArguments = dh, Z.isArray = bh, Z.isArrayBuffer = wh, Z.isArrayLike = Hf, 
-        Z.isArrayLikeObject = Jf, Z.isBoolean = Yf, Z.isBuffer = mh, Z.isDate = xh, Z.isElement = Qf, 
-        Z.isEmpty = Xf, Z.isEqual = nc, Z.isEqualWith = tc, Z.isError = rc, Z.isFinite = ec, 
-        Z.isFunction = uc, Z.isInteger = ic, Z.isLength = oc, Z.isMap = jh, Z.isMatch = ac, 
-        Z.isMatchWith = lc, Z.isNaN = sc, Z.isNative = hc, Z.isNil = _c, Z.isNull = pc, 
-        Z.isNumber = vc, Z.isObject = fc, Z.isObjectLike = cc, Z.isPlainObject = gc, Z.isRegExp = Ah, 
-        Z.isSafeInteger = yc, Z.isSet = kh, Z.isString = dc, Z.isSymbol = bc, Z.isTypedArray = Oh, 
-        Z.isUndefined = wc, Z.isWeakMap = mc, Z.isWeakSet = xc, Z.join = xo, Z.kebabCase = Kh, 
-        Z.last = jo, Z.lastIndexOf = Ao, Z.lowerCase = Vh, Z.lowerFirst = Gh, Z.lt = Ih, 
-        Z.lte = Rh, Z.max = Ya, Z.maxBy = Qa, Z.mean = Xa, Z.meanBy = nl, Z.min = tl, Z.minBy = rl, 
-        Z.stubArray = Pa, Z.stubFalse = qa, Z.stubObject = Za, Z.stubString = Ka, Z.stubTrue = Va, 
-        Z.multiply = _p, Z.nth = ko, Z.noConflict = $a, Z.noop = Da, Z.now = fh, Z.pad = ha, 
-        Z.padEnd = pa, Z.padStart = _a, Z.parseInt = va, Z.random = oa, Z.reduce = bf, Z.reduceRight = wf, 
-        Z.repeat = ga, Z.replace = ya, Z.result = Hc, Z.round = vp, Z.runInContext = p, 
-        Z.sample = xf, Z.size = kf, Z.snakeCase = Hh, Z.some = Of, Z.sortedIndex = Wo, Z.sortedIndexBy = Lo, 
-        Z.sortedIndexOf = Co, Z.sortedLastIndex = Uo, Z.sortedLastIndexBy = Bo, Z.sortedLastIndexOf = To, 
-        Z.startCase = Jh, Z.startsWith = ba, Z.subtract = gp, Z.sum = el, Z.sumBy = ul, 
-        Z.template = wa, Z.times = Ga, Z.toFinite = Ac, Z.toInteger = kc, Z.toLength = Oc, 
-        Z.toLower = ma, Z.toNumber = Ic, Z.toSafeInteger = zc, Z.toString = Ec, Z.toUpper = xa, 
-        Z.trim = ja, Z.trimEnd = Aa, Z.trimStart = ka, Z.truncate = Oa, Z.unescape = Ia, 
-        Z.uniqueId = Ja, Z.upperCase = Yh, Z.upperFirst = Qh, Z.each = _f, Z.eachRight = vf, 
-        Z.first = bo, Ta(Z, function() {
-            var n = {};
-            return ue(Z, function(t, r) {
-                bl.call(Z.prototype, r) || (n[r] = t);
-            }), n;
-        }(), {
-            chain: !1
-        }), Z.VERSION = nn, r([ "bind", "bindKey", "curry", "curryRight", "partial", "partialRight" ], function(n) {
-            Z[n].placeholder = Z;
-        }), r([ "drop", "take" ], function(n, t) {
-            Ct.prototype[n] = function(r) {
-                r = r === X ? 1 : Gl(kc(r), 0);
-                var e = this.__filtered__ && !t ? new Ct(this) : this.clone();
-                return e.__filtered__ ? e.__takeCount__ = Hl(r, e.__takeCount__) : e.__views__.push({
-                    size: Hl(r, Un),
-                    type: n + (e.__dir__ < 0 ? "Right" : "")
-                }), e;
-            }, Ct.prototype[n + "Right"] = function(t) {
-                return this.reverse()[n](t).reverse();
-            };
-        }), r([ "filter", "map", "takeWhile" ], function(n, t) {
-            var r = t + 1, e = r == Rn || r == En;
-            Ct.prototype[n] = function(n) {
-                var t = this.clone();
-                return t.__iteratees__.push({
-                    iteratee: mi(n, 3),
-                    type: r
-                }), t.__filtered__ = t.__filtered__ || e, t;
-            };
-        }), r([ "head", "last" ], function(n, t) {
-            var r = "take" + (t ? "Right" : "");
-            Ct.prototype[n] = function() {
-                return this[r](1).value()[0];
-            };
-        }), r([ "initial", "tail" ], function(n, t) {
-            var r = "drop" + (t ? "" : "Right");
-            Ct.prototype[n] = function() {
-                return this.__filtered__ ? new Ct(this) : this[r](1);
-            };
-        }), Ct.prototype.compact = function() {
-            return this.filter(La);
-        }, Ct.prototype.find = function(n) {
-            return this.filter(n).head();
-        }, Ct.prototype.findLast = function(n) {
-            return this.reverse().find(n);
-        }, Ct.prototype.invokeMap = uu(function(n, t) {
-            return "function" == typeof n ? new Ct(this) : this.map(function(r) {
-                return Ie(r, n, t);
-            });
-        }), Ct.prototype.reject = function(n) {
-            return this.filter(Uf(mi(n)));
-        }, Ct.prototype.slice = function(n, t) {
-            n = kc(n);
-            var r = this;
-            return r.__filtered__ && (n > 0 || t < 0) ? new Ct(r) : (n < 0 ? r = r.takeRight(-n) : n && (r = r.drop(n)), 
-            t !== X && (t = kc(t), r = t < 0 ? r.dropRight(-t) : r.take(t - n)), r);
-        }, Ct.prototype.takeRightWhile = function(n) {
-            return this.reverse().takeWhile(n).reverse();
-        }, Ct.prototype.toArray = function() {
-            return this.take(Un);
-        }, ue(Ct.prototype, function(n, t) {
-            var r = /^(?:filter|find|map|reject)|While$/.test(t), e = /^(?:head|last)$/.test(t), u = Z[e ? "take" + ("last" == t ? "Right" : "") : t], i = e || /^find/.test(t);
-            u && (Z.prototype[t] = function() {
-                var t = this.__wrapped__, o = e ? [ 1 ] : arguments, f = t instanceof Ct, c = o[0], l = f || bh(t), s = function(n) {
-                    var t = u.apply(Z, a([ n ], o));
-                    return e && h ? t[0] : t;
-                };
-                l && r && "function" == typeof c && 1 != c.length && (f = l = !1);
-                var h = this.__chain__, p = !!this.__actions__.length, _ = i && !h, v = f && !p;
-                if (!i && l) {
-                    t = v ? t : new Ct(this);
-                    var g = n.apply(t, o);
-                    return g.__actions__.push({
-                        func: nf,
-                        args: [ s ],
-                        thisArg: X
-                    }), new Y(g, h);
-                }
-                return _ && v ? n.apply(this, o) : (g = this.thru(s), _ ? e ? g.value()[0] : g.value() : g);
-            });
-        }), r([ "pop", "push", "shift", "sort", "splice", "unshift" ], function(n) {
-            var t = _l[n], r = /^(?:push|sort|unshift)$/.test(n) ? "tap" : "thru", e = /^(?:pop|shift)$/.test(n);
-            Z.prototype[n] = function() {
-                var n = arguments;
-                if (e && !this.__chain__) {
-                    var u = this.value();
-                    return t.apply(bh(u) ? u : [], n);
-                }
-                return this[r](function(r) {
-                    return t.apply(bh(r) ? r : [], n);
-                });
-            };
-        }), ue(Ct.prototype, function(n, t) {
-            var r = Z[t];
-            if (r) {
-                var e = r.name + "";
-                bl.call(fs, e) || (fs[e] = []), fs[e].push({
-                    name: t,
-                    func: r
-                });
-            }
-        }), fs[Qu(X, vn).name] = [ {
-            name: "wrapper",
-            func: X
-        } ], Ct.prototype.clone = $t, Ct.prototype.reverse = Yt, Ct.prototype.value = Qt, 
-        Z.prototype.at = Qs, Z.prototype.chain = tf, Z.prototype.commit = rf, Z.prototype.next = ef, 
-        Z.prototype.plant = of, Z.prototype.reverse = ff, Z.prototype.toJSON = Z.prototype.valueOf = Z.prototype.value = cf, 
-        Z.prototype.first = Z.prototype.head, Ul && (Z.prototype[Ul] = uf), Z;
-    }, be = de();
-    "function" == typeof define && "object" == typeof define.amd && define.amd ? (re._ = be, 
-    define(function() {
-        return be;
-    })) : ue ? ((ue.exports = be)._ = be, ee._ = be) : re._ = be;
-}).call(this);
-
-(function(global, factory) {
-    typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.moment = factory();
-})(this, function() {
-    "use strict";
-    var hookCallback;
-    function hooks() {
-        return hookCallback.apply(null, arguments);
-    }
-    function setHookCallback(callback) {
-        hookCallback = callback;
-    }
-    function isArray(input) {
-        return input instanceof Array || Object.prototype.toString.call(input) === "[object Array]";
-    }
-    function isObject(input) {
-        return input != null && Object.prototype.toString.call(input) === "[object Object]";
-    }
-    function hasOwnProp(a, b) {
-        return Object.prototype.hasOwnProperty.call(a, b);
-    }
-    function isObjectEmpty(obj) {
-        if (Object.getOwnPropertyNames) {
-            return Object.getOwnPropertyNames(obj).length === 0;
-        } else {
-            var k;
-            for (k in obj) {
-                if (hasOwnProp(obj, k)) {
-                    return false;
-                }
-            }
-            return true;
-        }
-    }
-    function isUndefined(input) {
-        return input === void 0;
-    }
-    function isNumber(input) {
-        return typeof input === "number" || Object.prototype.toString.call(input) === "[object Number]";
-    }
-    function isDate(input) {
-        return input instanceof Date || Object.prototype.toString.call(input) === "[object Date]";
-    }
-    function map(arr, fn) {
-        var res = [], i;
-        for (i = 0; i < arr.length; ++i) {
-            res.push(fn(arr[i], i));
-        }
-        return res;
-    }
-    function extend(a, b) {
-        for (var i in b) {
-            if (hasOwnProp(b, i)) {
-                a[i] = b[i];
-            }
-        }
-        if (hasOwnProp(b, "toString")) {
-            a.toString = b.toString;
-        }
-        if (hasOwnProp(b, "valueOf")) {
-            a.valueOf = b.valueOf;
-        }
-        return a;
-    }
-    function createUTC(input, format, locale, strict) {
-        return createLocalOrUTC(input, format, locale, strict, true).utc();
-    }
-    function defaultParsingFlags() {
-        return {
-            empty: false,
-            unusedTokens: [],
-            unusedInput: [],
-            overflow: -2,
-            charsLeftOver: 0,
-            nullInput: false,
-            invalidEra: null,
-            invalidMonth: null,
-            invalidFormat: false,
-            userInvalidated: false,
-            iso: false,
-            parsedDateParts: [],
-            era: null,
-            meridiem: null,
-            rfc2822: false,
-            weekdayMismatch: false
-        };
-    }
-    function getParsingFlags(m) {
-        if (m._pf == null) {
-            m._pf = defaultParsingFlags();
-        }
-        return m._pf;
-    }
-    var some;
-    if (Array.prototype.some) {
-        some = Array.prototype.some;
-    } else {
-        some = function(fun) {
-            var t = Object(this), len = t.length >>> 0, i;
-            for (i = 0; i < len; i++) {
-                if (i in t && fun.call(this, t[i], i, t)) {
-                    return true;
-                }
-            }
-            return false;
-        };
-    }
-    function isValid(m) {
-        if (m._isValid == null) {
-            var flags = getParsingFlags(m), parsedParts = some.call(flags.parsedDateParts, function(i) {
-                return i != null;
-            }), isNowValid = !isNaN(m._d.getTime()) && flags.overflow < 0 && !flags.empty && !flags.invalidEra && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);
-            if (m._strict) {
-                isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === undefined;
-            }
-            if (Object.isFrozen == null || !Object.isFrozen(m)) {
-                m._isValid = isNowValid;
-            } else {
-                return isNowValid;
-            }
-        }
-        return m._isValid;
-    }
-    function createInvalid(flags) {
-        var m = createUTC(NaN);
-        if (flags != null) {
-            extend(getParsingFlags(m), flags);
-        } else {
-            getParsingFlags(m).userInvalidated = true;
-        }
-        return m;
-    }
-    var momentProperties = hooks.momentProperties = [], updateInProgress = false;
-    function copyConfig(to, from) {
-        var i, prop, val;
-        if (!isUndefined(from._isAMomentObject)) {
-            to._isAMomentObject = from._isAMomentObject;
-        }
-        if (!isUndefined(from._i)) {
-            to._i = from._i;
-        }
-        if (!isUndefined(from._f)) {
-            to._f = from._f;
-        }
-        if (!isUndefined(from._l)) {
-            to._l = from._l;
-        }
-        if (!isUndefined(from._strict)) {
-            to._strict = from._strict;
-        }
-        if (!isUndefined(from._tzm)) {
-            to._tzm = from._tzm;
-        }
-        if (!isUndefined(from._isUTC)) {
-            to._isUTC = from._isUTC;
-        }
-        if (!isUndefined(from._offset)) {
-            to._offset = from._offset;
-        }
-        if (!isUndefined(from._pf)) {
-            to._pf = getParsingFlags(from);
-        }
-        if (!isUndefined(from._locale)) {
-            to._locale = from._locale;
-        }
-        if (momentProperties.length > 0) {
-            for (i = 0; i < momentProperties.length; i++) {
-                prop = momentProperties[i];
-                val = from[prop];
-                if (!isUndefined(val)) {
-                    to[prop] = val;
-                }
-            }
-        }
-        return to;
-    }
-    function Moment(config) {
-        copyConfig(this, config);
-        this._d = new Date(config._d != null ? config._d.getTime() : NaN);
-        if (!this.isValid()) {
-            this._d = new Date(NaN);
-        }
-        if (updateInProgress === false) {
-            updateInProgress = true;
-            hooks.updateOffset(this);
-            updateInProgress = false;
-        }
-    }
-    function isMoment(obj) {
-        return obj instanceof Moment || obj != null && obj._isAMomentObject != null;
-    }
-    function warn(msg) {
-        if (hooks.suppressDeprecationWarnings === false && typeof console !== "undefined" && console.warn) {
-            console.warn("Deprecation warning: " + msg);
-        }
-    }
-    function deprecate(msg, fn) {
-        var firstTime = true;
-        return extend(function() {
-            if (hooks.deprecationHandler != null) {
-                hooks.deprecationHandler(null, msg);
-            }
-            if (firstTime) {
-                var args = [], arg, i, key;
-                for (i = 0; i < arguments.length; i++) {
-                    arg = "";
-                    if (typeof arguments[i] === "object") {
-                        arg += "\n[" + i + "] ";
-                        for (key in arguments[0]) {
-                            if (hasOwnProp(arguments[0], key)) {
-                                arg += key + ": " + arguments[0][key] + ", ";
-                            }
-                        }
-                        arg = arg.slice(0, -2);
-                    } else {
-                        arg = arguments[i];
-                    }
-                    args.push(arg);
-                }
-                warn(msg + "\nArguments: " + Array.prototype.slice.call(args).join("") + "\n" + new Error().stack);
-                firstTime = false;
-            }
-            return fn.apply(this, arguments);
-        }, fn);
-    }
-    var deprecations = {};
-    function deprecateSimple(name, msg) {
-        if (hooks.deprecationHandler != null) {
-            hooks.deprecationHandler(name, msg);
-        }
-        if (!deprecations[name]) {
-            warn(msg);
-            deprecations[name] = true;
-        }
-    }
-    hooks.suppressDeprecationWarnings = false;
-    hooks.deprecationHandler = null;
-    function isFunction(input) {
-        return typeof Function !== "undefined" && input instanceof Function || Object.prototype.toString.call(input) === "[object Function]";
-    }
-    function set(config) {
-        var prop, i;
-        for (i in config) {
-            if (hasOwnProp(config, i)) {
-                prop = config[i];
-                if (isFunction(prop)) {
-                    this[i] = prop;
-                } else {
-                    this["_" + i] = prop;
-                }
-            }
-        }
-        this._config = config;
-        this._dayOfMonthOrdinalParseLenient = new RegExp((this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + "|" + /\d{1,2}/.source);
-    }
-    function mergeConfigs(parentConfig, childConfig) {
-        var res = extend({}, parentConfig), prop;
-        for (prop in childConfig) {
-            if (hasOwnProp(childConfig, prop)) {
-                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
-                    res[prop] = {};
-                    extend(res[prop], parentConfig[prop]);
-                    extend(res[prop], childConfig[prop]);
-                } else if (childConfig[prop] != null) {
-                    res[prop] = childConfig[prop];
-                } else {
-                    delete res[prop];
-                }
-            }
-        }
-        for (prop in parentConfig) {
-            if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject(parentConfig[prop])) {
-                res[prop] = extend({}, res[prop]);
-            }
-        }
-        return res;
-    }
-    function Locale(config) {
-        if (config != null) {
-            this.set(config);
-        }
-    }
-    var keys;
-    if (Object.keys) {
-        keys = Object.keys;
-    } else {
-        keys = function(obj) {
-            var i, res = [];
-            for (i in obj) {
-                if (hasOwnProp(obj, i)) {
-                    res.push(i);
-                }
-            }
-            return res;
-        };
-    }
-    var defaultCalendar = {
-        sameDay: "[Today at] LT",
-        nextDay: "[Tomorrow at] LT",
-        nextWeek: "dddd [at] LT",
-        lastDay: "[Yesterday at] LT",
-        lastWeek: "[Last] dddd [at] LT",
-        sameElse: "L"
-    };
-    function calendar(key, mom, now) {
-        var output = this._calendar[key] || this._calendar["sameElse"];
-        return isFunction(output) ? output.call(mom, now) : output;
-    }
-    function zeroFill(number, targetLength, forceSign) {
-        var absNumber = "" + Math.abs(number), zerosToFill = targetLength - absNumber.length, sign = number >= 0;
-        return (sign ? forceSign ? "+" : "" : "-") + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
-    }
-    var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, formatFunctions = {}, formatTokenFunctions = {};
-    function addFormatToken(token, padded, ordinal, callback) {
-        var func = callback;
-        if (typeof callback === "string") {
-            func = function() {
-                return this[callback]();
-            };
-        }
-        if (token) {
-            formatTokenFunctions[token] = func;
-        }
-        if (padded) {
-            formatTokenFunctions[padded[0]] = function() {
-                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
-            };
-        }
-        if (ordinal) {
-            formatTokenFunctions[ordinal] = function() {
-                return this.localeData().ordinal(func.apply(this, arguments), token);
-            };
-        }
-    }
-    function removeFormattingTokens(input) {
-        if (input.match(/\[[\s\S]/)) {
-            return input.replace(/^\[|\]$/g, "");
-        }
-        return input.replace(/\\/g, "");
-    }
-    function makeFormatFunction(format) {
-        var array = format.match(formattingTokens), i, length;
-        for (i = 0, length = array.length; i < length; i++) {
-            if (formatTokenFunctions[array[i]]) {
-                array[i] = formatTokenFunctions[array[i]];
-            } else {
-                array[i] = removeFormattingTokens(array[i]);
-            }
-        }
-        return function(mom) {
-            var output = "", i;
-            for (i = 0; i < length; i++) {
-                output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];
-            }
-            return output;
-        };
-    }
-    function formatMoment(m, format) {
-        if (!m.isValid()) {
-            return m.localeData().invalidDate();
-        }
-        format = expandFormat(format, m.localeData());
-        formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
-        return formatFunctions[format](m);
-    }
-    function expandFormat(format, locale) {
-        var i = 5;
-        function replaceLongDateFormatTokens(input) {
-            return locale.longDateFormat(input) || input;
-        }
-        localFormattingTokens.lastIndex = 0;
-        while (i >= 0 && localFormattingTokens.test(format)) {
-            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
-            localFormattingTokens.lastIndex = 0;
-            i -= 1;
-        }
-        return format;
-    }
-    var defaultLongDateFormat = {
-        LTS: "h:mm:ss A",
-        LT: "h:mm A",
-        L: "MM/DD/YYYY",
-        LL: "MMMM D, YYYY",
-        LLL: "MMMM D, YYYY h:mm A",
-        LLLL: "dddd, MMMM D, YYYY h:mm A"
-    };
-    function longDateFormat(key) {
-        var format = this._longDateFormat[key], formatUpper = this._longDateFormat[key.toUpperCase()];
-        if (format || !formatUpper) {
-            return format;
-        }
-        this._longDateFormat[key] = formatUpper.match(formattingTokens).map(function(tok) {
-            if (tok === "MMMM" || tok === "MM" || tok === "DD" || tok === "dddd") {
-                return tok.slice(1);
-            }
-            return tok;
-        }).join("");
-        return this._longDateFormat[key];
-    }
-    var defaultInvalidDate = "Invalid date";
-    function invalidDate() {
-        return this._invalidDate;
-    }
-    var defaultOrdinal = "%d", defaultDayOfMonthOrdinalParse = /\d{1,2}/;
-    function ordinal(number) {
-        return this._ordinal.replace("%d", number);
-    }
-    var defaultRelativeTime = {
-        future: "in %s",
-        past: "%s ago",
-        s: "a few seconds",
-        ss: "%d seconds",
-        m: "a minute",
-        mm: "%d minutes",
-        h: "an hour",
-        hh: "%d hours",
-        d: "a day",
-        dd: "%d days",
-        w: "a week",
-        ww: "%d weeks",
-        M: "a month",
-        MM: "%d months",
-        y: "a year",
-        yy: "%d years"
-    };
-    function relativeTime(number, withoutSuffix, string, isFuture) {
-        var output = this._relativeTime[string];
-        return isFunction(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number);
-    }
-    function pastFuture(diff, output) {
-        var format = this._relativeTime[diff > 0 ? "future" : "past"];
-        return isFunction(format) ? format(output) : format.replace(/%s/i, output);
-    }
-    var aliases = {};
-    function addUnitAlias(unit, shorthand) {
-        var lowerCase = unit.toLowerCase();
-        aliases[lowerCase] = aliases[lowerCase + "s"] = aliases[shorthand] = unit;
-    }
-    function normalizeUnits(units) {
-        return typeof units === "string" ? aliases[units] || aliases[units.toLowerCase()] : undefined;
-    }
-    function normalizeObjectUnits(inputObject) {
-        var normalizedInput = {}, normalizedProp, prop;
-        for (prop in inputObject) {
-            if (hasOwnProp(inputObject, prop)) {
-                normalizedProp = normalizeUnits(prop);
-                if (normalizedProp) {
-                    normalizedInput[normalizedProp] = inputObject[prop];
-                }
-            }
-        }
-        return normalizedInput;
-    }
-    var priorities = {};
-    function addUnitPriority(unit, priority) {
-        priorities[unit] = priority;
-    }
-    function getPrioritizedUnits(unitsObj) {
-        var units = [], u;
-        for (u in unitsObj) {
-            if (hasOwnProp(unitsObj, u)) {
-                units.push({
-                    unit: u,
-                    priority: priorities[u]
-                });
-            }
-        }
-        units.sort(function(a, b) {
-            return a.priority - b.priority;
-        });
-        return units;
-    }
-    function isLeapYear(year) {
-        return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
-    }
-    function absFloor(number) {
-        if (number < 0) {
-            return Math.ceil(number) || 0;
-        } else {
-            return Math.floor(number);
-        }
-    }
-    function toInt(argumentForCoercion) {
-        var coercedNumber = +argumentForCoercion, value = 0;
-        if (coercedNumber !== 0 && isFinite(coercedNumber)) {
-            value = absFloor(coercedNumber);
-        }
-        return value;
-    }
-    function makeGetSet(unit, keepTime) {
-        return function(value) {
-            if (value != null) {
-                set$1(this, unit, value);
-                hooks.updateOffset(this, keepTime);
-                return this;
-            } else {
-                return get(this, unit);
-            }
-        };
-    }
-    function get(mom, unit) {
-        return mom.isValid() ? mom._d["get" + (mom._isUTC ? "UTC" : "") + unit]() : NaN;
-    }
-    function set$1(mom, unit, value) {
-        if (mom.isValid() && !isNaN(value)) {
-            if (unit === "FullYear" && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {
-                value = toInt(value);
-                mom._d["set" + (mom._isUTC ? "UTC" : "") + unit](value, mom.month(), daysInMonth(value, mom.month()));
-            } else {
-                mom._d["set" + (mom._isUTC ? "UTC" : "") + unit](value);
-            }
-        }
-    }
-    function stringGet(units) {
-        units = normalizeUnits(units);
-        if (isFunction(this[units])) {
-            return this[units]();
-        }
-        return this;
-    }
-    function stringSet(units, value) {
-        if (typeof units === "object") {
-            units = normalizeObjectUnits(units);
-            var prioritized = getPrioritizedUnits(units), i;
-            for (i = 0; i < prioritized.length; i++) {
-                this[prioritized[i].unit](units[prioritized[i].unit]);
-            }
-        } else {
-            units = normalizeUnits(units);
-            if (isFunction(this[units])) {
-                return this[units](value);
-            }
-        }
-        return this;
-    }
-    var match1 = /\d/, match2 = /\d\d/, match3 = /\d{3}/, match4 = /\d{4}/, match6 = /[+-]?\d{6}/, match1to2 = /\d\d?/, match3to4 = /\d\d\d\d?/, match5to6 = /\d\d\d\d\d\d?/, match1to3 = /\d{1,3}/, match1to4 = /\d{1,4}/, match1to6 = /[+-]?\d{1,6}/, matchUnsigned = /\d+/, matchSigned = /[+-]?\d+/, matchOffset = /Z|[+-]\d\d:?\d\d/gi, matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, regexes;
-    regexes = {};
-    function addRegexToken(token, regex, strictRegex) {
-        regexes[token] = isFunction(regex) ? regex : function(isStrict, localeData) {
-            return isStrict && strictRegex ? strictRegex : regex;
-        };
-    }
-    function getParseRegexForToken(token, config) {
-        if (!hasOwnProp(regexes, token)) {
-            return new RegExp(unescapeFormat(token));
-        }
-        return regexes[token](config._strict, config._locale);
-    }
-    function unescapeFormat(s) {
-        return regexEscape(s.replace("\\", "").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function(matched, p1, p2, p3, p4) {
-            return p1 || p2 || p3 || p4;
-        }));
-    }
-    function regexEscape(s) {
-        return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
-    }
-    var tokens = {};
-    function addParseToken(token, callback) {
-        var i, func = callback;
-        if (typeof token === "string") {
-            token = [ token ];
-        }
-        if (isNumber(callback)) {
-            func = function(input, array) {
-                array[callback] = toInt(input);
-            };
-        }
-        for (i = 0; i < token.length; i++) {
-            tokens[token[i]] = func;
-        }
-    }
-    function addWeekParseToken(token, callback) {
-        addParseToken(token, function(input, array, config, token) {
-            config._w = config._w || {};
-            callback(input, config._w, config, token);
-        });
-    }
-    function addTimeToArrayFromToken(token, input, config) {
-        if (input != null && hasOwnProp(tokens, token)) {
-            tokens[token](input, config._a, config, token);
-        }
-    }
-    var YEAR = 0, MONTH = 1, DATE = 2, HOUR = 3, MINUTE = 4, SECOND = 5, MILLISECOND = 6, WEEK = 7, WEEKDAY = 8;
-    function mod(n, x) {
-        return (n % x + x) % x;
-    }
-    var indexOf;
-    if (Array.prototype.indexOf) {
-        indexOf = Array.prototype.indexOf;
-    } else {
-        indexOf = function(o) {
-            var i;
-            for (i = 0; i < this.length; ++i) {
-                if (this[i] === o) {
-                    return i;
-                }
-            }
-            return -1;
-        };
-    }
-    function daysInMonth(year, month) {
-        if (isNaN(year) || isNaN(month)) {
-            return NaN;
-        }
-        var modMonth = mod(month, 12);
-        year += (month - modMonth) / 12;
-        return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2;
-    }
-    addFormatToken("M", [ "MM", 2 ], "Mo", function() {
-        return this.month() + 1;
-    });
-    addFormatToken("MMM", 0, 0, function(format) {
-        return this.localeData().monthsShort(this, format);
-    });
-    addFormatToken("MMMM", 0, 0, function(format) {
-        return this.localeData().months(this, format);
-    });
-    addUnitAlias("month", "M");
-    addUnitPriority("month", 8);
-    addRegexToken("M", match1to2);
-    addRegexToken("MM", match1to2, match2);
-    addRegexToken("MMM", function(isStrict, locale) {
-        return locale.monthsShortRegex(isStrict);
-    });
-    addRegexToken("MMMM", function(isStrict, locale) {
-        return locale.monthsRegex(isStrict);
-    });
-    addParseToken([ "M", "MM" ], function(input, array) {
-        array[MONTH] = toInt(input) - 1;
-    });
-    addParseToken([ "MMM", "MMMM" ], function(input, array, config, token) {
-        var month = config._locale.monthsParse(input, token, config._strict);
-        if (month != null) {
-            array[MONTH] = month;
-        } else {
-            getParsingFlags(config).invalidMonth = input;
-        }
-    });
-    var defaultLocaleMonths = "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), defaultLocaleMonthsShort = "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"), MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/, defaultMonthsShortRegex = matchWord, defaultMonthsRegex = matchWord;
-    function localeMonths(m, format) {
-        if (!m) {
-            return isArray(this._months) ? this._months : this._months["standalone"];
-        }
-        return isArray(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? "format" : "standalone"][m.month()];
-    }
-    function localeMonthsShort(m, format) {
-        if (!m) {
-            return isArray(this._monthsShort) ? this._monthsShort : this._monthsShort["standalone"];
-        }
-        return isArray(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format) ? "format" : "standalone"][m.month()];
-    }
-    function handleStrictParse(monthName, format, strict) {
-        var i, ii, mom, llc = monthName.toLocaleLowerCase();
-        if (!this._monthsParse) {
-            this._monthsParse = [];
-            this._longMonthsParse = [];
-            this._shortMonthsParse = [];
-            for (i = 0; i < 12; ++i) {
-                mom = createUTC([ 2e3, i ]);
-                this._shortMonthsParse[i] = this.monthsShort(mom, "").toLocaleLowerCase();
-                this._longMonthsParse[i] = this.months(mom, "").toLocaleLowerCase();
-            }
-        }
-        if (strict) {
-            if (format === "MMM") {
-                ii = indexOf.call(this._shortMonthsParse, llc);
-                return ii !== -1 ? ii : null;
-            } else {
-                ii = indexOf.call(this._longMonthsParse, llc);
-                return ii !== -1 ? ii : null;
-            }
-        } else {
-            if (format === "MMM") {
-                ii = indexOf.call(this._shortMonthsParse, llc);
-                if (ii !== -1) {
-                    return ii;
-                }
-                ii = indexOf.call(this._longMonthsParse, llc);
-                return ii !== -1 ? ii : null;
-            } else {
-                ii = indexOf.call(this._longMonthsParse, llc);
-                if (ii !== -1) {
-                    return ii;
-                }
-                ii = indexOf.call(this._shortMonthsParse, llc);
-                return ii !== -1 ? ii : null;
-            }
-        }
-    }
-    function localeMonthsParse(monthName, format, strict) {
-        var i, mom, regex;
-        if (this._monthsParseExact) {
-            return handleStrictParse.call(this, monthName, format, strict);
-        }
-        if (!this._monthsParse) {
-            this._monthsParse = [];
-            this._longMonthsParse = [];
-            this._shortMonthsParse = [];
-        }
-        for (i = 0; i < 12; i++) {
-            mom = createUTC([ 2e3, i ]);
-            if (strict && !this._longMonthsParse[i]) {
-                this._longMonthsParse[i] = new RegExp("^" + this.months(mom, "").replace(".", "") + "$", "i");
-                this._shortMonthsParse[i] = new RegExp("^" + this.monthsShort(mom, "").replace(".", "") + "$", "i");
-            }
-            if (!strict && !this._monthsParse[i]) {
-                regex = "^" + this.months(mom, "") + "|^" + this.monthsShort(mom, "");
-                this._monthsParse[i] = new RegExp(regex.replace(".", ""), "i");
-            }
-            if (strict && format === "MMMM" && this._longMonthsParse[i].test(monthName)) {
-                return i;
-            } else if (strict && format === "MMM" && this._shortMonthsParse[i].test(monthName)) {
-                return i;
-            } else if (!strict && this._monthsParse[i].test(monthName)) {
-                return i;
-            }
-        }
-    }
-    function setMonth(mom, value) {
-        var dayOfMonth;
-        if (!mom.isValid()) {
-            return mom;
-        }
-        if (typeof value === "string") {
-            if (/^\d+$/.test(value)) {
-                value = toInt(value);
-            } else {
-                value = mom.localeData().monthsParse(value);
-                if (!isNumber(value)) {
-                    return mom;
-                }
-            }
-        }
-        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
-        mom._d["set" + (mom._isUTC ? "UTC" : "") + "Month"](value, dayOfMonth);
-        return mom;
-    }
-    function getSetMonth(value) {
-        if (value != null) {
-            setMonth(this, value);
-            hooks.updateOffset(this, true);
-            return this;
-        } else {
-            return get(this, "Month");
-        }
-    }
-    function getDaysInMonth() {
-        return daysInMonth(this.year(), this.month());
-    }
-    function monthsShortRegex(isStrict) {
-        if (this._monthsParseExact) {
-            if (!hasOwnProp(this, "_monthsRegex")) {
-                computeMonthsParse.call(this);
-            }
-            if (isStrict) {
-                return this._monthsShortStrictRegex;
-            } else {
-                return this._monthsShortRegex;
-            }
-        } else {
-            if (!hasOwnProp(this, "_monthsShortRegex")) {
-                this._monthsShortRegex = defaultMonthsShortRegex;
-            }
-            return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex;
-        }
-    }
-    function monthsRegex(isStrict) {
-        if (this._monthsParseExact) {
-            if (!hasOwnProp(this, "_monthsRegex")) {
-                computeMonthsParse.call(this);
-            }
-            if (isStrict) {
-                return this._monthsStrictRegex;
-            } else {
-                return this._monthsRegex;
-            }
-        } else {
-            if (!hasOwnProp(this, "_monthsRegex")) {
-                this._monthsRegex = defaultMonthsRegex;
-            }
-            return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex;
-        }
-    }
-    function computeMonthsParse() {
-        function cmpLenRev(a, b) {
-            return b.length - a.length;
-        }
-        var shortPieces = [], longPieces = [], mixedPieces = [], i, mom;
-        for (i = 0; i < 12; i++) {
-            mom = createUTC([ 2e3, i ]);
-            shortPieces.push(this.monthsShort(mom, ""));
-            longPieces.push(this.months(mom, ""));
-            mixedPieces.push(this.months(mom, ""));
-            mixedPieces.push(this.monthsShort(mom, ""));
-        }
-        shortPieces.sort(cmpLenRev);
-        longPieces.sort(cmpLenRev);
-        mixedPieces.sort(cmpLenRev);
-        for (i = 0; i < 12; i++) {
-            shortPieces[i] = regexEscape(shortPieces[i]);
-            longPieces[i] = regexEscape(longPieces[i]);
-        }
-        for (i = 0; i < 24; i++) {
-            mixedPieces[i] = regexEscape(mixedPieces[i]);
-        }
-        this._monthsRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i");
-        this._monthsShortRegex = this._monthsRegex;
-        this._monthsStrictRegex = new RegExp("^(" + longPieces.join("|") + ")", "i");
-        this._monthsShortStrictRegex = new RegExp("^(" + shortPieces.join("|") + ")", "i");
-    }
-    addFormatToken("Y", 0, 0, function() {
-        var y = this.year();
-        return y <= 9999 ? zeroFill(y, 4) : "+" + y;
-    });
-    addFormatToken(0, [ "YY", 2 ], 0, function() {
-        return this.year() % 100;
-    });
-    addFormatToken(0, [ "YYYY", 4 ], 0, "year");
-    addFormatToken(0, [ "YYYYY", 5 ], 0, "year");
-    addFormatToken(0, [ "YYYYYY", 6, true ], 0, "year");
-    addUnitAlias("year", "y");
-    addUnitPriority("year", 1);
-    addRegexToken("Y", matchSigned);
-    addRegexToken("YY", match1to2, match2);
-    addRegexToken("YYYY", match1to4, match4);
-    addRegexToken("YYYYY", match1to6, match6);
-    addRegexToken("YYYYYY", match1to6, match6);
-    addParseToken([ "YYYYY", "YYYYYY" ], YEAR);
-    addParseToken("YYYY", function(input, array) {
-        array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
-    });
-    addParseToken("YY", function(input, array) {
-        array[YEAR] = hooks.parseTwoDigitYear(input);
-    });
-    addParseToken("Y", function(input, array) {
-        array[YEAR] = parseInt(input, 10);
-    });
-    function daysInYear(year) {
-        return isLeapYear(year) ? 366 : 365;
-    }
-    hooks.parseTwoDigitYear = function(input) {
-        return toInt(input) + (toInt(input) > 68 ? 1900 : 2e3);
-    };
-    var getSetYear = makeGetSet("FullYear", true);
-    function getIsLeapYear() {
-        return isLeapYear(this.year());
-    }
-    function createDate(y, m, d, h, M, s, ms) {
-        var date;
-        if (y < 100 && y >= 0) {
-            date = new Date(y + 400, m, d, h, M, s, ms);
-            if (isFinite(date.getFullYear())) {
-                date.setFullYear(y);
-            }
-        } else {
-            date = new Date(y, m, d, h, M, s, ms);
-        }
-        return date;
-    }
-    function createUTCDate(y) {
-        var date, args;
-        if (y < 100 && y >= 0) {
-            args = Array.prototype.slice.call(arguments);
-            args[0] = y + 400;
-            date = new Date(Date.UTC.apply(null, args));
-            if (isFinite(date.getUTCFullYear())) {
-                date.setUTCFullYear(y);
-            }
-        } else {
-            date = new Date(Date.UTC.apply(null, arguments));
-        }
-        return date;
-    }
-    function firstWeekOffset(year, dow, doy) {
-        var fwd = 7 + dow - doy, fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
-        return -fwdlw + fwd - 1;
-    }
-    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
-        var localWeekday = (7 + weekday - dow) % 7, weekOffset = firstWeekOffset(year, dow, doy), dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, resYear, resDayOfYear;
-        if (dayOfYear <= 0) {
-            resYear = year - 1;
-            resDayOfYear = daysInYear(resYear) + dayOfYear;
-        } else if (dayOfYear > daysInYear(year)) {
-            resYear = year + 1;
-            resDayOfYear = dayOfYear - daysInYear(year);
-        } else {
-            resYear = year;
-            resDayOfYear = dayOfYear;
-        }
-        return {
-            year: resYear,
-            dayOfYear: resDayOfYear
-        };
-    }
-    function weekOfYear(mom, dow, doy) {
-        var weekOffset = firstWeekOffset(mom.year(), dow, doy), week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, resWeek, resYear;
-        if (week < 1) {
-            resYear = mom.year() - 1;
-            resWeek = week + weeksInYear(resYear, dow, doy);
-        } else if (week > weeksInYear(mom.year(), dow, doy)) {
-            resWeek = week - weeksInYear(mom.year(), dow, doy);
-            resYear = mom.year() + 1;
-        } else {
-            resYear = mom.year();
-            resWeek = week;
-        }
-        return {
-            week: resWeek,
-            year: resYear
-        };
-    }
-    function weeksInYear(year, dow, doy) {
-        var weekOffset = firstWeekOffset(year, dow, doy), weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
-        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
-    }
-    addFormatToken("w", [ "ww", 2 ], "wo", "week");
-    addFormatToken("W", [ "WW", 2 ], "Wo", "isoWeek");
-    addUnitAlias("week", "w");
-    addUnitAlias("isoWeek", "W");
-    addUnitPriority("week", 5);
-    addUnitPriority("isoWeek", 5);
-    addRegexToken("w", match1to2);
-    addRegexToken("ww", match1to2, match2);
-    addRegexToken("W", match1to2);
-    addRegexToken("WW", match1to2, match2);
-    addWeekParseToken([ "w", "ww", "W", "WW" ], function(input, week, config, token) {
-        week[token.substr(0, 1)] = toInt(input);
-    });
-    function localeWeek(mom) {
-        return weekOfYear(mom, this._week.dow, this._week.doy).week;
-    }
-    var defaultLocaleWeek = {
-        dow: 0,
-        doy: 6
-    };
-    function localeFirstDayOfWeek() {
-        return this._week.dow;
-    }
-    function localeFirstDayOfYear() {
-        return this._week.doy;
-    }
-    function getSetWeek(input) {
-        var week = this.localeData().week(this);
-        return input == null ? week : this.add((input - week) * 7, "d");
-    }
-    function getSetISOWeek(input) {
-        var week = weekOfYear(this, 1, 4).week;
-        return input == null ? week : this.add((input - week) * 7, "d");
-    }
-    addFormatToken("d", 0, "do", "day");
-    addFormatToken("dd", 0, 0, function(format) {
-        return this.localeData().weekdaysMin(this, format);
-    });
-    addFormatToken("ddd", 0, 0, function(format) {
-        return this.localeData().weekdaysShort(this, format);
-    });
-    addFormatToken("dddd", 0, 0, function(format) {
-        return this.localeData().weekdays(this, format);
-    });
-    addFormatToken("e", 0, 0, "weekday");
-    addFormatToken("E", 0, 0, "isoWeekday");
-    addUnitAlias("day", "d");
-    addUnitAlias("weekday", "e");
-    addUnitAlias("isoWeekday", "E");
-    addUnitPriority("day", 11);
-    addUnitPriority("weekday", 11);
-    addUnitPriority("isoWeekday", 11);
-    addRegexToken("d", match1to2);
-    addRegexToken("e", match1to2);
-    addRegexToken("E", match1to2);
-    addRegexToken("dd", function(isStrict, locale) {
-        return locale.weekdaysMinRegex(isStrict);
-    });
-    addRegexToken("ddd", function(isStrict, locale) {
-        return locale.weekdaysShortRegex(isStrict);
-    });
-    addRegexToken("dddd", function(isStrict, locale) {
-        return locale.weekdaysRegex(isStrict);
-    });
-    addWeekParseToken([ "dd", "ddd", "dddd" ], function(input, week, config, token) {
-        var weekday = config._locale.weekdaysParse(input, token, config._strict);
-        if (weekday != null) {
-            week.d = weekday;
-        } else {
-            getParsingFlags(config).invalidWeekday = input;
-        }
-    });
-    addWeekParseToken([ "d", "e", "E" ], function(input, week, config, token) {
-        week[token] = toInt(input);
-    });
-    function parseWeekday(input, locale) {
-        if (typeof input !== "string") {
-            return input;
-        }
-        if (!isNaN(input)) {
-            return parseInt(input, 10);
-        }
-        input = locale.weekdaysParse(input);
-        if (typeof input === "number") {
-            return input;
-        }
-        return null;
-    }
-    function parseIsoWeekday(input, locale) {
-        if (typeof input === "string") {
-            return locale.weekdaysParse(input) % 7 || 7;
-        }
-        return isNaN(input) ? null : input;
-    }
-    function shiftWeekdays(ws, n) {
-        return ws.slice(n, 7).concat(ws.slice(0, n));
-    }
-    var defaultLocaleWeekdays = "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), defaultLocaleWeekdaysShort = "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), defaultLocaleWeekdaysMin = "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), defaultWeekdaysRegex = matchWord, defaultWeekdaysShortRegex = matchWord, defaultWeekdaysMinRegex = matchWord;
-    function localeWeekdays(m, format) {
-        var weekdays = isArray(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format) ? "format" : "standalone"];
-        return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays;
-    }
-    function localeWeekdaysShort(m) {
-        return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort;
-    }
-    function localeWeekdaysMin(m) {
-        return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin;
-    }
-    function handleStrictParse$1(weekdayName, format, strict) {
-        var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
-        if (!this._weekdaysParse) {
-            this._weekdaysParse = [];
-            this._shortWeekdaysParse = [];
-            this._minWeekdaysParse = [];
-            for (i = 0; i < 7; ++i) {
-                mom = createUTC([ 2e3, 1 ]).day(i);
-                this._minWeekdaysParse[i] = this.weekdaysMin(mom, "").toLocaleLowerCase();
-                this._shortWeekdaysParse[i] = this.weekdaysShort(mom, "").toLocaleLowerCase();
-                this._weekdaysParse[i] = this.weekdays(mom, "").toLocaleLowerCase();
-            }
-        }
-        if (strict) {
-            if (format === "dddd") {
-                ii = indexOf.call(this._weekdaysParse, llc);
-                return ii !== -1 ? ii : null;
-            } else if (format === "ddd") {
-                ii = indexOf.call(this._shortWeekdaysParse, llc);
-                return ii !== -1 ? ii : null;
-            } else {
-                ii = indexOf.call(this._minWeekdaysParse, llc);
-                return ii !== -1 ? ii : null;
-            }
-        } else {
-            if (format === "dddd") {
-                ii = indexOf.call(this._weekdaysParse, llc);
-                if (ii !== -1) {
-                    return ii;
-                }
-                ii = indexOf.call(this._shortWeekdaysParse, llc);
-                if (ii !== -1) {
-                    return ii;
-                }
-                ii = indexOf.call(this._minWeekdaysParse, llc);
-                return ii !== -1 ? ii : null;
-            } else if (format === "ddd") {
-                ii = indexOf.call(this._shortWeekdaysParse, llc);
-                if (ii !== -1) {
-                    return ii;
-                }
-                ii = indexOf.call(this._weekdaysParse, llc);
-                if (ii !== -1) {
-                    return ii;
-                }
-                ii = indexOf.call(this._minWeekdaysParse, llc);
-                return ii !== -1 ? ii : null;
-            } else {
-                ii = indexOf.call(this._minWeekdaysParse, llc);
-                if (ii !== -1) {
-                    return ii;
-                }
-                ii = indexOf.call(this._weekdaysParse, llc);
-                if (ii !== -1) {
-                    return ii;
-                }
-                ii = indexOf.call(this._shortWeekdaysParse, llc);
-                return ii !== -1 ? ii : null;
-            }
-        }
-    }
-    function localeWeekdaysParse(weekdayName, format, strict) {
-        var i, mom, regex;
-        if (this._weekdaysParseExact) {
-            return handleStrictParse$1.call(this, weekdayName, format, strict);
-        }
-        if (!this._weekdaysParse) {
-            this._weekdaysParse = [];
-            this._minWeekdaysParse = [];
-            this._shortWeekdaysParse = [];
-            this._fullWeekdaysParse = [];
-        }
-        for (i = 0; i < 7; i++) {
-            mom = createUTC([ 2e3, 1 ]).day(i);
-            if (strict && !this._fullWeekdaysParse[i]) {
-                this._fullWeekdaysParse[i] = new RegExp("^" + this.weekdays(mom, "").replace(".", "\\.?") + "$", "i");
-                this._shortWeekdaysParse[i] = new RegExp("^" + this.weekdaysShort(mom, "").replace(".", "\\.?") + "$", "i");
-                this._minWeekdaysParse[i] = new RegExp("^" + this.weekdaysMin(mom, "").replace(".", "\\.?") + "$", "i");
-            }
-            if (!this._weekdaysParse[i]) {
-                regex = "^" + this.weekdays(mom, "") + "|^" + this.weekdaysShort(mom, "") + "|^" + this.weekdaysMin(mom, "");
-                this._weekdaysParse[i] = new RegExp(regex.replace(".", ""), "i");
-            }
-            if (strict && format === "dddd" && this._fullWeekdaysParse[i].test(weekdayName)) {
-                return i;
-            } else if (strict && format === "ddd" && this._shortWeekdaysParse[i].test(weekdayName)) {
-                return i;
-            } else if (strict && format === "dd" && this._minWeekdaysParse[i].test(weekdayName)) {
-                return i;
-            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
-                return i;
-            }
-        }
-    }
-    function getSetDayOfWeek(input) {
-        if (!this.isValid()) {
-            return input != null ? this : NaN;
-        }
-        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
-        if (input != null) {
-            input = parseWeekday(input, this.localeData());
-            return this.add(input - day, "d");
-        } else {
-            return day;
-        }
-    }
-    function getSetLocaleDayOfWeek(input) {
-        if (!this.isValid()) {
-            return input != null ? this : NaN;
-        }
-        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
-        return input == null ? weekday : this.add(input - weekday, "d");
-    }
-    function getSetISODayOfWeek(input) {
-        if (!this.isValid()) {
-            return input != null ? this : NaN;
-        }
-        if (input != null) {
-            var weekday = parseIsoWeekday(input, this.localeData());
-            return this.day(this.day() % 7 ? weekday : weekday - 7);
-        } else {
-            return this.day() || 7;
-        }
-    }
-    function weekdaysRegex(isStrict) {
-        if (this._weekdaysParseExact) {
-            if (!hasOwnProp(this, "_weekdaysRegex")) {
-                computeWeekdaysParse.call(this);
-            }
-            if (isStrict) {
-                return this._weekdaysStrictRegex;
-            } else {
-                return this._weekdaysRegex;
-            }
-        } else {
-            if (!hasOwnProp(this, "_weekdaysRegex")) {
-                this._weekdaysRegex = defaultWeekdaysRegex;
-            }
-            return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex;
-        }
-    }
-    function weekdaysShortRegex(isStrict) {
-        if (this._weekdaysParseExact) {
-            if (!hasOwnProp(this, "_weekdaysRegex")) {
-                computeWeekdaysParse.call(this);
-            }
-            if (isStrict) {
-                return this._weekdaysShortStrictRegex;
-            } else {
-                return this._weekdaysShortRegex;
-            }
-        } else {
-            if (!hasOwnProp(this, "_weekdaysShortRegex")) {
-                this._weekdaysShortRegex = defaultWeekdaysShortRegex;
-            }
-            return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
-        }
-    }
-    function weekdaysMinRegex(isStrict) {
-        if (this._weekdaysParseExact) {
-            if (!hasOwnProp(this, "_weekdaysRegex")) {
-                computeWeekdaysParse.call(this);
-            }
-            if (isStrict) {
-                return this._weekdaysMinStrictRegex;
-            } else {
-                return this._weekdaysMinRegex;
-            }
-        } else {
-            if (!hasOwnProp(this, "_weekdaysMinRegex")) {
-                this._weekdaysMinRegex = defaultWeekdaysMinRegex;
-            }
-            return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
-        }
-    }
-    function computeWeekdaysParse() {
-        function cmpLenRev(a, b) {
-            return b.length - a.length;
-        }
-        var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], i, mom, minp, shortp, longp;
-        for (i = 0; i < 7; i++) {
-            mom = createUTC([ 2e3, 1 ]).day(i);
-            minp = regexEscape(this.weekdaysMin(mom, ""));
-            shortp = regexEscape(this.weekdaysShort(mom, ""));
-            longp = regexEscape(this.weekdays(mom, ""));
-            minPieces.push(minp);
-            shortPieces.push(shortp);
-            longPieces.push(longp);
-            mixedPieces.push(minp);
-            mixedPieces.push(shortp);
-            mixedPieces.push(longp);
-        }
-        minPieces.sort(cmpLenRev);
-        shortPieces.sort(cmpLenRev);
-        longPieces.sort(cmpLenRev);
-        mixedPieces.sort(cmpLenRev);
-        this._weekdaysRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i");
-        this._weekdaysShortRegex = this._weekdaysRegex;
-        this._weekdaysMinRegex = this._weekdaysRegex;
-        this._weekdaysStrictRegex = new RegExp("^(" + longPieces.join("|") + ")", "i");
-        this._weekdaysShortStrictRegex = new RegExp("^(" + shortPieces.join("|") + ")", "i");
-        this._weekdaysMinStrictRegex = new RegExp("^(" + minPieces.join("|") + ")", "i");
-    }
-    function hFormat() {
-        return this.hours() % 12 || 12;
-    }
-    function kFormat() {
-        return this.hours() || 24;
-    }
-    addFormatToken("H", [ "HH", 2 ], 0, "hour");
-    addFormatToken("h", [ "hh", 2 ], 0, hFormat);
-    addFormatToken("k", [ "kk", 2 ], 0, kFormat);
-    addFormatToken("hmm", 0, 0, function() {
-        return "" + hFormat.apply(this) + zeroFill(this.minutes(), 2);
-    });
-    addFormatToken("hmmss", 0, 0, function() {
-        return "" + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);
-    });
-    addFormatToken("Hmm", 0, 0, function() {
-        return "" + this.hours() + zeroFill(this.minutes(), 2);
-    });
-    addFormatToken("Hmmss", 0, 0, function() {
-        return "" + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);
-    });
-    function meridiem(token, lowercase) {
-        addFormatToken(token, 0, 0, function() {
-            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
-        });
-    }
-    meridiem("a", true);
-    meridiem("A", false);
-    addUnitAlias("hour", "h");
-    addUnitPriority("hour", 13);
-    function matchMeridiem(isStrict, locale) {
-        return locale._meridiemParse;
-    }
-    addRegexToken("a", matchMeridiem);
-    addRegexToken("A", matchMeridiem);
-    addRegexToken("H", match1to2);
-    addRegexToken("h", match1to2);
-    addRegexToken("k", match1to2);
-    addRegexToken("HH", match1to2, match2);
-    addRegexToken("hh", match1to2, match2);
-    addRegexToken("kk", match1to2, match2);
-    addRegexToken("hmm", match3to4);
-    addRegexToken("hmmss", match5to6);
-    addRegexToken("Hmm", match3to4);
-    addRegexToken("Hmmss", match5to6);
-    addParseToken([ "H", "HH" ], HOUR);
-    addParseToken([ "k", "kk" ], function(input, array, config) {
-        var kInput = toInt(input);
-        array[HOUR] = kInput === 24 ? 0 : kInput;
-    });
-    addParseToken([ "a", "A" ], function(input, array, config) {
-        config._isPm = config._locale.isPM(input);
-        config._meridiem = input;
-    });
-    addParseToken([ "h", "hh" ], function(input, array, config) {
-        array[HOUR] = toInt(input);
-        getParsingFlags(config).bigHour = true;
-    });
-    addParseToken("hmm", function(input, array, config) {
-        var pos = input.length - 2;
-        array[HOUR] = toInt(input.substr(0, pos));
-        array[MINUTE] = toInt(input.substr(pos));
-        getParsingFlags(config).bigHour = true;
-    });
-    addParseToken("hmmss", function(input, array, config) {
-        var pos1 = input.length - 4, pos2 = input.length - 2;
-        array[HOUR] = toInt(input.substr(0, pos1));
-        array[MINUTE] = toInt(input.substr(pos1, 2));
-        array[SECOND] = toInt(input.substr(pos2));
-        getParsingFlags(config).bigHour = true;
-    });
-    addParseToken("Hmm", function(input, array, config) {
-        var pos = input.length - 2;
-        array[HOUR] = toInt(input.substr(0, pos));
-        array[MINUTE] = toInt(input.substr(pos));
-    });
-    addParseToken("Hmmss", function(input, array, config) {
-        var pos1 = input.length - 4, pos2 = input.length - 2;
-        array[HOUR] = toInt(input.substr(0, pos1));
-        array[MINUTE] = toInt(input.substr(pos1, 2));
-        array[SECOND] = toInt(input.substr(pos2));
-    });
-    function localeIsPM(input) {
-        return (input + "").toLowerCase().charAt(0) === "p";
-    }
-    var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i, getSetHour = makeGetSet("Hours", true);
-    function localeMeridiem(hours, minutes, isLower) {
-        if (hours > 11) {
-            return isLower ? "pm" : "PM";
-        } else {
-            return isLower ? "am" : "AM";
-        }
-    }
-    var baseConfig = {
-        calendar: defaultCalendar,
-        longDateFormat: defaultLongDateFormat,
-        invalidDate: defaultInvalidDate,
-        ordinal: defaultOrdinal,
-        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
-        relativeTime: defaultRelativeTime,
-        months: defaultLocaleMonths,
-        monthsShort: defaultLocaleMonthsShort,
-        week: defaultLocaleWeek,
-        weekdays: defaultLocaleWeekdays,
-        weekdaysMin: defaultLocaleWeekdaysMin,
-        weekdaysShort: defaultLocaleWeekdaysShort,
-        meridiemParse: defaultLocaleMeridiemParse
-    };
-    var locales = {}, localeFamilies = {}, globalLocale;
-    function commonPrefix(arr1, arr2) {
-        var i, minl = Math.min(arr1.length, arr2.length);
-        for (i = 0; i < minl; i += 1) {
-            if (arr1[i] !== arr2[i]) {
-                return i;
-            }
-        }
-        return minl;
-    }
-    function normalizeLocale(key) {
-        return key ? key.toLowerCase().replace("_", "-") : key;
-    }
-    function chooseLocale(names) {
-        var i = 0, j, next, locale, split;
-        while (i < names.length) {
-            split = normalizeLocale(names[i]).split("-");
-            j = split.length;
-            next = normalizeLocale(names[i + 1]);
-            next = next ? next.split("-") : null;
-            while (j > 0) {
-                locale = loadLocale(split.slice(0, j).join("-"));
-                if (locale) {
-                    return locale;
-                }
-                if (next && next.length >= j && commonPrefix(split, next) >= j - 1) {
-                    break;
-                }
-                j--;
-            }
-            i++;
-        }
-        return globalLocale;
-    }
-    function loadLocale(name) {
-        var oldLocale = null, aliasedRequire;
-        if (locales[name] === undefined && typeof module !== "undefined" && module && module.exports) {
-            try {
-                oldLocale = globalLocale._abbr;
-                aliasedRequire = require;
-                aliasedRequire("./locale/" + name);
-                getSetGlobalLocale(oldLocale);
-            } catch (e) {
-                locales[name] = null;
-            }
-        }
-        return locales[name];
-    }
-    function getSetGlobalLocale(key, values) {
-        var data;
-        if (key) {
-            if (isUndefined(values)) {
-                data = getLocale(key);
-            } else {
-                data = defineLocale(key, values);
-            }
-            if (data) {
-                globalLocale = data;
-            } else {
-                if (typeof console !== "undefined" && console.warn) {
-                    console.warn("Locale " + key + " not found. Did you forget to load it?");
-                }
-            }
-        }
-        return globalLocale._abbr;
-    }
-    function defineLocale(name, config) {
-        if (config !== null) {
-            var locale, parentConfig = baseConfig;
-            config.abbr = name;
-            if (locales[name] != null) {
-                deprecateSimple("defineLocaleOverride", "use moment.updateLocale(localeName, config) to change " + "an existing locale. moment.defineLocale(localeName, " + "config) should only be used for creating a new locale " + "See http://momentjs.com/guides/#/warnings/define-locale/ for more info.");
-                parentConfig = locales[name]._config;
-            } else if (config.parentLocale != null) {
-                if (locales[config.parentLocale] != null) {
-                    parentConfig = locales[config.parentLocale]._config;
-                } else {
-                    locale = loadLocale(config.parentLocale);
-                    if (locale != null) {
-                        parentConfig = locale._config;
-                    } else {
-                        if (!localeFamilies[config.parentLocale]) {
-                            localeFamilies[config.parentLocale] = [];
-                        }
-                        localeFamilies[config.parentLocale].push({
-                            name: name,
-                            config: config
-                        });
-                        return null;
-                    }
-                }
-            }
-            locales[name] = new Locale(mergeConfigs(parentConfig, config));
-            if (localeFamilies[name]) {
-                localeFamilies[name].forEach(function(x) {
-                    defineLocale(x.name, x.config);
-                });
-            }
-            getSetGlobalLocale(name);
-            return locales[name];
-        } else {
-            delete locales[name];
-            return null;
-        }
-    }
-    function updateLocale(name, config) {
-        if (config != null) {
-            var locale, tmpLocale, parentConfig = baseConfig;
-            if (locales[name] != null && locales[name].parentLocale != null) {
-                locales[name].set(mergeConfigs(locales[name]._config, config));
-            } else {
-                tmpLocale = loadLocale(name);
-                if (tmpLocale != null) {
-                    parentConfig = tmpLocale._config;
-                }
-                config = mergeConfigs(parentConfig, config);
-                if (tmpLocale == null) {
-                    config.abbr = name;
-                }
-                locale = new Locale(config);
-                locale.parentLocale = locales[name];
-                locales[name] = locale;
-            }
-            getSetGlobalLocale(name);
-        } else {
-            if (locales[name] != null) {
-                if (locales[name].parentLocale != null) {
-                    locales[name] = locales[name].parentLocale;
-                    if (name === getSetGlobalLocale()) {
-                        getSetGlobalLocale(name);
-                    }
-                } else if (locales[name] != null) {
-                    delete locales[name];
-                }
-            }
-        }
-        return locales[name];
-    }
-    function getLocale(key) {
-        var locale;
-        if (key && key._locale && key._locale._abbr) {
-            key = key._locale._abbr;
-        }
-        if (!key) {
-            return globalLocale;
-        }
-        if (!isArray(key)) {
-            locale = loadLocale(key);
-            if (locale) {
-                return locale;
-            }
-            key = [ key ];
-        }
-        return chooseLocale(key);
-    }
-    function listLocales() {
-        return keys(locales);
-    }
-    function checkOverflow(m) {
-        var overflow, a = m._a;
-        if (a && getParsingFlags(m).overflow === -2) {
-            overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1;
-            if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
-                overflow = DATE;
-            }
-            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
-                overflow = WEEK;
-            }
-            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
-                overflow = WEEKDAY;
-            }
-            getParsingFlags(m).overflow = overflow;
-        }
-        return m;
-    }
-    var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, tzRegex = /Z|[+-]\d\d(?::?\d\d)?/, isoDates = [ [ "YYYYYY-MM-DD", /[+-]\d{6}-\d\d-\d\d/ ], [ "YYYY-MM-DD", /\d{4}-\d\d-\d\d/ ], [ "GGGG-[W]WW-E", /\d{4}-W\d\d-\d/ ], [ "GGGG-[W]WW", /\d{4}-W\d\d/, false ], [ "YYYY-DDD", /\d{4}-\d{3}/ ], [ "YYYY-MM", /\d{4}-\d\d/, false ], [ "YYYYYYMMDD", /[+-]\d{10}/ ], [ "YYYYMMDD", /\d{8}/ ], [ "GGGG[W]WWE", /\d{4}W\d{3}/ ], [ "GGGG[W]WW", /\d{4}W\d{2}/, false ], [ "YYYYDDD", /\d{7}/ ], [ "YYYYMM", /\d{6}/, false ], [ "YYYY", /\d{4}/, false ] ], isoTimes = [ [ "HH:mm:ss.SSSS", /\d\d:\d\d:\d\d\.\d+/ ], [ "HH:mm:ss,SSSS", /\d\d:\d\d:\d\d,\d+/ ], [ "HH:mm:ss", /\d\d:\d\d:\d\d/ ], [ "HH:mm", /\d\d:\d\d/ ], [ "HHmmss.SSSS", /\d\d\d\d\d\d\.\d+/ ], [ "HHmmss,SSSS", /\d\d\d\d\d\d,\d+/ ], [ "HHmmss", /\d\d\d\d\d\d/ ], [ "HHmm", /\d\d\d\d/ ], [ "HH", /\d\d/ ] ], aspNetJsonRegex = /^\/?Date\((-?\d+)/i, rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/, obsOffsets = {
-        UT: 0,
-        GMT: 0,
-        EDT: -4 * 60,
-        EST: -5 * 60,
-        CDT: -5 * 60,
-        CST: -6 * 60,
-        MDT: -6 * 60,
-        MST: -7 * 60,
-        PDT: -7 * 60,
-        PST: -8 * 60
-    };
-    function configFromISO(config) {
-        var i, l, string = config._i, match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), allowTime, dateFormat, timeFormat, tzFormat;
-        if (match) {
-            getParsingFlags(config).iso = true;
-            for (i = 0, l = isoDates.length; i < l; i++) {
-                if (isoDates[i][1].exec(match[1])) {
-                    dateFormat = isoDates[i][0];
-                    allowTime = isoDates[i][2] !== false;
-                    break;
-                }
-            }
-            if (dateFormat == null) {
-                config._isValid = false;
-                return;
-            }
-            if (match[3]) {
-                for (i = 0, l = isoTimes.length; i < l; i++) {
-                    if (isoTimes[i][1].exec(match[3])) {
-                        timeFormat = (match[2] || " ") + isoTimes[i][0];
-                        break;
-                    }
-                }
-                if (timeFormat == null) {
-                    config._isValid = false;
-                    return;
-                }
-            }
-            if (!allowTime && timeFormat != null) {
-                config._isValid = false;
-                return;
-            }
-            if (match[4]) {
-                if (tzRegex.exec(match[4])) {
-                    tzFormat = "Z";
-                } else {
-                    config._isValid = false;
-                    return;
-                }
-            }
-            config._f = dateFormat + (timeFormat || "") + (tzFormat || "");
-            configFromStringAndFormat(config);
-        } else {
-            config._isValid = false;
-        }
-    }
-    function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {
-        var result = [ untruncateYear(yearStr), defaultLocaleMonthsShort.indexOf(monthStr), parseInt(dayStr, 10), parseInt(hourStr, 10), parseInt(minuteStr, 10) ];
-        if (secondStr) {
-            result.push(parseInt(secondStr, 10));
-        }
-        return result;
-    }
-    function untruncateYear(yearStr) {
-        var year = parseInt(yearStr, 10);
-        if (year <= 49) {
-            return 2e3 + year;
-        } else if (year <= 999) {
-            return 1900 + year;
-        }
-        return year;
-    }
-    function preprocessRFC2822(s) {
-        return s.replace(/\([^)]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").replace(/^\s\s*/, "").replace(/\s\s*$/, "");
-    }
-    function checkWeekday(weekdayStr, parsedInput, config) {
-        if (weekdayStr) {
-            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();
-            if (weekdayProvided !== weekdayActual) {
-                getParsingFlags(config).weekdayMismatch = true;
-                config._isValid = false;
-                return false;
-            }
-        }
-        return true;
-    }
-    function calculateOffset(obsOffset, militaryOffset, numOffset) {
-        if (obsOffset) {
-            return obsOffsets[obsOffset];
-        } else if (militaryOffset) {
-            return 0;
-        } else {
-            var hm = parseInt(numOffset, 10), m = hm % 100, h = (hm - m) / 100;
-            return h * 60 + m;
-        }
-    }
-    function configFromRFC2822(config) {
-        var match = rfc2822.exec(preprocessRFC2822(config._i)), parsedArray;
-        if (match) {
-            parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);
-            if (!checkWeekday(match[1], parsedArray, config)) {
-                return;
-            }
-            config._a = parsedArray;
-            config._tzm = calculateOffset(match[8], match[9], match[10]);
-            config._d = createUTCDate.apply(null, config._a);
-            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
-            getParsingFlags(config).rfc2822 = true;
-        } else {
-            config._isValid = false;
-        }
-    }
-    function configFromString(config) {
-        var matched = aspNetJsonRegex.exec(config._i);
-        if (matched !== null) {
-            config._d = new Date(+matched[1]);
-            return;
-        }
-        configFromISO(config);
-        if (config._isValid === false) {
-            delete config._isValid;
-        } else {
-            return;
-        }
-        configFromRFC2822(config);
-        if (config._isValid === false) {
-            delete config._isValid;
-        } else {
-            return;
-        }
-        if (config._strict) {
-            config._isValid = false;
-        } else {
-            hooks.createFromInputFallback(config);
-        }
-    }
-    hooks.createFromInputFallback = deprecate("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), " + "which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are " + "discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.", function(config) {
-        config._d = new Date(config._i + (config._useUTC ? " UTC" : ""));
-    });
-    function defaults(a, b, c) {
-        if (a != null) {
-            return a;
-        }
-        if (b != null) {
-            return b;
-        }
-        return c;
-    }
-    function currentDateArray(config) {
-        var nowValue = new Date(hooks.now());
-        if (config._useUTC) {
-            return [ nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate() ];
-        }
-        return [ nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate() ];
-    }
-    function configFromArray(config) {
-        var i, date, input = [], currentDate, expectedWeekday, yearToUse;
-        if (config._d) {
-            return;
-        }
-        currentDate = currentDateArray(config);
-        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
-            dayOfYearFromWeekInfo(config);
-        }
-        if (config._dayOfYear != null) {
-            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
-            if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {
-                getParsingFlags(config)._overflowDayOfYear = true;
-            }
-            date = createUTCDate(yearToUse, 0, config._dayOfYear);
-            config._a[MONTH] = date.getUTCMonth();
-            config._a[DATE] = date.getUTCDate();
-        }
-        for (i = 0; i < 3 && config._a[i] == null; ++i) {
-            config._a[i] = input[i] = currentDate[i];
-        }
-        for (;i < 7; i++) {
-            config._a[i] = input[i] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i];
-        }
-        if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) {
-            config._nextDay = true;
-            config._a[HOUR] = 0;
-        }
-        config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
-        expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();
-        if (config._tzm != null) {
-            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
-        }
-        if (config._nextDay) {
-            config._a[HOUR] = 24;
-        }
-        if (config._w && typeof config._w.d !== "undefined" && config._w.d !== expectedWeekday) {
-            getParsingFlags(config).weekdayMismatch = true;
-        }
-    }
-    function dayOfYearFromWeekInfo(config) {
-        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
-        w = config._w;
-        if (w.GG != null || w.W != null || w.E != null) {
-            dow = 1;
-            doy = 4;
-            weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);
-            week = defaults(w.W, 1);
-            weekday = defaults(w.E, 1);
-            if (weekday < 1 || weekday > 7) {
-                weekdayOverflow = true;
-            }
-        } else {
-            dow = config._locale._week.dow;
-            doy = config._locale._week.doy;
-            curWeek = weekOfYear(createLocal(), dow, doy);
-            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
-            week = defaults(w.w, curWeek.week);
-            if (w.d != null) {
-                weekday = w.d;
-                if (weekday < 0 || weekday > 6) {
-                    weekdayOverflow = true;
-                }
-            } else if (w.e != null) {
-                weekday = w.e + dow;
-                if (w.e < 0 || w.e > 6) {
-                    weekdayOverflow = true;
-                }
-            } else {
-                weekday = dow;
-            }
-        }
-        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
-            getParsingFlags(config)._overflowWeeks = true;
-        } else if (weekdayOverflow != null) {
-            getParsingFlags(config)._overflowWeekday = true;
-        } else {
-            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
-            config._a[YEAR] = temp.year;
-            config._dayOfYear = temp.dayOfYear;
-        }
-    }
-    hooks.ISO_8601 = function() {};
-    hooks.RFC_2822 = function() {};
-    function configFromStringAndFormat(config) {
-        if (config._f === hooks.ISO_8601) {
-            configFromISO(config);
-            return;
-        }
-        if (config._f === hooks.RFC_2822) {
-            configFromRFC2822(config);
-            return;
-        }
-        config._a = [];
-        getParsingFlags(config).empty = true;
-        var string = "" + config._i, i, parsedInput, tokens, token, skipped, stringLength = string.length, totalParsedInputLength = 0, era;
-        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];
-        for (i = 0; i < tokens.length; i++) {
-            token = tokens[i];
-            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
-            if (parsedInput) {
-                skipped = string.substr(0, string.indexOf(parsedInput));
-                if (skipped.length > 0) {
-                    getParsingFlags(config).unusedInput.push(skipped);
-                }
-                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
-                totalParsedInputLength += parsedInput.length;
-            }
-            if (formatTokenFunctions[token]) {
-                if (parsedInput) {
-                    getParsingFlags(config).empty = false;
-                } else {
-                    getParsingFlags(config).unusedTokens.push(token);
-                }
-                addTimeToArrayFromToken(token, parsedInput, config);
-            } else if (config._strict && !parsedInput) {
-                getParsingFlags(config).unusedTokens.push(token);
-            }
-        }
-        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
-        if (string.length > 0) {
-            getParsingFlags(config).unusedInput.push(string);
-        }
-        if (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) {
-            getParsingFlags(config).bigHour = undefined;
-        }
-        getParsingFlags(config).parsedDateParts = config._a.slice(0);
-        getParsingFlags(config).meridiem = config._meridiem;
-        config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
-        era = getParsingFlags(config).era;
-        if (era !== null) {
-            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
-        }
-        configFromArray(config);
-        checkOverflow(config);
-    }
-    function meridiemFixWrap(locale, hour, meridiem) {
-        var isPm;
-        if (meridiem == null) {
-            return hour;
-        }
-        if (locale.meridiemHour != null) {
-            return locale.meridiemHour(hour, meridiem);
-        } else if (locale.isPM != null) {
-            isPm = locale.isPM(meridiem);
-            if (isPm && hour < 12) {
-                hour += 12;
-            }
-            if (!isPm && hour === 12) {
-                hour = 0;
-            }
-            return hour;
-        } else {
-            return hour;
-        }
-    }
-    function configFromStringAndArray(config) {
-        var tempConfig, bestMoment, scoreToBeat, i, currentScore, validFormatFound, bestFormatIsValid = false;
-        if (config._f.length === 0) {
-            getParsingFlags(config).invalidFormat = true;
-            config._d = new Date(NaN);
-            return;
-        }
-        for (i = 0; i < config._f.length; i++) {
-            currentScore = 0;
-            validFormatFound = false;
-            tempConfig = copyConfig({}, config);
-            if (config._useUTC != null) {
-                tempConfig._useUTC = config._useUTC;
-            }
-            tempConfig._f = config._f[i];
-            configFromStringAndFormat(tempConfig);
-            if (isValid(tempConfig)) {
-                validFormatFound = true;
-            }
-            currentScore += getParsingFlags(tempConfig).charsLeftOver;
-            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
-            getParsingFlags(tempConfig).score = currentScore;
-            if (!bestFormatIsValid) {
-                if (scoreToBeat == null || currentScore < scoreToBeat || validFormatFound) {
-                    scoreToBeat = currentScore;
-                    bestMoment = tempConfig;
-                    if (validFormatFound) {
-                        bestFormatIsValid = true;
-                    }
-                }
-            } else {
-                if (currentScore < scoreToBeat) {
-                    scoreToBeat = currentScore;
-                    bestMoment = tempConfig;
-                }
-            }
-        }
-        extend(config, bestMoment || tempConfig);
-    }
-    function configFromObject(config) {
-        if (config._d) {
-            return;
-        }
-        var i = normalizeObjectUnits(config._i), dayOrDate = i.day === undefined ? i.date : i.day;
-        config._a = map([ i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond ], function(obj) {
-            return obj && parseInt(obj, 10);
-        });
-        configFromArray(config);
-    }
-    function createFromConfig(config) {
-        var res = new Moment(checkOverflow(prepareConfig(config)));
-        if (res._nextDay) {
-            res.add(1, "d");
-            res._nextDay = undefined;
-        }
-        return res;
-    }
-    function prepareConfig(config) {
-        var input = config._i, format = config._f;
-        config._locale = config._locale || getLocale(config._l);
-        if (input === null || format === undefined && input === "") {
-            return createInvalid({
-                nullInput: true
-            });
-        }
-        if (typeof input === "string") {
-            config._i = input = config._locale.preparse(input);
-        }
-        if (isMoment(input)) {
-            return new Moment(checkOverflow(input));
-        } else if (isDate(input)) {
-            config._d = input;
-        } else if (isArray(format)) {
-            configFromStringAndArray(config);
-        } else if (format) {
-            configFromStringAndFormat(config);
-        } else {
-            configFromInput(config);
-        }
-        if (!isValid(config)) {
-            config._d = null;
-        }
-        return config;
-    }
-    function configFromInput(config) {
-        var input = config._i;
-        if (isUndefined(input)) {
-            config._d = new Date(hooks.now());
-        } else if (isDate(input)) {
-            config._d = new Date(input.valueOf());
-        } else if (typeof input === "string") {
-            configFromString(config);
-        } else if (isArray(input)) {
-            config._a = map(input.slice(0), function(obj) {
-                return parseInt(obj, 10);
-            });
-            configFromArray(config);
-        } else if (isObject(input)) {
-            configFromObject(config);
-        } else if (isNumber(input)) {
-            config._d = new Date(input);
-        } else {
-            hooks.createFromInputFallback(config);
-        }
-    }
-    function createLocalOrUTC(input, format, locale, strict, isUTC) {
-        var c = {};
-        if (format === true || format === false) {
-            strict = format;
-            format = undefined;
-        }
-        if (locale === true || locale === false) {
-            strict = locale;
-            locale = undefined;
-        }
-        if (isObject(input) && isObjectEmpty(input) || isArray(input) && input.length === 0) {
-            input = undefined;
-        }
-        c._isAMomentObject = true;
-        c._useUTC = c._isUTC = isUTC;
-        c._l = locale;
-        c._i = input;
-        c._f = format;
-        c._strict = strict;
-        return createFromConfig(c);
-    }
-    function createLocal(input, format, locale, strict) {
-        return createLocalOrUTC(input, format, locale, strict, false);
-    }
-    var prototypeMin = deprecate("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/", function() {
-        var other = createLocal.apply(null, arguments);
-        if (this.isValid() && other.isValid()) {
-            return other < this ? this : other;
-        } else {
-            return createInvalid();
-        }
-    }), prototypeMax = deprecate("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/", function() {
-        var other = createLocal.apply(null, arguments);
-        if (this.isValid() && other.isValid()) {
-            return other > this ? this : other;
-        } else {
-            return createInvalid();
-        }
-    });
-    function pickBy(fn, moments) {
-        var res, i;
-        if (moments.length === 1 && isArray(moments[0])) {
-            moments = moments[0];
-        }
-        if (!moments.length) {
-            return createLocal();
-        }
-        res = moments[0];
-        for (i = 1; i < moments.length; ++i) {
-            if (!moments[i].isValid() || moments[i][fn](res)) {
-                res = moments[i];
-            }
-        }
-        return res;
-    }
-    function min() {
-        var args = [].slice.call(arguments, 0);
-        return pickBy("isBefore", args);
-    }
-    function max() {
-        var args = [].slice.call(arguments, 0);
-        return pickBy("isAfter", args);
-    }
-    var now = function() {
-        return Date.now ? Date.now() : +new Date();
-    };
-    var ordering = [ "year", "quarter", "month", "week", "day", "hour", "minute", "second", "millisecond" ];
-    function isDurationValid(m) {
-        var key, unitHasDecimal = false, i;
-        for (key in m) {
-            if (hasOwnProp(m, key) && !(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {
-                return false;
-            }
-        }
-        for (i = 0; i < ordering.length; ++i) {
-            if (m[ordering[i]]) {
-                if (unitHasDecimal) {
-                    return false;
-                }
-                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
-                    unitHasDecimal = true;
-                }
-            }
-        }
-        return true;
-    }
-    function isValid$1() {
-        return this._isValid;
-    }
-    function createInvalid$1() {
-        return createDuration(NaN);
-    }
-    function Duration(duration) {
-        var normalizedInput = normalizeObjectUnits(duration), years = normalizedInput.year || 0, quarters = normalizedInput.quarter || 0, months = normalizedInput.month || 0, weeks = normalizedInput.week || normalizedInput.isoWeek || 0, days = normalizedInput.day || 0, hours = normalizedInput.hour || 0, minutes = normalizedInput.minute || 0, seconds = normalizedInput.second || 0, milliseconds = normalizedInput.millisecond || 0;
-        this._isValid = isDurationValid(normalizedInput);
-        this._milliseconds = +milliseconds + seconds * 1e3 + minutes * 6e4 + hours * 1e3 * 60 * 60;
-        this._days = +days + weeks * 7;
-        this._months = +months + quarters * 3 + years * 12;
-        this._data = {};
-        this._locale = getLocale();
-        this._bubble();
-    }
-    function isDuration(obj) {
-        return obj instanceof Duration;
-    }
-    function absRound(number) {
-        if (number < 0) {
-            return Math.round(-1 * number) * -1;
-        } else {
-            return Math.round(number);
-        }
-    }
-    function compareArrays(array1, array2, dontConvert) {
-        var len = Math.min(array1.length, array2.length), lengthDiff = Math.abs(array1.length - array2.length), diffs = 0, i;
-        for (i = 0; i < len; i++) {
-            if (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) {
-                diffs++;
-            }
-        }
-        return diffs + lengthDiff;
-    }
-    function offset(token, separator) {
-        addFormatToken(token, 0, 0, function() {
-            var offset = this.utcOffset(), sign = "+";
-            if (offset < 0) {
-                offset = -offset;
-                sign = "-";
-            }
-            return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~offset % 60, 2);
-        });
-    }
-    offset("Z", ":");
-    offset("ZZ", "");
-    addRegexToken("Z", matchShortOffset);
-    addRegexToken("ZZ", matchShortOffset);
-    addParseToken([ "Z", "ZZ" ], function(input, array, config) {
-        config._useUTC = true;
-        config._tzm = offsetFromString(matchShortOffset, input);
-    });
-    var chunkOffset = /([\+\-]|\d\d)/gi;
-    function offsetFromString(matcher, string) {
-        var matches = (string || "").match(matcher), chunk, parts, minutes;
-        if (matches === null) {
-            return null;
-        }
-        chunk = matches[matches.length - 1] || [];
-        parts = (chunk + "").match(chunkOffset) || [ "-", 0, 0 ];
-        minutes = +(parts[1] * 60) + toInt(parts[2]);
-        return minutes === 0 ? 0 : parts[0] === "+" ? minutes : -minutes;
-    }
-    function cloneWithOffset(input, model) {
-        var res, diff;
-        if (model._isUTC) {
-            res = model.clone();
-            diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();
-            res._d.setTime(res._d.valueOf() + diff);
-            hooks.updateOffset(res, false);
-            return res;
-        } else {
-            return createLocal(input).local();
-        }
-    }
-    function getDateOffset(m) {
-        return -Math.round(m._d.getTimezoneOffset());
-    }
-    hooks.updateOffset = function() {};
-    function getSetOffset(input, keepLocalTime, keepMinutes) {
-        var offset = this._offset || 0, localAdjust;
-        if (!this.isValid()) {
-            return input != null ? this : NaN;
-        }
-        if (input != null) {
-            if (typeof input === "string") {
-                input = offsetFromString(matchShortOffset, input);
-                if (input === null) {
-                    return this;
-                }
-            } else if (Math.abs(input) < 16 && !keepMinutes) {
-                input = input * 60;
-            }
-            if (!this._isUTC && keepLocalTime) {
-                localAdjust = getDateOffset(this);
-            }
-            this._offset = input;
-            this._isUTC = true;
-            if (localAdjust != null) {
-                this.add(localAdjust, "m");
-            }
-            if (offset !== input) {
-                if (!keepLocalTime || this._changeInProgress) {
-                    addSubtract(this, createDuration(input - offset, "m"), 1, false);
-                } else if (!this._changeInProgress) {
-                    this._changeInProgress = true;
-                    hooks.updateOffset(this, true);
-                    this._changeInProgress = null;
-                }
-            }
-            return this;
-        } else {
-            return this._isUTC ? offset : getDateOffset(this);
-        }
-    }
-    function getSetZone(input, keepLocalTime) {
-        if (input != null) {
-            if (typeof input !== "string") {
-                input = -input;
-            }
-            this.utcOffset(input, keepLocalTime);
-            return this;
-        } else {
-            return -this.utcOffset();
-        }
-    }
-    function setOffsetToUTC(keepLocalTime) {
-        return this.utcOffset(0, keepLocalTime);
-    }
-    function setOffsetToLocal(keepLocalTime) {
-        if (this._isUTC) {
-            this.utcOffset(0, keepLocalTime);
-            this._isUTC = false;
-            if (keepLocalTime) {
-                this.subtract(getDateOffset(this), "m");
-            }
-        }
-        return this;
-    }
-    function setOffsetToParsedOffset() {
-        if (this._tzm != null) {
-            this.utcOffset(this._tzm, false, true);
-        } else if (typeof this._i === "string") {
-            var tZone = offsetFromString(matchOffset, this._i);
-            if (tZone != null) {
-                this.utcOffset(tZone);
-            } else {
-                this.utcOffset(0, true);
-            }
-        }
-        return this;
-    }
-    function hasAlignedHourOffset(input) {
-        if (!this.isValid()) {
-            return false;
-        }
-        input = input ? createLocal(input).utcOffset() : 0;
-        return (this.utcOffset() - input) % 60 === 0;
-    }
-    function isDaylightSavingTime() {
-        return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();
-    }
-    function isDaylightSavingTimeShifted() {
-        if (!isUndefined(this._isDSTShifted)) {
-            return this._isDSTShifted;
-        }
-        var c = {}, other;
-        copyConfig(c, this);
-        c = prepareConfig(c);
-        if (c._a) {
-            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
-            this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0;
-        } else {
-            this._isDSTShifted = false;
-        }
-        return this._isDSTShifted;
-    }
-    function isLocal() {
-        return this.isValid() ? !this._isUTC : false;
-    }
-    function isUtcOffset() {
-        return this.isValid() ? this._isUTC : false;
-    }
-    function isUtc() {
-        return this.isValid() ? this._isUTC && this._offset === 0 : false;
-    }
-    var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/, isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
-    function createDuration(input, key) {
-        var duration = input, match = null, sign, ret, diffRes;
-        if (isDuration(input)) {
-            duration = {
-                ms: input._milliseconds,
-                d: input._days,
-                M: input._months
-            };
-        } else if (isNumber(input) || !isNaN(+input)) {
-            duration = {};
-            if (key) {
-                duration[key] = +input;
-            } else {
-                duration.milliseconds = +input;
-            }
-        } else if (match = aspNetRegex.exec(input)) {
-            sign = match[1] === "-" ? -1 : 1;
-            duration = {
-                y: 0,
-                d: toInt(match[DATE]) * sign,
-                h: toInt(match[HOUR]) * sign,
-                m: toInt(match[MINUTE]) * sign,
-                s: toInt(match[SECOND]) * sign,
-                ms: toInt(absRound(match[MILLISECOND] * 1e3)) * sign
-            };
-        } else if (match = isoRegex.exec(input)) {
-            sign = match[1] === "-" ? -1 : 1;
-            duration = {
-                y: parseIso(match[2], sign),
-                M: parseIso(match[3], sign),
-                w: parseIso(match[4], sign),
-                d: parseIso(match[5], sign),
-                h: parseIso(match[6], sign),
-                m: parseIso(match[7], sign),
-                s: parseIso(match[8], sign)
-            };
-        } else if (duration == null) {
-            duration = {};
-        } else if (typeof duration === "object" && ("from" in duration || "to" in duration)) {
-            diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));
-            duration = {};
-            duration.ms = diffRes.milliseconds;
-            duration.M = diffRes.months;
-        }
-        ret = new Duration(duration);
-        if (isDuration(input) && hasOwnProp(input, "_locale")) {
-            ret._locale = input._locale;
-        }
-        if (isDuration(input) && hasOwnProp(input, "_isValid")) {
-            ret._isValid = input._isValid;
-        }
-        return ret;
-    }
-    createDuration.fn = Duration.prototype;
-    createDuration.invalid = createInvalid$1;
-    function parseIso(inp, sign) {
-        var res = inp && parseFloat(inp.replace(",", "."));
-        return (isNaN(res) ? 0 : res) * sign;
-    }
-    function positiveMomentsDifference(base, other) {
-        var res = {};
-        res.months = other.month() - base.month() + (other.year() - base.year()) * 12;
-        if (base.clone().add(res.months, "M").isAfter(other)) {
-            --res.months;
-        }
-        res.milliseconds = +other - +base.clone().add(res.months, "M");
-        return res;
-    }
-    function momentsDifference(base, other) {
-        var res;
-        if (!(base.isValid() && other.isValid())) {
-            return {
-                milliseconds: 0,
-                months: 0
-            };
-        }
-        other = cloneWithOffset(other, base);
-        if (base.isBefore(other)) {
-            res = positiveMomentsDifference(base, other);
-        } else {
-            res = positiveMomentsDifference(other, base);
-            res.milliseconds = -res.milliseconds;
-            res.months = -res.months;
-        }
-        return res;
-    }
-    function createAdder(direction, name) {
-        return function(val, period) {
-            var dur, tmp;
-            if (period !== null && !isNaN(+period)) {
-                deprecateSimple(name, "moment()." + name + "(period, number) is deprecated. Please use moment()." + name + "(number, period). " + "See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.");
-                tmp = val;
-                val = period;
-                period = tmp;
-            }
-            dur = createDuration(val, period);
-            addSubtract(this, dur, direction);
-            return this;
-        };
-    }
-    function addSubtract(mom, duration, isAdding, updateOffset) {
-        var milliseconds = duration._milliseconds, days = absRound(duration._days), months = absRound(duration._months);
-        if (!mom.isValid()) {
-            return;
-        }
-        updateOffset = updateOffset == null ? true : updateOffset;
-        if (months) {
-            setMonth(mom, get(mom, "Month") + months * isAdding);
-        }
-        if (days) {
-            set$1(mom, "Date", get(mom, "Date") + days * isAdding);
-        }
-        if (milliseconds) {
-            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
-        }
-        if (updateOffset) {
-            hooks.updateOffset(mom, days || months);
-        }
-    }
-    var add = createAdder(1, "add"), subtract = createAdder(-1, "subtract");
-    function isString(input) {
-        return typeof input === "string" || input instanceof String;
-    }
-    function isMomentInput(input) {
-        return isMoment(input) || isDate(input) || isString(input) || isNumber(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === undefined;
-    }
-    function isMomentInputObject(input) {
-        var objectTest = isObject(input) && !isObjectEmpty(input), propertyTest = false, properties = [ "years", "year", "y", "months", "month", "M", "days", "day", "d", "dates", "date", "D", "hours", "hour", "h", "minutes", "minute", "m", "seconds", "second", "s", "milliseconds", "millisecond", "ms" ], i, property;
-        for (i = 0; i < properties.length; i += 1) {
-            property = properties[i];
-            propertyTest = propertyTest || hasOwnProp(input, property);
-        }
-        return objectTest && propertyTest;
-    }
-    function isNumberOrStringArray(input) {
-        var arrayTest = isArray(input), dataTypeTest = false;
-        if (arrayTest) {
-            dataTypeTest = input.filter(function(item) {
-                return !isNumber(item) && isString(input);
-            }).length === 0;
-        }
-        return arrayTest && dataTypeTest;
-    }
-    function isCalendarSpec(input) {
-        var objectTest = isObject(input) && !isObjectEmpty(input), propertyTest = false, properties = [ "sameDay", "nextDay", "lastDay", "nextWeek", "lastWeek", "sameElse" ], i, property;
-        for (i = 0; i < properties.length; i += 1) {
-            property = properties[i];
-            propertyTest = propertyTest || hasOwnProp(input, property);
-        }
-        return objectTest && propertyTest;
-    }
-    function getCalendarFormat(myMoment, now) {
-        var diff = myMoment.diff(now, "days", true);
-        return diff < -6 ? "sameElse" : diff < -1 ? "lastWeek" : diff < 0 ? "lastDay" : diff < 1 ? "sameDay" : diff < 2 ? "nextDay" : diff < 7 ? "nextWeek" : "sameElse";
-    }
-    function calendar$1(time, formats) {
-        if (arguments.length === 1) {
-            if (!arguments[0]) {
-                time = undefined;
-                formats = undefined;
-            } else if (isMomentInput(arguments[0])) {
-                time = arguments[0];
-                formats = undefined;
-            } else if (isCalendarSpec(arguments[0])) {
-                formats = arguments[0];
-                time = undefined;
-            }
-        }
-        var now = time || createLocal(), sod = cloneWithOffset(now, this).startOf("day"), format = hooks.calendarFormat(this, sod) || "sameElse", output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
-        return this.format(output || this.localeData().calendar(format, this, createLocal(now)));
-    }
-    function clone() {
-        return new Moment(this);
-    }
-    function isAfter(input, units) {
-        var localInput = isMoment(input) ? input : createLocal(input);
-        if (!(this.isValid() && localInput.isValid())) {
-            return false;
-        }
-        units = normalizeUnits(units) || "millisecond";
-        if (units === "millisecond") {
-            return this.valueOf() > localInput.valueOf();
-        } else {
-            return localInput.valueOf() < this.clone().startOf(units).valueOf();
-        }
-    }
-    function isBefore(input, units) {
-        var localInput = isMoment(input) ? input : createLocal(input);
-        if (!(this.isValid() && localInput.isValid())) {
-            return false;
-        }
-        units = normalizeUnits(units) || "millisecond";
-        if (units === "millisecond") {
-            return this.valueOf() < localInput.valueOf();
-        } else {
-            return this.clone().endOf(units).valueOf() < localInput.valueOf();
-        }
-    }
-    function isBetween(from, to, units, inclusivity) {
-        var localFrom = isMoment(from) ? from : createLocal(from), localTo = isMoment(to) ? to : createLocal(to);
-        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
-            return false;
-        }
-        inclusivity = inclusivity || "()";
-        return (inclusivity[0] === "(" ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ")" ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));
-    }
-    function isSame(input, units) {
-        var localInput = isMoment(input) ? input : createLocal(input), inputMs;
-        if (!(this.isValid() && localInput.isValid())) {
-            return false;
-        }
-        units = normalizeUnits(units) || "millisecond";
-        if (units === "millisecond") {
-            return this.valueOf() === localInput.valueOf();
-        } else {
-            inputMs = localInput.valueOf();
-            return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
-        }
-    }
-    function isSameOrAfter(input, units) {
-        return this.isSame(input, units) || this.isAfter(input, units);
-    }
-    function isSameOrBefore(input, units) {
-        return this.isSame(input, units) || this.isBefore(input, units);
-    }
-    function diff(input, units, asFloat) {
-        var that, zoneDelta, output;
-        if (!this.isValid()) {
-            return NaN;
-        }
-        that = cloneWithOffset(input, this);
-        if (!that.isValid()) {
-            return NaN;
-        }
-        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
-        units = normalizeUnits(units);
-        switch (units) {
-          case "year":
-            output = monthDiff(this, that) / 12;
-            break;
-
-          case "month":
-            output = monthDiff(this, that);
-            break;
-
-          case "quarter":
-            output = monthDiff(this, that) / 3;
-            break;
-
-          case "second":
-            output = (this - that) / 1e3;
-            break;
-
-          case "minute":
-            output = (this - that) / 6e4;
-            break;
-
-          case "hour":
-            output = (this - that) / 36e5;
-            break;
-
-          case "day":
-            output = (this - that - zoneDelta) / 864e5;
-            break;
-
-          case "week":
-            output = (this - that - zoneDelta) / 6048e5;
-            break;
-
-          default:
-            output = this - that;
-        }
-        return asFloat ? output : absFloor(output);
-    }
-    function monthDiff(a, b) {
-        if (a.date() < b.date()) {
-            return -monthDiff(b, a);
-        }
-        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()), anchor = a.clone().add(wholeMonthDiff, "months"), anchor2, adjust;
-        if (b - anchor < 0) {
-            anchor2 = a.clone().add(wholeMonthDiff - 1, "months");
-            adjust = (b - anchor) / (anchor - anchor2);
-        } else {
-            anchor2 = a.clone().add(wholeMonthDiff + 1, "months");
-            adjust = (b - anchor) / (anchor2 - anchor);
-        }
-        return -(wholeMonthDiff + adjust) || 0;
-    }
-    hooks.defaultFormat = "YYYY-MM-DDTHH:mm:ssZ";
-    hooks.defaultFormatUtc = "YYYY-MM-DDTHH:mm:ss[Z]";
-    function toString() {
-        return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ");
-    }
-    function toISOString(keepOffset) {
-        if (!this.isValid()) {
-            return null;
-        }
-        var utc = keepOffset !== true, m = utc ? this.clone().utc() : this;
-        if (m.year() < 0 || m.year() > 9999) {
-            return formatMoment(m, utc ? "YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYYYY-MM-DD[T]HH:mm:ss.SSSZ");
-        }
-        if (isFunction(Date.prototype.toISOString)) {
-            if (utc) {
-                return this.toDate().toISOString();
-            } else {
-                return new Date(this.valueOf() + this.utcOffset() * 60 * 1e3).toISOString().replace("Z", formatMoment(m, "Z"));
-            }
-        }
-        return formatMoment(m, utc ? "YYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYY-MM-DD[T]HH:mm:ss.SSSZ");
-    }
-    function inspect() {
-        if (!this.isValid()) {
-            return "moment.invalid(/* " + this._i + " */)";
-        }
-        var func = "moment", zone = "", prefix, year, datetime, suffix;
-        if (!this.isLocal()) {
-            func = this.utcOffset() === 0 ? "moment.utc" : "moment.parseZone";
-            zone = "Z";
-        }
-        prefix = "[" + func + '("]';
-        year = 0 <= this.year() && this.year() <= 9999 ? "YYYY" : "YYYYYY";
-        datetime = "-MM-DD[T]HH:mm:ss.SSS";
-        suffix = zone + '[")]';
-        return this.format(prefix + year + datetime + suffix);
-    }
-    function format(inputString) {
-        if (!inputString) {
-            inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
-        }
-        var output = formatMoment(this, inputString);
-        return this.localeData().postformat(output);
-    }
-    function from(time, withoutSuffix) {
-        if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {
-            return createDuration({
-                to: this,
-                from: time
-            }).locale(this.locale()).humanize(!withoutSuffix);
-        } else {
-            return this.localeData().invalidDate();
-        }
-    }
-    function fromNow(withoutSuffix) {
-        return this.from(createLocal(), withoutSuffix);
-    }
-    function to(time, withoutSuffix) {
-        if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {
-            return createDuration({
-                from: this,
-                to: time
-            }).locale(this.locale()).humanize(!withoutSuffix);
-        } else {
-            return this.localeData().invalidDate();
-        }
-    }
-    function toNow(withoutSuffix) {
-        return this.to(createLocal(), withoutSuffix);
-    }
-    function locale(key) {
-        var newLocaleData;
-        if (key === undefined) {
-            return this._locale._abbr;
-        } else {
-            newLocaleData = getLocale(key);
-            if (newLocaleData != null) {
-                this._locale = newLocaleData;
-            }
-            return this;
-        }
-    }
-    var lang = deprecate("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.", function(key) {
-        if (key === undefined) {
-            return this.localeData();
-        } else {
-            return this.locale(key);
-        }
-    });
-    function localeData() {
-        return this._locale;
-    }
-    var MS_PER_SECOND = 1e3, MS_PER_MINUTE = 60 * MS_PER_SECOND, MS_PER_HOUR = 60 * MS_PER_MINUTE, MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
-    function mod$1(dividend, divisor) {
-        return (dividend % divisor + divisor) % divisor;
-    }
-    function localStartOfDate(y, m, d) {
-        if (y < 100 && y >= 0) {
-            return new Date(y + 400, m, d) - MS_PER_400_YEARS;
-        } else {
-            return new Date(y, m, d).valueOf();
-        }
-    }
-    function utcStartOfDate(y, m, d) {
-        if (y < 100 && y >= 0) {
-            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
-        } else {
-            return Date.UTC(y, m, d);
-        }
-    }
-    function startOf(units) {
-        var time, startOfDate;
-        units = normalizeUnits(units);
-        if (units === undefined || units === "millisecond" || !this.isValid()) {
-            return this;
-        }
-        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
-        switch (units) {
-          case "year":
-            time = startOfDate(this.year(), 0, 1);
-            break;
-
-          case "quarter":
-            time = startOfDate(this.year(), this.month() - this.month() % 3, 1);
-            break;
-
-          case "month":
-            time = startOfDate(this.year(), this.month(), 1);
-            break;
-
-          case "week":
-            time = startOfDate(this.year(), this.month(), this.date() - this.weekday());
-            break;
-
-          case "isoWeek":
-            time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));
-            break;
-
-          case "day":
-          case "date":
-            time = startOfDate(this.year(), this.month(), this.date());
-            break;
-
-          case "hour":
-            time = this._d.valueOf();
-            time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);
-            break;
-
-          case "minute":
-            time = this._d.valueOf();
-            time -= mod$1(time, MS_PER_MINUTE);
-            break;
-
-          case "second":
-            time = this._d.valueOf();
-            time -= mod$1(time, MS_PER_SECOND);
-            break;
-        }
-        this._d.setTime(time);
-        hooks.updateOffset(this, true);
-        return this;
-    }
-    function endOf(units) {
-        var time, startOfDate;
-        units = normalizeUnits(units);
-        if (units === undefined || units === "millisecond" || !this.isValid()) {
-            return this;
-        }
-        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
-        switch (units) {
-          case "year":
-            time = startOfDate(this.year() + 1, 0, 1) - 1;
-            break;
-
-          case "quarter":
-            time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;
-            break;
-
-          case "month":
-            time = startOfDate(this.year(), this.month() + 1, 1) - 1;
-            break;
-
-          case "week":
-            time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;
-            break;
-
-          case "isoWeek":
-            time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;
-            break;
-
-          case "day":
-          case "date":
-            time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
-            break;
-
-          case "hour":
-            time = this._d.valueOf();
-            time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;
-            break;
-
-          case "minute":
-            time = this._d.valueOf();
-            time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
-            break;
-
-          case "second":
-            time = this._d.valueOf();
-            time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
-            break;
-        }
-        this._d.setTime(time);
-        hooks.updateOffset(this, true);
-        return this;
-    }
-    function valueOf() {
-        return this._d.valueOf() - (this._offset || 0) * 6e4;
-    }
-    function unix() {
-        return Math.floor(this.valueOf() / 1e3);
-    }
-    function toDate() {
-        return new Date(this.valueOf());
-    }
-    function toArray() {
-        var m = this;
-        return [ m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond() ];
-    }
-    function toObject() {
-        var m = this;
-        return {
-            years: m.year(),
-            months: m.month(),
-            date: m.date(),
-            hours: m.hours(),
-            minutes: m.minutes(),
-            seconds: m.seconds(),
-            milliseconds: m.milliseconds()
-        };
-    }
-    function toJSON() {
-        return this.isValid() ? this.toISOString() : null;
-    }
-    function isValid$2() {
-        return isValid(this);
-    }
-    function parsingFlags() {
-        return extend({}, getParsingFlags(this));
-    }
-    function invalidAt() {
-        return getParsingFlags(this).overflow;
-    }
-    function creationData() {
-        return {
-            input: this._i,
-            format: this._f,
-            locale: this._locale,
-            isUTC: this._isUTC,
-            strict: this._strict
-        };
-    }
-    addFormatToken("N", 0, 0, "eraAbbr");
-    addFormatToken("NN", 0, 0, "eraAbbr");
-    addFormatToken("NNN", 0, 0, "eraAbbr");
-    addFormatToken("NNNN", 0, 0, "eraName");
-    addFormatToken("NNNNN", 0, 0, "eraNarrow");
-    addFormatToken("y", [ "y", 1 ], "yo", "eraYear");
-    addFormatToken("y", [ "yy", 2 ], 0, "eraYear");
-    addFormatToken("y", [ "yyy", 3 ], 0, "eraYear");
-    addFormatToken("y", [ "yyyy", 4 ], 0, "eraYear");
-    addRegexToken("N", matchEraAbbr);
-    addRegexToken("NN", matchEraAbbr);
-    addRegexToken("NNN", matchEraAbbr);
-    addRegexToken("NNNN", matchEraName);
-    addRegexToken("NNNNN", matchEraNarrow);
-    addParseToken([ "N", "NN", "NNN", "NNNN", "NNNNN" ], function(input, array, config, token) {
-        var era = config._locale.erasParse(input, token, config._strict);
-        if (era) {
-            getParsingFlags(config).era = era;
-        } else {
-            getParsingFlags(config).invalidEra = input;
-        }
-    });
-    addRegexToken("y", matchUnsigned);
-    addRegexToken("yy", matchUnsigned);
-    addRegexToken("yyy", matchUnsigned);
-    addRegexToken("yyyy", matchUnsigned);
-    addRegexToken("yo", matchEraYearOrdinal);
-    addParseToken([ "y", "yy", "yyy", "yyyy" ], YEAR);
-    addParseToken([ "yo" ], function(input, array, config, token) {
-        var match;
-        if (config._locale._eraYearOrdinalRegex) {
-            match = input.match(config._locale._eraYearOrdinalRegex);
-        }
-        if (config._locale.eraYearOrdinalParse) {
-            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
-        } else {
-            array[YEAR] = parseInt(input, 10);
-        }
-    });
-    function localeEras(m, format) {
-        var i, l, date, eras = this._eras || getLocale("en")._eras;
-        for (i = 0, l = eras.length; i < l; ++i) {
-            switch (typeof eras[i].since) {
-              case "string":
-                date = hooks(eras[i].since).startOf("day");
-                eras[i].since = date.valueOf();
-                break;
-            }
-            switch (typeof eras[i].until) {
-              case "undefined":
-                eras[i].until = +Infinity;
-                break;
-
-              case "string":
-                date = hooks(eras[i].until).startOf("day").valueOf();
-                eras[i].until = date.valueOf();
-                break;
-            }
-        }
-        return eras;
-    }
-    function localeErasParse(eraName, format, strict) {
-        var i, l, eras = this.eras(), name, abbr, narrow;
-        eraName = eraName.toUpperCase();
-        for (i = 0, l = eras.length; i < l; ++i) {
-            name = eras[i].name.toUpperCase();
-            abbr = eras[i].abbr.toUpperCase();
-            narrow = eras[i].narrow.toUpperCase();
-            if (strict) {
-                switch (format) {
-                  case "N":
-                  case "NN":
-                  case "NNN":
-                    if (abbr === eraName) {
-                        return eras[i];
-                    }
-                    break;
-
-                  case "NNNN":
-                    if (name === eraName) {
-                        return eras[i];
-                    }
-                    break;
-
-                  case "NNNNN":
-                    if (narrow === eraName) {
-                        return eras[i];
-                    }
-                    break;
-                }
-            } else if ([ name, abbr, narrow ].indexOf(eraName) >= 0) {
-                return eras[i];
-            }
-        }
-    }
-    function localeErasConvertYear(era, year) {
-        var dir = era.since <= era.until ? +1 : -1;
-        if (year === undefined) {
-            return hooks(era.since).year();
-        } else {
-            return hooks(era.since).year() + (year - era.offset) * dir;
-        }
-    }
-    function getEraName() {
-        var i, l, val, eras = this.localeData().eras();
-        for (i = 0, l = eras.length; i < l; ++i) {
-            val = this.clone().startOf("day").valueOf();
-            if (eras[i].since <= val && val <= eras[i].until) {
-                return eras[i].name;
-            }
-            if (eras[i].until <= val && val <= eras[i].since) {
-                return eras[i].name;
-            }
-        }
-        return "";
-    }
-    function getEraNarrow() {
-        var i, l, val, eras = this.localeData().eras();
-        for (i = 0, l = eras.length; i < l; ++i) {
-            val = this.clone().startOf("day").valueOf();
-            if (eras[i].since <= val && val <= eras[i].until) {
-                return eras[i].narrow;
-            }
-            if (eras[i].until <= val && val <= eras[i].since) {
-                return eras[i].narrow;
-            }
-        }
-        return "";
-    }
-    function getEraAbbr() {
-        var i, l, val, eras = this.localeData().eras();
-        for (i = 0, l = eras.length; i < l; ++i) {
-            val = this.clone().startOf("day").valueOf();
-            if (eras[i].since <= val && val <= eras[i].until) {
-                return eras[i].abbr;
-            }
-            if (eras[i].until <= val && val <= eras[i].since) {
-                return eras[i].abbr;
-            }
-        }
-        return "";
-    }
-    function getEraYear() {
-        var i, l, dir, val, eras = this.localeData().eras();
-        for (i = 0, l = eras.length; i < l; ++i) {
-            dir = eras[i].since <= eras[i].until ? +1 : -1;
-            val = this.clone().startOf("day").valueOf();
-            if (eras[i].since <= val && val <= eras[i].until || eras[i].until <= val && val <= eras[i].since) {
-                return (this.year() - hooks(eras[i].since).year()) * dir + eras[i].offset;
-            }
-        }
-        return this.year();
-    }
-    function erasNameRegex(isStrict) {
-        if (!hasOwnProp(this, "_erasNameRegex")) {
-            computeErasParse.call(this);
-        }
-        return isStrict ? this._erasNameRegex : this._erasRegex;
-    }
-    function erasAbbrRegex(isStrict) {
-        if (!hasOwnProp(this, "_erasAbbrRegex")) {
-            computeErasParse.call(this);
-        }
-        return isStrict ? this._erasAbbrRegex : this._erasRegex;
-    }
-    function erasNarrowRegex(isStrict) {
-        if (!hasOwnProp(this, "_erasNarrowRegex")) {
-            computeErasParse.call(this);
-        }
-        return isStrict ? this._erasNarrowRegex : this._erasRegex;
-    }
-    function matchEraAbbr(isStrict, locale) {
-        return locale.erasAbbrRegex(isStrict);
-    }
-    function matchEraName(isStrict, locale) {
-        return locale.erasNameRegex(isStrict);
-    }
-    function matchEraNarrow(isStrict, locale) {
-        return locale.erasNarrowRegex(isStrict);
-    }
-    function matchEraYearOrdinal(isStrict, locale) {
-        return locale._eraYearOrdinalRegex || matchUnsigned;
-    }
-    function computeErasParse() {
-        var abbrPieces = [], namePieces = [], narrowPieces = [], mixedPieces = [], i, l, eras = this.eras();
-        for (i = 0, l = eras.length; i < l; ++i) {
-            namePieces.push(regexEscape(eras[i].name));
-            abbrPieces.push(regexEscape(eras[i].abbr));
-            narrowPieces.push(regexEscape(eras[i].narrow));
-            mixedPieces.push(regexEscape(eras[i].name));
-            mixedPieces.push(regexEscape(eras[i].abbr));
-            mixedPieces.push(regexEscape(eras[i].narrow));
-        }
-        this._erasRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i");
-        this._erasNameRegex = new RegExp("^(" + namePieces.join("|") + ")", "i");
-        this._erasAbbrRegex = new RegExp("^(" + abbrPieces.join("|") + ")", "i");
-        this._erasNarrowRegex = new RegExp("^(" + narrowPieces.join("|") + ")", "i");
-    }
-    addFormatToken(0, [ "gg", 2 ], 0, function() {
-        return this.weekYear() % 100;
-    });
-    addFormatToken(0, [ "GG", 2 ], 0, function() {
-        return this.isoWeekYear() % 100;
-    });
-    function addWeekYearFormatToken(token, getter) {
-        addFormatToken(0, [ token, token.length ], 0, getter);
-    }
-    addWeekYearFormatToken("gggg", "weekYear");
-    addWeekYearFormatToken("ggggg", "weekYear");
-    addWeekYearFormatToken("GGGG", "isoWeekYear");
-    addWeekYearFormatToken("GGGGG", "isoWeekYear");
-    addUnitAlias("weekYear", "gg");
-    addUnitAlias("isoWeekYear", "GG");
-    addUnitPriority("weekYear", 1);
-    addUnitPriority("isoWeekYear", 1);
-    addRegexToken("G", matchSigned);
-    addRegexToken("g", matchSigned);
-    addRegexToken("GG", match1to2, match2);
-    addRegexToken("gg", match1to2, match2);
-    addRegexToken("GGGG", match1to4, match4);
-    addRegexToken("gggg", match1to4, match4);
-    addRegexToken("GGGGG", match1to6, match6);
-    addRegexToken("ggggg", match1to6, match6);
-    addWeekParseToken([ "gggg", "ggggg", "GGGG", "GGGGG" ], function(input, week, config, token) {
-        week[token.substr(0, 2)] = toInt(input);
-    });
-    addWeekParseToken([ "gg", "GG" ], function(input, week, config, token) {
-        week[token] = hooks.parseTwoDigitYear(input);
-    });
-    function getSetWeekYear(input) {
-        return getSetWeekYearHelper.call(this, input, this.week(), this.weekday(), this.localeData()._week.dow, this.localeData()._week.doy);
-    }
-    function getSetISOWeekYear(input) {
-        return getSetWeekYearHelper.call(this, input, this.isoWeek(), this.isoWeekday(), 1, 4);
-    }
-    function getISOWeeksInYear() {
-        return weeksInYear(this.year(), 1, 4);
-    }
-    function getISOWeeksInISOWeekYear() {
-        return weeksInYear(this.isoWeekYear(), 1, 4);
-    }
-    function getWeeksInYear() {
-        var weekInfo = this.localeData()._week;
-        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
-    }
-    function getWeeksInWeekYear() {
-        var weekInfo = this.localeData()._week;
-        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
-    }
-    function getSetWeekYearHelper(input, week, weekday, dow, doy) {
-        var weeksTarget;
-        if (input == null) {
-            return weekOfYear(this, dow, doy).year;
-        } else {
-            weeksTarget = weeksInYear(input, dow, doy);
-            if (week > weeksTarget) {
-                week = weeksTarget;
-            }
-            return setWeekAll.call(this, input, week, weekday, dow, doy);
-        }
-    }
-    function setWeekAll(weekYear, week, weekday, dow, doy) {
-        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
-        this.year(date.getUTCFullYear());
-        this.month(date.getUTCMonth());
-        this.date(date.getUTCDate());
-        return this;
-    }
-    addFormatToken("Q", 0, "Qo", "quarter");
-    addUnitAlias("quarter", "Q");
-    addUnitPriority("quarter", 7);
-    addRegexToken("Q", match1);
-    addParseToken("Q", function(input, array) {
-        array[MONTH] = (toInt(input) - 1) * 3;
-    });
-    function getSetQuarter(input) {
-        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
-    }
-    addFormatToken("D", [ "DD", 2 ], "Do", "date");
-    addUnitAlias("date", "D");
-    addUnitPriority("date", 9);
-    addRegexToken("D", match1to2);
-    addRegexToken("DD", match1to2, match2);
-    addRegexToken("Do", function(isStrict, locale) {
-        return isStrict ? locale._dayOfMonthOrdinalParse || locale._ordinalParse : locale._dayOfMonthOrdinalParseLenient;
-    });
-    addParseToken([ "D", "DD" ], DATE);
-    addParseToken("Do", function(input, array) {
-        array[DATE] = toInt(input.match(match1to2)[0]);
-    });
-    var getSetDayOfMonth = makeGetSet("Date", true);
-    addFormatToken("DDD", [ "DDDD", 3 ], "DDDo", "dayOfYear");
-    addUnitAlias("dayOfYear", "DDD");
-    addUnitPriority("dayOfYear", 4);
-    addRegexToken("DDD", match1to3);
-    addRegexToken("DDDD", match3);
-    addParseToken([ "DDD", "DDDD" ], function(input, array, config) {
-        config._dayOfYear = toInt(input);
-    });
-    function getSetDayOfYear(input) {
-        var dayOfYear = Math.round((this.clone().startOf("day") - this.clone().startOf("year")) / 864e5) + 1;
-        return input == null ? dayOfYear : this.add(input - dayOfYear, "d");
-    }
-    addFormatToken("m", [ "mm", 2 ], 0, "minute");
-    addUnitAlias("minute", "m");
-    addUnitPriority("minute", 14);
-    addRegexToken("m", match1to2);
-    addRegexToken("mm", match1to2, match2);
-    addParseToken([ "m", "mm" ], MINUTE);
-    var getSetMinute = makeGetSet("Minutes", false);
-    addFormatToken("s", [ "ss", 2 ], 0, "second");
-    addUnitAlias("second", "s");
-    addUnitPriority("second", 15);
-    addRegexToken("s", match1to2);
-    addRegexToken("ss", match1to2, match2);
-    addParseToken([ "s", "ss" ], SECOND);
-    var getSetSecond = makeGetSet("Seconds", false);
-    addFormatToken("S", 0, 0, function() {
-        return ~~(this.millisecond() / 100);
-    });
-    addFormatToken(0, [ "SS", 2 ], 0, function() {
-        return ~~(this.millisecond() / 10);
-    });
-    addFormatToken(0, [ "SSS", 3 ], 0, "millisecond");
-    addFormatToken(0, [ "SSSS", 4 ], 0, function() {
-        return this.millisecond() * 10;
-    });
-    addFormatToken(0, [ "SSSSS", 5 ], 0, function() {
-        return this.millisecond() * 100;
-    });
-    addFormatToken(0, [ "SSSSSS", 6 ], 0, function() {
-        return this.millisecond() * 1e3;
-    });
-    addFormatToken(0, [ "SSSSSSS", 7 ], 0, function() {
-        return this.millisecond() * 1e4;
-    });
-    addFormatToken(0, [ "SSSSSSSS", 8 ], 0, function() {
-        return this.millisecond() * 1e5;
-    });
-    addFormatToken(0, [ "SSSSSSSSS", 9 ], 0, function() {
-        return this.millisecond() * 1e6;
-    });
-    addUnitAlias("millisecond", "ms");
-    addUnitPriority("millisecond", 16);
-    addRegexToken("S", match1to3, match1);
-    addRegexToken("SS", match1to3, match2);
-    addRegexToken("SSS", match1to3, match3);
-    var token, getSetMillisecond;
-    for (token = "SSSS"; token.length <= 9; token += "S") {
-        addRegexToken(token, matchUnsigned);
-    }
-    function parseMs(input, array) {
-        array[MILLISECOND] = toInt(("0." + input) * 1e3);
-    }
-    for (token = "S"; token.length <= 9; token += "S") {
-        addParseToken(token, parseMs);
-    }
-    getSetMillisecond = makeGetSet("Milliseconds", false);
-    addFormatToken("z", 0, 0, "zoneAbbr");
-    addFormatToken("zz", 0, 0, "zoneName");
-    function getZoneAbbr() {
-        return this._isUTC ? "UTC" : "";
-    }
-    function getZoneName() {
-        return this._isUTC ? "Coordinated Universal Time" : "";
-    }
-    var proto = Moment.prototype;
-    proto.add = add;
-    proto.calendar = calendar$1;
-    proto.clone = clone;
-    proto.diff = diff;
-    proto.endOf = endOf;
-    proto.format = format;
-    proto.from = from;
-    proto.fromNow = fromNow;
-    proto.to = to;
-    proto.toNow = toNow;
-    proto.get = stringGet;
-    proto.invalidAt = invalidAt;
-    proto.isAfter = isAfter;
-    proto.isBefore = isBefore;
-    proto.isBetween = isBetween;
-    proto.isSame = isSame;
-    proto.isSameOrAfter = isSameOrAfter;
-    proto.isSameOrBefore = isSameOrBefore;
-    proto.isValid = isValid$2;
-    proto.lang = lang;
-    proto.locale = locale;
-    proto.localeData = localeData;
-    proto.max = prototypeMax;
-    proto.min = prototypeMin;
-    proto.parsingFlags = parsingFlags;
-    proto.set = stringSet;
-    proto.startOf = startOf;
-    proto.subtract = subtract;
-    proto.toArray = toArray;
-    proto.toObject = toObject;
-    proto.toDate = toDate;
-    proto.toISOString = toISOString;
-    proto.inspect = inspect;
-    if (typeof Symbol !== "undefined" && Symbol.for != null) {
-        proto[Symbol.for("nodejs.util.inspect.custom")] = function() {
-            return "Moment<" + this.format() + ">";
-        };
-    }
-    proto.toJSON = toJSON;
-    proto.toString = toString;
-    proto.unix = unix;
-    proto.valueOf = valueOf;
-    proto.creationData = creationData;
-    proto.eraName = getEraName;
-    proto.eraNarrow = getEraNarrow;
-    proto.eraAbbr = getEraAbbr;
-    proto.eraYear = getEraYear;
-    proto.year = getSetYear;
-    proto.isLeapYear = getIsLeapYear;
-    proto.weekYear = getSetWeekYear;
-    proto.isoWeekYear = getSetISOWeekYear;
-    proto.quarter = proto.quarters = getSetQuarter;
-    proto.month = getSetMonth;
-    proto.daysInMonth = getDaysInMonth;
-    proto.week = proto.weeks = getSetWeek;
-    proto.isoWeek = proto.isoWeeks = getSetISOWeek;
-    proto.weeksInYear = getWeeksInYear;
-    proto.weeksInWeekYear = getWeeksInWeekYear;
-    proto.isoWeeksInYear = getISOWeeksInYear;
-    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
-    proto.date = getSetDayOfMonth;
-    proto.day = proto.days = getSetDayOfWeek;
-    proto.weekday = getSetLocaleDayOfWeek;
-    proto.isoWeekday = getSetISODayOfWeek;
-    proto.dayOfYear = getSetDayOfYear;
-    proto.hour = proto.hours = getSetHour;
-    proto.minute = proto.minutes = getSetMinute;
-    proto.second = proto.seconds = getSetSecond;
-    proto.millisecond = proto.milliseconds = getSetMillisecond;
-    proto.utcOffset = getSetOffset;
-    proto.utc = setOffsetToUTC;
-    proto.local = setOffsetToLocal;
-    proto.parseZone = setOffsetToParsedOffset;
-    proto.hasAlignedHourOffset = hasAlignedHourOffset;
-    proto.isDST = isDaylightSavingTime;
-    proto.isLocal = isLocal;
-    proto.isUtcOffset = isUtcOffset;
-    proto.isUtc = isUtc;
-    proto.isUTC = isUtc;
-    proto.zoneAbbr = getZoneAbbr;
-    proto.zoneName = getZoneName;
-    proto.dates = deprecate("dates accessor is deprecated. Use date instead.", getSetDayOfMonth);
-    proto.months = deprecate("months accessor is deprecated. Use month instead", getSetMonth);
-    proto.years = deprecate("years accessor is deprecated. Use year instead", getSetYear);
-    proto.zone = deprecate("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/", getSetZone);
-    proto.isDSTShifted = deprecate("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information", isDaylightSavingTimeShifted);
-    function createUnix(input) {
-        return createLocal(input * 1e3);
-    }
-    function createInZone() {
-        return createLocal.apply(null, arguments).parseZone();
-    }
-    function preParsePostFormat(string) {
-        return string;
-    }
-    var proto$1 = Locale.prototype;
-    proto$1.calendar = calendar;
-    proto$1.longDateFormat = longDateFormat;
-    proto$1.invalidDate = invalidDate;
-    proto$1.ordinal = ordinal;
-    proto$1.preparse = preParsePostFormat;
-    proto$1.postformat = preParsePostFormat;
-    proto$1.relativeTime = relativeTime;
-    proto$1.pastFuture = pastFuture;
-    proto$1.set = set;
-    proto$1.eras = localeEras;
-    proto$1.erasParse = localeErasParse;
-    proto$1.erasConvertYear = localeErasConvertYear;
-    proto$1.erasAbbrRegex = erasAbbrRegex;
-    proto$1.erasNameRegex = erasNameRegex;
-    proto$1.erasNarrowRegex = erasNarrowRegex;
-    proto$1.months = localeMonths;
-    proto$1.monthsShort = localeMonthsShort;
-    proto$1.monthsParse = localeMonthsParse;
-    proto$1.monthsRegex = monthsRegex;
-    proto$1.monthsShortRegex = monthsShortRegex;
-    proto$1.week = localeWeek;
-    proto$1.firstDayOfYear = localeFirstDayOfYear;
-    proto$1.firstDayOfWeek = localeFirstDayOfWeek;
-    proto$1.weekdays = localeWeekdays;
-    proto$1.weekdaysMin = localeWeekdaysMin;
-    proto$1.weekdaysShort = localeWeekdaysShort;
-    proto$1.weekdaysParse = localeWeekdaysParse;
-    proto$1.weekdaysRegex = weekdaysRegex;
-    proto$1.weekdaysShortRegex = weekdaysShortRegex;
-    proto$1.weekdaysMinRegex = weekdaysMinRegex;
-    proto$1.isPM = localeIsPM;
-    proto$1.meridiem = localeMeridiem;
-    function get$1(format, index, field, setter) {
-        var locale = getLocale(), utc = createUTC().set(setter, index);
-        return locale[field](utc, format);
-    }
-    function listMonthsImpl(format, index, field) {
-        if (isNumber(format)) {
-            index = format;
-            format = undefined;
-        }
-        format = format || "";
-        if (index != null) {
-            return get$1(format, index, field, "month");
-        }
-        var i, out = [];
-        for (i = 0; i < 12; i++) {
-            out[i] = get$1(format, i, field, "month");
-        }
-        return out;
-    }
-    function listWeekdaysImpl(localeSorted, format, index, field) {
-        if (typeof localeSorted === "boolean") {
-            if (isNumber(format)) {
-                index = format;
-                format = undefined;
-            }
-            format = format || "";
-        } else {
-            format = localeSorted;
-            index = format;
-            localeSorted = false;
-            if (isNumber(format)) {
-                index = format;
-                format = undefined;
-            }
-            format = format || "";
-        }
-        var locale = getLocale(), shift = localeSorted ? locale._week.dow : 0, i, out = [];
-        if (index != null) {
-            return get$1(format, (index + shift) % 7, field, "day");
-        }
-        for (i = 0; i < 7; i++) {
-            out[i] = get$1(format, (i + shift) % 7, field, "day");
-        }
-        return out;
-    }
-    function listMonths(format, index) {
-        return listMonthsImpl(format, index, "months");
-    }
-    function listMonthsShort(format, index) {
-        return listMonthsImpl(format, index, "monthsShort");
-    }
-    function listWeekdays(localeSorted, format, index) {
-        return listWeekdaysImpl(localeSorted, format, index, "weekdays");
-    }
-    function listWeekdaysShort(localeSorted, format, index) {
-        return listWeekdaysImpl(localeSorted, format, index, "weekdaysShort");
-    }
-    function listWeekdaysMin(localeSorted, format, index) {
-        return listWeekdaysImpl(localeSorted, format, index, "weekdaysMin");
-    }
-    getSetGlobalLocale("en", {
-        eras: [ {
-            since: "0001-01-01",
-            until: +Infinity,
-            offset: 1,
-            name: "Anno Domini",
-            narrow: "AD",
-            abbr: "AD"
-        }, {
-            since: "0000-12-31",
-            until: -Infinity,
-            offset: 1,
-            name: "Before Christ",
-            narrow: "BC",
-            abbr: "BC"
-        } ],
-        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
-        ordinal: function(number) {
-            var b = number % 10, output = toInt(number % 100 / 10) === 1 ? "th" : b === 1 ? "st" : b === 2 ? "nd" : b === 3 ? "rd" : "th";
-            return number + output;
-        }
-    });
-    hooks.lang = deprecate("moment.lang is deprecated. Use moment.locale instead.", getSetGlobalLocale);
-    hooks.langData = deprecate("moment.langData is deprecated. Use moment.localeData instead.", getLocale);
-    var mathAbs = Math.abs;
-    function abs() {
-        var data = this._data;
-        this._milliseconds = mathAbs(this._milliseconds);
-        this._days = mathAbs(this._days);
-        this._months = mathAbs(this._months);
-        data.milliseconds = mathAbs(data.milliseconds);
-        data.seconds = mathAbs(data.seconds);
-        data.minutes = mathAbs(data.minutes);
-        data.hours = mathAbs(data.hours);
-        data.months = mathAbs(data.months);
-        data.years = mathAbs(data.years);
-        return this;
-    }
-    function addSubtract$1(duration, input, value, direction) {
-        var other = createDuration(input, value);
-        duration._milliseconds += direction * other._milliseconds;
-        duration._days += direction * other._days;
-        duration._months += direction * other._months;
-        return duration._bubble();
-    }
-    function add$1(input, value) {
-        return addSubtract$1(this, input, value, 1);
-    }
-    function subtract$1(input, value) {
-        return addSubtract$1(this, input, value, -1);
-    }
-    function absCeil(number) {
-        if (number < 0) {
-            return Math.floor(number);
-        } else {
-            return Math.ceil(number);
-        }
-    }
-    function bubble() {
-        var milliseconds = this._milliseconds, days = this._days, months = this._months, data = this._data, seconds, minutes, hours, years, monthsFromDays;
-        if (!(milliseconds >= 0 && days >= 0 && months >= 0 || milliseconds <= 0 && days <= 0 && months <= 0)) {
-            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
-            days = 0;
-            months = 0;
-        }
-        data.milliseconds = milliseconds % 1e3;
-        seconds = absFloor(milliseconds / 1e3);
-        data.seconds = seconds % 60;
-        minutes = absFloor(seconds / 60);
-        data.minutes = minutes % 60;
-        hours = absFloor(minutes / 60);
-        data.hours = hours % 24;
-        days += absFloor(hours / 24);
-        monthsFromDays = absFloor(daysToMonths(days));
-        months += monthsFromDays;
-        days -= absCeil(monthsToDays(monthsFromDays));
-        years = absFloor(months / 12);
-        months %= 12;
-        data.days = days;
-        data.months = months;
-        data.years = years;
-        return this;
-    }
-    function daysToMonths(days) {
-        return days * 4800 / 146097;
-    }
-    function monthsToDays(months) {
-        return months * 146097 / 4800;
-    }
-    function as(units) {
-        if (!this.isValid()) {
-            return NaN;
-        }
-        var days, months, milliseconds = this._milliseconds;
-        units = normalizeUnits(units);
-        if (units === "month" || units === "quarter" || units === "year") {
-            days = this._days + milliseconds / 864e5;
-            months = this._months + daysToMonths(days);
-            switch (units) {
-              case "month":
-                return months;
-
-              case "quarter":
-                return months / 3;
-
-              case "year":
-                return months / 12;
-            }
-        } else {
-            days = this._days + Math.round(monthsToDays(this._months));
-            switch (units) {
-              case "week":
-                return days / 7 + milliseconds / 6048e5;
-
-              case "day":
-                return days + milliseconds / 864e5;
-
-              case "hour":
-                return days * 24 + milliseconds / 36e5;
-
-              case "minute":
-                return days * 1440 + milliseconds / 6e4;
-
-              case "second":
-                return days * 86400 + milliseconds / 1e3;
-
-              case "millisecond":
-                return Math.floor(days * 864e5) + milliseconds;
-
-              default:
-                throw new Error("Unknown unit " + units);
-            }
-        }
-    }
-    function valueOf$1() {
-        if (!this.isValid()) {
-            return NaN;
-        }
-        return this._milliseconds + this._days * 864e5 + this._months % 12 * 2592e6 + toInt(this._months / 12) * 31536e6;
-    }
-    function makeAs(alias) {
-        return function() {
-            return this.as(alias);
-        };
-    }
-    var asMilliseconds = makeAs("ms"), asSeconds = makeAs("s"), asMinutes = makeAs("m"), asHours = makeAs("h"), asDays = makeAs("d"), asWeeks = makeAs("w"), asMonths = makeAs("M"), asQuarters = makeAs("Q"), asYears = makeAs("y");
-    function clone$1() {
-        return createDuration(this);
-    }
-    function get$2(units) {
-        units = normalizeUnits(units);
-        return this.isValid() ? this[units + "s"]() : NaN;
-    }
-    function makeGetter(name) {
-        return function() {
-            return this.isValid() ? this._data[name] : NaN;
-        };
-    }
-    var milliseconds = makeGetter("milliseconds"), seconds = makeGetter("seconds"), minutes = makeGetter("minutes"), hours = makeGetter("hours"), days = makeGetter("days"), months = makeGetter("months"), years = makeGetter("years");
-    function weeks() {
-        return absFloor(this.days() / 7);
-    }
-    var round = Math.round, thresholds = {
-        ss: 44,
-        s: 45,
-        m: 45,
-        h: 22,
-        d: 26,
-        w: null,
-        M: 11
-    };
-    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
-        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
-    }
-    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {
-        var duration = createDuration(posNegDuration).abs(), seconds = round(duration.as("s")), minutes = round(duration.as("m")), hours = round(duration.as("h")), days = round(duration.as("d")), months = round(duration.as("M")), weeks = round(duration.as("w")), years = round(duration.as("y")), a = seconds <= thresholds.ss && [ "s", seconds ] || seconds < thresholds.s && [ "ss", seconds ] || minutes <= 1 && [ "m" ] || minutes < thresholds.m && [ "mm", minutes ] || hours <= 1 && [ "h" ] || hours < thresholds.h && [ "hh", hours ] || days <= 1 && [ "d" ] || days < thresholds.d && [ "dd", days ];
-        if (thresholds.w != null) {
-            a = a || weeks <= 1 && [ "w" ] || weeks < thresholds.w && [ "ww", weeks ];
-        }
-        a = a || months <= 1 && [ "M" ] || months < thresholds.M && [ "MM", months ] || years <= 1 && [ "y" ] || [ "yy", years ];
-        a[2] = withoutSuffix;
-        a[3] = +posNegDuration > 0;
-        a[4] = locale;
-        return substituteTimeAgo.apply(null, a);
-    }
-    function getSetRelativeTimeRounding(roundingFunction) {
-        if (roundingFunction === undefined) {
-            return round;
-        }
-        if (typeof roundingFunction === "function") {
-            round = roundingFunction;
-            return true;
-        }
-        return false;
-    }
-    function getSetRelativeTimeThreshold(threshold, limit) {
-        if (thresholds[threshold] === undefined) {
-            return false;
-        }
-        if (limit === undefined) {
-            return thresholds[threshold];
-        }
-        thresholds[threshold] = limit;
-        if (threshold === "s") {
-            thresholds.ss = limit - 1;
-        }
-        return true;
-    }
-    function humanize(argWithSuffix, argThresholds) {
-        if (!this.isValid()) {
-            return this.localeData().invalidDate();
-        }
-        var withSuffix = false, th = thresholds, locale, output;
-        if (typeof argWithSuffix === "object") {
-            argThresholds = argWithSuffix;
-            argWithSuffix = false;
-        }
-        if (typeof argWithSuffix === "boolean") {
-            withSuffix = argWithSuffix;
-        }
-        if (typeof argThresholds === "object") {
-            th = Object.assign({}, thresholds, argThresholds);
-            if (argThresholds.s != null && argThresholds.ss == null) {
-                th.ss = argThresholds.s - 1;
-            }
-        }
-        locale = this.localeData();
-        output = relativeTime$1(this, !withSuffix, th, locale);
-        if (withSuffix) {
-            output = locale.pastFuture(+this, output);
-        }
-        return locale.postformat(output);
-    }
-    var abs$1 = Math.abs;
-    function sign(x) {
-        return (x > 0) - (x < 0) || +x;
-    }
-    function toISOString$1() {
-        if (!this.isValid()) {
-            return this.localeData().invalidDate();
-        }
-        var seconds = abs$1(this._milliseconds) / 1e3, days = abs$1(this._days), months = abs$1(this._months), minutes, hours, years, s, total = this.asSeconds(), totalSign, ymSign, daysSign, hmsSign;
-        if (!total) {
-            return "P0D";
-        }
-        minutes = absFloor(seconds / 60);
-        hours = absFloor(minutes / 60);
-        seconds %= 60;
-        minutes %= 60;
-        years = absFloor(months / 12);
-        months %= 12;
-        s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, "") : "";
-        totalSign = total < 0 ? "-" : "";
-        ymSign = sign(this._months) !== sign(total) ? "-" : "";
-        daysSign = sign(this._days) !== sign(total) ? "-" : "";
-        hmsSign = sign(this._milliseconds) !== sign(total) ? "-" : "";
-        return totalSign + "P" + (years ? ymSign + years + "Y" : "") + (months ? ymSign + months + "M" : "") + (days ? daysSign + days + "D" : "") + (hours || minutes || seconds ? "T" : "") + (hours ? hmsSign + hours + "H" : "") + (minutes ? hmsSign + minutes + "M" : "") + (seconds ? hmsSign + s + "S" : "");
-    }
-    var proto$2 = Duration.prototype;
-    proto$2.isValid = isValid$1;
-    proto$2.abs = abs;
-    proto$2.add = add$1;
-    proto$2.subtract = subtract$1;
-    proto$2.as = as;
-    proto$2.asMilliseconds = asMilliseconds;
-    proto$2.asSeconds = asSeconds;
-    proto$2.asMinutes = asMinutes;
-    proto$2.asHours = asHours;
-    proto$2.asDays = asDays;
-    proto$2.asWeeks = asWeeks;
-    proto$2.asMonths = asMonths;
-    proto$2.asQuarters = asQuarters;
-    proto$2.asYears = asYears;
-    proto$2.valueOf = valueOf$1;
-    proto$2._bubble = bubble;
-    proto$2.clone = clone$1;
-    proto$2.get = get$2;
-    proto$2.milliseconds = milliseconds;
-    proto$2.seconds = seconds;
-    proto$2.minutes = minutes;
-    proto$2.hours = hours;
-    proto$2.days = days;
-    proto$2.weeks = weeks;
-    proto$2.months = months;
-    proto$2.years = years;
-    proto$2.humanize = humanize;
-    proto$2.toISOString = toISOString$1;
-    proto$2.toString = toISOString$1;
-    proto$2.toJSON = toISOString$1;
-    proto$2.locale = locale;
-    proto$2.localeData = localeData;
-    proto$2.toIsoString = deprecate("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)", toISOString$1);
-    proto$2.lang = lang;
-    addFormatToken("X", 0, 0, "unix");
-    addFormatToken("x", 0, 0, "valueOf");
-    addRegexToken("x", matchSigned);
-    addRegexToken("X", matchTimestamp);
-    addParseToken("X", function(input, array, config) {
-        config._d = new Date(parseFloat(input) * 1e3);
-    });
-    addParseToken("x", function(input, array, config) {
-        config._d = new Date(toInt(input));
-    });
-    hooks.version = "2.29.1";
-    setHookCallback(createLocal);
-    hooks.fn = proto;
-    hooks.min = min;
-    hooks.max = max;
-    hooks.now = now;
-    hooks.utc = createUTC;
-    hooks.unix = createUnix;
-    hooks.months = listMonths;
-    hooks.isDate = isDate;
-    hooks.locale = getSetGlobalLocale;
-    hooks.invalid = createInvalid;
-    hooks.duration = createDuration;
-    hooks.isMoment = isMoment;
-    hooks.weekdays = listWeekdays;
-    hooks.parseZone = createInZone;
-    hooks.localeData = getLocale;
-    hooks.isDuration = isDuration;
-    hooks.monthsShort = listMonthsShort;
-    hooks.weekdaysMin = listWeekdaysMin;
-    hooks.defineLocale = defineLocale;
-    hooks.updateLocale = updateLocale;
-    hooks.locales = listLocales;
-    hooks.weekdaysShort = listWeekdaysShort;
-    hooks.normalizeUnits = normalizeUnits;
-    hooks.relativeTimeRounding = getSetRelativeTimeRounding;
-    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
-    hooks.calendarFormat = getCalendarFormat;
-    hooks.prototype = proto;
-    hooks.HTML5_FMT = {
-        DATETIME_LOCAL: "YYYY-MM-DDTHH:mm",
-        DATETIME_LOCAL_SECONDS: "YYYY-MM-DDTHH:mm:ss",
-        DATETIME_LOCAL_MS: "YYYY-MM-DDTHH:mm:ss.SSS",
-        DATE: "YYYY-MM-DD",
-        TIME: "HH:mm",
-        TIME_SECONDS: "HH:mm:ss",
-        TIME_MS: "HH:mm:ss.SSS",
-        WEEK: "GGGG-[W]WW",
-        MONTH: "YYYY-MM"
-    };
-    return hooks;
-});
\ No newline at end of file
diff --git a/www/min/doi.min.js b/www/min/doi.min.js
deleted file mode 100644
index 99d2726..0000000
--- a/www/min/doi.min.js
+++ /dev/null
@@ -1,1123 +0,0 @@
-function Author() {}
-
-Author.prototype.setFirstName = function(firstName) {
-    this.firstName = firstName;
-};
-
-Author.prototype.setFamilyName = function(familyName) {
-    this.familyName = familyName;
-};
-
-Author.prototype.setSingleName = function(singleName) {
-    this.singleName = singleName;
-};
-
-Author.prototype.getRawFamilyName = function() {
-    if (this.familyName) {
-        return this.familyName;
-    } else {
-        if (this.singleName) {
-            var findWordsRegExp = new RegExp(/(\S+)/g);
-            var wordTable = this.singleName.match(findWordsRegExp);
-            if (wordTable.length === 2) {
-                this.familyName = wordTable[1];
-                return this.familyName;
-            }
-            var familyRegExp = new RegExp(/\s([^a-z]+$)/);
-            var result = familyRegExp.exec(this.singleName);
-            if (result) {
-                this.familyName = result[1];
-            }
-            return this.familyName;
-        }
-    }
-};
-
-Author.prototype.getRawFirstName = function() {
-    if (this.firstName) {
-        return this.firstName;
-    } else {
-        if (this.singleName) {
-            var findWordsRegExp = new RegExp(/(\S+)/g);
-            var wordTable = this.singleName.match(findWordsRegExp);
-            if (wordTable.length === 2) {
-                this.firstName = wordTable[0];
-                return this.firstName;
-            }
-            var firstNameRegExp = new RegExp(/^(.[^A-Z]+)+\b/);
-            var result = firstNameRegExp.exec(this.singleName);
-            if (result) {
-                this.firstName = result[0];
-            }
-            return result;
-        }
-    }
-};
-
-Author.prototype.getTitleCaseFamilyName = function() {
-    if (this.familyName) {
-        allLowerCase = this.familyName.toLowerCase();
-        var findFirstLetter = new RegExp(/^./);
-        return allLowerCase.replace(findFirstLetter, function(foundCharacter) {
-            return foundCharacter.toUpperCase();
-        });
-    } else {
-        console.log("family name is undefined");
-        return null;
-    }
-};
-
-Author.prototype.getFirstNameInitials = function() {
-    var firstNameInitialsRegExp = new RegExp(/(\S+)/g);
-    if (this.firstName) {
-        return this.firstName.replace(firstNameInitialsRegExp, function(foundString) {
-            return foundString.charAt(0) + ".";
-        });
-    } else {
-        console.log("first name is undefined");
-        return null;
-    }
-};
-
-var BEAMLINEURL = [ {
-    name: "BM05",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.fr/UsersAndScience/Experiments/XNP/BM05"
-}, {
-    name: "BM29",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.eu/UsersAndScience/Experiments/MX/About_our_beamlines/BM29"
-}, {
-    name: "CM01",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.eu/home/UsersAndScience/Experiments/MX/About_our_beamlines/CM01.html"
-}, {
-    name: "ID01",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.eu/UsersAndScience/Experiments/XNP/ID01"
-}, {
-    name: "ID06",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.eu/home/UsersAndScience/Experiments/MEx/id06-large-volume-press.html"
-}, {
-    name: "ID11",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.fr/UsersAndScience/Experiments/StructMaterials/ID11"
-}, {
-    name: "ID16A",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.fr/UsersAndScience/Experiments/XNP/ID16A"
-}, {
-    name: "ID16B",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.fr/UsersAndScience/Experiments/XNP/ID16B"
-}, {
-    name: "ID17",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.fr/UsersAndScience/Experiments/CBS/ID17"
-}, {
-    name: "ID19",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.fr/home/UsersAndScience/Experiments/StructMaterials/ID19.html"
-}, {
-    name: "ID21",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.eu/UsersAndScience/Experiments/XNP/ID21"
-}, {
-    name: "ID22",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.eu/id22"
-}, {
-    name: "ID23-1",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.eu/UsersAndScience/Experiments/MX/About_our_beamlines/ID23-1"
-}, {
-    name: "ID23-2",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.eu/UsersAndScience/Experiments/MX/About_our_beamlines/ID23-2"
-}, {
-    name: "ID29",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.eu/home/UsersAndScience/Experiments/Beamlines/content/content/id29.html"
-}, {
-    name: "ID30A1",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.eu/MASSIF1"
-}, {
-    name: "ID30A3",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.eu/home/UsersAndScience/Experiments/MX/About_our_beamlines/id30a-3--massif-3.html"
-}, {
-    name: "ID30B",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.eu/id30b"
-}, {
-    name: "ID32",
-    startDate: "2000-01-01T00:00+00:00",
-    endDate: "2100-12-31T00:00+00:00",
-    url: "http://www.esrf.eu/ID32"
-} ];
-
-function Citation(doiData) {
-    function isBuildable() {
-        if (doiData && doiData.creators && doiData.creators.length !== 0 && doiData.title && doiData.publisher && doiData.doi) {
-            if (doiData.resourceType === CONSTANTS.ES_RESOURCE_TYPE && doiData.sessionDate) {
-                return true;
-            }
-            if (doiData.resourceType === CONSTANTS.DC_RESOURCE_TYPE && doiData.publiclyAccessibleYear) {
-                return true;
-            }
-        }
-        return false;
-    }
-    this.isBuildable = isBuildable();
-}
-
-Citation.prototype.getAuthorsForCitation = function(creator) {
-    if (this.isBuildable) {
-        var authorList = _.transform(creator, function(result, val, key, obj) {
-            if (!(obj instanceof Array)) {
-                val = obj;
-            }
-            var author = null;
-            if (val.givenName) {
-                author = new Author();
-                author.setFamilyName(val.familyName);
-                author.setFirstName(val.givenName);
-                result.push(author.getTitleCaseFamilyName() + " " + author.getFirstNameInitials());
-            } else {
-                author = new Author();
-                author.setSingleName(val.name);
-                if (!author.getRawFamilyName() || !author.getRawFirstName()) {
-                    result.push(val.name);
-                } else {
-                    result.push(author.getTitleCaseFamilyName() + " " + author.getFirstNameInitials());
-                }
-            }
-            if (!(obj instanceof Array)) {
-                return false;
-            }
-        }, []);
-        return _.join(authorList, ", ");
-    } else {
-        console.log("[CITATION GENERATION] Author list for the citation could not be generated.");
-        return "";
-    }
-};
-
-Citation.prototype.getDOIRegistrationYear = function(doiData) {
-    if (doiData.resourceType === CONSTANTS.ES_RESOURCE_TYPE) {
-        return moment(doiData.sessionDate).year();
-    }
-    if (doiData.resourceType === CONSTANTS.DC_RESOURCE_TYPE) {
-        return doiData.publiclyAccessibleYear;
-    }
-    console.log("[CITATION GENERATION] Could not get the year to generate the citation.");
-    return "";
-};
-
-var CONSTANTS = {
-    ES_RESOURCE_TYPE: "experimental session resource type",
-    DC_RESOURCE_TYPE: "dataset collection resource type"
-};
-
-function DOIController(view) {
-    var _this = this;
-    this.doiServer = "https://api.datacite.org/dois/";
-    this.icatPlusServer = "https://icatplus.esrf.fr/doi/";
-    this.contentNegociationServer = "https://data.crosscite.org/";
-    this.acceptedPrefix = [ "10.5072", "10.15151" ];
-    this.view = view;
-    this.experimentalReportController = new ExperimentalReportController();
-    this.experimentalReportController.onSuccess.attach(function(sender, data) {
-        _this.view.renderExperimentalReportData(data);
-    });
-    this.experimentalReportController.onError.attach(function(sender, data) {
-        console.log("Error when retrieving fileList from SMIS.");
-        _this.view.renderErrorForExperimentalReport();
-    });
-}
-
-DOIController.prototype.isValidDOIData = function(doiData) {
-    return true;
-};
-
-DOIController.prototype.render = function(doi, data) {
-    var _this = this;
-    if (!_this.isValidDOIData(data)) {
-        _this.view.renderError("Not Found", _this.origin);
-    } else {
-        var doiData = new DoiData();
-        var jsonExtractor = new JsonExtractor();
-        doiData.title = jsonExtractor.getTitle(data);
-        doiData.doi = jsonExtractor.getDOI(data);
-        doiData.dataciteLink = _this.doiServer + doi;
-        doiData.publisher = jsonExtractor.getPublisher(data);
-        doiData.creators = jsonExtractor.getCreators(data);
-        doiData.contributors = jsonExtractor.getContributors(data);
-        doiData.publiclyAccessibleYear = jsonExtractor.getPubliclyAccessibleYear(data);
-        doiData.abstract = jsonExtractor.getAbstract(data);
-        doiData.investigationId = jsonExtractor.getInvestigationId(data);
-        doiData.resourceType = jsonExtractor.getResourceType(data);
-        doiData.proposalType = jsonExtractor.getFieldFromSubject(data.subjects, "Proposal Type Description");
-        doiData.resourceTypeGeneral = jsonExtractor.getResourceTypeGeneral(data);
-        doiData.sessionDate = jsonExtractor.getSessionDate(data);
-        var proposalNames = jsonExtractor.getFieldFromSubject(data.subjects, "Proposal");
-        var beamlines = jsonExtractor.getFieldFromSubject(data.subjects, "Instrument");
-        _this.experimentalReportController.requestFilenameList(proposalNames[0]);
-        doiData.accessibility = doiData.getAccessibilityStatus(doiData.resourceType, doiData.sessionDate, doiData.publiclyAccessibleYear);
-        doiData.accessMessage = _this.view.setDataAccessMessage(doiData);
-        doiData.citation = _this.createCitation(doiData);
-        if (doiData.resourceType === CONSTANTS.ES_RESOURCE_TYPE) {
-            doiData.beamlineUrls = _this.getBeamlineUrl(beamlines, doiData.sessionDate, doiData.resourceType);
-            doiData.mintingYear = moment(doiData.sessionDate).year();
-        }
-        if (doiData.resourceType === CONSTANTS.DC_RESOURCE_TYPE) {
-            doiData.beamlineUrls = _this.getBeamlineUrl(beamlines, doiData.publiclyAccessibleYear, doiData.resourceType);
-            doiData.mintingYear = doiData.publiclyAccessibleYear;
-        }
-        doiData.mergedProposalBeamlines = jsonExtractor.getMergedProposalAndBeamline(proposalNames, beamlines, doiData.beamlineUrls);
-        _this.view.addCanonicalURLToHead("https://doi.esrf.fr/" + doiData.doi);
-        _this.view.renderDOIData(doiData);
-    }
-};
-
-DOIController.prototype.getData = function(doi) {
-    var _this = this;
-    this.view.setDOIInTopBanner(doi);
-    if (doi.toUpperCase() == "10.15151/ESRF-DC-142893590") {
-        this.render(doi, ESRF_DC_142893590);
-        return;
-    }
-    if (doi.toUpperCase() == "10.15151/ESRF-DC-142915526") {
-        this.render(doi, ESRF_DC_142915526);
-        return;
-    }
-    if (this.hasAcceptedPrefix(doi)) {
-        $.ajax({
-            type: "GET",
-            timeout: 15e3,
-            url: _this.icatPlusServer + doi + "/json-datacite",
-            beforeSend: function() {
-                try {
-                    $("logo").fadeIn().fadeOut().fadeIn().fadeOut().fadeIn().fadeOut();
-                } catch (e) {}
-                _this.view.setLoading("Retrieving data from Server");
-            },
-            complete: function() {
-                _this.view.setLoading(false);
-            }
-        }).done(function(data) {
-            if (data) {
-                _this.render(doi, data);
-            }
-        }).fail(function(jqXHR, textStatus, errorThrown) {
-            $.ajax({
-                headers: {
-                    Accept: "application/vnd.datacite.datacite+json"
-                },
-                type: "GET",
-                timeout: 15e3,
-                url: _this.doiServer + doi,
-                beforeSend: function() {
-                    _this.view.setLoading("Retrieving data from Server");
-                },
-                complete: function() {
-                    _this.view.setLoading(false);
-                }
-            }).done(function(data) {
-                if (data) {
-                    _this.render(doi, data);
-                }
-            }).fail(function(jqXHR, textStatus, errorThrown) {
-                _this.view.renderError(jqXHR, errorThrown, _this.origin);
-                _this.view.setLoading(false);
-            });
-        });
-        this.getDataForGoogleSearch(doi);
-    } else {
-        _this.view.renderError("Bad Prefix", _this.origin);
-    }
-};
-
-DOIController.prototype.getDataForGoogleSearch = function(doi) {
-    var _this = this;
-    if (doi) {
-        $.ajax({
-            headers: {
-                Accept: "application/vnd.schemaorg.ld+json"
-            },
-            type: "GET",
-            timeout: 15e3,
-            url: this.contentNegociationServer + doi,
-            success: function(data) {
-                if (data) {
-                    googleMetadataObject = new GoogleMetadataObject(data);
-                    googleMetadataObject.setDescription();
-                    googleMetadataObject.setLicense();
-                    googleMetadataObject.setPublisherLogo();
-                    _this.view.addDOIMetadataToHead(JSON.stringify(googleMetadataObject.getMetadata()));
-                } else {
-                    console.log("[GOOGLE SEARCH INDEXING] - No metadata recieved from datacite.");
-                }
-            },
-            error: function(error) {
-                console.log("[GOOGLE SEARCH INDEXING] - Failed getting metadata from datacite.");
-                console.log(error.responseJSON);
-            }
-        });
-    }
-};
-
-DOIController.prototype.hasAcceptedPrefix = function(doi) {
-    var prefix = doi.split("/")[0];
-    return _.findIndex(this.acceptedPrefix, function(o) {
-        return prefix == o;
-    }) != -1;
-};
-
-DOIController.prototype.displayMainContent = function(doi) {
-    var isDOIProvided = false;
-    if (this.origin === "welcome-page") {
-        dust.render("welcome_tpl", {}, function(err, out) {
-            $("#main").html(out);
-        });
-    }
-    if (this.origin === "index") {
-        this.getData(doi);
-    }
-};
-
-DOIController.prototype.setOrigin = function(origin) {
-    this.origin = origin;
-};
-
-DOIController.prototype.getBeamlineUrl = function(beamlines, date, resourceType) {
-    var result = [];
-    beamlines.forEach(function(beamline) {
-        if (date) {
-            if (resourceType === CONSTANTS.ES_RESOURCE_TYPE) {
-                date = moment(date);
-            }
-            if (resourceType === CONSTANTS.DC_RESOURCE_TYPE) {
-                date = moment(date, "YYYY");
-            }
-            var foundUrl = "";
-            for (var i = 0; i < BEAMLINEURL.length; i++) {
-                var startDate = moment(BEAMLINEURL[i].startDate);
-                var endDate = moment(BEAMLINEURL[i].endDate);
-                if (BEAMLINEURL[i].name.toLowerCase() === beamline.toLowerCase() && date >= startDate && date <= endDate) {
-                    foundUrl = BEAMLINEURL[i].url;
-                    break;
-                }
-            }
-            if (foundUrl === "") {
-                result.push("noLink");
-            } else {
-                result.push(foundUrl);
-            }
-        } else {
-            result.push("noLink");
-        }
-    });
-    return result;
-};
-
-DOIController.prototype.createCitation = function(doiData) {
-    var citation = new Citation(doiData);
-    if (!citation.isBuildable) {
-        return "The reference could not be generated.";
-    } else {
-        var authorInCitation = citation.getAuthorsForCitation(doiData.creators);
-        var doiRegistrationYear = citation.getDOIRegistrationYear(doiData);
-        var fullCitation = authorInCitation + " (" + doiRegistrationYear + "). " + doiData.title + ". " + doiData.publisher + " (ESRF). " + " <a href='https://doi.esrf.fr/" + doiData.doi + "'> doi:" + doiData.doi.toUpperCase() + "</a>";
-        return fullCitation;
-    }
-};
-
-function DoiData() {}
-
-DoiData.prototype.getAccessibilityStatus = function(resourceType, sessionDate, publiclyAccessibleYear) {
-    if (resourceType) {
-        if (resourceType === CONSTANTS.ES_RESOURCE_TYPE) {
-            if (publiclyAccessibleYear && sessionDate) {
-                var publiclyAvailableDate = moment(sessionDate).year(parseInt(publiclyAccessibleYear));
-                var now = moment();
-                if (now > publiclyAvailableDate) {
-                    return "Open access";
-                } else if (now <= publiclyAvailableDate) {
-                    return "Restricted access";
-                }
-            }
-        } else if (resourceType === CONSTANTS.DC_RESOURCE_TYPE) {
-            return "Open access";
-        }
-    }
-    console.log("Failed to determine whether the accessibility of the DOI.");
-    return "Accessibility status could not be determined";
-};
-
-function DOIView() {
-    this.mainPanelId = "main";
-    this.reportPanelId = "expReport";
-    this.badgePanelId = "badges";
-    this.metadataDivId = "metadata";
-    this.reportExperimentFileNames = null;
-    this.failedRecievingExpReport = false;
-    this.isDOIAlreadyRendered = false;
-    this.onDOIRendered = new Event(this);
-}
-
-DOIView.prototype.setLoading = function(message) {
-    if (message == false) {
-        $("body").removeClass("loading");
-        return;
-    }
-    $("body").addClass("loading");
-};
-
-DOIView.prototype.setDOIInTopBanner = function(doiCode) {
-    $("#doiValue").text("DOI > " + doiCode.toUpperCase());
-};
-
-DOIView.prototype.renderExperimentalReportData = function(data) {
-    if (data) {
-        var _this = this;
-        if (this.isDOIAlreadyRendered) {
-            dust.render("experimentalreport_tpl", {
-                data: data
-            }, function(err, out) {
-                $("#" + _this.reportPanelId).html(out);
-            });
-        } else {
-            this.reportExperimentFileNames = data;
-        }
-    } else {}
-};
-
-DOIView.prototype.renderDOIData = function(doiData) {
-    var _this = this;
-    dust.render("landingpage_tpl", {
-        data: doiData,
-        constants: CONSTANTS
-    }, function(err, out) {
-        $("#" + _this.mainPanelId).html(out);
-        _this.isDOIAlreadyRendered = true;
-        _this.renderBadges(doiData);
-        _this.renderMetadata(doiData);
-        if (_this.failedRecievingExpReport) {
-            _this.renderErrorForExperimentalReport();
-        } else if (_this.reportExperimentFileNames) {
-            _this.renderExperimentalReportData(_this.reportExperimentFileNames);
-        }
-    });
-};
-
-DOIView.prototype.renderError = function(jqXHR, errorThrown, origin) {
-    var template = origin === "welcome-page" ? "doinotfound2_tpl" : "doinotfound_tpl";
-    var message = "";
-    if (errorThrown === "Bad Prefix") {
-        if (origin === "welcome-page") {
-            message = '<h3> Not found ! </h3> <p> The DOI was not found at ESRF because its prefix is not ESRF specific. Please use the DOI search engine at <a href="https://www.doi.org"> doi.org</a>. </p>';
-        } else {
-            message = '<h2> Not found ! </h2> <p> The DOI was not found at ESRF because its prefix is not ESRF specific. </br> Please use the DOI search engine at <a href="https://www.doi.org"> doi.org</a>. </p>';
-        }
-    } else if (errorThrown === "Not Found") {
-        if (origin === "welcome-page") {
-            message = "<h3> Not found ! </h3> <p> Sorry, the requested DOI was not found. </p>";
-        } else {
-            message = "<h2> Not found ! </h2> <p> Sorry, the requested DOI was not found. </p>";
-        }
-    } else if (errorThrown === "timeout") {
-        if (origin === "welcome-page") {
-            message = "<h3> Not found ! </h3> <p> Sorry, the server took too long to reply. Try again later. </p>";
-        } else {
-            message = "<h2> Not found ! </h2> <p> Sorry, the server took too long to reply. Try again later. </p>";
-        }
-    } else if (errorThrown === "" && jqXHR.responseText === "The resource you are looking for doesn't exist.") {
-        if (origin === "welcome-page") {
-            message = "<h3> Not found ! </h3> <p>It may take up to 24 hours for a newly generated DOI to become available. Please try again later.</p>";
-        } else {
-            message = "<h2> Not found ! </h2> <p>It may take up to 24 hours for a newly generated DOI to become available. Please try again later.</p>";
-        }
-    } else {
-        if (origin === "welcome-page") {
-            message = "<h3> Not found ! </h3> <p> Connexion problem to the datacite server. Please try again later.</p>";
-        } else {
-            message = "<h2> Not found ! </h2> <p> Connexion problem to the datacite server. Please try again later.</p>";
-        }
-    }
-    dust.render(template, {
-        message: message
-    }, function(err, out) {
-        $("#error").html(out);
-    });
-};
-
-DOIView.prototype.renderErrorForExperimentalReport = function() {
-    this.failedRecievingExpReport = true;
-    var out = '<div class="card-header text-center"> <label>Experimental report </label> </div> <div class="card-body padding10"> <p> The filename list is not available. </p> </div>';
-    $("#" + this.reportPanelId).html(out);
-};
-
-DOIView.prototype.renderBadges = function(data) {
-    if (data) {
-        var _this = this;
-        dust.render("badges_tpl", {
-            data: data,
-            constants: CONSTANTS
-        }, function(err, out) {
-            $("#" + _this.badgePanelId).html(out);
-        });
-    }
-};
-
-DOIView.prototype.renderMetadata = function(data) {
-    if (data) {
-        var _this = this;
-        data.sessionDate = moment(data.sessionDate).format("YYYY-M-D");
-        dust.render("metadata_tpl", {
-            data: data,
-            constants: CONSTANTS
-        }, function(err, out) {
-            $("#" + _this.metadataDivId).html(out);
-        });
-    }
-};
-
-DOIView.prototype.setDataAccessMessage = function(doiData) {
-    if (doiData.accessibility === "Open access") {
-        return "The data can be accessed by clicking on the link below";
-    } else if (doiData.accessibility === "Restricted access") {
-        return "The data are under embargo until <b>" + doiData.publiclyAccessibleYear + "</b> but could be released earlier." + " Currently, they are only accessible to proposal team members.";
-    }
-};
-
-DOIView.prototype.addDOIMetadataToHead = function(data) {
-    $("<script>").attr("type", "application/ld+json").text(data).appendTo("head");
-};
-
-DOIView.prototype.addCanonicalURLToHead = function(doiURL) {
-    $("<link>").attr("rel", "canonical").attr("href", doiURL).appendTo("head");
-};
-
-var ESRF_DC_142893590 = {
-    id: "https://doi.org/10.15151/esrf-dc-142893590",
-    doi: "10.15151/ESRF-DC-142893590",
-    url: "https://doi.esrf.fr/10.15151/ESRF-DC-142893590",
-    types: {
-        ris: "DATA",
-        bibtex: "misc",
-        citeproc: "dataset",
-        schemaOrg: "Dataset",
-        resourceType: "Datacollection",
-        resourceTypeGeneral: "Dataset"
-    },
-    creators: [ {
-        name: "Naschberger, Andreas",
-        nameType: "Personal",
-        givenName: "Andreas",
-        familyName: "Naschberger"
-    }, {
-        name: "Rupp, Bernhard",
-        nameType: "Personal",
-        givenName: "Bernhard",
-        familyName: "Rupp"
-    } ],
-    titles: [ {
-        title: "Structural Evidence for a Role of the Multi-functional Human Glycoprotein Afamin in Wnt Transport"
-    } ],
-    publisher: "European Synchrotron Radiation Facility",
-    container: {},
-    subjects: [ {
-        subject: "OPID-1",
-        subjectScheme: "Proposal"
-    }, {
-        subject: "ID30A1",
-        subjectScheme: "Instrument"
-    } ],
-    contributors: [ {
-        name: "Bowler, Matthew W.",
-        nameType: "Personal",
-        givenName: "Matthew W.",
-        familyName: "Bowler"
-    } ],
-    dates: [ {
-        date: "2018",
-        dateType: "Issued"
-    } ],
-    publicationYear: 2018,
-    language: "en",
-    identifiers: [ {
-        identifier: "https://doi.org/10.15151/esrf-dc-142893590",
-        identifierType: "DOI"
-    } ],
-    sizes: [],
-    formats: [],
-    rightsList: [],
-    descriptions: [ {
-        description: "Afamin, a human plasma glycoprotein and putative transporter of hydrophobic molecules, has been shown to act as extracellular chaperone for poorly soluble, acylated Wnt proteins, forming a stable, soluble complex with functioning Wnt proteins. The 2.1-Ã… crystal structure of glycosylated human afamin reveals an almost exclusively hydrophobic binding cleft capable of harboring large hydrophobic moieties. Lipid analysis confirms the presence of lipids, and density in the primary binding pocket of afamin was modeled as palmitoleic acid, presenting the native O-acylation on serine 209 in human Wnt3a. The modeled complex between the experimental afamin structure and a Wnt3a homology model based on the XWnt8-Fz8-CRD fragment complex crystal structure is compelling, with favorable interactions comparable with the crystal structure complex. Afamin readily accommodates the conserved palmitoylated serine 209 of Wnt3a, providing a structural basis how afamin solubilizes hydrophobic and poorly soluble Wnt proteins.",
-        descriptionType: "Abstract"
-    } ],
-    geoLocations: [],
-    fundingReferences: [],
-    relatedIdentifiers: [],
-    schemaVersion: "http://datacite.org/schema/kernel-3",
-    providerId: "inist",
-    clientId: "inist.esrf",
-    state: "findable"
-};
-
-var ESRF_DC_142915526 = {
-    id: "https://doi.org/10.15151/esrf-dc-142915526",
-    doi: "10.15151/ESRF-DC-142915526",
-    url: "https://doi.esrf.fr/10.15151/ESRF-DC-142915526",
-    types: {
-        ris: "DATA",
-        bibtex: "misc",
-        citeproc: "dataset",
-        schemaOrg: "Dataset",
-        resourceType: "Datacollection",
-        resourceTypeGeneral: "Dataset"
-    },
-    creators: [ {
-        name: "Naschberger, Andreas",
-        nameType: "Personal",
-        givenName: "Andreas",
-        familyName: "Naschberger"
-    }, {
-        name: "Bowler, Matthew W.",
-        nameType: "Personal",
-        givenName: "Matthew W.",
-        familyName: "Bowler"
-    }, {
-        name: "Rupp, Bernhard",
-        nameType: "Personal",
-        givenName: "Bernhard",
-        familyName: "Rupp"
-    } ],
-    titles: [ {
-        title: "Controlled dehydration, structural flexibility, and Gadolinium MRI contrast compound binding in human plasma glycoprotein afamin"
-    } ],
-    publisher: "European Synchrotron Radiation Facility",
-    container: {},
-    subjects: [ {
-        subject: "OPID-1",
-        subjectScheme: "Proposal"
-    }, {
-        subject: "ID30A1",
-        subjectScheme: "Instrument"
-    } ],
-    contributors: [],
-    dates: [ {
-        date: "2018",
-        dateType: "Issued"
-    } ],
-    publicationYear: 2018,
-    language: "en",
-    identifiers: [ {
-        identifier: "https://doi.org/10.15151/esrf-dc-142915526",
-        identifierType: "DOI"
-    } ],
-    sizes: [],
-    formats: [],
-    rightsList: [],
-    descriptions: [ {
-        description: "Afamin, a human blood plasma glycoprotein, a putative multi-functional transporter of hydrophobic molecules and a marker for metabolic syndrome, poses multiple challenges for crystallographic structure determination, both practically and in analysis of the models. Several hundred crystals were analysed, and unusual variability in cell volume and difficulty solving the structure despite a ~34% sequence identity with non-glycosylated human serum albumin indicated that the molecule exhibits variable and context-sensitive packing, despite greatly simplified glycosylation in insect cell expressed recombinant afamin. Controlled dehydration of the crystals was able to stabilise the orthorhombic crystal form reducing the number of molecules in the asymmetric unit from the monoclinic form and changing the conformational states of the protein.  An iterative strategy using fully automatic experiments available on MASSIF-1 was used to quickly determine the optimal protocol to achieve the phase transition that should be readily applicable to many types of sample. The study also highlights the drawback of using a single crystallographic structure model for computation modelling purposes given that conformational state of the binding sites and electron density in the binding site, likely resulting from PEGs, greatly varies between models. This also holds for the analysis of unspecific low-affinity ligands, where often a variety fragments with similar uncertainty can be modelled, inviting interpretative bias. As a promiscuous transporter, afamin can also bind Gadoteridol, a magnetic resonance imaging contrast compound in two sites, one near the human albumin Sudlow-site and a second hitherto unknown binding site.",
-        descriptionType: "Abstract"
-    } ],
-    geoLocations: [],
-    fundingReferences: [],
-    relatedIdentifiers: [],
-    schemaVersion: "http://datacite.org/schema/kernel-3",
-    providerId: "inist",
-    clientId: "inist.esrf",
-    state: "findable"
-};
-
-function Event(sender) {
-    this._sender = sender;
-    this._listeners = [];
-}
-
-Event.prototype = {
-    attach: function(listener) {
-        this._listeners.push(listener);
-    },
-    notify: function(args) {
-        for (var i = 0; i < this._listeners.length; i++) {
-            this._listeners[i](this._sender, args);
-        }
-    }
-};
-
-function ExperimentalReportController() {
-    this.server = "https://smis.esrf.fr/misapps/SMISServer/rest/reports/fileNames";
-    this.timeout = 5e3;
-    this.onSuccess = new Event(this);
-    this.onError = new Event(this);
-}
-
-ExperimentalReportController.prototype.normalizeProposalName = function(proposalName) {
-    var aroundHyphenRegExp;
-    try {
-        aroundHyphenRegExp = new RegExp(/^(.*)-(.*)/);
-        return {
-            categoryCode: aroundHyphenRegExp.exec(proposalName)[1],
-            categoryCounter: aroundHyphenRegExp.exec(proposalName)[2]
-        };
-    } catch (e) {
-        aroundHyphenRegExp = new RegExp(/\d+$/);
-        try {
-            return {
-                categoryCode: proposalName.substring(0, proposalName.length - aroundHyphenRegExp.exec(proposalName)[0].length),
-                categoryCounter: aroundHyphenRegExp.exec(proposalName)[0]
-            };
-        } catch (e) {
-            console.log(e);
-            return null;
-        }
-    }
-};
-
-ExperimentalReportController.prototype.requestFilenameList = function(proposal) {
-    var _this = this;
-    if (proposal) {
-        var data = this.normalizeProposalName(proposal);
-        if (data) {
-            $.ajax({
-                type: "GET",
-                timeout: this.timeout,
-                url: this.server,
-                data: data,
-                dataType: "json",
-                success: function(data) {
-                    _this.onSuccess.notify(data);
-                },
-                error: function(message) {
-                    _this.onError.notify(message);
-                }
-            });
-        } else {
-            _this.onError.notify("Proposal could not be normalized: " + proposal);
-        }
-    } else {
-        _this.onError.notify("Proposal is null");
-    }
-};
-
-ExperimentalReportController.prototype.openFileInNewTab = function(filename) {
-    if (filename) {
-        try {
-            window.open("http://ftp.esrf.fr/pub/UserReports/" + filename, "_blank");
-        } catch (err) {
-            alert("The requested file " + filename + " could not be downloaded.");
-        }
-    }
-};
-
-function GoogleMetadataObject(data) {
-    this.data = JSON.parse(JSON.stringify(data));
-}
-
-GoogleMetadataObject.prototype.getMetadata = function() {
-    return this.data;
-};
-
-GoogleMetadataObject.prototype.setLicense = function() {
-    if (!this.data.license) {
-        this.data.license = "https://creativecommons.org/licenses/by/4.0";
-    }
-};
-
-GoogleMetadataObject.prototype.setDescription = function() {
-    if (this.data.name) {
-        if (!this.data.description) {
-            if (this.data.author) {
-                var authors = "";
-                if (this.data.author instanceof Array) {
-                    authors = this.data.author.map(function(author) {
-                        return author.name;
-                    }).join();
-                } else {
-                    authors = this.data.author.name;
-                }
-                var trailingMessage = "There is currently no additional information regarding the description of this DOI.";
-                this.data.description = this.data.name + "; " + authors + "; " + trailingMessage;
-            }
-        }
-    } else {
-        console.log("[GoogleMetadataObject] - The data required by Google is missing the 'name' field. This is required by Google for indexing.");
-    }
-};
-
-GoogleMetadataObject.prototype.setPublisherLogo = function() {
-    if (this.data.publisher) {
-        this.data.publisher.logo = "https://doi.esrf.fr/src/images/esrfLogoBlue.png";
-    }
-};
-
-function JsonExtractor() {}
-
-JsonExtractor.prototype.getTitle = function(data) {
-    if (data) {
-        if (data.titles) {
-            if (data.titles.length > 0) {
-                if (data.titles[0].title) {
-                    return data.titles[0].title;
-                }
-            }
-        }
-    }
-    console.log("[JSON EXTRACTOR ERROR] title extraction failed.");
-    return null;
-};
-
-JsonExtractor.prototype.getDOI = function(data) {
-    if (data) {
-        if (data.doi) {
-            return data.doi.toUpperCase();
-        }
-    }
-    console.log("[JSON EXTRACTOR ERROR] doi extraction failed.");
-    return null;
-};
-
-JsonExtractor.prototype.getPublisher = function(data) {
-    if (data) {
-        if (data.publisher) {
-            return data.publisher;
-        }
-    }
-    console.log("[JSON EXTRACTOR ERROR] publisher extraction failed.");
-    return null;
-};
-
-JsonExtractor.prototype.getCreators = function(data) {
-    if (data) {
-        if (data.creators) {
-            return _.map(data.creators, function(item) {
-                if (item.givenName && item.familyName || item.name) {
-                    return item;
-                } else {
-                    console.log("[JSON EXTRACTOR ERROR] one of the creator could not be properly extracted.");
-                    return {};
-                }
-            });
-        }
-    }
-    console.log("[JSON EXTRACTOR ERROR] Extraction of the creators failed.");
-    return null;
-};
-
-JsonExtractor.prototype.getContributors = function(data) {
-    if (data && data.contributors) {
-        return _.map(data.contributors, function(item) {
-            if (item.givenName && item.familyName || item.name) {
-                return item;
-            } else {
-                console.log("[JSON EXTRACTOR ERROR] one of the contributors could not be properly extracted.");
-                return {};
-            }
-        });
-    }
-    return null;
-};
-
-JsonExtractor.prototype.getPubliclyAccessibleYear = function(data) {
-    if (data && data.publicationYear) {
-        return data.publicationYear;
-    }
-    console.log("[JSON EXTRACTOR ERROR] Extraction of the publication year failed.");
-    return null;
-};
-
-JsonExtractor.prototype.getInvestigationId = function(data) {
-    var regExp = RegExp(/\/\w*-*[Ee][Ss][Rr][Ff]-[Ee][Ss]-(\d+)$/);
-    if (regExp.exec(data.doi)) {
-        return regExp.exec(data.doi)[1];
-    }
-    console.log("[JSON EXTRACTOR ERROR] investigationId extraction failed.");
-    return null;
-};
-
-JsonExtractor.prototype.getFieldFromSubject = function(subjects, field) {
-    if (subjects) {
-        var regExp = new RegExp("^" + field + "$", "i");
-        for (var i = 0; i < subjects.length; i++) {
-            if (regExp.test(subjects[i].subjectScheme)) {
-                if (subjects[i].subject) {
-                    return _.split(subjects[i].subject, ",");
-                }
-            }
-        }
-    }
-    return null;
-};
-
-JsonExtractor.prototype.getMintingYear = function(data) {};
-
-JsonExtractor.prototype.getSessionDate = function(data) {
-    if (data) {
-        if (data.dates && data.dates instanceof Array) {
-            var sessionDate = _.find(data.dates, function(item) {
-                if (item.dateType) {
-                    return item.dateType.toLowerCase() === "collected";
-                }
-            });
-            if (sessionDate && sessionDate.date) {
-                return moment(sessionDate.date).format("YYYY-MM-DD");
-            }
-        }
-    }
-    console.log("[JSON EXTRACTOR ERROR] Extraction of session date failed.");
-    return null;
-};
-
-JsonExtractor.prototype.getResourceTypeGeneral = function(data) {
-    if (data && data.types) {
-        for (var key in data.types) {
-            if (key === "resourceTypeGeneral") {
-                return data.types[key];
-            }
-        }
-    }
-    console.log("[JSON EXTRACTOR ERROR] Extraction of resource type general failed.");
-    return null;
-};
-
-JsonExtractor.prototype.getResourceType = function(data) {
-    if (data && data.types) {
-        for (var key in data.types) {
-            if (key === "resourceType") {
-                if (data.types[key] === "Experiment Session") {
-                    return CONSTANTS.ES_RESOURCE_TYPE;
-                }
-                if (data.types[key] === "Datacollection") {
-                    return CONSTANTS.DC_RESOURCE_TYPE;
-                }
-            }
-        }
-    }
-    console.log("[JSON EXTRACTOR ERROR] Extraction of resource type failed.");
-    return null;
-};
-
-JsonExtractor.prototype.getAbstract = function(data) {
-    if (data && data.descriptions) {
-        var abstractObject = _.find(data.descriptions, function(item) {
-            return item.descriptionType.toLowerCase() === "abstract";
-        });
-        if (abstractObject) {
-            return abstractObject.description;
-        }
-    }
-    console.log("[JSON EXTRACTOR ERROR] Extraction of the abstract failed.");
-    return null;
-};
-
-JsonExtractor.prototype.getMergedProposalAndBeamline = function(proposals, beamlines, beamlineUrls) {
-    if (proposals && beamlines && beamlineUrls) {
-        var result = [];
-        var index = 0;
-        if (proposals.length === beamlines.length && proposals.length === beamlineUrls.length) {
-            for (index; index < proposals.length; index++) {
-                result.push({
-                    proposal: proposals[index],
-                    beamline: beamlines[index],
-                    beamlineUrl: beamlineUrls[index]
-                });
-            }
-            return _.uniqBy(result, function(value) {
-                return JSON.stringify(value);
-            });
-        }
-        if (proposals.length >= 1 && beamlines.length === 1 && beamlineUrls.length === 1) {
-            for (index = 0; index < proposals.length; index++) {
-                result.push({
-                    proposal: proposals[index],
-                    beamline: beamlines[0],
-                    beamlineUrl: beamlineUrls[0]
-                });
-            }
-            return _.uniqBy(result, function(value) {
-                return JSON.stringify(value);
-            });
-        }
-    }
-    return null;
-};
-
-function proposalBeamlineTable(chunk, context, bodies, params) {
-    var proposalAndBeamlines = params.mergedProposalBeamlines;
-    chunk.write('<table class="table table-striped">');
-    chunk.write("<thead>");
-    chunk.write("<tr>");
-    chunk.write('<th scope="col">Proposals</th>');
-    chunk.write('<th scope="col">Beamlines</th>');
-    chunk.write("</tr>");
-    chunk.write("</thead>");
-    chunk.write("<tbody>");
-    if (proposalAndBeamlines) {
-        for (var index = 0; index < proposalAndBeamlines.length; index++) {
-            if (proposalAndBeamlines[index]) {
-                var proposal = proposalAndBeamlines[index].proposal || "unknown";
-                var beamline = proposalAndBeamlines[index].beamline || "unknown";
-                var beamlineUrl = proposalAndBeamlines[index].beamlineUrl;
-                chunk.write("<tr>");
-                chunk.write("<td>" + proposal + "</td>");
-                if (beamlineUrl === "noLink") {
-                    chunk.write("<td>" + beamline + "</td>");
-                } else {
-                    chunk.write('<td> <a href="' + beamlineUrl + '" target="_blank">' + beamline + " </a> </td>");
-                }
-                chunk.write("</tr>");
-            } else {
-                chunk.write("<tr>");
-                chunck.write("<td> unknown </td>");
-                chunck.write("<td> unknown </td>");
-                chunk.write("</tr>");
-            }
-        }
-        chunk.write("</tbody>");
-        chunk.write("</table>");
-        return chunk.render(bodies.block, context);
-    }
-}
-
-function abstract(chunk, context, bodies, params) {
-    var abstract = params.abstract;
-    chunk.write('<div class="myBorder-left">');
-    chunk.write("<label> Abstract </label>");
-    chunk.write('<div class="padding-left-15">');
-    if (abstract) {
-        chunk.write(abstract);
-    } else {
-        chunk.write("There is no abstract for this session.");
-    }
-    chunk.write("</div >");
-    chunk.write("</div >");
-    return chunk.render(bodies.block, context);
-}
-
-dust.helpers.proposalBeamlineTable = proposalBeamlineTable;
-
-dust.helpers.abstract = abstract;
\ No newline at end of file
diff --git a/www/min/output.min.css b/www/min/output.min.css
deleted file mode 100644
index be85ec2..0000000
--- a/www/min/output.min.css
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- * Bootstrap v4.6.0 (https://getbootstrap.com/)
- * Copyright 2011-2021 The Bootstrap Authors
- * Copyright 2011-2021 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-row>.col>.valid-tooltip,.form-row>[class*=col-]>.valid-tooltip{left:5px}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-row>.col>.invalid-tooltip,.form-row>[class*=col-]>.invalid-tooltip{left:5px}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label::after,.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label::after,.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.form-control:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:50%/50% 50% no-repeat}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;overflow:hidden;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;overflow:hidden;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:50%/100% 100% no-repeat}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:50%/100% 100% no-repeat}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}html{position:relative;min-height:100%;font-size:10px}body{margin-bottom:60px;font-size:1.6rem}hr{margin-top:15px;margin-bottom:15px}label{margin-bottom:0;font-weight:700}@media only screen and (max-width:768px){#footerLeft{text-align:center}#footerRight{text-align:center}#licenceImage{display:block;margin:auto}.footer{position:absolute;background-color:#f4f4f4}}@media only screen and (min-width:769px){#footerLeft{text-align:left}#footerRight{display:block;float:right}.footer{position:absolute;bottom:0;height:60px;width:100%;line-height:60px;background-color:#f4f4f4}}@media only screen and (max-width:1200px){.searchButtonDiv{padding-left:15px}}@media only screen and (min-width:1201px){.searchButtonDiv{padding-left:0}}.card-header{background-color:#cfd1d2}.card-footer{background-color:#fff;border:0}.container{width:auto;max-width:680px;padding:0 15px}.blueBackground{background-color:#132577!important}.lightRedBackground{background-color:#ffcaca!important}.grayBackground{background-color:#dcdee2}.whiteBackground{background-color:#fff}.font-3p2rem{font-size:3.2rem}.font-1p4rem{font-size:1.4rem}.whiteFont{color:#fff}.fontSize-20{font-size:20px}.whiteVCenteredFont{color:#fff;margin-top:auto;margin-bottom:auto}.padding-top-15{padding-top:15px}.padding-top-5{padding-top:5px}.padding-bottom-15{padding-bottom:15px}.padding-left-15{padding-left:15px}.padding-bottom-10{padding-bottom:10px}.padding10{padding:10px}.padding-left-0{padding-left:0}.padding-right-0{padding-right:0}.padding-right-2{padding-right:2px}.padding-left-2{padding-left:2px}.marging-right-10{marging-right:10px}.margin-left-0{margin-left:0}.margin-right-0{margin-right:0}.borderRadius-5{border-radius:5px}span.doiBadge{font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#fff;background:#000;text-decoration:none;padding:2px 0 2px 4px;border-color:#000}span.doiBadge::before{content:"DOI"}span.doiBadge a{color:#fff;background:#09c;text-decoration:none;margin-left:4px;padding:2px 5px 2px 4px;border-radius:0 5px 5px 0}.myBorder-left{border-left-color:#cfd1d2;border-left-width:4px;border-left-style:solid;padding-left:15px;margin-bottom:10px}.scroll-box{overflow-y:auto;overflow-x:hidden;height:130px}.welcomeBanner{heigth:100px}.flexCentered{display:flex;justify-content:center;align-items:center}.height100p{height:100%}.form-control{font-size:1.6rem}.btn{white-space:normal;font-size:1.6rem}.btn-primary{border-color:#132577;background-color:#132577}.btn-primary.disabled{background-color:#132577;border-color:#132577;cursor:not-allowed}.btn.disabled{opacity:.5}#logo{height:50px}.modal{display:none;position:absolute;z-index:1000;top:82px;bottom:60px;background:rgba(0,0,0,.05) url(../src/images/ajaxloader.gif) 50% 50% no-repeat}body.loading{overflow:hidden}body.loading .modal{display:block}.flex{display:flex}
\ No newline at end of file
diff --git a/www/min/precompiled.templates.min.js b/www/min/precompiled.templates.min.js
deleted file mode 100644
index 1cf072a..0000000
--- a/www/min/precompiled.templates.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-(function(dust){dust.register("badges_tpl",body_0);function body_0(chk,ctx){return chk.w("<div class=\"row margin-left-0 margin-right-0\">").h("eq",ctx,{"block":body_1},{"key":ctx.getPath(false, ["data","resourceType"]),"value":ctx.getPath(false, ["constants","ES_RESOURCE_TYPE"])},"h").w("  ").h("eq",ctx,{"block":body_2},{"key":ctx.getPath(false, ["data","resourceType"]),"value":ctx.getPath(false, ["constants","DC_RESOURCE_TYPE"])},"h").w("  <div class=\"col\"> </div>").h("eq",ctx,{"block":body_3},{"key":ctx.getPath(false, ["data","resourceTypeGeneral"]),"value":"Dataset"},"h").h("eq",ctx,{"block":body_4},{"key":ctx.getPath(false, ["data","accessibility"]),"value":"Open access"},"h").h("eq",ctx,{"block":body_5},{"key":ctx.getPath(false, ["data","accessibility"]),"value":"Restricted access"},"h").w("</div>");}body_0.__dustBody=!0;function body_1(chk,ctx){return chk.w("<div class=\"col-auto padding-right-2 padding-left-2\"><span class=\"badge badge-secondary font-1p4rem \" > Session </span></div>");}body_1.__dustBody=!0;function body_2(chk,ctx){return chk.w("<div class=\"col-auto padding-right-2 padding-left-2\"><span class=\"badge badge-secondary font-1p4rem \" > Data collection </span></div>");}body_2.__dustBody=!0;function body_3(chk,ctx){return chk.w("<div class=\"col-auto padding-right-2 padding-left-2\"><span class=\"badge badge-secondary font-1p4rem\"> Dataset </span></div>");}body_3.__dustBody=!0;function body_4(chk,ctx){return chk.w("<div class=\"col-auto padding-right-2 padding-left-2\"><span class=\"badge badge-success font-1p4rem \"> Open access </span></div>");}body_4.__dustBody=!0;function body_5(chk,ctx){return chk.w("<div class=\"col-auto padding-right-2 padding-left-2\"><span class=\"badge badge-warning font-1p4rem \"> Restricted access </span></div>");}body_5.__dustBody=!0;return body_0}(dust));
-(function(dust){dust.register("doinotfound_tpl",body_0);function body_0(chk,ctx){return chk.w("<div class=\"container-fluid \" style=\"color:black;\"><div class=\"row\"><div class=\"col-3\"> </div><div class=\"col-6 lightRedBackground text-center rounded\">   <p> ").f(ctx.get(["message"], false),ctx,"h",["s"]).w(" </p> </div></div><div class=\"col-3\"> </div></div>      ");}body_0.__dustBody=!0;return body_0}(dust));
-(function(dust){dust.register("doinotfound2_tpl",body_0);function body_0(chk,ctx){return chk.f(ctx.get(["message"], false),ctx,"h",["s"]);}body_0.__dustBody=!0;return body_0}(dust));
-(function(dust){dust.register("experimentalreport_tpl",body_0);function body_0(chk,ctx){return chk.w("<div class=\"card-header text-center\"><label>Experimental report </label></div><div class=\"card-body padding10\">").x(ctx.get(["data"], false),ctx,{"else":body_1,"block":body_2},{});}body_0.__dustBody=!0;function body_1(chk,ctx){return chk.w("<p class=\"card-text\"> There is currently no experimental report. </p></div>");}body_1.__dustBody=!0;function body_2(chk,ctx){return chk.h("eq",ctx,{"block":body_3},{"key":ctx.getPath(false, ["data","length"]),"value":1},"h").h("gt",ctx,{"block":body_4},{"key":ctx.getPath(false, ["data","length"]),"value":1},"h").w("      ");}body_2.__dustBody=!0;function body_3(chk,ctx){return chk.w("<p class=\"card-text\"> <b> One </b> report has been found for this proposal. </p></div><div class=\"card-body\">             <button type=\"button\" class=\"btn btn-primary btn-lg btn-block\" onclick=\"javascript:(function(){ var expRep = new ExperimentalReportController(); expRep.openFileInNewTab('").f(ctx.getPath(false, ["data","0"]),ctx,"h").w("'); })()\" > <span class=\"fa fa-download whiteFont\"></span> ").f(ctx.getPath(false, ["data","0"]),ctx,"h").w(" </button></div>");}body_3.__dustBody=!0;function body_4(chk,ctx){return chk.w("<p class=\"card-text\"> In total, <b> ").f(ctx.getPath(false, ["data","length"]),ctx,"h").w(" </b> reports have been found for this proposal: </p></div>      <div class=\"card-body\"><div class=\"scroll-box\">").s(ctx.get(["data"], false),ctx,{"block":body_5},{}).w("</div> </div>");}body_4.__dustBody=!0;function body_5(chk,ctx){return chk.w("  ").h("sep",ctx,{"block":body_6},{},"h").h("last",ctx,{"block":body_7},{},"h");}body_5.__dustBody=!0;function body_6(chk,ctx){return chk.w("<div class=\"row\">   <div class=\"col-1\"> </div><div class=\"col-10 padding-bottom-10\"><button type=\"button\" class=\"btn btn-primary btn-lg btn-block\" onclick=\"javascript:(function(){ var expRep = new ExperimentalReportController(); expRep.openFileInNewTab('").f(ctx.getPath(true, []),ctx,"h").w("'); })()\" > <span class=\"fa fa-download whiteFont\"></span> <span class=\"whitefont\"> ").f(ctx.getPath(true, []),ctx,"h").w("</span> </button></div><div class=\"col-1\"> </div>              </div>");}body_6.__dustBody=!0;function body_7(chk,ctx){return chk.w("<div class=\"row\">   <div class=\"col-1\"> </div><div class=\"col-10\"><button type=\"button\" class=\"btn btn-primary btn-lg btn-block\" onclick=\"javascript:(function(){ var expRep = new ExperimentalReportController(); expRep.openFileInNewTab('").f(ctx.getPath(true, []),ctx,"h").w("'); })()\" > <span class=\"fa fa-download whiteFont\"></span> <span class=\"whitefont\"> ").f(ctx.getPath(true, []),ctx,"h").w("</span> </button></div><div class=\"col-1\"> </div>              </div>");}body_7.__dustBody=!0;return body_0}(dust));
-(function(dust){dust.register("landingpage_tpl",body_0);function body_0(chk,ctx){return chk.w("<div class=\"container-fluid\"><div class=\"row padding-top-15\"><div class=\"col-12 col-md-9\"><div class=\"row\"><div class=\"col-12\"><div id=\"badges\"> </div>     </div></div><div class=\"row\"><div class=\"col-12 fontSize-20 text-center text-uppercase font-weight-bold py-3\">").f(ctx.getPath(false, ["data","title"]),ctx,"h").w("</div></div><div class=\"row\"><div class=\"col-12\"><div class=\"myBorder-left\"><div><cite>").s(ctx.getPath(false, ["data","creators"]),ctx,{"block":body_1},{}).w("</cite></div></div></div></div><div class=\"padding-top-15\"></div></div><div class=\"col-12 col-md-3\"><div class=\"card\"><div class=\"card-body\"><div class=\"card-text\"><label> DOI </label><div class=\"padding-left-15\">  <span class=\"doiBadge borderRadius-5 font-1p4rem\"> <a id=\"doiLink\" href=").f(ctx.getPath(false, ["data","dataciteLink"]),ctx,"h").w("> ").f(ctx.getPath(false, ["data","doi"]),ctx,"h").w(" </a></span> </div><label class=\"padding-top-5\"> Licence (for files) </label><div class=\"padding-left-15\"><p> <a href=\"https://creativecommons.org/licenses/by/4.0/\"> Creative Commons Attribution 4.0 </a> </p></div>                        </div></div></div></div></div><hr>  ").x(ctx.getPath(false, ["data","contributors"]),ctx,{"block":body_8},{}).w("<div id=\"metadata\"> </div><hr><div class=\"row\"><div class=\"col-12\">  <div class=\"card\" id=\"expReport\"><div class=\"card-header text-center\"><label>Experimental report </label></div></div></div></div><br><div class=\"row\"><div class=\"col-12\"><div class=\"card\"><div class=\"card-header text-center\"><label>Experimental data </label></div><div class=\"card-body padding10\"><p class=\"card-text\" >").f(ctx.getPath(false, ["data","accessMessage"]),ctx,"h",["s"]).w("</p></div><div class=\"card-body\"><div class=\"row\"><div class=\"col-1\"> </div><div class=\"col-10\">").h("eq",ctx,{"else":body_16,"block":body_17},{"key":ctx.getPath(false, ["data","resourceType"]),"value":ctx.getPath(false, ["constants","ES_RESOURCE_TYPE"])},"h").w("  <button type=\"submit\" class=\"btn btn-primary btn-lg btn-block\"> Access data </button></form></div><div class=\"col-1\"> </div></div></div></div>     </div></div><hr><div class=\"row\"><div class=\"col-12\"><div class=\"myBorder-left\"><label class=\"greyGradientToRight padding-left-10 padding-right-20\"> Reference </label><div class=\"padding-left-25\"><p> Below is the recommended format for citing this work in a research publication.</p><div class=\"padding-left-25\"><cite> ").f(ctx.getPath(false, ["data","citation"]),ctx,"h",["s"]).w(" </cite></div></div></div>  </div></div></div>");}body_0.__dustBody=!0;function body_1(chk,ctx){return chk.h("sep",ctx,{"block":body_2},{},"h").h("last",ctx,{"block":body_5},{},"h");}body_1.__dustBody=!0;function body_2(chk,ctx){return chk.x(ctx.getPath(true, ["givenName"]),ctx,{"else":body_3,"block":body_4},{});}body_2.__dustBody=!0;function body_3(chk,ctx){return chk.w(" ").f(ctx.getPath(true, ["name"]),ctx,"h").w(" ; ");}body_3.__dustBody=!0;function body_4(chk,ctx){return chk.w(" ").f(ctx.getPath(true, ["givenName"]),ctx,"h").w(" ").f(ctx.getPath(true, ["familyName"]),ctx,"h").w(" ; ");}body_4.__dustBody=!0;function body_5(chk,ctx){return chk.x(ctx.getPath(true, ["givenName"]),ctx,{"else":body_6,"block":body_7},{});}body_5.__dustBody=!0;function body_6(chk,ctx){return chk.w(" ").f(ctx.getPath(true, ["name"]),ctx,"h").w(". ");}body_6.__dustBody=!0;function body_7(chk,ctx){return chk.w(" ").f(ctx.getPath(true, ["givenName"]),ctx,"h").w(" ").f(ctx.getPath(true, ["familyName"]),ctx,"h").w(". ");}body_7.__dustBody=!0;function body_8(chk,ctx){return chk.w("<div class=\"row\"><div class=\"col-12\"><div class=\"myBorder-left\"><label class=\"greyGradientToRight padding-left-10 padding-right-20\"> Contributors </label><div class=\"padding-left-25\"><cite>").s(ctx.getPath(false, ["data","contributors"]),ctx,{"block":body_9},{}).w("</cite></div></div></div></div><hr>");}body_8.__dustBody=!0;function body_9(chk,ctx){return chk.h("sep",ctx,{"block":body_10},{},"h").h("last",ctx,{"block":body_13},{},"h");}body_9.__dustBody=!0;function body_10(chk,ctx){return chk.x(ctx.getPath(true, ["givenName"]),ctx,{"else":body_11,"block":body_12},{});}body_10.__dustBody=!0;function body_11(chk,ctx){return chk.w(" ").f(ctx.getPath(true, ["name"]),ctx,"h").w(" ; ");}body_11.__dustBody=!0;function body_12(chk,ctx){return chk.w(" ").f(ctx.getPath(true, ["givenName"]),ctx,"h").w(" ").f(ctx.getPath(true, ["familyName"]),ctx,"h").w(" ; ");}body_12.__dustBody=!0;function body_13(chk,ctx){return chk.x(ctx.getPath(true, ["givenName"]),ctx,{"else":body_14,"block":body_15},{});}body_13.__dustBody=!0;function body_14(chk,ctx){return chk.w(" ").f(ctx.getPath(true, ["name"]),ctx,"h").w(". ");}body_14.__dustBody=!0;function body_15(chk,ctx){return chk.w(" ").f(ctx.getPath(true, ["givenName"]),ctx,"h").w(" ").f(ctx.getPath(true, ["familyName"]),ctx,"h").w(". ");}body_15.__dustBody=!0;function body_16(chk,ctx){return chk.w("<form action=\"https://data.esrf.fr/public/").f(ctx.getPath(false, ["data","doi"]),ctx,"h").w("\" target=\"_blank\" method=\"get\">");}body_16.__dustBody=!0;function body_17(chk,ctx){return chk.w("<form action=\"https://data.esrf.fr/investigation/").f(ctx.getPath(false, ["data","investigationId"]),ctx,"h").w("/datasets\" target=\"_blank\">");}body_17.__dustBody=!0;return body_0}(dust));
-(function(dust){dust.register("metadata_tpl",body_0);function body_0(chk,ctx){return chk.h("eq",ctx,{"block":body_1},{"key":ctx.getPath(false, ["data","resourceType"]),"value":ctx.getPath(false, ["constants","ES_RESOURCE_TYPE"])},"h").h("eq",ctx,{"block":body_17},{"key":ctx.getPath(false, ["data","resourceType"]),"value":ctx.getPath(false, ["constants","DC_RESOURCE_TYPE"])},"h").w(" ");}body_0.__dustBody=!0;function body_1(chk,ctx){return chk.w("<div class=\"row\">").x(ctx.getPath(false, ["data","mergedProposalBeamlines"]),ctx,{"block":body_2},{}).w("</div><hr> <div class=\"row\"><div class=\"col-12\">").h("abstract",ctx,{"block":body_16},{"abstract":ctx.getPath(false, ["data","abstract"])},"h").w("</div></div>");}body_1.__dustBody=!0;function body_2(chk,ctx){return chk.x(ctx.getPath(false, ["data","mergedProposalBeamlines","0"]),ctx,{"block":body_3},{});}body_2.__dustBody=!0;function body_3(chk,ctx){return chk.w("<div class=\"col-6 col-md\"><div class=\"myBorder-left\"><label> Proposal </label>").x(ctx.getPath(false, ["data","mergedProposalBeamlines","0","proposal"]),ctx,{"else":body_4,"block":body_5},{}).w("</div></div><div class=\"col-6 col-md\"><div class=\"myBorder-left\"><label> Publication year </label>").x(ctx.getPath(false, ["data","publiclyAccessibleYear"]),ctx,{"else":body_6,"block":body_7},{}).w("</div></div><div class=\"col-6 col-md\"><div class=\"myBorder-left\"><label> Beamline </label>            ").x(ctx.getPath(false, ["data","mergedProposalBeamlines","0","beamline"]),ctx,{"else":body_8,"block":body_9},{}).w("</div></div><div class=\"col-6 col-md\"><div class=\"myBorder-left\"><label> Session date </label>").x(ctx.getPath(false, ["data","sessionDate"]),ctx,{"else":body_12,"block":body_13},{}).w("</div></div>  <div class=\"col-12 col-md-4\"><div class=\"myBorder-left\"><label>Category </label>").x(ctx.getPath(false, ["data","proposalType"]),ctx,{"else":body_14,"block":body_15},{}).w("</div></div>     ");}body_3.__dustBody=!0;function body_4(chk,ctx){return chk.w("<div class=\"padding-left-15\"> Not available</div>");}body_4.__dustBody=!0;function body_5(chk,ctx){return chk.w("<div class=\"padding-left-15\">").f(ctx.getPath(false, ["data","mergedProposalBeamlines","0","proposal"]),ctx,"h").w("</div>");}body_5.__dustBody=!0;function body_6(chk,ctx){return chk.w("<div class=\"padding-left-15\"> Not available</div>");}body_6.__dustBody=!0;function body_7(chk,ctx){return chk.w("<div class=\"padding-left-15\">").f(ctx.getPath(false, ["data","publiclyAccessibleYear"]),ctx,"h").w("</div>");}body_7.__dustBody=!0;function body_8(chk,ctx){return chk.w("<div class=\"padding-left-15\">Not available</div>");}body_8.__dustBody=!0;function body_9(chk,ctx){return chk.h("eq",ctx,{"else":body_10,"block":body_11},{"key":ctx.getPath(false, ["data","mergedProposalBeamlines","0","beamlineUrl"]),"value":"noLink"},"h");}body_9.__dustBody=!0;function body_10(chk,ctx){return chk.w("<div class=\"padding-left-15\"><a href=\"").f(ctx.getPath(false, ["data","mergedProposalBeamlines","0","beamlineUrl"]),ctx,"h").w("\" target=\"_blank\"> ").f(ctx.getPath(false, ["data","mergedProposalBeamlines","0","beamline"]),ctx,"h").w(" </a></div>");}body_10.__dustBody=!0;function body_11(chk,ctx){return chk.w("<div class=\"padding-left-15\">").f(ctx.getPath(false, ["data","mergedProposalBeamlines","0","beamline"]),ctx,"h").w("</div>");}body_11.__dustBody=!0;function body_12(chk,ctx){return chk.w("<div class=\"padding-left-15\"> Not available</div>");}body_12.__dustBody=!0;function body_13(chk,ctx){return chk.w("<div class=\"padding-left-15\">").f(ctx.getPath(false, ["data","sessionDate"]),ctx,"h").w("</div>");}body_13.__dustBody=!0;function body_14(chk,ctx){return chk.w("<div class=\"padding-left-15\"> Not available</div>");}body_14.__dustBody=!0;function body_15(chk,ctx){return chk.w("<div class=\"padding-left-15\">").f(ctx.getPath(false, ["data","proposalType"]),ctx,"h").w("</div>");}body_15.__dustBody=!0;function body_16(chk,ctx){return chk.w(" ");}body_16.__dustBody=!0;function body_17(chk,ctx){return chk.w("<div class=\"row\"><div class=\"col-md-12 col-xl-8\">").h("abstract",ctx,{"block":body_18},{"abstract":ctx.getPath(false, ["data","abstract"])},"h").w("</br></div><div class=\"col-sm-6 col-xl-2\"><div class=\"myBorder-left\" style=\"margin-right:-15px\">").h("proposalBeamlineTable",ctx,{"block":body_19},{"mergedProposalBeamlines":ctx.getPath(false, ["data","mergedProposalBeamlines"])},"h").w("</div></div><div class=\"col-sm-6 col-xl-2\" ><div class=\"myBorder-left\"><label> Publication year </label>").x(ctx.getPath(false, ["data","mintingYear"]),ctx,{"else":body_20,"block":body_21},{}).w("</div></div></div>");}body_17.__dustBody=!0;function body_18(chk,ctx){return chk.w(" ");}body_18.__dustBody=!0;function body_19(chk,ctx){return chk.w(" ");}body_19.__dustBody=!0;function body_20(chk,ctx){return chk.w("<div class=\"padding-left-15\"> Not available</div>");}body_20.__dustBody=!0;function body_21(chk,ctx){return chk.w("<div class=\"padding-left-15\">").f(ctx.getPath(false, ["data","mintingYear"]),ctx,"h").w("</div>");}body_21.__dustBody=!0;return body_0}(dust));
-(function(dust){dust.register("welcome_tpl",body_0);function body_0(chk,ctx){return chk.w("  <div class=\"container-fluid\"><div class=\"row\"><div class=\"col-12 flexCentered whiteFont\" style=\"color:#132577; font-size: 6.4rem; height: 200px; margin-top: 10px; margin-bottom: 10px; text-align: center;\">ESRF DOI Portal</div></div></div><div class=\"container-fluid\"><div class=\"row\"><div class=\"col-12 col-md-4\"><div class=\"padding10\"><div class=\"card-header text-center\"><h1 class=\"font-3p2rem\">About the portal</h1></div><div class=\"card-body padding10\">This page centralizes the <a href=\"http://www.esrf.eu/home/UsersAndScience/UserGuide/esrf-data-policy/doi.html\" target=\"_blank\"> DOI</a> services offered by the ESRF to access data stored at the facility as part of its data policy. Data referred to by ESRF DOIs are accessed via the ESRF data catalogue <a href=\"https://data.esrf.fr\" target=\"_blank\"> data.esrf.fr</a>.<p> In case you require a DOI for a subset of data please send an email with the following high level metadata - \"proposal\", \"title\", \"authors\", \"abstract\", \"datasets\" to datapolicy@esrf.fr </p></div></div></div><div class=\"col-12 col-md-4\"><div class=\"padding10\"><div class=\"card-header text-center \"><h1 class=\"font-3p2rem\">DOI resolver</h1></div><div class=\"card-body padding10\"><p>The search engine below only searches DOIs which have been minted at the ESRF. <br/> Use <a href=\"https://doi.org\">doi.org </a> search engine for other DOIs.</p><div class=\"row\"><div class=\"col-xl-9 padding-right-0\"><p> <input id=\"doiSearchBox\" class=\"form-control\" placeholder=\"10.15151/ESRF-ES-90632078\" type=\"text\" required/> </p><div class=\"text-danger\" id=\"error\"> </div>  </div><div class=\"col searchButtonDiv\">   <input class=\"btn btn-primary\" type=\"submit\" value=\"Search\" onclick=\"searchDOI()\" />    </div></div><div class=\"row\"><div class=\"col\"><p> <a href=\"https://search.datacite.org/works?query=10.15151%2F*\"> List all ESRF DOIs </a> </p></div></div></div>  </div></div><div class=\"col-12 col-md-4\"><div class=\"padding10\"><div class=\"card-header text-center\"><h1 class=\"font-3p2rem\">About DOI </h1></div><div class=\"card-body padding10\">The Digital Object Identifier (<a href=\"http://www.esrf.eu/home/UsersAndScience/UserGuide/esrf-data-policy/doi.html\">DOI</a>) is a code composed of digits and characters. It identifies data in a unique and permanent way thereby allowing data to be referenced worldwide. The DOI has two parts, namely the DOI prefix and the DOI suffix separated by a slash (\"/\"). The ESRF prefix is 10.15151 followed by a slash and the ESRF suffix. Currently the following suffix(es) are defined:</p><pre>ESRF-ES - for a session at the ESRF </pre>Refer to the <a href=\"http://www.esrf.eu/home/UsersAndScience/UserGuide/esrf-data-policy/doi/doi---concepts.html\">DOI concepts</a> page to find out what a session is.</div></div></div></div></div>");}body_0.__dustBody=!0;return body_0}(dust));
\ No newline at end of file
diff --git a/www/package.json b/www/package.json
deleted file mode 100644
index 96229ed..0000000
--- a/www/package.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-  "name": "doi-landing-page",
-  "version": "0.0.0",
-  "description": "",
-  "main": "Gruntfile.js",
-  "dependencies": {
-    "grunt-contrib-uglify": "^3.4.0",
-    "grunt-contrib-watch": "^1.1.0",
-    "grunt-dust": "^0.9.4",
-    "grunt-dustjs": "^1.4.0",
-    "grunt-wiredep": "^3.0.1"
-  },
-  "devDependencies": {
-    "browserify": "^16.2.3",
-    "grunt": "^1.3.0",
-    "grunt-contrib-cssmin": "^2.2.1",
-    "grunt-contrib-jshint": "^1.1.0",
-    "grunt-include-source": "^1.1.0",
-    "grunt-plato": "^1.4.0",
-    "it-each": "^0.4.0",
-    "jasmine-core": "^3.2.1",
-    "karma": "^3.0.0",
-    "karma-browserify": "^5.3.0",
-    "karma-chrome-launcher": "^2.2.0",
-    "karma-firefox-launcher": "^1.1.0",
-    "karma-jasmine": "^1.1.2",
-    "watchify": "^3.11.0"
-  },
-  "scripts": {
-    "test": "karma start"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git@gitlab.esrf.fr:icat/doi-landing-page.git"
-  },
-  "author": "",
-  "license": "ISC"
-}
diff --git a/www/sitemap.txt b/www/sitemap.txt
deleted file mode 100644
index 1a4d267..0000000
--- a/www/sitemap.txt
+++ /dev/null
@@ -1,522 +0,0 @@
-https://doi.esrf.fr/10.15151/ESRF-ES-184452790
-https://doi.esrf.fr/10.15151/ESRF-ES-181929278
-https://doi.esrf.fr/10.15151/ESRF-ES-180010675
-https://doi.esrf.fr/10.15151/ESRF-ES-174878751
-https://doi.esrf.fr/10.15151/ESRF-ES-171497103
-https://doi.esrf.fr/10.15151/ESRF-ES-171413692
-https://doi.esrf.fr/10.15151/ESRF-ES-170538899
-https://doi.esrf.fr/10.15151/ESRF-ES-168122548
-https://doi.esrf.fr/10.15151/ESRF-ES-166784171
-https://doi.esrf.fr/10.15151/ESRF-ES-164574982
-https://doi.esrf.fr/10.15151/ESRF-ES-164574620
-https://doi.esrf.fr/10.15151/ESRF-ES-163990087
-https://doi.esrf.fr/10.15151/ESRF-ES-163256950
-https://doi.esrf.fr/10.15151/ESRF-ES-163247412
-https://doi.esrf.fr/10.15151/ESRF-ES-163225824
-https://doi.esrf.fr/10.15151/ESRF-ES-162707306
-https://doi.esrf.fr/10.15151/ESRF-ES-162687854
-https://doi.esrf.fr/10.15151/ESRF-ES-162251846
-https://doi.esrf.fr/10.15151/ESRF-ES-162248078
-https://doi.esrf.fr/10.15151/ESRF-ES-162248067
-https://doi.esrf.fr/10.15151/ESRF-ES-161963533
-https://doi.esrf.fr/10.15151/ESRF-ES-161931585
-https://doi.esrf.fr/10.15151/ESRF-ES-160644008
-https://doi.esrf.fr/10.15151/ESRF-ES-159994365
-https://doi.esrf.fr/10.15151/ESRF-ES-159961245
-https://doi.esrf.fr/10.15151/ESRF-ES-159956084
-https://doi.esrf.fr/10.15151/ESRF-ES-159445033
-https://doi.esrf.fr/10.15151/ESRF-ES-159410662
-https://doi.esrf.fr/10.15151/ESRF-ES-158876748
-https://doi.esrf.fr/10.15151/ESRF-ES-158859464
-https://doi.esrf.fr/10.15151/ESRF-ES-158859089
-https://doi.esrf.fr/10.15151/ESRF-ES-158573495
-https://doi.esrf.fr/10.15151/ESRF-ES-158308267
-https://doi.esrf.fr/10.15151/ESRF-ES-158028007
-https://doi.esrf.fr/10.15151/ESRF-ES-157970994
-https://doi.esrf.fr/10.15151/ESRF-ES-157904329
-https://doi.esrf.fr/10.15151/ESRF-ES-157726885
-https://doi.esrf.fr/10.15151/ESRF-ES-157726842
-https://doi.esrf.fr/10.15151/ESRF-ES-157689375
-https://doi.esrf.fr/10.15151/ESRF-ES-157299629
-https://doi.esrf.fr/10.15151/ESRF-ES-155404944
-https://doi.esrf.fr/10.15151/ESRF-ES-155242587
-https://doi.esrf.fr/10.15151/ESRF-ES-155240127
-https://doi.esrf.fr/10.15151/ESRF-ES-155216741
-https://doi.esrf.fr/10.15151/ESRF-ES-155205493
-https://doi.esrf.fr/10.15151/ESRF-ES-155205381
-https://doi.esrf.fr/10.15151/ESRF-ES-155204753
-https://doi.esrf.fr/10.15151/ESRF-ES-154202231
-https://doi.esrf.fr/10.15151/ESRF-ES-154128138
-https://doi.esrf.fr/10.15151/ESRF-ES-152611353
-https://doi.esrf.fr/10.15151/ESRF-ES-151565774
-https://doi.esrf.fr/10.15151/ESRF-ES-151542137
-https://doi.esrf.fr/10.15151/ESRF-ES-150860761
-https://doi.esrf.fr/10.15151/ESRF-ES-150325184
-https://doi.esrf.fr/10.15151/ESRF-ES-150291534
-https://doi.esrf.fr/10.15151/ESRF-ES-150269629
-https://doi.esrf.fr/10.15151/ESRF-ES-149283553
-https://doi.esrf.fr/10.15151/ESRF-ES-147900374
-https://doi.esrf.fr/10.15151/ESRF-ES-147124103
-https://doi.esrf.fr/10.15151/ESRF-ES-147122999
-https://doi.esrf.fr/10.15151/ESRF-ES-147110748
-https://doi.esrf.fr/10.15151/ESRF-ES-147110737
-https://doi.esrf.fr/10.15151/ESRF-ES-146788748
-https://doi.esrf.fr/10.15151/ESRF-ES-146304266
-https://doi.esrf.fr/10.15151/ESRF-ES-146284282
-https://doi.esrf.fr/10.15151/ESRF-ES-146282714
-https://doi.esrf.fr/10.15151/ESRF-ES-146277404
-https://doi.esrf.fr/10.15151/ESRF-ES-145450145
-https://doi.esrf.fr/10.15151/ESRF-ES-145267148
-https://doi.esrf.fr/10.15151/ESRF-ES-145194304
-https://doi.esrf.fr/10.15151/ESRF-ES-145107284
-https://doi.esrf.fr/10.15151/ESRF-ES-145088681
-https://doi.esrf.fr/10.15151/ESRF-ES-145085249
-https://doi.esrf.fr/10.15151/ESRF-ES-145085063
-https://doi.esrf.fr/10.15151/ESRF-ES-144796048
-https://doi.esrf.fr/10.15151/ESRF-ES-144580587
-https://doi.esrf.fr/10.15151/ESRF-ES-144554304
-https://doi.esrf.fr/10.15151/ESRF-ES-144479045
-https://doi.esrf.fr/10.15151/ESRF-ES-144367705
-https://doi.esrf.fr/10.15151/ESRF-ES-143436284
-https://doi.esrf.fr/10.15151/ESRF-ES-143373441
-https://doi.esrf.fr/10.15151/ESRF-ES-143360964
-https://doi.esrf.fr/10.15151/ESRF-ES-143094721
-https://doi.esrf.fr/10.15151/ESRF-ES-142866117
-https://doi.esrf.fr/10.15151/ESRF-ES-142846529
-https://doi.esrf.fr/10.15151/ESRF-ES-142840456
-https://doi.esrf.fr/10.15151/ESRF-ES-142840375
-https://doi.esrf.fr/10.15151/ESRF-ES-142757577
-https://doi.esrf.fr/10.15151/ESRF-ES-142673807
-https://doi.esrf.fr/10.15151/ESRF-ES-142481073
-https://doi.esrf.fr/10.15151/ESRF-ES-141972475
-https://doi.esrf.fr/10.15151/ESRF-ES-141963373
-https://doi.esrf.fr/10.15151/ESRF-ES-140506618
-https://doi.esrf.fr/10.15151/ESRF-ES-140436170
-https://doi.esrf.fr/10.15151/ESRF-ES-140360388
-https://doi.esrf.fr/10.15151/ESRF-ES-140296588
-https://doi.esrf.fr/10.15151/ESRF-ES-139035493
-https://doi.esrf.fr/10.15151/ESRF-ES-138779835
-https://doi.esrf.fr/10.15151/ESRF-ES-138040476
-https://doi.esrf.fr/10.15151/ESRF-ES-137827701
-https://doi.esrf.fr/10.15151/ESRF-ES-137317923
-https://doi.esrf.fr/10.15151/ESRF-ES-137293723
-https://doi.esrf.fr/10.15151/ESRF-ES-137205237
-https://doi.esrf.fr/10.15151/ESRF-ES-135816585
-https://doi.esrf.fr/10.15151/ESRF-ES-135806642
-https://doi.esrf.fr/10.15151/ESRF-ES-135806187
-https://doi.esrf.fr/10.15151/ESRF-ES-135760149
-https://doi.esrf.fr/10.15151/ESRF-ES-135588622
-https://doi.esrf.fr/10.15151/ESRF-ES-135588471
-https://doi.esrf.fr/10.15151/ESRF-ES-135135830
-https://doi.esrf.fr/10.15151/ESRF-ES-134958966
-https://doi.esrf.fr/10.15151/ESRF-ES-134751624
-https://doi.esrf.fr/10.15151/ESRF-ES-134500785
-https://doi.esrf.fr/10.15151/ESRF-ES-134461532
-https://doi.esrf.fr/10.15151/ESRF-ES-133989980
-https://doi.esrf.fr/10.15151/ESRF-ES-133628388
-https://doi.esrf.fr/10.15151/ESRF-ES-133436389
-https://doi.esrf.fr/10.15151/ESRF-ES-133424186
-https://doi.esrf.fr/10.15151/ESRF-ES-133418463
-https://doi.esrf.fr/10.15151/ESRF-ES-133418343
-https://doi.esrf.fr/10.15151/ESRF-ES-133417381
-https://doi.esrf.fr/10.15151/ESRF-ES-133417050
-https://doi.esrf.fr/10.15151/ESRF-ES-133065895
-https://doi.esrf.fr/10.15151/ESRF-ES-133044090
-https://doi.esrf.fr/10.15151/ESRF-ES-132948299
-https://doi.esrf.fr/10.15151/ESRF-ES-132939048
-https://doi.esrf.fr/10.15151/ESRF-ES-132862896
-https://doi.esrf.fr/10.15151/ESRF-ES-132630521
-https://doi.esrf.fr/10.15151/ESRF-ES-132528770
-https://doi.esrf.fr/10.15151/ESRF-ES-132528576
-https://doi.esrf.fr/10.15151/ESRF-ES-132283130
-https://doi.esrf.fr/10.15151/ESRF-ES-132279991
-https://doi.esrf.fr/10.15151/ESRF-ES-132183231
-https://doi.esrf.fr/10.15151/ESRF-ES-131846968
-https://doi.esrf.fr/10.15151/ESRF-ES-131150513
-https://doi.esrf.fr/10.15151/ESRF-ES-131022975
-https://doi.esrf.fr/10.15151/ESRF-ES-131009905
-https://doi.esrf.fr/10.15151/ESRF-ES-130997639
-https://doi.esrf.fr/10.15151/ESRF-ES-130884741
-https://doi.esrf.fr/10.15151/ESRF-ES-130874985
-https://doi.esrf.fr/10.15151/ESRF-ES-130874981
-https://doi.esrf.fr/10.15151/ESRF-ES-130874477
-https://doi.esrf.fr/10.15151/ESRF-ES-130838861
-https://doi.esrf.fr/10.15151/ESRF-ES-130415014
-https://doi.esrf.fr/10.15151/ESRF-ES-130412444
-https://doi.esrf.fr/10.15151/ESRF-ES-130033368
-https://doi.esrf.fr/10.15151/ESRF-ES-130026137
-https://doi.esrf.fr/10.15151/ESRF-ES-129233760
-https://doi.esrf.fr/10.15151/ESRF-ES-129117363
-https://doi.esrf.fr/10.15151/ESRF-ES-128998416
-https://doi.esrf.fr/10.15151/ESRF-ES-128944986
-https://doi.esrf.fr/10.15151/ESRF-ES-128504822
-https://doi.esrf.fr/10.15151/ESRF-ES-127995557
-https://doi.esrf.fr/10.15151/ESRF-ES-127993606
-https://doi.esrf.fr/10.15151/ESRF-ES-127993035
-https://doi.esrf.fr/10.15151/ESRF-ES-127992737
-https://doi.esrf.fr/10.15151/ESRF-ES-127835087
-https://doi.esrf.fr/10.15151/ESRF-ES-127754215
-https://doi.esrf.fr/10.15151/ESRF-ES-127495001
-https://doi.esrf.fr/10.15151/ESRF-ES-127328736
-https://doi.esrf.fr/10.15151/ESRF-ES-127319578
-https://doi.esrf.fr/10.15151/ESRF-ES-127315716
-https://doi.esrf.fr/10.15151/ESRF-ES-127019713
-https://doi.esrf.fr/10.15151/ESRF-ES-126886707
-https://doi.esrf.fr/10.15151/ESRF-ES-126885646
-https://doi.esrf.fr/10.15151/ESRF-ES-126868849
-https://doi.esrf.fr/10.15151/ESRF-ES-126791309
-https://doi.esrf.fr/10.15151/ESRF-ES-126693670
-https://doi.esrf.fr/10.15151/ESRF-ES-126600748
-https://doi.esrf.fr/10.15151/ESRF-ES-126193516
-https://doi.esrf.fr/10.15151/ESRF-ES-124358337
-https://doi.esrf.fr/10.15151/ESRF-ES-124265259
-https://doi.esrf.fr/10.15151/ESRF-ES-124227492
-https://doi.esrf.fr/10.15151/ESRF-ES-124222055
-https://doi.esrf.fr/10.15151/ESRF-ES-122496872
-https://doi.esrf.fr/10.15151/ESRF-ES-122471822
-https://doi.esrf.fr/10.15151/ESRF-ES-122481661
-https://doi.esrf.fr/10.15151/ESRF-ES-122238319
-https://doi.esrf.fr/10.15151/ESRF-ES-122136876
-https://doi.esrf.fr/10.15151/ESRF-ES-122135087
-https://doi.esrf.fr/10.15151/ESRF-ES-121810241
-https://doi.esrf.fr/10.15151/ESRF-ES-121797240
-https://doi.esrf.fr/10.15151/ESRF-ES-121587363
-https://doi.esrf.fr/10.15151/ESRF-ES-120961707
-https://doi.esrf.fr/10.15151/ESRF-ES-120878197
-https://doi.esrf.fr/10.15151/ESRF-ES-120403650
-https://doi.esrf.fr/10.15151/ESRF-ES-120126396
-https://doi.esrf.fr/10.15151/ESRF-ES-120120588
-https://doi.esrf.fr/10.15151/ESRF-ES-120104269
-https://doi.esrf.fr/10.15151/ESRF-ES-119994641
-https://doi.esrf.fr/10.15151/ESRF-ES-119895319
-https://doi.esrf.fr/10.15151/ESRF-ES-119805810
-https://doi.esrf.fr/10.15151/ESRF-ES-119805491
-https://doi.esrf.fr/10.15151/ESRF-ES-119804980
-https://doi.esrf.fr/10.15151/ESRF-ES-119568907
-https://doi.esrf.fr/10.15151/ESRF-ES-119499096
-https://doi.esrf.fr/10.15151/ESRF-ES-119464359
-https://doi.esrf.fr/10.15151/ESRF-ES-119464351
-https://doi.esrf.fr/10.15151/ESRF-ES-119463983
-https://doi.esrf.fr/10.15151/ESRF-ES-119235097
-https://doi.esrf.fr/10.15151/ESRF-ES-118934380
-https://doi.esrf.fr/10.15151/ESRF-ES-118923391
-https://doi.esrf.fr/10.15151/ESRF-ES-118729694
-https://doi.esrf.fr/10.15151/ESRF-ES-118686985
-https://doi.esrf.fr/10.15151/ESRF-ES-118629616
-https://doi.esrf.fr/10.15151/ESRF-ES-118498674
-https://doi.esrf.fr/10.15151/ESRF-ES-118447194
-https://doi.esrf.fr/10.15151/ESRF-ES-118447013
-https://doi.esrf.fr/10.15151/ESRF-ES-118368616
-https://doi.esrf.fr/10.15151/ESRF-ES-118346851
-https://doi.esrf.fr/10.15151/ESRF-ES-118179781
-https://doi.esrf.fr/10.15151/ESRF-ES-118170174
-https://doi.esrf.fr/10.15151/ESRF-ES-118167609
-https://doi.esrf.fr/10.15151/ESRF-ES-117605227
-https://doi.esrf.fr/10.15151/ESRF-ES-117586989
-https://doi.esrf.fr/10.15151/ESRF-ES-117583838
-https://doi.esrf.fr/10.15151/ESRF-ES-117364477
-https://doi.esrf.fr/10.15151/ESRF-ES-117235103
-https://doi.esrf.fr/10.15151/ESRF-ES-116939075
-https://doi.esrf.fr/10.15151/ESRF-ES-116937630
-https://doi.esrf.fr/10.15151/ESRF-ES-116934142
-https://doi.esrf.fr/10.15151/ESRF-ES-116548212
-https://doi.esrf.fr/10.15151/ESRF-ES-116530300
-https://doi.esrf.fr/10.15151/ESRF-ES-116519894
-https://doi.esrf.fr/10.15151/ESRF-ES-116065101
-https://doi.esrf.fr/10.15151/ESRF-ES-116040417
-https://doi.esrf.fr/10.15151/ESRF-ES-115705525
-https://doi.esrf.fr/10.15151/ESRF-ES-115658541
-https://doi.esrf.fr/10.15151/ESRF-ES-115548504
-https://doi.esrf.fr/10.15151/ESRF-ES-115539115
-https://doi.esrf.fr/10.15151/ESRF-ES-115451959
-https://doi.esrf.fr/10.15151/ESRF-ES-115354787
-https://doi.esrf.fr/10.15151/ESRF-ES-115334770
-https://doi.esrf.fr/10.15151/ESRF-ES-115305167
-https://doi.esrf.fr/10.15151/ESRF-ES-114980029
-https://doi.esrf.fr/10.15151/ESRF-ES-118169986
-https://doi.esrf.fr/10.15151/ESRF-ES-114573812
-https://doi.esrf.fr/10.15151/ESRF-ES-114565706
-https://doi.esrf.fr/10.15151/ESRF-ES-118169992
-https://doi.esrf.fr/10.15151/ESRF-ES-118169962
-https://doi.esrf.fr/10.15151/ESRF-ES-114199993
-https://doi.esrf.fr/10.15151/ESRF-ES-113999726
-https://doi.esrf.fr/10.15151/ESRF-ES-113895337
-https://doi.esrf.fr/10.15151/ESRF-ES-113585769
-https://doi.esrf.fr/10.15151/ESRF-ES-118169965
-https://doi.esrf.fr/10.15151/ESRF-ES-112688911
-https://doi.esrf.fr/10.15151/ESRF-ES-112668425
-https://doi.esrf.fr/10.15151/ESRF-ES-112668423
-https://doi.esrf.fr/10.15151/ESRF-ES-112482147
-https://doi.esrf.fr/10.15151/ESRF-ES-118169900
-https://doi.esrf.fr/10.15151/ESRF-ES-112053688
-https://doi.esrf.fr/10.15151/ESRF-ES-111584835
-https://doi.esrf.fr/10.15151/ESRF-ES-111578542
-https://doi.esrf.fr/10.15151/ESRF-ES-111168787
-https://doi.esrf.fr/10.15151/ESRF-ES-111133234
-https://doi.esrf.fr/10.15151/ESRF-ES-118169891
-https://doi.esrf.fr/10.15151/ESRF-ES-110859523
-https://doi.esrf.fr/10.15151/ESRF-ES-110423041
-https://doi.esrf.fr/10.15151/ESRF-ES-109967489
-https://doi.esrf.fr/10.15151/ESRF-ES-118169953
-https://doi.esrf.fr/10.15151/ESRF-ES-109431849
-https://doi.esrf.fr/10.15151/ESRF-ES-109206218
-https://doi.esrf.fr/10.15151/ESRF-ES-108936441
-https://doi.esrf.fr/10.15151/ESRF-ES-118169937
-https://doi.esrf.fr/10.15151/ESRF-ES-108737545
-https://doi.esrf.fr/10.15151/ESRF-ES-108718973
-https://doi.esrf.fr/10.15151/ESRF-ES-108715776
-https://doi.esrf.fr/10.15151/ESRF-ES-108404596
-https://doi.esrf.fr/10.15151/ESRF-ES-108294796
-https://doi.esrf.fr/10.15151/ESRF-ES-108154290
-https://doi.esrf.fr/10.15151/ESRF-ES-118169974
-https://doi.esrf.fr/10.15151/ESRF-ES-108012307
-https://doi.esrf.fr/10.15151/ESRF-ES-108012210
-https://doi.esrf.fr/10.15151/ESRF-ES-107950358
-https://doi.esrf.fr/10.15151/ESRF-ES-118169925
-https://doi.esrf.fr/10.15151/ESRF-ES-106333436
-https://doi.esrf.fr/10.15151/ESRF-ES-106107338
-https://doi.esrf.fr/10.15151/ESRF-ES-106105591
-https://doi.esrf.fr/10.15151/ESRF-ES-118169928
-https://doi.esrf.fr/10.15151/ESRF-ES-105805374
-https://doi.esrf.fr/10.15151/ESRF-ES-105804379
-https://doi.esrf.fr/10.15151/ESRF-ES-118169907
-https://doi.esrf.fr/10.15151/ESRF-ES-118169916
-https://doi.esrf.fr/10.15151/ESRF-ES-105710016
-https://doi.esrf.fr/10.15151/ESRF-ES-105709996
-https://doi.esrf.fr/10.15151/ESRF-ES-105564349
-https://doi.esrf.fr/10.15151/ESRF-ES-118169949
-https://doi.esrf.fr/10.15151/ESRF-ES-105493981
-https://doi.esrf.fr/10.15151/ESRF-ES-105362144
-https://doi.esrf.fr/10.15151/ESRF-ES-105261774
-https://doi.esrf.fr/10.15151/ESRF-ES-105142453
-https://doi.esrf.fr/10.15151/ESRF-ES-104972481
-https://doi.esrf.fr/10.15151/ESRF-ES-104970528
-https://doi.esrf.fr/10.15151/ESRF-ES-104774431
-https://doi.esrf.fr/10.15151/ESRF-ES-104655614
-https://doi.esrf.fr/10.15151/ESRF-ES-104410395
-https://doi.esrf.fr/10.15151/ESRF-ES-104404318
-https://doi.esrf.fr/10.15151/ESRF-ES-118169885
-https://doi.esrf.fr/10.15151/ESRF-ES-103850884
-https://doi.esrf.fr/10.15151/ESRF-ES-103822339
-https://doi.esrf.fr/10.15151/ESRF-ES-103670673
-https://doi.esrf.fr/10.15151/ESRF-ES-103510629
-https://doi.esrf.fr/10.15151/ESRF-ES-103510614
-https://doi.esrf.fr/10.15151/ESRF-ES-103333830
-https://doi.esrf.fr/10.15151/ESRF-ES-103183778
-https://doi.esrf.fr/10.15151/ESRF-ES-103116186
-https://doi.esrf.fr/10.15151/ESRF-ES-103115350
-https://doi.esrf.fr/10.15151/ESRF-ES-118169999
-https://doi.esrf.fr/10.15151/ESRF-ES-102584455
-https://doi.esrf.fr/10.15151/ESRF-ES-102576891
-https://doi.esrf.fr/10.15151/ESRF-ES-102440920
-https://doi.esrf.fr/10.15151/ESRF-ES-102373644
-https://doi.esrf.fr/10.15151/ESRF-ES-118169876
-https://doi.esrf.fr/10.15151/ESRF-ES-101905463
-https://doi.esrf.fr/10.15151/ESRF-ES-101872286
-https://doi.esrf.fr/10.15151/ESRF-ES-101843223
-https://doi.esrf.fr/10.15151/ESRF-ES-101823522
-https://doi.esrf.fr/10.15151/ESRF-ES-118169971
-https://doi.esrf.fr/10.15151/ESRF-ES-101569525
-https://doi.esrf.fr/10.15151/ESRF-ES-101127303
-https://doi.esrf.fr/10.15151/ESRF-ES-101113846
-https://doi.esrf.fr/10.15151/ESRF-ES-100748218
-https://doi.esrf.fr/10.15151/ESRF-ES-100483209
-https://doi.esrf.fr/10.15151/ESRF-ES-100444815
-https://doi.esrf.fr/10.15151/ESRF-ES-100389184
-https://doi.esrf.fr/10.15151/ESRF-ES-100329643
-https://doi.esrf.fr/10.15151/ESRF-ES-100129017
-https://doi.esrf.fr/10.15151/ESRF-ES-99268493
-https://doi.esrf.fr/10.15151/ESRF-ES-99054302
-https://doi.esrf.fr/10.15151/ESRF-ES-99051610
-https://doi.esrf.fr/10.15151/ESRF-ES-99036937
-https://doi.esrf.fr/10.15151/ESRF-ES-118169867
-https://doi.esrf.fr/10.15151/ESRF-ES-98516694
-https://doi.esrf.fr/10.15151/ESRF-ES-98484251
-https://doi.esrf.fr/10.15151/ESRF-ES-97799000
-https://doi.esrf.fr/10.15151/ESRF-ES-97692825
-https://doi.esrf.fr/10.15151/ESRF-ES-97579051
-https://doi.esrf.fr/10.15151/ESRF-ES-97560425
-https://doi.esrf.fr/10.15151/ESRF-ES-97543424
-https://doi.esrf.fr/10.15151/ESRF-ES-97349939
-https://doi.esrf.fr/10.15151/ESRF-ES-97308600
-https://doi.esrf.fr/10.15151/ESRF-ES-97284682
-https://doi.esrf.fr/10.15151/ESRF-ES-97062972
-https://doi.esrf.fr/10.15151/ESRF-ES-97059468
-https://doi.esrf.fr/10.15151/ESRF-ES-96823860
-https://doi.esrf.fr/10.15151/ESRF-ES-96823783
-https://doi.esrf.fr/10.15151/ESRF-ES-96822926
-https://doi.esrf.fr/10.15151/ESRF-ES-96822720
-https://doi.esrf.fr/10.15151/ESRF-ES-96822620
-https://doi.esrf.fr/10.15151/ESRF-ES-96614964
-https://doi.esrf.fr/10.15151/ESRF-ES-96614611
-https://doi.esrf.fr/10.15151/ESRF-ES-96499898
-https://doi.esrf.fr/10.15151/ESRF-ES-96318785
-https://doi.esrf.fr/10.15151/ESRF-ES-95948696
-https://doi.esrf.fr/10.15151/ESRF-ES-95945234
-https://doi.esrf.fr/10.15151/ESRF-ES-95941505
-https://doi.esrf.fr/10.15151/ESRF-ES-95938495
-https://doi.esrf.fr/10.15151/ESRF-ES-95902814
-https://doi.esrf.fr/10.15151/ESRF-ES-95608574
-https://doi.esrf.fr/10.15151/ESRF-ES-95608373
-https://doi.esrf.fr/10.15151/ESRF-ES-95601432
-https://doi.esrf.fr/10.15151/ESRF-ES-95600596
-https://doi.esrf.fr/10.15151/ESRF-ES-95455645
-https://doi.esrf.fr/10.15151/ESRF-ES-95282956
-https://doi.esrf.fr/10.15151/ESRF-ES-95217558
-https://doi.esrf.fr/10.15151/ESRF-ES-95212808
-https://doi.esrf.fr/10.15151/ESRF-ES-95212225
-https://doi.esrf.fr/10.15151/ESRF-ES-94944488
-https://doi.esrf.fr/10.15151/ESRF-ES-94929323
-https://doi.esrf.fr/10.15151/ESRF-ES-94920677
-https://doi.esrf.fr/10.15151/ESRF-ES-94756894
-https://doi.esrf.fr/10.15151/ESRF-ES-94638761
-https://doi.esrf.fr/10.15151/ESRF-ES-94636543
-https://doi.esrf.fr/10.15151/ESRF-ES-94535688
-https://doi.esrf.fr/10.15151/ESRF-ES-94529374
-https://doi.esrf.fr/10.15151/ESRF-ES-94520246
-https://doi.esrf.fr/10.15151/ESRF-ES-94374108
-https://doi.esrf.fr/10.15151/ESRF-ES-94212235
-https://doi.esrf.fr/10.15151/ESRF-ES-94201225
-https://doi.esrf.fr/10.15151/ESRF-ES-94190939
-https://doi.esrf.fr/10.15151/ESRF-ES-93862624
-https://doi.esrf.fr/10.15151/ESRF-ES-93841705
-https://doi.esrf.fr/10.15151/ESRF-ES-93644946
-https://doi.esrf.fr/10.15151/ESRF-ES-93598391
-https://doi.esrf.fr/10.15151/ESRF-ES-93597902
-https://doi.esrf.fr/10.15151/ESRF-ES-93592827
-https://doi.esrf.fr/10.15151/ESRF-ES-93253723
-https://doi.esrf.fr/10.15151/ESRF-ES-92352178
-https://doi.esrf.fr/10.15151/ESRF-ES-92349871
-https://doi.esrf.fr/10.15151/ESRF-ES-92219443
-https://doi.esrf.fr/10.15151/ESRF-ES-92202780
-https://doi.esrf.fr/10.15151/ESRF-ES-92177754
-https://doi.esrf.fr/10.15151/ESRF-ES-123016643
-https://doi.esrf.fr/10.15151/ESRF-ES-92162619
-https://doi.esrf.fr/10.15151/ESRF-ES-92162610
-https://doi.esrf.fr/10.15151/ESRF-ES-92161916
-https://doi.esrf.fr/10.15151/ESRF-ES-92161891
-https://doi.esrf.fr/10.15151/ESRF-ES-92150081
-https://doi.esrf.fr/10.15151/ESRF-ES-91877587
-https://doi.esrf.fr/10.15151/ESRF-ES-91846670
-https://doi.esrf.fr/10.15151/ESRF-ES-91846265
-https://doi.esrf.fr/10.15151/ESRF-ES-91836717
-https://doi.esrf.fr/10.15151/ESRF-ES-91822219
-https://doi.esrf.fr/10.15151/ESRF-ES-91732296
-https://doi.esrf.fr/10.15151/ESRF-ES-91732236
-https://doi.esrf.fr/10.15151/ESRF-ES-91656957
-https://doi.esrf.fr/10.15151/ESRF-ES-91586611
-https://doi.esrf.fr/10.15151/ESRF-ES-91586319
-https://doi.esrf.fr/10.15151/ESRF-ES-91585925
-https://doi.esrf.fr/10.15151/ESRF-ES-91421585
-https://doi.esrf.fr/10.15151/ESRF-ES-91076856
-https://doi.esrf.fr/10.15151/ESRF-ES-91076597
-https://doi.esrf.fr/10.15151/ESRF-ES-90633392
-https://doi.esrf.fr/10.15151/ESRF-ES-90633157
-https://doi.esrf.fr/10.15151/ESRF-ES-90632739
-https://doi.esrf.fr/10.15151/ESRF-ES-90632248
-https://doi.esrf.fr/10.15151/ESRF-ES-90632078
-https://doi.esrf.fr/10.15151/ESRF-ES-90610071
-https://doi.esrf.fr/10.15151/ESRF-ES-90531358
-https://doi.esrf.fr/10.15151/ESRF-ES-90378880
-https://doi.esrf.fr/10.15151/ESRF-ES-90375370
-https://doi.esrf.fr/10.15151/ESRF-ES-90375186
-https://doi.esrf.fr/10.15151/ESRF-ES-89193924
-https://doi.esrf.fr/10.15151/ESRF-ES-88836881
-https://doi.esrf.fr/10.15151/ESRF-ES-87561975
-https://doi.esrf.fr/10.15151/ESRF-ES-87416237
-https://doi.esrf.fr/10.15151/ESRF-ES-87410954
-https://doi.esrf.fr/10.15151/ESRF-ES-86896510
-https://doi.esrf.fr/10.15151/ESRF-ES-86533633
-https://doi.esrf.fr/10.15151/ESRF-ES-86410123
-https://doi.esrf.fr/10.15151/ESRF-ES-86039273
-https://doi.esrf.fr/10.15151/ESRF-ES-85858239
-https://doi.esrf.fr/10.15151/ESRF-ES-85392633
-https://doi.esrf.fr/10.15151/ESRF-ES-84149394
-https://doi.esrf.fr/10.15151/ESRF-ES-84145492
-https://doi.esrf.fr/10.15151/ESRF-ES-84010164
-https://doi.esrf.fr/10.15151/ESRF-ES-83826208
-https://doi.esrf.fr/10.15151/ESRF-ES-82159689
-https://doi.esrf.fr/10.15151/ESRF-ES-81910232
-https://doi.esrf.fr/10.15151/ESRF-ES-79263824
-https://doi.esrf.fr/10.15151/ESRF-ES-77484279
-https://doi.esrf.fr/10.15151/ESRF-ES-76990955
-https://doi.esrf.fr/10.15151/ESRF-ES-76355704
-https://doi.esrf.fr/10.15151/ESRF-ES-74854051
-https://doi.esrf.fr/10.15151/ESRF-ES-74836812
-https://doi.esrf.fr/10.15151/ESRF-ES-74746123
-https://doi.esrf.fr/10.15151/ESRF-ES-74255164
-https://doi.esrf.fr/10.15151/ESRF-ES-73115504
-https://doi.esrf.fr/10.15151/ESRF-ES-72804369
-https://doi.esrf.fr/10.15151/ESRF-ES-71559333
-https://doi.esrf.fr/10.15151/ESRF-ES-71391221
-https://doi.esrf.fr/10.15151/ESRF-ES-71096239
-https://doi.esrf.fr/10.15151/ESRF-ES-70356463
-https://doi.esrf.fr/10.15151/ESRF-ES-69596120
-https://doi.esrf.fr/10.15151/ESRF-ES-69376545
-https://doi.esrf.fr/10.15151/ESRF-ES-68688215
-https://doi.esrf.fr/10.15151/ESRF-ES-68682878
-https://doi.esrf.fr/10.15151/ESRF-ES-68260307
-https://doi.esrf.fr/10.15151/ESRF-ES-67542531
-https://doi.esrf.fr/10.15151/ESRF-ES-67159411
-https://doi.esrf.fr/10.15151/ESRF-ES-67090769
-https://doi.esrf.fr/10.15151/ESRF-ES-66943547
-https://doi.esrf.fr/10.15151/ESRF-ES-66521977
-https://doi.esrf.fr/10.15151/ESRF-ES-62119779
-https://doi.esrf.fr/10.15151/ESRF-ES-62119185
-https://doi.esrf.fr/10.15151/ESRF-ES-62054746
-https://doi.esrf.fr/10.15151/ESRF-ES-61877104
-https://doi.esrf.fr/10.15151/ESRF-ES-61873366
-https://doi.esrf.fr/10.15151/ESRF-ES-61783686
-https://doi.esrf.fr/10.15151/ESRF-ES-61665128
-https://doi.esrf.fr/10.15151/ESRF-ES-60977488
-https://doi.esrf.fr/10.15151/ESRF-ES-60682942
-https://doi.esrf.fr/10.15151/ESRF-ES-60226184
-https://doi.esrf.fr/10.15151/ESRF-ES-60225627
-https://doi.esrf.fr/10.15151/ESRF-ES-59883644
-https://doi.esrf.fr/10.15151/ESRF-ES-59848051
-https://doi.esrf.fr/10.15151/ESRF-ES-59508766
-https://doi.esrf.fr/10.15151/ESRF-ES-59321374
-https://doi.esrf.fr/10.15151/ESRF-ES-59284909
-https://doi.esrf.fr/10.15151/ESRF-ES-58957084
-https://doi.esrf.fr/10.15151/ESRF-ES-58831478
-https://doi.esrf.fr/10.15151/ESRF-ES-58784441
-https://doi.esrf.fr/10.15151/ESRF-ES-58581398
-https://doi.esrf.fr/10.15151/ESRF-ES-58494317
-https://doi.esrf.fr/10.15151/ESRF-ES-58077227
-https://doi.esrf.fr/10.15151/ESRF-ES-57726980
-https://doi.esrf.fr/10.15151/ESRF-ES-57504067
-https://doi.esrf.fr/10.15151/ESRF-ES-57502481
-https://doi.esrf.fr/10.15151/ESRF-ES-57176032
-https://doi.esrf.fr/10.15151/ESRF-ES-56717247
-https://doi.esrf.fr/10.15151/ESRF-ES-56717200
-https://doi.esrf.fr/10.15151/ESRF-ES-55833529
-https://doi.esrf.fr/10.15151/ESRF-ES-55558035
-https://doi.esrf.fr/10.15151/ESRF-ES-55416273
-https://doi.esrf.fr/10.15151/ESRF-ES-55384807
-https://doi.esrf.fr/10.15151/ESRF-ES-55108289
-https://doi.esrf.fr/10.15151/ESRF-ES-54672194
-https://doi.esrf.fr/10.15151/ESRF-ES-54642592
-https://doi.esrf.fr/10.15151/ESRF-ES-54639288
-https://doi.esrf.fr/10.15151/ESRF-ES-54384876
-https://doi.esrf.fr/10.15151/ESRF-ES-54308426
-https://doi.esrf.fr/10.15151/ESRF-ES-53832340
-https://doi.esrf.fr/10.15151/ESRF-ES-53827377
-https://doi.esrf.fr/10.15151/ESRF-ES-52898290
-https://doi.esrf.fr/10.15151/ESRF-ES-52776499
-https://doi.esrf.fr/10.15151/ESRF-ES-52749136
-https://doi.esrf.fr/10.15151/ESRF-ES-39438105
-https://doi.esrf.fr/10.15151/ESRF-ES-39148064
-https://doi.esrf.fr/10.15151/ESRF-ES-38942075
-https://doi.esrf.fr/10.15151/ESRF-ES-34876560
-https://doi.esrf.fr/10.15151/ESRF-ES-34497655
-https://doi.esrf.fr/10.15151/ESRF-ES-30150919
-https://doi.esrf.fr/10.15151/ESRF-ES-27341687
-https://doi.esrf.fr/10.15151/ESRF-ES-25934013
-https://doi.esrf.fr/10.15151/ESRF-ES-24212102
-https://doi.esrf.fr/10.15151/ESRF-ES-21481600
-https://doi.esrf.fr/10.15151/ESRF-ES-47877949
-https://doi.esrf.fr/10.15151/ESRF-ES-20306689
-https://doi.esrf.fr/10.15151/ESRF-ES-18443302
-https://doi.esrf.fr/10.15151/ESRF-ES-15527191
-https://doi.esrf.fr/10.15151/ESRF-ES-13178078
-https://doi.esrf.fr/10.15151/ESRF-ES-13171260
diff --git a/www/src/ESRF-DC-142893590.js b/www/src/ESRF-DC-142893590.js
deleted file mode 100644
index 44c0ba9..0000000
--- a/www/src/ESRF-DC-142893590.js
+++ /dev/null
@@ -1,137 +0,0 @@
-var ESRF_DC_142893590 = {
-    "id": "https://doi.org/10.15151/esrf-dc-142893590",
-    "doi": "10.15151/ESRF-DC-142893590",
-    "url": "https://doi.esrf.fr/10.15151/ESRF-DC-142893590",
-    "types": {
-        "ris": "DATA",
-        "bibtex": "misc",
-        "citeproc": "dataset",
-        "schemaOrg": "Dataset",
-        "resourceType": "Datacollection",
-        "resourceTypeGeneral": "Dataset"
-    },
-    "creators": [
-        {
-            "name": "Naschberger, Andreas",
-            "nameType": "Personal",
-            "givenName": "Andreas",
-            "familyName": "Naschberger"
-        },
-        {
-            "name": "Rupp, Bernhard",
-            "nameType": "Personal",
-            "givenName": "Bernhard",
-            "familyName": "Rupp"
-        }
-    ],
-    "titles": [
-        {
-            "title": "Structural Evidence for a Role of the Multi-functional Human Glycoprotein Afamin in Wnt Transport"
-        }
-    ],
-    "publisher": "European Synchrotron Radiation Facility",
-    "container": {},
-    "subjects": [
-        {
-            "subject": "OPID-1",
-            "subjectScheme": "Proposal"
-        },
-        {
-            "subject": "ID30A1",
-            "subjectScheme": "Instrument"
-        }
-    ],
-    "contributors": [
-        {
-            "name": "Bowler, Matthew W.",
-            "nameType": "Personal",
-            "givenName": "Matthew W.",
-            "familyName": "Bowler"
-        }
-    ],
-    "dates": [
-        {
-            "date": "2018",
-            "dateType": "Issued"
-        }
-    ],
-    "publicationYear": 2018,
-    "language": "en",
-    "identifiers": [
-        {
-            "identifier": "https://doi.org/10.15151/esrf-dc-142893590",
-            "identifierType": "DOI"
-        }
-    ],
-    "sizes": [],
-    "formats": [],
-    "rightsList": [],
-    "descriptions": [
-        {
-            "description": "Afamin, a human plasma glycoprotein and putative transporter of hydrophobic molecules, has been shown to act as extracellular chaperone for poorly soluble, acylated Wnt proteins, forming a stable, soluble complex with functioning Wnt proteins. The 2.1-Ã… crystal structure of glycosylated human afamin reveals an almost exclusively hydrophobic binding cleft capable of harboring large hydrophobic moieties. Lipid analysis confirms the presence of lipids, and density in the primary binding pocket of afamin was modeled as palmitoleic acid, presenting the native O-acylation on serine 209 in human Wnt3a. The modeled complex between the experimental afamin structure and a Wnt3a homology model based on the XWnt8-Fz8-CRD fragment complex crystal structure is compelling, with favorable interactions comparable with the crystal structure complex. Afamin readily accommodates the conserved palmitoylated serine 209 of Wnt3a, providing a structural basis how afamin solubilizes hydrophobic and poorly soluble Wnt proteins.",
-            "descriptionType": "Abstract"
-        }
-    ],
-    "geoLocations": [],
-    "fundingReferences": [],
-    "relatedIdentifiers": [],
-    "schemaVersion": "http://datacite.org/schema/kernel-3",
-    "providerId": "inist",
-    "clientId": "inist.esrf",
-    "state": "findable"
-};
-
-
-// {
-//     "id": "https://doi.org/10.15151/ESRF-DC-142893590",
-//     "doi": "10.15151/ESRF-DC-142893590",
-//     "creator": [
-//          {
-//             "type": "Person",
-//             "name": "Naschberger, Andreas",
-//             "givenName": "Andreas",
-//             "familyName": "Naschberger"
-//         },
-//         {
-//             "type": "Person",
-//             "name": "Bowler, Matthew W.",
-//             "givenName": "Matthew W.",
-//             "familyName": "Bowler"
-//         },
-//          {
-//             "type": "Person",
-//             "name": "Rupp, Bernhard",
-//             "givenName": "Bernhard",
-//             "familyName": "Rupp"
-//         }
-//     ],
-//     "title": "Structural Evidence for a Role of the Multi-functional Human Glycoprotein Afamin in Wnt Transport",
-//     "publisher": "European Synchrotron Radiation Facility",
-//     "resource_type_general": "Dataset",
-//     "resource_type": "Datacollection",
-//     "subject": [
-//         [         
-//             {
-//                 "subject_scheme": "Proposal",
-//                 "text": "OPID-30A1"
-//             },
-//             {
-//                 "subject_scheme": "instrument",
-//                 "text": "ID30A1"
-//             }
-//         ]
-//     ],
-//      "description": {
-//         "type": "Abstract",
-//         "text": "Afamin, a human plasma glycoprotein and putative transporter of hydrophobic molecules, has been shown to act as extracellular chaperone for poorly soluble, acylated Wnt proteins, forming a stable, soluble complex with functioning Wnt proteins. The 2.1-Ã… crystal structure of glycosylated human afamin reveals an almost exclusively hydrophobic binding cleft capable of harboring large hydrophobic moieties. Lipid analysis confirms the presence of lipids, and density in the primary binding pocket of afamin was modeled as palmitoleic acid, presenting the native O-acylation on serine 209 in human Wnt3a. The modeled complex between the experimental afamin structure and a Wnt3a homology model based on the XWnt8-Fz8-CRD fragment complex crystal structure is compelling, with favorable interactions comparable with the crystal structure complex. Afamin readily accommodates the conserved palmitoylated serine 209 of Wnt3a, providing a structural basis how afamin solubilizes hydrophobic and poorly soluble Wnt proteins."
-//     },
-//     "date_collected": "2018-03-07",
-//     "date_published": "2018",
-//     "date_registered": "2018-03-07T14:37:09Z",
-//     "date_updated": "2018-03-08T16:30:22Z",
-//     "publication_year": 2018,
-//     "language": "eng",
-//     "schemaVersion": "http://datacite.org/schema/kernel-3",
-//     "provider_id": "INIST",
-//     "client_id": "INIST.ESRF"
-// };
\ No newline at end of file
diff --git a/www/src/ESRF-DC-142915526.js b/www/src/ESRF-DC-142915526.js
deleted file mode 100644
index 305ff48..0000000
--- a/www/src/ESRF-DC-142915526.js
+++ /dev/null
@@ -1,81 +0,0 @@
-var ESRF_DC_142915526 = {
-    "id": "https://doi.org/10.15151/esrf-dc-142915526",
-    "doi": "10.15151/ESRF-DC-142915526",
-    "url": "https://doi.esrf.fr/10.15151/ESRF-DC-142915526",
-    "types": {
-      "ris": "DATA",
-      "bibtex": "misc",
-      "citeproc": "dataset",
-      "schemaOrg": "Dataset",
-      "resourceType": "Datacollection",
-      "resourceTypeGeneral": "Dataset"
-    },
-    "creators": [
-      {
-        "name": "Naschberger, Andreas",
-        "nameType": "Personal",
-        "givenName": "Andreas",
-        "familyName": "Naschberger"
-      },
-      {
-        "name": "Bowler, Matthew W.",
-        "nameType": "Personal",
-        "givenName": "Matthew W.",
-        "familyName": "Bowler"
-      },
-      {
-        "name": "Rupp, Bernhard",
-        "nameType": "Personal",
-        "givenName": "Bernhard",
-        "familyName": "Rupp"
-      }
-    ],
-    "titles": [
-      {
-        "title": "Controlled dehydration, structural flexibility, and Gadolinium MRI contrast compound binding in human plasma glycoprotein afamin"
-      }
-    ],
-    "publisher": "European Synchrotron Radiation Facility",
-    "container": {},
-    "subjects": [
-      {
-        "subject": "OPID-1",
-        "subjectScheme": "Proposal"
-      },
-      {
-        "subject": "ID30A1",
-        "subjectScheme": "Instrument"
-      }
-    ],
-    "contributors": [],
-    "dates": [
-      {
-        "date": "2018",
-        "dateType": "Issued"
-      }
-    ],
-    "publicationYear": 2018,
-    "language": "en",
-    "identifiers": [
-      {
-        "identifier": "https://doi.org/10.15151/esrf-dc-142915526",
-        "identifierType": "DOI"
-      }
-    ],
-    "sizes": [],
-    "formats": [],
-    "rightsList": [],
-    "descriptions": [
-      {
-        "description": "Afamin, a human blood plasma glycoprotein, a putative multi-functional transporter of hydrophobic molecules and a marker for metabolic syndrome, poses multiple challenges for crystallographic structure determination, both practically and in analysis of the models. Several hundred crystals were analysed, and unusual variability in cell volume and difficulty solving the structure despite a ~34% sequence identity with non-glycosylated human serum albumin indicated that the molecule exhibits variable and context-sensitive packing, despite greatly simplified glycosylation in insect cell expressed recombinant afamin. Controlled dehydration of the crystals was able to stabilise the orthorhombic crystal form reducing the number of molecules in the asymmetric unit from the monoclinic form and changing the conformational states of the protein.  An iterative strategy using fully automatic experiments available on MASSIF-1 was used to quickly determine the optimal protocol to achieve the phase transition that should be readily applicable to many types of sample. The study also highlights the drawback of using a single crystallographic structure model for computation modelling purposes given that conformational state of the binding sites and electron density in the binding site, likely resulting from PEGs, greatly varies between models. This also holds for the analysis of unspecific low-affinity ligands, where often a variety fragments with similar uncertainty can be modelled, inviting interpretative bias. As a promiscuous transporter, afamin can also bind Gadoteridol, a magnetic resonance imaging contrast compound in two sites, one near the human albumin Sudlow-site and a second hitherto unknown binding site.",
-        "descriptionType": "Abstract"
-      }
-    ],
-    "geoLocations": [],
-    "fundingReferences": [],
-    "relatedIdentifiers": [],
-    "schemaVersion": "http://datacite.org/schema/kernel-3",
-    "providerId": "inist",
-    "clientId": "inist.esrf",
-    "state": "findable"
-  };
\ No newline at end of file
diff --git a/www/src/author.js b/www/src/author.js
deleted file mode 100644
index 9539be8..0000000
--- a/www/src/author.js
+++ /dev/null
@@ -1,120 +0,0 @@
-function Author() {
-}
-
-/**
- * Set the first name as received from Json
- */
-Author.prototype.setFirstName = function(firstName) {
-  this.firstName = firstName;
-};
-
-/**
- * Set the family name as received from Json
- */
-Author.prototype.setFamilyName = function(familyName) {
-  this.familyName = familyName;
-};
-
-/**
- * Set the single name which contains the first name and the family name
- */
-Author.prototype.setSingleName = function(singleName) {
-  this.singleName = singleName;
-};
-
-/**
- * Return the raw family name.
- * @return {string} the family name if it was found. Null if not.  
- */
-Author.prototype.getRawFamilyName = function(){
-  if (this.familyName){
-    return this.familyName;
-  } else {
-    if (this.singleName){
-      // Check whether the family name can be extracted from the singleChain.
-      // 1 - play first Card : there are only 2 words in the chain. => second word is the familyName
-      
-      var findWordsRegExp = new RegExp(/(\S+)/g);
-      var wordTable = this.singleName.match(findWordsRegExp);
-            
-      if (wordTable.length === 2){
-        // there are 2 words
-        this.familyName = wordTable[1];
-        return this.familyName;
-      }
-      // 2 - play second card : Assumes all family names are FULLY UPPSERCASE in the single string    
-      var familyRegExp =  new RegExp(/\s([^a-z]+$)/);
-      var result = familyRegExp.exec(this.singleName); // null if not found
-      if (result){
-        this.familyName = result[1];
-      }
-      return this.familyName; //returns null if it not found      
-    }
-  }
-};
-
-
-/**
- * Return the raw first name.
- * @return {string} the first name if it was found. Null if not.  
- */
-Author.prototype.getRawFirstName = function(){
-  if (this.firstName){
-    return this.firstName;
-  } else {
-    if (this.singleName){
-      // Check whether the family name can be extracted from the singleChain.
-      
-      // 1 - play first Card : there are only 2 words in the chain. => first word is the firstName      
-      var findWordsRegExp = new RegExp(/(\S+)/g);
-      var wordTable = this.singleName.match(findWordsRegExp);
-            
-      if (wordTable.length === 2){
-        // there are 2 words
-        this.firstName = wordTable[0];
-        return this.firstName;
-      }
-      
-      // 2 - play second card : Assumes all first name are lowercase except first letter which can optionally be uppercase    
-      var firstNameRegExp = new RegExp(/^(.[^A-Z]+)+\b/);
-      var result = firstNameRegExp.exec(this.singleName);   // null if not found
-      if (result){
-        this.firstName = result[0];
-      }
-      return result; //returns null if it not found      
-    }
-  }
-};
-
-
-/**
- * Returns the family name as title name. Only the first letter of each words is
- * uppercase.
- */
-Author.prototype.getTitleCaseFamilyName = function() {
-  if (this.familyName) {
-    allLowerCase = this.familyName.toLowerCase();
-    var findFirstLetter = new RegExp(/^./);
-    return allLowerCase.replace(findFirstLetter, function(foundCharacter){return foundCharacter.toUpperCase();});    
-  } else {
-    
-    
-    console.log ("family name is undefined");
-    return null;
-  }
-};
-
-/**
- * Returns the initials of the first name.
- */
-Author.prototype.getFirstNameInitials = function(){
-  var firstNameInitialsRegExp = new RegExp(/(\S+)/g);
-  
-  if (this.firstName) {
-    return this.firstName.replace(firstNameInitialsRegExp, function(foundString){return foundString.charAt(0) + ".";});
-  }
-  else {
-    console.log ("first name is undefined");
-    return null;
-  }
-};
diff --git a/www/src/beamlineurl.js b/www/src/beamlineurl.js
deleted file mode 100644
index 491a3d6..0000000
--- a/www/src/beamlineurl.js
+++ /dev/null
@@ -1,116 +0,0 @@
-var BEAMLINEURL = [
-    {
-      "name" : "BM05",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.fr/UsersAndScience/Experiments/XNP/BM05"
-    },
-    {
-      "name" : "BM29",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.eu/UsersAndScience/Experiments/MX/About_our_beamlines/BM29"
-    },
-    {
-      "name" : "CM01",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.eu/home/UsersAndScience/Experiments/MX/About_our_beamlines/CM01.html"
-    },
-    {
-      "name" : "ID01",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.eu/UsersAndScience/Experiments/XNP/ID01"
-    },
-    {
-      "name" : "ID06",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.eu/home/UsersAndScience/Experiments/MEx/id06-large-volume-press.html"
-    },
-    {
-      "name" : "ID11",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.fr/UsersAndScience/Experiments/StructMaterials/ID11"
-    },
-    {
-      "name" : "ID16A",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.fr/UsersAndScience/Experiments/XNP/ID16A"
-    },
-    {
-      "name" : "ID16B",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.fr/UsersAndScience/Experiments/XNP/ID16B"
-    },
-    {
-      "name" : "ID17",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.fr/UsersAndScience/Experiments/CBS/ID17"
-    },
-    {
-      "name" : "ID19",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.fr/home/UsersAndScience/Experiments/StructMaterials/ID19.html"
-    },
-    {
-      "name" : "ID21",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.eu/UsersAndScience/Experiments/XNP/ID21"
-    },
-    {
-      "name" : "ID22",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.eu/id22"
-    },
-    {
-      "name" : "ID23-1",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.eu/UsersAndScience/Experiments/MX/About_our_beamlines/ID23-1"
-    },
-    {
-      "name" : "ID23-2",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.eu/UsersAndScience/Experiments/MX/About_our_beamlines/ID23-2"
-    },
-    {
-      "name" : "ID29",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.eu/home/UsersAndScience/Experiments/Beamlines/content/content/id29.html"
-    },
-    {
-      "name" : "ID30A1",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.eu/MASSIF1"
-    },
-    {
-      "name" : "ID30A3",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.eu/home/UsersAndScience/Experiments/MX/About_our_beamlines/id30a-3--massif-3.html"
-    }, 
-    {
-      "name" : "ID30B",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.eu/id30b"
-    }, 
-    {
-      "name" : "ID32",
-      "startDate" : "2000-01-01T00:00+00:00",
-      "endDate" : "2100-12-31T00:00+00:00",
-      "url" : "http://www.esrf.eu/ID32"
-    } 
- ];
\ No newline at end of file
diff --git a/www/src/citation.js b/www/src/citation.js
deleted file mode 100644
index ded59dc..0000000
--- a/www/src/citation.js
+++ /dev/null
@@ -1,80 +0,0 @@
-function Citation(doiData) {
-    function isBuildable() {
-        if (doiData && doiData.creators && doiData.creators.length !== 0 &&
-            doiData.title && doiData.publisher && doiData.doi) {
-
-            if (doiData.resourceType === CONSTANTS.ES_RESOURCE_TYPE && doiData.sessionDate) {
-                return true;
-            }
-            if (doiData.resourceType === CONSTANTS.DC_RESOURCE_TYPE && doiData.publiclyAccessibleYear) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    this.isBuildable = isBuildable();
-}
-
-/**
- * Construct the author list for the citation. Authors name are composed of the familyName in titleCase followed by the first letter of the first name
- * @param {arrayOrObj} theCreator(s). When there is a single author, it is an object. When there are several authors, it is an array.
- * @return {string} The formated list of authors to be used for the citation. An empty string when the list could not be generated.
- */
-Citation.prototype.getAuthorsForCitation = function (creator) {
-    if (this.isBuildable) {
-        var authorList = _.transform(creator, function (result, val, key, obj) {
-            if (!(obj instanceof Array)) {
-                val = obj;
-            }
-            var author = null;
-
-            if (val.givenName) {
-                author = new Author();
-                author.setFamilyName(val.familyName);
-                author.setFirstName(val.givenName);
-
-                result.push(author.getTitleCaseFamilyName() + ' ' +
-                    author.getFirstNameInitials());
-            } else {
-                // Here first name and last name are in a single string field
-                // creator.name
-                author = new Author();
-                author.setSingleName(val.name);
-
-                if (!author.getRawFamilyName() || !author.getRawFirstName()) {
-                    result.push(val.name);
-                } else {
-                    // FirstName and family name are not in a single string
-                    result.push(author.getTitleCaseFamilyName() + " " +
-                        author.getFirstNameInitials());
-                }
-            }
-            if (!(obj instanceof Array)) {
-                return false;
-            }
-        }, []);
-
-        return _.join(authorList, ', ');
-    } else {
-        console.log("[CITATION GENERATION] Author list for the citation could not be generated.");
-        return "";
-    }
-};
-
-/**
- * Get the DOI registration year
- * @param doiData doimetadata as constructed by the json exctrator
- * @returns registration year. Empty string when t is not available.
- */
-Citation.prototype.getDOIRegistrationYear = function (doiData) {
-    if (doiData.resourceType === CONSTANTS.ES_RESOURCE_TYPE) {
-        return moment(doiData.sessionDate).year();
-    }
-    if (doiData.resourceType === CONSTANTS.DC_RESOURCE_TYPE) {
-        return doiData.publiclyAccessibleYear;
-    }
-
-    console.log("[CITATION GENERATION] Could not get the year to generate the citation.");
-    return "";
-};
\ No newline at end of file
diff --git a/www/src/constants.js b/www/src/constants.js
deleted file mode 100644
index 2f38c32..0000000
--- a/www/src/constants.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var CONSTANTS = {
-    ES_RESOURCE_TYPE : "experimental session resource type",
-    DC_RESOURCE_TYPE : "dataset collection resource type"
-};
\ No newline at end of file
diff --git a/www/src/doiData.js b/www/src/doiData.js
deleted file mode 100644
index 5cfabd5..0000000
--- a/www/src/doiData.js
+++ /dev/null
@@ -1,35 +0,0 @@
-function DoiData() {
-}
-
-/** 
- * Get the accessibility status
- * @param {string} resourceType the resource type for this DOI
- * @param {string} sessionDate The timeStamp the experiment was started
- * @param {string} publiclyAccessibleYear The year the data will be publicly accesssible.
- * @return {string} 
- *                  "Open access" : the data is publicly accessible
- *                  "Restricted access" : the data is still under embargo. Only accessible to experimental team members
- * 
- * */
-DoiData.prototype.getAccessibilityStatus = function (resourceType, sessionDate, publiclyAccessibleYear) {
-    if (resourceType) {
-        if (resourceType === CONSTANTS.ES_RESOURCE_TYPE) {
-            if (publiclyAccessibleYear && sessionDate) {
-                // take day and month of sessionDate and year of publiclyAccessibleYear
-                var publiclyAvailableDate = moment(sessionDate).year(parseInt(publiclyAccessibleYear));
-                var now = moment();
-
-                if (now > publiclyAvailableDate) {
-                    return "Open access";
-                } else if (now <= publiclyAvailableDate) {
-                    return "Restricted access";
-                }
-            }
-        } else if (resourceType === CONSTANTS.DC_RESOURCE_TYPE) {
-            return "Open access";
-        }
-    }
-    console.log("Failed to determine whether the accessibility of the DOI.");
-    return "Accessibility status could not be determined";
-};
-
diff --git a/www/src/doicontroller.js b/www/src/doicontroller.js
deleted file mode 100644
index abf73eb..0000000
--- a/www/src/doicontroller.js
+++ /dev/null
@@ -1,308 +0,0 @@
-function DOIController(view) {
-  var _this = this;
-  // doiServer = the server which provides doi details from a given doi name.
-  this.doiServer = "https://api.datacite.org/dois/";
-  this.icatPlusServer = "https://icatplus.esrf.fr/doi/";
-  // contentNegicationServer retrieves the DOI metadata in another format required by google search engine
-  this.contentNegociationServer = "https://data.crosscite.org/";
-
-  // 10.5072 is the test esrf doi prefix;
-  // 10.15151 is the production esrf doi prefix;
-  this.acceptedPrefix = ["10.5072", "10.15151"];
-  this.view = view;
-
-  this.experimentalReportController = new ExperimentalReportController();
-
-  this.experimentalReportController.onSuccess.attach(function (sender, data) {
-    _this.view.renderExperimentalReportData(data);
-  });
-
-  this.experimentalReportController.onError.attach(function (sender, data) {
-    console.log("Error when retrieving fileList from SMIS.");
-    _this.view.renderErrorForExperimentalReport();
-  });
-}
-
-/**
- * For unknown reason, datacite can send an incomplete JSON object containing 3
- * fields when the doi does not exist. In this case the following code is
- * executed. Reloading the page is treated by .fail as it should be.
- */
-DOIController.prototype.isValidDOIData = function (doiData) {
-  return true;
-};
-
-DOIController.prototype.render = function (doi, data) {
-  var _this = this;
-  // Test abnormal length of the json object
-  if (!_this.isValidDOIData(data)) {
-    _this.view.renderError("Not Found", _this.origin);
-  } else {
-    // Extract data and fill doiData with it
-
-    var doiData = new DoiData();
-    var jsonExtractor = new JsonExtractor();
-
-    doiData.title = jsonExtractor.getTitle(data);
-    doiData.doi = jsonExtractor.getDOI(data);
-    doiData.dataciteLink = _this.doiServer + doi;
-    doiData.publisher = jsonExtractor.getPublisher(data);
-    doiData.creators = jsonExtractor.getCreators(data);
-    doiData.contributors = jsonExtractor.getContributors(data);
-    doiData.publiclyAccessibleYear = jsonExtractor.getPubliclyAccessibleYear(data);
-
-    doiData.abstract = jsonExtractor.getAbstract(data);
-    doiData.investigationId = jsonExtractor.getInvestigationId(data);
-    doiData.resourceType = jsonExtractor.getResourceType(data);
-
-    doiData.proposalType = jsonExtractor.getFieldFromSubject(data.subjects, "Proposal Type Description");
-
-    doiData.resourceTypeGeneral = jsonExtractor.getResourceTypeGeneral(data);
-    doiData.sessionDate = jsonExtractor.getSessionDate(data);
-
-    var proposalNames = jsonExtractor.getFieldFromSubject(data.subjects, "Proposal");
-    var beamlines = jsonExtractor.getFieldFromSubject(data.subjects, "Instrument");
-
-    _this.experimentalReportController.requestFilenameList(proposalNames[0]);
-    doiData.accessibility = doiData.getAccessibilityStatus(doiData.resourceType, doiData.sessionDate, doiData.publiclyAccessibleYear);
-    doiData.accessMessage = _this.view.setDataAccessMessage(doiData);
-
-    doiData.citation = _this.createCitation(doiData);
-
-    if (doiData.resourceType === CONSTANTS.ES_RESOURCE_TYPE) {
-      doiData.beamlineUrls = _this.getBeamlineUrl(beamlines, doiData.sessionDate, doiData.resourceType);
-      doiData.mintingYear = moment(doiData.sessionDate).year();
-    }
-
-    if (doiData.resourceType === CONSTANTS.DC_RESOURCE_TYPE) {
-      doiData.beamlineUrls = _this.getBeamlineUrl(beamlines, doiData.publiclyAccessibleYear, doiData.resourceType);
-      doiData.mintingYear = doiData.publiclyAccessibleYear;
-    }
-
-    // Create a table containing unique tuples [proposal,  beamline, beamlineUrl]
-    doiData.mergedProposalBeamlines = jsonExtractor.getMergedProposalAndBeamline(proposalNames, beamlines, doiData.beamlineUrls);
-
-    // Set user specific canonical URL for this page.
-    _this.view.addCanonicalURLToHead("https://doi.esrf.fr/" + doiData.doi);
-
-    // send to dust render
-    _this.view.renderDOIData(doiData);
-  }
-};
-
-DOIController.prototype.getData = function (doi) {
-  var _this = this;
-
-  this.view.setDOIInTopBanner(doi);
-
-  if (doi.toUpperCase() == "10.15151/ESRF-DC-142893590") {
-    this.render(doi, ESRF_DC_142893590);
-    return;
-  }
-
-  if (doi.toUpperCase() == "10.15151/ESRF-DC-142915526") {
-    this.render(doi, ESRF_DC_142915526);
-    return;
-  }
-
-  if (this.hasAcceptedPrefix(doi)) {
-    $.ajax({
-      type: "GET",
-      timeout: 15000, // triggers timeout when request pends longer than
-      // 5000ms
-      url: _this.icatPlusServer + doi + "/json-datacite",
-      beforeSend: function () {
-        try {
-          $("logo").fadeIn().fadeOut().fadeIn().fadeOut().fadeIn().fadeOut();
-        } catch (e) {}
-        _this.view.setLoading("Retrieving data from Server");
-      },
-      complete: function () {
-        _this.view.setLoading(false);
-      },
-    })
-      .done(function (data) {
-        if (data) {
-          _this.render(doi, data);
-        }
-      })
-      .fail(function (jqXHR, textStatus, errorThrown) {
-        $.ajax({
-          headers: {
-            Accept: "application/vnd.datacite.datacite+json",
-          },
-          type: "GET",
-          timeout: 15000, // triggers timeout when request pends longer than
-          // 5000ms
-          url: _this.doiServer + doi,
-          beforeSend: function () {
-            _this.view.setLoading("Retrieving data from Server");
-          },
-          complete: function () {
-            _this.view.setLoading(false);
-          },
-        })
-          .done(function (data) {
-            if (data) {
-              _this.render(doi, data);
-            }
-          })
-          .fail(function (jqXHR, textStatus, errorThrown) {
-            _this.view.renderError(jqXHR, errorThrown, _this.origin);
-            _this.view.setLoading(false);
-          });
-      });
-
-    this.getDataForGoogleSearch(doi);
-  } else {
-    _this.view.renderError("Bad Prefix", _this.origin);
-  }
-};
-
-/**
- * Get the DOI metadata in the ld+Json format as requested by google search engine for datasets.
- * @param {string} doi in the format prefix/suffix
- */
-DOIController.prototype.getDataForGoogleSearch = function (doi) {
-  var _this = this;
-  if (doi) {
-    $.ajax({
-      headers: {
-        Accept: "application/vnd.schemaorg.ld+json",
-      },
-      type: "GET",
-      timeout: 15000,
-      url: this.contentNegociationServer + doi,
-      //dataType: 'text', // don't convert JSON to Javascript object
-      success: function (data) {
-        if (data) {
-          googleMetadataObject = new GoogleMetadataObject(data);
-          googleMetadataObject.setDescription();
-          googleMetadataObject.setLicense();
-          googleMetadataObject.setPublisherLogo();
-
-          _this.view.addDOIMetadataToHead(JSON.stringify(googleMetadataObject.getMetadata()));
-        } else {
-          console.log("[GOOGLE SEARCH INDEXING] - No metadata recieved from datacite.");
-        }
-      },
-      error: function (error) {
-        console.log("[GOOGLE SEARCH INDEXING] - Failed getting metadata from datacite.");
-        console.log(error.responseJSON);
-      },
-    });
-  }
-};
-
-/**
- * Checks whether the requested doi prefix is an esrf prefix
- * @param{string} doi The DOI number
- * @return true if the prefix is an esrf prefix, false otherwise
- */
-DOIController.prototype.hasAcceptedPrefix = function (doi) {
-  var prefix = doi.split("/")[0];
-  return (
-    _.findIndex(this.acceptedPrefix, function (o) {
-      return prefix == o;
-    }) != -1
-  );
-};
-
-// Selects what will be displayed in the main id div
-DOIController.prototype.displayMainContent = function (doi) {
-  var isDOIProvided = false;
-
-  if (this.origin === "welcome-page") {
-    dust.render("welcome_tpl", {}, function (err, out) {
-      $("#main").html(out);
-    });
-  }
-  if (this.origin === "index") {
-    this.getData(doi);
-  }
-};
-
-/**
- * Set the origin from where the DOI controller is created. This affects the
- * content of error messages for example depending on whether they are displayed
- * in the "welcome-page" content or the "doi landing page" content.
- *
- * @param {string}
- *                origin The origin page this call is made from
- */
-DOIController.prototype.setOrigin = function (origin) {
-  this.origin = origin;
-};
-
-/**
- * Get the corresponding url for a given beamline name
- * @param {array} beamlines The beamlines
- * @param {momentJS} date The date the experiment was performed.
- * @param {String} resourceType the data resource type
- * @return {array} an array containing urls of the beamLine(s).
- */
-DOIController.prototype.getBeamlineUrl = function (beamlines, date, resourceType) {
-  var result = [];
-  beamlines.forEach(function (beamline) {
-    if (date) {
-      if (resourceType === CONSTANTS.ES_RESOURCE_TYPE) {
-        date = moment(date);
-      }
-      if (resourceType === CONSTANTS.DC_RESOURCE_TYPE) {
-        date = moment(date, "YYYY");
-      }
-
-      var foundUrl = "";
-      for (var i = 0; i < BEAMLINEURL.length; i++) {
-        var startDate = moment(BEAMLINEURL[i].startDate);
-        var endDate = moment(BEAMLINEURL[i].endDate);
-        if (BEAMLINEURL[i].name.toLowerCase() === beamline.toLowerCase() && date >= startDate && date <= endDate) {
-          foundUrl = BEAMLINEURL[i].url;
-          break;
-        }
-      }
-      if (foundUrl === "") {
-        result.push("noLink");
-      } else {
-        result.push(foundUrl);
-      }
-    } else {
-      result.push("noLink");
-    }
-  });
-  return result;
-};
-
-/**
- * Create the citation for the current work. Citation proposes a recommendation
- * to the reader on how to cite this work.
- * @param {object} doiData the doiData object we have constructed from JSON datacite
- * @return {string} the citation to be displayed
- */
-DOIController.prototype.createCitation = function (doiData) {
-  // Authors sent in json can be in several format. The following call find
-  // first name and last name when possible.
-  var citation = new Citation(doiData);
-
-  if (!citation.isBuildable) {
-    return "The reference could not be generated.";
-  } else {
-    var authorInCitation = citation.getAuthorsForCitation(doiData.creators);
-    var doiRegistrationYear = citation.getDOIRegistrationYear(doiData);
-    var fullCitation =
-      authorInCitation +
-      " (" +
-      doiRegistrationYear +
-      "). " +
-      doiData.title +
-      ". " +
-      doiData.publisher +
-      " (ESRF). " +
-      " <a href='https://doi.esrf.fr/" +
-      doiData.doi +
-      "'> doi:" +
-      doiData.doi.toUpperCase() +
-      "</a>";
-    return fullCitation;
-  }
-};
diff --git a/www/src/doiview.js b/www/src/doiview.js
deleted file mode 100644
index 9ebb0e2..0000000
--- a/www/src/doiview.js
+++ /dev/null
@@ -1,215 +0,0 @@
-function DOIView() {
-  this.mainPanelId = "main";
-  this.reportPanelId = "expReport";
-  this.badgePanelId = "badges";
-  this.metadataDivId = "metadata";
-
-  this.reportExperimentFileNames = null;
-  this.failedRecievingExpReport = false;
-  this.isDOIAlreadyRendered = false;
-  this.onDOIRendered = new Event(this);
-}
-
-DOIView.prototype.setLoading = function (message) {
-  if (message == false) {
-    $("body").removeClass("loading");
-    return;
-  }
-  $("body").addClass("loading");
-};
-
-/**
- * Set the doi prefix/suffix text in the top banner of the doi landing page. This is done before the template is rendered.
- */
-DOIView.prototype.setDOIInTopBanner = function (doiCode) {
-  $("#doiValue").text("DOI > " + doiCode.toUpperCase());
-};
-
-/**
- * Render experimental Report data
- * @param {array} data The filename list to be displayed
- */
-DOIView.prototype.renderExperimentalReportData = function (data) {
-  if (data) {
-    var _this = this;
-    /** Only render the list of files if DOI has already been rendered * */
-    if (this.isDOIAlreadyRendered) {
-      dust.render(
-        "experimentalreport_tpl",
-        {
-          data: data,
-        },
-        function (err, out) {
-          $("#" + _this.reportPanelId).html(out);
-        }
-      );
-    } else {
-      this.reportExperimentFileNames = data;
-    }
-  } else {
-  }
-};
-
-DOIView.prototype.renderDOIData = function (doiData) {
-  var _this = this;
-  dust.render(
-    "landingpage_tpl",
-    {
-      data: doiData,
-      constants: CONSTANTS,
-    },
-    function (err, out) {
-      $("#" + _this.mainPanelId).html(out);
-      _this.isDOIAlreadyRendered = true;
-      _this.renderBadges(doiData);
-      _this.renderMetadata(doiData);
-      /**
-       * If there are experimental reports already retrieved then render them after
-       * the rendering of the DOI
-       */
-      if (_this.failedRecievingExpReport) {
-        _this.renderErrorForExperimentalReport();
-      } else if (_this.reportExperimentFileNames) {
-        _this.renderExperimentalReportData(_this.reportExperimentFileNames);
-      }
-    }
-  );
-};
-/**
- * Render the error message
- *
- * @param {string} errorThrown The error which was thrown
- * @param {string} origin The page which caused this rendering. This directly influences the element id
- */
-DOIView.prototype.renderError = function (jqXHR, errorThrown, origin) {
-  var template = origin === "welcome-page" ? "doinotfound2_tpl" : "doinotfound_tpl";
-  var message = "";
-
-  if (errorThrown === "Bad Prefix") {
-    if (origin === "welcome-page") {
-      message =
-        '<h3> Not found ! </h3> <p> The DOI was not found at ESRF because its prefix is not ESRF specific. Please use the DOI search engine at <a href="https://www.doi.org"> doi.org</a>. </p>';
-    } else {
-      message =
-        '<h2> Not found ! </h2> <p> The DOI was not found at ESRF because its prefix is not ESRF specific. </br> Please use the DOI search engine at <a href="https://www.doi.org"> doi.org</a>. </p>';
-    }
-  } else if (errorThrown === "Not Found") {
-    if (origin === "welcome-page") {
-      message = "<h3> Not found ! </h3> <p> Sorry, the requested DOI was not found. </p>";
-    } else {
-      message = "<h2> Not found ! </h2> <p> Sorry, the requested DOI was not found. </p>";
-    }
-  } else if (errorThrown === "timeout") {
-    if (origin === "welcome-page") {
-      message = "<h3> Not found ! </h3> <p> Sorry, the server took too long to reply. Try again later. </p>";
-    } else {
-      message = "<h2> Not found ! </h2> <p> Sorry, the server took too long to reply. Try again later. </p>";
-    }
-  } else if (errorThrown === "" && jqXHR.responseText === "The resource you are looking for doesn't exist.") {
-    if (origin === "welcome-page") {
-      message =
-        "<h3> Not found ! </h3> <p>It may take up to 24 hours for a newly generated DOI to become available. Please try again later.</p>";
-    } else {
-      message =
-        "<h2> Not found ! </h2> <p>It may take up to 24 hours for a newly generated DOI to become available. Please try again later.</p>";
-    }
-  } else {
-    if (origin === "welcome-page") {
-      message = "<h3> Not found ! </h3> <p> Connexion problem to the datacite server. Please try again later.</p>";
-    } else {
-      message = "<h2> Not found ! </h2> <p> Connexion problem to the datacite server. Please try again later.</p>";
-    }
-  }
-  dust.render(
-    template,
-    {
-      message: message,
-    },
-    function (err, out) {
-      $("#error").html(out);
-    }
-  );
-};
-
-DOIView.prototype.renderErrorForExperimentalReport = function () {
-  this.failedRecievingExpReport = true;
-  var out =
-    '<div class="card-header text-center"> <label>Experimental report </label> </div> <div class="card-body padding10"> <p> The filename list is not available. </p> </div>';
-  $("#" + this.reportPanelId).html(out);
-};
-
-/**
- * Render the badge template in the corresponding div
- * @param {object} data : the doiData object as constructed by the doiController
- */
-DOIView.prototype.renderBadges = function (data) {
-  if (data) {
-    var _this = this;
-
-    dust.render(
-      "badges_tpl",
-      {
-        data: data,
-        constants: CONSTANTS,
-      },
-      function (err, out) {
-        $("#" + _this.badgePanelId).html(out);
-      }
-    );
-  }
-};
-
-/**
- * Render the badge template in the corresponding div
- */
-DOIView.prototype.renderMetadata = function (data) {
-  if (data) {
-    var _this = this;
-    data.sessionDate = moment(data.sessionDate).format("YYYY-M-D");
-
-    dust.render(
-      "metadata_tpl",
-      {
-        data: data,
-        constants: CONSTANTS,
-      },
-      function (err, out) {
-        $("#" + _this.metadataDivId).html(out);
-      }
-    );
-  }
-};
-
-/**
- * Set the message which is displayed just above the "Access data button" in experimental data box.
- * @param {object} doiData json object reference.
- * @return {string} message to display
- */
-DOIView.prototype.setDataAccessMessage = function (doiData) {
-  if (doiData.accessibility === "Open access") {
-    return "The data can be accessed by clicking on the link below";
-  } else if (doiData.accessibility === "Restricted access") {
-    return (
-      "The data are under embargo until <b>" +
-      doiData.publiclyAccessibleYear +
-      "</b> but could be released earlier." +
-      " Currently, they are only accessible to proposal team members."
-    );
-  }
-};
-
-/**
- * Add JSON LD metadata to the head of the page such that google search engine can index this page.
- * @param {string} data doi metadata in Json+LD format as provided by datacite.
- */
-DOIView.prototype.addDOIMetadataToHead = function (data) {
-  $("<script>").attr("type", "application/ld+json").text(data).appendTo("head");
-};
-
-/**
- * Add a link html element to specify the user-selected canonical URL for this page.
- * @param {String} doiURL URL to the DOI
- */
-DOIView.prototype.addCanonicalURLToHead = function (doiURL) {
-  $("<link>").attr("rel", "canonical").attr("href", doiURL).appendTo("head");
-};
diff --git a/www/src/event.js b/www/src/event.js
deleted file mode 100644
index fccdc92..0000000
--- a/www/src/event.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
-* This class is in charge of the Event management. An object can create an event and other objects can subscribe to such event by using the function attach.
-* @class Event
-* @constructor
-*/
-function Event(sender) {
-        this._sender = sender;
-        this._listeners = [];
-}
-
-Event.prototype = {
-        /**
-        * It attaches a function to an event. This function will be executed once the event is fired
-        * @method attach
-        * @param {String} listener It is a callback function
-        */
-        attach : function(listener) {
-                this._listeners.push(listener);
-        },
-        /**
-        * It is called when the event is produced and will executed all the functions attached to such event
-        * @method notify
-        * @param {Object} args It is an object that the sender will send when the event is notified
-        */
-        notify : function(args) {
-                for (var i = 0; i < this._listeners.length; i++) {
-                        this._listeners[i](this._sender, args);
-                }
-        }
-
-};
\ No newline at end of file
diff --git a/www/src/experimentalreportcontroller.js b/www/src/experimentalreportcontroller.js
deleted file mode 100644
index 890a073..0000000
--- a/www/src/experimentalreportcontroller.js
+++ /dev/null
@@ -1,84 +0,0 @@
-function ExperimentalReportController() {
-  this.server = "https://smis.esrf.fr/misapps/SMISServer/rest/reports/fileNames";
-  this.timeout = 5000;
-
-  this.onSuccess = new Event(this);
-  this.onError = new Event(this);
-}
-
-
-ExperimentalReportController.prototype.normalizeProposalName = function (proposalName) {
-  var aroundHyphenRegExp;
-    try {
-      // extract the proposal LetterCode (before the hyphen) and the digits (after the hyphen)
-      aroundHyphenRegExp = new RegExp(/^(.*)-(.*)/);  
-      return {
-        categoryCode: aroundHyphenRegExp.exec(proposalName)[1],
-        categoryCounter: aroundHyphenRegExp.exec(proposalName)[2]
-      };
-
-  } catch (e) {
-    /** It is most likely that symbol '-' is not present in the proposal name then we use /\d+$/ */
-      aroundHyphenRegExp = new RegExp( /\d+$/);  
-     /** This will get all numbers at the end of the string
-      * Example: input=mx3030 then output[0]=3030
-      */    
-      try{ 
-      return {
-        categoryCode:  proposalName.substring(0, proposalName.length - aroundHyphenRegExp.exec(proposalName)[0].length),
-        categoryCounter: aroundHyphenRegExp.exec(proposalName)[0]
-      };
-      }
-      catch(e){
-        console.log(e);
-        return null;
-      }
-  }
-
-};
-
-/**
- * Request the experimental report filename list for the given proposal
- * @param {string} proposal The proposal code
- */
-ExperimentalReportController.prototype.requestFilenameList = function (proposal) {
-  var _this = this;
-  
-  if (proposal) {
-    var data = this.normalizeProposalName(proposal);
-    if (data) {
-      $.ajax({
-        type: "GET",
-        timeout: this.timeout,
-        url: this.server,
-        data: data,
-        dataType: "json",
-        success: function (data) {
-          _this.onSuccess.notify(data);
-        },
-        error: function (message) {
-          _this.onError.notify(message);
-        }
-      });
-    }
-    else{
-      _this.onError.notify("Proposal could not be normalized: " + proposal);  
-    }
-  } else {
-    _this.onError.notify("Proposal is null");
-  }
-};
-
-/**
- * Opens the file in a new tab if it exists. Display an alert message if it
- * fails loading the file
- */
-ExperimentalReportController.prototype.openFileInNewTab = function (filename) {
-  if (filename) {
-    try {
-      window.open('http://ftp.esrf.fr/pub/UserReports/' + filename, '_blank');
-    } catch (err) {
-      alert("The requested file " + filename + " could not be downloaded.");
-    }
-  }
-};
\ No newline at end of file
diff --git a/www/src/googleMetadataObject.js b/www/src/googleMetadataObject.js
deleted file mode 100644
index 7c0e2db..0000000
--- a/www/src/googleMetadataObject.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * This class corresponds to a Google metadata object
- * @param {*} data 
- */
-function GoogleMetadataObject(data) {
-    this.data = JSON.parse(JSON.stringify(data)); //creates a copy of the data object
-}
-
-/**
- * Get metadata
- */
-GoogleMetadataObject.prototype.getMetadata = function () {
-    return this.data;
-};
-
-/**
- * Set a license
- */
-GoogleMetadataObject.prototype.setLicense = function () {
-    if (!this.data.license) {
-        this.data.license = "https://creativecommons.org/licenses/by/4.0";
-    }
-};
-
-/**
- * Set a description. 
- */
-GoogleMetadataObject.prototype.setDescription = function () {
-    if (this.data.name) {
-        if (!this.data.description) {
-            if (this.data.author) {
-                var authors = "";
-                if (this.data.author instanceof Array) {
-                    authors = this.data.author.map(function (author) { return author.name; }).join();
-                } else {
-                    authors = this.data.author.name;
-                }
-
-                var trailingMessage = 'There is currently no additional information regarding the description of this DOI.';
-                this.data.description = this.data.name + '; ' + authors + '; ' + trailingMessage;
-            }
-        }
-    } else {
-        console.log("[GoogleMetadataObject] - The data required by Google is missing the 'name' field. This is required by Google for indexing.");
-    }
-};
-
-/**
- * Set the ESRF logo in the publisher's section
- */
-GoogleMetadataObject.prototype.setPublisherLogo = function () {
-    if (this.data.publisher) {
-        this.data.publisher.logo = 'https://doi.esrf.fr/src/images/esrfLogoBlue.png';
-    }
-};
diff --git a/www/src/images/88x31.png b/www/src/images/88x31.png
deleted file mode 100644
index 44671b21b30cfd36384918279174ea35d21deba5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1468
zcmV;t1w;CYP)<h;3K|Lk000e1NJLTq003A30018d1^@s6W5^2N00004XF*Lt006O%
z3;baP00001b5ch_0olnce*gdgAY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF*
zm;eA5aGbhPJOBU%I!Q!9RA}DqT1`(IM;P`wQY`LVIEEW-l^#>1^aqe1kcfX!)LSH~
zpomn8R0&zGqUO+0skbJu#^%Fccnxb~d)M}QA>_(W;3vG*^RC}zc3JQT&KeU&8nND)
zogJQi=6OG6Vnh^=#bR_{M_-BXr~6|kzfF6^UCNcRR6Hn9$tcl5wM<6cpd+(N^=6G4
ztp-_blbW_g%}&#;wndh0lG$o-AM~x%4SrTPN<3Dsl;g4Sj!ZU9TYD)=?P#>Qy+Iq9
zPh3BxKhnpo|L#mxfW81Xujgq0ut?>KPDbsJ!D_VX3}D-7QRl=a=W~aSPmk&3i(7H+
ze0I1EeJtDJXYee>C|7kJ6JrNK)^;{MkOA-=1v%yiw_0Wf)~p({6`%ps)i<m3^yjDa
zF#hn;Qoud5t^U5secQ)v{wQE{rBPuv?;q~_Ku%}3D7CA(AZIp4#^RUDFKKpm_R<`2
z4{c)s7_y*(3t*ZZi&>dSCTMzkx^LY<-^8B@eijk}Hdj56i=JF;=Q5Pub3q;ji<5sP
z>Cx;XZyxjW^R%?I#1+?aAAQg_Qh=e8kcA6yo6N+8XA3^?rlzK7adDAWR#r&Yb*{L^
zJ+!HP@oc4LP|I;a29qHdt|n(`x3J@viW{(a{ofB1kH_8jE-cX5*%<{3?x78R&^HQ@
zJ%C}*pqG#ZFgFM;zypxy=jU`?SzllG0S&eQWPC7uIJ^UfuTaiYc7M;6iVzkL`i}^6
z@uAhCSaaVTWp0rHjO7cX1kJ_LR>7T{n+s*cRRtdb&!|ksn9yXr<3cJF7VoA=+uj^X
zCZMar+%Ko6Jpo1$CVy>B_5e0m8tQD&pt&lzy;$21$k1dMK9-8QL3+hyF>7(&)nbu}
zK>-$nHV6sOR}5by05f}Slchln8kV|k+caze$RZaQ6Jx`L6BZW_To$Vy#V|4<1}#`1
z7xICF(t#p|FA{*Ek1eOgu9!>;ntRhCdWQ-Z4l6{oxYTvqRGAnSV0a3_5)xJU3Z97!
zU_@y4iOs&Ouve7^cni=ie05Y6{9xPK+M4el5f)=?XfYzbOEQtmxZZ@K!*>c`7&k0o
z2_n=b1pveRU4W@+T4<a4yew6Wjff9YRPDNKg>r$t3Fxr6Yj;v2kWV;1b-W3wEEHok
zGc&`+0f6Hg%U{~W(*WSo7A6x2tD8O@F8JKFVF13)$X&(W$c-F)U*r{JLI5#1$uLds
zN3YctfOo(rJ~EF+2C(X;^$T$1ZrUURJZPXH+8b%0(XT|n@WFM%H9%D*BG?v{L`+1e
ze4UZI&XDzE<b*M<k?ZigMrq_!kkw=lK04-s_p3qASdu;Brb&nl*DAQouX57>vfK~0
zp@7k<o7Pa=w7h<EH*F%)l@e&EVRF!)9c7?#*bOw0x|BfUrU{>0op7%<!b9aj;`?!h
z$`b*wn(X=T&)=g@_9PQLHj+Jfm!vG!#QU(xo{0b$b@|n@m#%#N;<*pxL6SaTeQ3I}
zZPM#EufN6J<%=Inzy88*RA-2UJKE4kO}Ib)@i9vS{A_%{Z*=?Kf8)1T%Nz^<WR=Oo
zY#9OER;Nkt-oK0L971T25$rQofIX0HcheJ^Jn*JxQZ_xU$iNMP7j``caKix>xlp(5
z0a~wZd+c2Bwmr^Aw9Uw6p;x-{R!D?ezyIMo($X5caPX6D@8F4}96WLOo_g>kmC@+Q
zPfx~iROvQJLvMhk0<5=xyrp8fs2rW@Rvevbo7{#z;{bMI8GK(yP>JZlJrG~-bmjlX
WBQ!IAXsN6K0000<MNUMnLSTaN(W_km

diff --git a/www/src/images/ajaxloader.gif b/www/src/images/ajaxloader.gif
deleted file mode 100644
index f649c88b8cb481761e3292f906709c56ede96773..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7364
zcmeI1SyU6*x`208WhMz>9#l-iAhQ7h#Q`f25F8^S&7c?%5a&p%jYHcZ2^!`Z5fw{h
zZd4i(gJO3;TGI*`5D{$D2!fy}gGi(8(Hp(qJ}-CObzja}=d9KHp&oX2{n@qheY^hu
z&oV!s1@7S-zyVVLw6wH*`t+%-t*yPi{r>&?zyJPwXJ@Bo^6uTc4<A0fckf<rZ|{Q#
z4^%2ucXxMdYin0m*Q+l>v%asd?~gzJc>n&rCc^mmxaQO6&!0bi`t;44H^alj0|Nt^
zfFC}57#tkb1Q{6_dHeRQX7P&`FFHCpUcP+!?AbHT8ch&Q<kzoX_w@Aq_vE{G?<OZF
z)oS(V=%{87j~_pN^5lso&h+&3#Kgqd*qG+3+1R5;kEW)k`uqDe-=*1xX3fyhkmg3s
zf<OQK6a0q^)<;vX*r@QmQIX8=w(gB#hHndx+p#-5(sApq=-q(z4hJZjCt-ckTJ0UM
z&Wp?Uc6Q_-kY>vM^8<eV5dra&2#6)pgrmn~iAl*RscETt_PE*UxyJ}>{T$$ES16fn
zkL0D#GB>vsYw1);^b6U=i6oNP%tC(I&Y(fesM2w*IY!pkHvzMa?${7*?ih)!8Vr<x
zOuYeqsWKH?-Z2EWDlzkpv6!l*MJL|S?VJIuR0Pujw#p75BY1l4s%k)MBF8wqa6lAL
z$Wh`aT~c+VqLBx*u=oYwRa0`Ts@XD#k14FV1T&5)-?`C`s^VaxE@2NfhDH5g&LnZ;
z_osAau0+)eN!s1KM%h}f4=(1T?^OhQ^Tf}4{fZEK)gHW-7h{2HI@n(!!MS~Oin~<~
z^}ys$`kl`zWWWzk>CUvr1UlkmV76fT8xfaOmuwoa(#}9wgzF}h7r(!YT0&9>Ez|1N
z^H_O8);wdOVkhiRQKxNV=4@1W+LOJk4&KiaL;K&>trSgv`!a8@A4{-7_X2{?)}tA>
zT&OGQBd0Ce)m%T{n@A|#ZtlwDj*spklbPtxhY#GXq4oydE&RvJ)+haEy7Cqt*)s`K
z8LGQy79aG7)s||}Wot3&J^EW8Kxi9EMaZQSE>xad@vj)0Xstk{OC83Zm{$z1KYQ%q
zT70nIh(*R}2p{NQ06pF(M-$$B-xUt^Kq4S*2<|We?|xOT7D@&8Fec@cZ1W3C%z?Rf
z4aZQ$W^3;-Hb+dY%1B|1to5OZXU2m%0NmnM!Xj3!LvuZ&?~ziR7GfPoEr0R}VQKdc
zK7xBJ>YryP@2xLRT>5n2(N>N#qvVKn8e4?nIc%`OXy5aVZj1>sfGoX#JBiGy+zX(`
zZ|`?8#j_~S3Td&nQKhiU*mEXw*f=2NGS6hV)DlvaM6EsOyD6n0YWeXWrENspMO!>N
zW}!=71v6{X(*jnUSXys$=Un#iLQ)M-`F)dBN6)U<qPFV!kr}efsJq5N9Qq0tT>V}9
zpxQt8-1RgPN0Iq~U_Yiv!ogpSfc`)DBRDci{1^UOT6n@g@rSj=R5vZM*v{bkSN;ij
zx)_$@&)FE=6<b|5FagAQZue`DGI9kd#p8hOT_Z8`uJN_1xq8j?M>IgVLo^)(>_I#A
zy_rPW5^Le@MkK0?kgvSexZx-?=!k0Yj|bddiiH4(1Q22F#EDCQdCZ+ArXN<7#-LE@
zIlvhz#U5Aa3`XZ`#lJD}14{zqf^_)pExT~=!Idgtgb<u;l`_FDZnGW;9O|yTK`=+2
zrjb!0WxXUMfhojv_T0dk=zRL&aA>FE+|2?lWBpaq{@|1uI&*p5he(ayT<yNxC`R^L
znbt!1PeG2LAJhugwC=>Q*lGDl^sbxJH8lgszJ0+D$EkP`Vc9B{-81K^t#GQ{EH$ew
z=M_#$Oqkku@RU7HetX+q4D2j|l8m0!O~%%XZ=`z?F9x)O{Sj)SMfqxvc-Rvrm2djx
zh|8}t#`<raSygcOz!=c)p7Tqv2!cQ1%L@<Xk}yR)i7iiLlLB~W?CBiNU30=hf$2Qh
zK_FSD$Bq@j)D6BW80S`WX7`M&=|@aLz*Lsa<LN8dE?Vt$k<E-sAK#q?8>ONIMKIeG
zd`z8Rv?pOl=h+e1vB*Dh1<q0!B<XLJDG`?GZ$Q>&6N@F74b&B}RIctKP#U~d3C%MQ
zm1G`p?<mS7{1$1k1Ht_vg8Ouub+Y>hoJ(1Pg??)=Vp`dXWNP>HljL(GehidC!rH_8
zQg3A@?9m;|N>#XXA{>a3{)z)Bd-L;)c!Y)NW%v*I3K(`_l&2v%F*%thyM1jyH4LI{
z-Lgn#*=HzC6?+=Rl_Rok(eoegAmOeGs<Yazk_(QA=h#I1&~>X$_mP^4FBA(GK9DOv
zQqbem*X>@w^U_W_oFDhN(j%XYJ3co7**iU|z!{zLWquU^{yzmE(Fus={Qn{VVLl!w
zAy7}|rF}NwR3RoVt0+nQ%KwjN#K;wV@lOd~=>IwA^fgc?7i-8jX++A&mEa<F`~1aj
zI~|?5dX4lh4fQ`0d%^W`xX0klOk$%pzMQUos~maN8cUO-V=!(7VP^BUTT&s>VZ3qe
z8v=6~mv+}<WvB~=#^ZAGgV$kngDc<RaShfnTz<NNSz!0NX7zd)o?=?X2$Q)8LOJp{
zmXE0uKI0zr1^0_GGAgoNkAx)Ptc`<&8r*$;5QKJuzGYcj#w{zQ5<$ugpHFjnK^ojW
zfp*LKC`Q(2-22`Oa+uJjD*mcKu|S_#g3tpQ!GiMsTTO?xb6TUe61n<dTLUBFtjn?6
z?<x&{?zz$dnV})g4!##+Tg&H5>ho7I5UsR>Mz#BAJ!oQFO(B%i2$&!vwMBAT@U-aa
z+ZUT55>s*g&>tfui!+SZ6duNT<}IoGL+PH6dyEUE>k35ZKmP1(4E2XT!AHGG76H_6
z>C*v;f%K|Cg)n__wTQOlY_<}ja4^BP_wGgLHtoj|ij7iZe*Utu4PLW3=`mL9#4@z|
zF>}@dy)_mItXsaTDpkip@_GG;d?~Qzu<g@>j^6QvUd#H_EbSoqW}ZRBWf@GdAg$fb
z49ikyBc$qwSqU@w>!4L0C-ThM9`)Mu*0^N^v$S_y?myw#b^^^i7UcIVNsC{<*^#}x
zcJucZ{%ld9=G0d#)1q;TyvT)qqGfhgAb4Bt%nUz>;sQs8{jhERoQ2sRbt?d^o4omG
za?nt_m7Ns@tpGt4lrvRsY>N^x?;+)U?o@$ke%gZNDNIs}ALaZpt7?T+*kC`ObBsOp
zj9FV#pOR6Zr#l?f^V-%fti92%^HTT0$d-x$s|jsZPwAWRYw08o$e0}barEcJzfOJR
zUkJT~Ol<`JWc~rQj81H%-~WRA@ArO&?_K=$FWz6a)@xrRzqU0IGBQG-7%*fYsJ<{m
zge#};`*_>iMKE#BkwxWTR^`s?d@?6v6$3svuK)dyKIo|?9Br3Vi~xmNL+K2K-m;1N
zJntn=x}Aybs3b{>vz8n02^5Ex8_PC#qO4_E{zf`z3EEg8qZqPCBsEkoqaJZA8V0sb
zHHn{e(HVTFA=hPaSR*V{G*Z}F)QyX+=f8@tthcvOlCYavEJOCUjFoeXdU3eUz>wZP
z@$<Wdb2fx*tzU0rgmE_u!pBG8)^vJt9VfE#926}1o}R@m7}c}iK$`9N!4W{XEW2-Z
zHRKR=Rp*waqcNPDFOBtx*%_v_3B?4GboQBsdP{>xOE)tXaiZ)E?FDxJFVr>70zKK#
z0~8V$Ary{aQ`De4>=j80VM+-fO(H}aj88|j`YIMr0Gv+ocU*eTzW&t~u|0!Is#&*C
zr0reo)5KEco6BIv>j4>QVW%}$`|x>@WXnAJ36Y2_Xhuc8Hbn{=7GK@;fN9dpEE2rM
z+hl^{>tmGA4EKxz>UF0HEN6;i9)%n=m{9n09Tg~HX>lN8{?_1Ezk-eU6L%z3yh)fe
zN19P^*l$(<L)zY1W(9EiQCl|Uw!@8EEM58{g7*x1S}qy1c%OV0cFBm2Am#|U$J0r&
zb}Q`&3t1^>u2^2Fr9VVUiLIlowW}&E$VYO6-zfq2rUWf0uC^7OJ-Ojv4Chvt<p8rP
zsh*lrb2DOSV|z!4g6aL<$7YFwcgUV6JP<1Lkn#?tK?4Pgo`CGDcB2iGR=T9G2R!a?
z*8g|b``*5KjU^KYN|*3mk6YqRAeSI=8{?iVR*%6C-8$TL(Rg6BgNta-U|<PD-a3Lp
z{ye135!*oSZ|o4x*!OtDHY~ooV>!)Nef2wWwFJj7UVTdb<l%e`>xHo)qtA~@SVvwz
z9QB0>)!T0shHiZ@`Xrv^$*DeIV`v|wL7e#oaphOUjpb!m)YIn1hB#}CVcNY#2E~T&
zO>#9)e6B<oJYl0$e|5fO^M{hY)fNT8&Jv>AOtqJeK^XcKbMhC=n>Cn&nbj~|udP~%
zydSUQA1SjGuTEfAaeN8$Rf9p}hdk&^G?H#OA)?vw)o7w~q>3c=cz7cvJ(-3@5@vTY
z8c*0pj(H`zayr7+o*Jt|ziAi{GZC+<YEPPRfVzwZr2L|T8sPcj_S!3`3r<knbYj*d
z|0x-uXgE2wJgDnr{bIj#_f$i*<ct9dkOU`EEJ`+t2~Ip>yi?5d5lai81Z$9iT<EAK
z%>hYuy0*Y#H3`55btZRqHRoH*vAN-oo+SY)mqqU&sR!IW=*}aEejy2vjhY$7E=iAF
z?SUbGL2gYwEy8e#qUsu);L&_iBSF<6h1Ax%;-Wngvv91DH0Pgb4*qWo{@pAf&a<=G
z#|SQJz`I2jtk{b}lBr3<nLkLUw;%q8{It1|Pg&5sthh8rG}!&Faf{d99|n#mEy|3E
z_S*zfn$<R#4%~WJlfJ0K(!kLb=(F*on5GQ9#YCn~=lQN0u_+D|NsHb30L-gnv$VUb
zVLYjKnZPC0UWrXFY2hpYS_EZ&Bhi&7D50?Eacpzf*O!?~Wal}Nnbc~IG~ZRgZ!B<&
z?2gi;?m|8n@p;pf>nL-V5CZqBZs0{>LKtZBcOcxZVQ_c-g6e2Io7!Hco$d*|FsBcf
zXPf(cgcVxxW>{0fqDY1{1w0d0y08r`eKBVsfU%{3&%*$dF@$%;U7Fz}o@NYD0T0BG
z0iRK>VPD5u!@j}-ER|A3I&u$&HCdb?<Wijp-=dfjRzMd(kiY?4AM{ZY<NcYwmqnBs
zPs~HU$c$pN(t8vyPB|1$sU1EkL#%y)q>(y*gkv7BY5#m_0}=j~;XhCY34rG0c;-V5
z1H?15_J8DVvVA>SEheI}2fi93I=>o0<YPAy7fShLfgHy(+ihyvfe?*4<Kn4!suS0I
z<4<LpL{qm$oa#y#=i+oyK>SBGamS?Mdz{Y=CFIRG5RaHB`Hgw5)dI!VD2HEvhuf_=
zg5>1IXe8MLppsN;{pu!)K2re@`^YQ`gwtgD>BdfdUYTNQ@HsrOK~zj}Y;i{<#93<e
zNbO8)jxbrFN`iRw+9-`6@sY$#)B;5|`;?_y5*a2qFt<BSL<xNjMCp}i<rx<rhK(#$
zBZz0}Qc_$7GrLgtocZo9`EQtO8$fZcc`DW+tsQJdzW+_<8+Z@Wgro{ghHQ3dxEwKf
zq_H;SJkzC6OLQWh0!Qzf-R&DMcQcjj%&6D2yEIz3UTApUYdB_3$CwaRYnlCcbM9Xi
z0r77o{)I{$?KJ6bJ@f~8>pfk$Ss`<TX=w4eBEZF!%}|~5T0>UcOnBLS30b!Iu>6Uc
zb5pX>6IkAHVW=Hhv==l{*gR+7Z#kE;By>;vfNDW_g655(j9ksu!+_`h?pF+I#3sC4
zvGZ7lNWIUS%2n*nV?>LDlc#jCa4E=~MYo%&x<N4mKZTip4{>ylm5JPx&;vZH4bmUN
z&e2%`u(2b=s(v~*c~ZgM@2t;h9>%5a9S{lMSzK09NdM!>XH5XY`JxGP2qicNV5M4;
z&$R*H=bUK6B&by)J-N);wC=N<=iKM$ykZC^s4YldbM>Z7+m+%uu+MPj*fY3YzaU9S
z_I=3u-2D;l`65S;i3sEj2APt1unVx1y^qY_$cWbz2qnOx@^*&y^3Bry^`4!S3tpy!
z=rKEwrsw-ko?5PLBd2hNt>9*xR;tmof_zM(zMUdG-!g0@Y@9my<9YBQSivmI+}?HR
zQIVa)kI$@hw>P|ug~PAM(KyUs0MWjh{nrbD^lwIgBBqjjb2(;`!U=jnL*W3t^`4^3
zN_=Yaylv~(iRkz1!pd>RN-Gj{JuWG1X7B;tEfGT2bCLgw#Y1?v-R>w@)2sYOS8o=&
z=WI+nYq3`GHZ(H>;1ONJ{9Lu6EuqgikrSeSV}4aK3G>I)`aFCx0h|;`UM674pLQ&)
zUT%-^X*`#1xmEmjOX#9t{Qdq^KBOgc2*^0wr0CMpv$wI%5cx}XN3W$9JnbsS(}c6R
z2HOL-igCf@S#oaCn*;%As9-;a4WA{NJv1y~t+I)FxPL|zXAdNHL9)cN{kLHCZwBWS
zuUetLb`Y+W1Z8x$oxY|se0rB`_S~>bv<E&VYc7Oc=ZMUl`|ccn;`x4E&Ga}DN)N~D
zuuXjX(N(z%RPl@?R-JgURyUgMp14v3lP<hsv_wX`%SF&_a!1G(?`Z*$=FSx8?VCK+
zCvZ#vjRqPS7{6_;aQ8F@?6Yyp?J5lnc!88tr8$REc;4Emr3w0|@5mJ=X0fNH=niE^
zx}zICR+mIsCLttYfmPDXu~m@vf{ISK-KEGPX^JE1i<)aN0Rq19(R-Hb>liVRacYB~
z;l6t7dd5BiLuh3Qk5uTJ!+b*(@buYiSpbX+C>U`;2KzJpVE-Q4grcxMPE#%9waG<*
zrgoQkl;pp=<8DofumOiEi!7G#0(C9U$UQo5pTAa9K5Vnn1GaIp+~{}ve4<BfVnq%i
z+uHk@AxC+Bm!n?fMc5<2_{uNa?36hjsmrxFy*}3}_a-T>zA8E;B#mxDGU7&m{xJ2s
OruVt%^M77n#(x1GJ947{

diff --git a/www/src/images/esrfLogoBlue.png b/www/src/images/esrfLogoBlue.png
deleted file mode 100644
index d3c34c0adba394833a37f61678af6463e5a8a711..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 28059
zcmbSS1ydVsxDD>^ZYd7MrML%o_u@`*w+1OzpoId(p}0H6f)t9oLvbk-cfb4HnfnKB
zG8u-=&Ti(F=bY!9v!6876tK|A(Lo>(mLfz}3j~5=2R;g@$iNW_wGaP*KZtfxs!||O
z-Div^OC%5oUBp2~Mnl8i&CAWx-p!p>QAUQ=-NVh+!Py1`f_%zO^VQK_B95Nu6ztSU
z!HxYo>13}355ek$By+NIqv0ySl0ftVvO4avn#skeJj@$mg)+%?^s$j}nsrBrWU{j#
z+zBbt6s@bs);s)9$G)%A+=e*ic22C>od(bU1SLIvMCw&BKnugnHz3^H{}q!EXJ>%|
zhj|7<a0YF-H#A5S-^s&gzy~eHJ7*Bwk#zpVroDe;oso#|0lnsaZ8N0j25F?n?_b<4
znUIkT35n@vy=hS&N^j;<9p_RSr#Fn?(fi_g!EPLMlVO7+e8~e9B^&V^-?BN|S!LQz
z5XSF{PqrW<*+;!=<LP3w`sk$?B{|@>Q%4r0CIDhiS>@dG)V6l!uu5U(iQw4w2W>!x
z%+IFZ8jMa5jNtqlA2s5{2baW<F`8&cC43=>+nktC-H-b<%7rbMz_7)=m_cSpx#<D2
zop>@N^mievrx#fi5*Ffe;c)3<o((m9`kr#@lV%1DJt32&x$C>p56Qp+)fU?{Ej>iL
zI1qtMkKi=gpQFbt-hyK5yS%Z3KT!V+GSlkcVz*<fSY0(yhRbzgd3$jBkc%BEV;(f2
z)wOoIYw36SMJUCKTgFV#)i$75w*U9|mis;CUT*Xq4a$o*H8I{3xGU!ES2@{{Vij7I
zv?k-<1Tjb%(ovFkxtVu3eJ@2zZE2sD@9-wm4B&szkxPb9gP2+IXwd?#*(OheF$NS6
z?#JS$GSagjCn8>g^;=b5eiMU36Ri|vd0O!`$NyzM8Nu_>g5)F-4kalL5C~w1%`m)H
z5Y7eyycBZ`;s*=vjR?XdI9XZ}!my@1(ytL!7EGnc-g$U@9|hb=y~3?F_=He6!$&L-
zSK+j{uyev#&d^6CaiNjFaf!5|y=Y~AQ`ScsBvI@jAj#lqP<};yBO?ugCz3qM(<-Gb
zk2=h^Jup6C_9FiY!jfsp)3nEbAPPWX;6f|zF{;ILMryE77eY;hlJpFn@d(jyMzp|E
z-4TLtPoV03-!||J&?Ul4@WOEM-W9}g;Su-BODFq*(eUUhlJJY*9VC~NsEcUYVj;;T
zzl{lz<>a_ERK8*i(-1{&6{O|s<qH&+Yocgmmx|Bo&N4fqU*oCDI~9ygjURx#*x!+5
z$8pN*=Y5}~I%qh+yApaJLjIU<70;bW8mdCcNYnt|K-NGplPDZXHV|)FTxU@EZl3Ze
z7VDQs?R#hLX7oVZK>R=?k;LGS3|n6A%|hlTqG~a0{kj`Q?o96b?gXu59r%B6PvdcZ
zU7n4c+uX?q;e?<{B<9jF6U3ucLm|?vmK^yhlk!5!t;&8<VEpSCwSM=4u+}I8MNwH%
zb;>tgZ!{scU;&nJFr5qCF;h1E8ht12mmzs;91l@Ll|Rz1jJb5{Ox>D!tOl%z%x8pp
zY_rT>tR|X%#WDJPI#)U-mFYDG`F^q=Am?THW<!uqRsEVqKXeMcbpA$7H}dE%$qVZU
z%lJ2V#9bimDiE^&irJFc)Qn|*WVU0r(t(z%+i17Vde6!q8XgK^$?z5<O=>y(Xmqpx
z*vLW@8=I}vsFb6WF#Lgtg({z73gO`I70-j^gZG1oE{CqVZr35>oWLAgdClBjsekGD
zoYL&_oc!#cGTzzX*_qjvGT*ZG8A*q92dLAI<G(4PigPb)m&6guldKfs=>64sDE}BA
z1E0SA$qeOW*8KGR#mw+@`SiQOYn|`a$NAaioidNmn<8x8K~;sk2ATb$ajPiwzAwq+
zrPf#6#a{g0&)#o-UjO{~lQ&=>Kr<jR;5gv+3hjaY8T?H3(D|T^{0^B8840-xxdrPy
zioK7p&ot^eswN>m;eEUSsW+Jzj~*{J*SMf7f0vWAzz0D?+i44rF+!_h9#!5omw+Wq
zfd)Zk?h0-Sp6D^EQKY^0v1pD-Vl`svIOI4A75tem8GX(+iAK{LA2~2M+Szjr$qarO
zyEGiOJlMOqWxKA~2M<QQC$QJHpRu~EsLJ42Xdbv(Hn}iaZ>!k%nFw~Za~*71vGSeC
zain?Q-P5)3^6_Kg$KUy5meW%(?y0)@bL6-IbSoFzY+q>+f8i>hcY9a!OFf4Ff)?*d
zNQ#v+mE%SV{Rb}ZF3I;3+78=1OpZ){xMH@*wsg8``I`DB27Y`*zzN35QTQ?lEh)1r
z-<O)OGn+S~ufeWaaJIWqx?yqaUzup{51fqNBG}bF_FUJW5L{}R^Btb};}*Hj651G=
z^eXU50cQla8nzc!COHU84G)$o%0rTxlfsD@i;(LPqjQH?{Ju$Qzr@<d*!PW$m<*dd
z&cE%A?@Nmerb$G@!KgtCCAB2b#GUF6`)M&0k%m-5-$_40e=3_Ht5^_FNK{Br@V(G{
z&~NbTAjGQbz5ak%>`V+nzxSZkcH#E-trC(4_SH6b(H`-9q0I;SZ8`rqPWE|&tggE|
z{9kXf-YDQted7Ma@#$1JKMQ&MYC7yklX6L`^9kn(K@N%=id)L*@Y{WLa2sPPlbDi^
z>Yp6ZjIA84<O>}bu?|K~$wSHfk1jO~)s@^E7BR+7F@$f)=^u0;c*SUsJWafpJkbrK
z4Y3VHBU#^$O$6Sc<MZ3dEXCEg|KeMkm<{WftvBPz+)mT}a>*$8?iP~ck;CO?(YAD<
zI>K}jeA#UlZq#EsWt?YR+ic<WV}JNTce4CPMS%WM4X2S<*MQqtcoVeA!6}rvk(2#x
zP#dSMsd}>BRAxclb;yx%98s*?FF}D;=hBs!W#&bpR)>?~a#b2-zc(bxRmyBi>u!6l
zU3aNt`l;r@%PEaEwWImY6MCb1oAXC2t1VQ_`kWJQX;!G~J3UdX6owMNiG2Ilp<$`7
z*%DW)T(4|IX0l{zqtVoK80@Wd4N1^f4Xm;~E?!<}_iwNHcfL5ISE8$Lbn9AUaXJ>z
z{V<MP7!@0w9xVJwEg&y=6FT<rvrVzEtnqJO$Y#jj@EC;PvBa@4j!X`lD))*a?+c6G
zo{@FG(3!OX=L)xymT%PX(coz6(C>H0*L_mafuCy=8-wlcOkGf#3X2F1P5ubarB1&&
zPCTL(C--Y?8T?VQ9XN7&OEV*;=V`L*w}jUFsem9?Z7(-VJk|T~@86vnt4`&B)2vTo
zo>gx<+|HaQmoE2%CbIwD{*&<kbNy6@F;0?bW^MZK=Z<@sCoCjy8|9Ja9WoWNNHk^i
z&$l9`CuBK-L0hqpsWbYWH976X?#I)=pOQC^G#A|dKw9ZKhuZHC^d74ATRdGSRt-H#
zf?IZSraNOFGjAzE_@3)b4{62355?Y{S@e7qv0ANTlCXKb3h6kYySMxW9hbdiSWy^c
z3}$*OVRq;Dq&WX2qvV$a+pEdr=+2UFx8D;F7m*16i^<i~OwD)m((c9A=@Xk%uf?lp
zeX<%`vu_=mp`IHYM=r1J>AnQKZKrjoY!c}q2lu2`=O-oc>bW5Zx6sSS4W0700Ij68
zf@rCNKmm*(P#6>hdH@cE9e_aITp-Y)1qk#m9RwnA&-$q;3Veb5URgmF^!ndBue0O}
za0JaAV(1A1aWee(f%E$z;R75*@lsTkL)k`0MWuST<4H0L+yta3E2ZPN{4d)#oyz8V
zP@?^>U^pT&D*r5;bTT$NNf8>os;s1(EG&YSl@^=!Nh4N>H7}1|OGi>8iBT>ok-hVa
z1`i^H4)?dS^fF`n(%L%BK4ylB?cVsRi0{bS?W5?Ub%XE8sEC{Jsqntoejx1s^U7<n
zSi(*_?tfW><uPLlm|AGiW^$~MAvj~PBbp)XWx8@RJ4a-2axqJ{!$-jn!qb3o;ML&?
z!k-hGZ7dMeq^K>Y2^fvYTJcHoA6AxOyJ^S&P&WcyP1naz<rr!)AL{bzo%adoESJ=@
z4eVzvEnjIjPme&k&CYfjQxU8urm@7a$N*1^o`ao<k&O5VAT}e+*E*LF`AyxfqCFTU
zV+0+4otOtjAz;Mf>d{Fxk=OEajn`-2!w}a!bGaGZ_}D*&6q}YwE~DQuoT+cLz?xwE
zX~#ib*vr3_S#mqE8i}3~w?QPWNOx53{O*M|BIdlsmfHnGUQ#j`)hJ<|@5KY)?_y8e
zX3+VjnvqUW^b&)fz-L(Np6jeig$>Sjq-RzePwAiS5R8egU6JMccn-)c`KcGhH?1fZ
zn;<hYx2q&!H3+_NrwH2N-SF!uj3iG1PM|=>pk}RzBmsL6DUIItd#_<TnJ}#>oGY<g
ziL~Pm%t~}GxYPTb6><S>j9v{3>&y;;J~v=6UwbcM1&BTT7-)y=O5ZV@jCjMyrY10M
zz6C@3{f@t$-CNn-Q4oAoA>m_OHZuOHq~}k3_UpHTDQvE5|K$hFZfbrx<-xz_w7Jwe
zbsr%YK`$ogNq=Lwc|MJk7lRxJ809cj2hmWZ8-yHbEo(F6uH(S!8PMrX68g4Cm@rHP
zrXEHRG;z#T0!2oC_WCgR-1!^H^skv5#%HBt!QS!@mc8VdvBZphcqJi%lP7_$fwH_j
z+13^+y)V_zSNc`7_ANFdG8`*Q*g`n1WUY8YbM@I{z+#%sMM|AojE9k*MX+)X*4S%v
z#3fZ;`!AnJ!CJ!XlEcP>!x6&FLAUTIh|(2l``2Feo<`#Zc<%?ml(@aDeD^KL;z;pu
z#c&h%IU-fqbfAo0^m2b!W+Z!wjhwH_B?u^YIgcLdS1wcoj@n?F8R-MhoNKY$?11>x
za6E%xO?N8zECgqwhs!G1->&_DYa`UOW9KL^0J2{2Zg4pFIggtBapK_G90e`UX?J4x
z<kPmeaw2NrBv4S=k5BV%2slpvNWAfH0%=(!MWSDVB;4yy+XxaSdEhIiBIlxDF0eFi
zn%9xr)xN`ge}iUEQg`x{YJ&Jjc+()e#~hJ-rF?$rQ*8&%XB467+tnrA=GRMD2CGoS
zU5^~B4>l1z5&Y9W-)3q29qQmh7dMT>PGGen+@U3~bSA85EKGXsay5w~dh_CfQJ_th
z(J>ZepZa-BZI{Lu$pt#uDb{Np1t2c3wlE^di<Qu#zYxCN4a$hmd_|vuOGU8-rMT15
z_)pt+6yb9R2H`tjOBwr1bklu)2+<h4*_~bse`a4H%hDG)7xSgt`d9%)gKe>{gzCj6
zDMSv_r5$6kEs9c9OL)_;Au!ZFu$nQparFgl%tbU+;KBZoajs*KYW|SCSB)BZ-3>g6
z=s4D=Os{(`M5nG`K|PY4Hc;i7SwgLhiaKq(g?ml7w@2GjKIFVhF62$Tble%`z(V`V
zhMNKd3qgL%oVbHVd|0`85e-r!zT5+2f_|spJ1B7`)-p3{&rpjDp9rT0#|U?c>k}Rv
zG|^d>DQ9Xq6`a@06(>*!K7F1W>Le8+7eYg`L_K45M|D@^FZsCq;sgC!gI^4P>`hvc
z%P<#aHdhxwd<WnA$8oDJfOPL`ZFF*4fmV$H{fJMs%<t>zT8Xn<N4^gG_Efw^5y(i{
z^&0z1n@*%9c_Q+QS<(E=7b_bJzRE5~d`7h^b|ROHe+T*dLJ*i0el=3gg;+~Fc>>+C
z>$)ciNtTQs@tN!JzAxPEW6p|U<WPpO0nwQ_P(K_gvDm>NWQNf^Rhaa;r^v<02_1)%
zs5_SQXHh~$H8ad73iqIi>&Jq5T*p@-qRQ_KbogtI@ZyMBhk++ojtJ&5Mw{-?x6YP%
zWn`+usO%qy;~K~oL1==D$d(f6peGzZmPu&2Aq1$y81ed+*Rn~RGvAg7=_72^!3REQ
zDfE{r{Kq)g*BTa1$43cC7PI?d3IGXkgr?ycAg4yo<v>bdddVZUAiIa0$CeHwz2*0u
zwVA53-{u%FI-|Z8^gxp1FAZP77ib$yUHi@HOAbKYx_G~gDXc`3>pp~U;kNEcbF3~B
zYVPO+v7m~ET7x4!Md2v715dz(HrH6`^n}4qnm97{h6DPf4H#h_H2e$VSe1!jeRTwC
zpg!($HL1A04RRUb+E6GO%sGzF%2DI#Eq8-u;oopnN;U_Cix4J9Y5nEn!MLvDd?Dgk
zx#vw`4id+YIAhq5-asDlQJYx)LtSM2hZrrb3VNP)Txn5UJXMRCHb`6l;~S>DS|hRk
zWfJN8pQhnd$pk~U;R?YM*Q^;HbQfLUW9;}y(VdaAFfd!3_kr0V8C>HnR$YP1l@cly
zm+s{>L*;9N=gZL~Go@!p(jM}+4ImG<sbwdIqxN{88l|`HDZvSYu8`&P{m~+^<(-5Z
zZF1fh2R|2aD8dfbU*1X?L~<i;z6MOzXAgdf(AFh&iRDTSF^U|f?ROKLsL!?wr+LT`
zX#(Y6M|C;9=|H)&btL~%Yo5nc(NK!}lcDd&H~q(_q}pYiP1ALPp+1Tq<n#6xR2$!6
z&uPc;v4sNj-B@sHzt8Uobd42xID8SSWv2b-H3-@eD^V+vC^1(pm&S{mra6F;gyo0-
zsa>g80dk<=t3Fy1Fv<e#u=LvL$hvMDk++7;Gp<YH)+0V$`iKht@YD#LYWGhpbFt+G
zeDk4#a3M<XY(^~RJUG?;^)iAm(Q@Nv4x4BO>4VNzN`ku4K4ttYB4^Da%|8<ZNAqB>
z!E_-OE_B<Jnd*fcE5Zx)*%@ia>;Nf%`!QOq<~fX784k)8HJ8znXx5ssMSx<St~x^H
zqtL`~geZh`eeXE=KM}))f^JHiHS9~PY%IQEnv)^^b6grPArLqJ5|q!)R$^jqd(S$j
zxJWEiK+K{2_`m>FK4JtrhJ1SIK*>4?Jjp<M7!}9UgPnTC>uV=?zTLnZ@o8oWP$LWH
zKXZ5JUB_u~E}5K+nA|b|PX5J;+bowgVHGs-+ywxEqYAkBHwk_n`jB|jk}yrTB>y-2
z?@>?zD7%5`W6@y<>h-nry60!ftjBhE<Hwx#=F_%s(M<*LV?AR@vd7Hw2uy~}yu<8m
zUQO$?{t+&v1j5)y<uxVlRh*3)X|&MLkqjdKy#8r=Y(p;k-3Pm{W}$8!c%!7dN@jUD
zf0j&rme!j6indM_36jcVOu7sYGH7oAsWi4dP={92b8BIfkv~h#aH?^Yk_OcY<e2Vz
z>E72YAc<kLz8UPS2In+5qTRPuzH|J$?*7_;?VUYZ&q;gi<;(du8U%0|(<IUS;E8O9
zrE!FQniUC(xsZTbQ_D+Nh8@Bxf^+}QzW~I?p6*&%(Bt=H>)Ll`*5`$m@2%btop@5Y
z`%1zQxPCiryJTPSXDg}Aq%8R$|6nHv&3^x5Lo;kY@Z^a;SX)>iUv0!EXZC{;|6Ypm
ztg`?Yx!&9z-I=8Iejxf?!fBhE-K0HFuvuj71J9OuyBX8N7|cA(+@Sfg4D6!fKS!g9
z#f?!6@-0F0hDu#GBPPr!sF8>M3v@MB>K09yB^zBX7AeToC<+z-oYia=y<__a^9k#&
z$wp*%@{{S9Rf^3&nFSR%wZx7ic<8(Rck7-jV=R_DDi@x}aQP-GfegYP4dH_T*zk93
zNMqOpUdvS$Estt<?Ted3Us+~za_LKA*xr~tpySgtsbFdfr6T9QJZnZOaDo8pbdsRx
zg0tpn1IF>707sQ8lk985g5l&mhJ%rhL`)?ELd=<Z4bCgRHV09l*{fc3b|z@(tOG-;
zkEJ7K$=iv>a`6*u>-G^uN0dc8)5W+mX`ukN+N3%z6qXw$V5p6sEElr8e%%K})92&7
znS1{S*%cH53~R3uu|g^B;WcDgnVb<mund{dH+L?%w}^?+ewjBs7qqa)oqN^qW<z8E
ztY6a)!KstQQ>ber8Ox!X?6UNGucXH#lVU#FE^fQ%s=+v$Q=wI1SpCyj8yJwVBMl4e
zl%_L^bx${RCohL*d#LU^<P1)Tg0T}u+VSN4a{XwLqmxU1Ra0b&E_SsrNm*q_v)Ur#
zj*dM)INn0a*hyLWPTYS5PNRO<7knpCV1SiwSU;@Z($pMOV1sn*;^dNH4*U=L%;4`~
z8Z+Yy->VWJa3-l&57Wr?YHDg`w|8<eBo!6B3z=?53H}#&vX!D6LT!ncodA^_RfzRo
zMa+VG65%vuo|RZY_-=iWOB8+soY7d-WTS}H>-g0%lBs-vqOxq0wd01<aJK}QSwU8d
zFMD6Zr)m$YA`?(f-iUbw(Yu>yXmt+n|HBkjy6H<H37de%NrCO7*ys^`K2DnS!q#WM
zfP<0+5~O>nkQqv1F8Qx$$0}DP*ZsW)2D?z4@zUSxHv8LwO&GA=KIF7lP31U73%_AU
zezfM25>QBq&#m4R{=VB05|q_O!e0oWt8!7Rle(w=uSN%P?sEtc@w2?}{*@7bb-1N9
zn^t>*jmS3qunj=40!)X7?agkz2t9p?>5^|7a&S$8t4z`CtMhcD>o|vWi?BSrTBVND
zWjw+hNSg*0JB$=j<+#G%A=29l55JvO84VX4(#LEr->ReYs&n34<Wu1t>9;osM!Kb=
zgLfdGJ&K{JAU@u981eZ7Coq1OO2Lahy*tXm5yh>-KggKIX!$m=Oa_uVVLxq$nJ8Mg
zcDs5~nvuTQr44LxvPBLnPuJpR=g42M(Bv;8vk8ocUV^3A1AooJi1SM1I6c5LzLe{5
zS-=wYM-tt)Ad+QZ4YHxHtvGFK@I+7Egmf$k{5)G&@O7LE6pzSS4o;6|V#ROZBUSuI
z{TZz17U6Cl9FKb>R<t~gV#p?}Ak_3CW0Sk(W#PN-$+RFu%?3{bx31LMh$S?6yNWXA
z$jxY(8-Ch`E&aMx_IIJ|wF~PBpJgR=X;hJRwC{FR1lRF<29Zin;cr+mE}q^Io#vuC
zd`tPfA6KuHH&pzV8|?9v6m}%)^tHRIj~w;^_WXP3@Gq+6`X319ih4MT?g1r0$;%CM
z@D6kBlFm~2LZ?KQqgu94sBSAu$tVN<n1EgX)u47>(a+&a=;c4U0KA89>PWut(9<aG
zr3;~V%K@$dH{_~hTjhKDD-O!LUL!d^AErhFY<aEs0vg9f%1wE8;c>tUtw<3jlKB>d
zC%ycQ=o_f}Ow3m=ZQr1|0SUjsOC!<F1m$V<c6CTtMTULlo*n<V8x4PNGU1Ng965w$
zOgx6yO_zXj2iPf4JLq5`+Gf)-5*l7cY=1nNLOam?7~9+6VsC!xD$bPqe%Om%u>A_m
z&(VkVgjG8cFr*Q|kI8w<+U1LlNIPv$0fqkgVJMPXY5#LId&vU*UuORg67F9a3+;%F
z9v(|(pZ>uYBL!#9ODGw%65u0>A}Z>IAfXkxRM`B(iiaJ3?yXW}_<bv%QgIu99xR4s
zg1kz|6>sY;y+12EkNBdt+e_jgv~auXsf7sR+MuzvBTSfU1YlNPOyC=2>0u_U<_H;o
zAo};_@Y3O`pmZsTg_dW4BEd{niv)f0^aqviP8GC)CDy6t7+Ti#MQ+xLr>H;bv*0NW
zw@ntStyA5!Ln>|l=+1mgl)0OUo<EB}e^c?KW$ZLkWN)NwCfiL>#Fkol;SV$HUtpvB
zG<o1`TtD1`GPH^;7Pl7;W}bdo*G8SYc$6FEr2a*^VTW3xE%sn7*1sfHG+>+{ok8=S
za;6W@E}%-PA^b+W)s|pcQf-8`)mP?%J<tUk%Nix552Nzn!%rKLipZCB<By@JOEb;_
z$TyA7b`UC+B&yPJH=^i|1kj;GSQL_&Rfmnp(Y%97h~!OcKf%WfyH5UZ*RK^=d{Xn1
z@N8L{ZcF2-koqGEKrH~!SwC<JrLG~9)Ub{LsrVYocq4DkwvdCw=7@jiAsuCH_S8Wt
zZ(}>-Sm!qG^KV+&(?7;Wq{OiKl9OwwKASA<ILnf+5?S)#;NBco_ftq;t7^+*#3%9O
z$2<3meZIa6GxIugLN=m1HPwESU4x7}i)BY##H@J)e?h2jKmaG(ILHJn_<>J4?G9ta
zhm#bQ9}6V{=g8^zROpqd0)tda=ZED>y8Bq>oz5=7f$mQ^!u@3nLpQxy3oSPhziO*~
z5^O!d>YVK&<t5rEQQ@6tzOH%7CEzIWe&=}>W6EJPr@!(fG{~a8!uCY}x6jGnR+z5P
z#VY1-ptEU;Bbweo#etM4GcVkXJoIB1d2Y%?0KNi+J9;Pn37h^eTR4OG&LX>m!}+Eq
zZ-ab~H%3yE(x}cxe&ZIRgUhE!_C^eKx=`*}a3dXyl%|R_x+Y<`&&IEaNXfAEUHd^m
zHyN+;!R{BDPzD+W(rhcV;H<_E-V2)PK)d|$4(H6Z*X}bQ5Lm880E$(mjmTs9#Kt#R
znURalFL-ptMh1oLQ)^s!2?hKJ0ul@REu5(#3BJ9C)<=o&GVXe_8W9oLc%p?7b*L)m
zVz*=Q!Q3W~?=>1}wxmt?gztG+XU;pIJJ|F6V>R8zK*RQVNBad|$Z+3)Mao`PW$Itf
zm6-4Q!nb=-*pyhY!D*EjqWy|(_*<>dsI3_8fB>|I5+0NPB^?WQusE)N&G|Fp2Wlit
zR>NJAk2+sF;Nl;$82^*840nNEe7BtaNaqyU3}IX*R?-XnA>FvSL2HQB4M5{uq#GIh
zRA1n{Yh^wE-4tE3)%j%}iNx<+0IKQ@v3^##Kyf<9@&*k8Fs}0X;w!*%0ewkd!SC29
zpZ5@c+}X*+Us%-aO$8+}hywVPYHun!NVIU@<5+wLF4k_Hs_?b)f)eO;3xe^`3p#Uu
zq}C0}=13Ti4OjuyuV#5;ZnCus<w*%?&Mq1EOJ@?#%^0wARRGM}+lxri&8fECbo}kG
zYqCa|=;q{dUpk+++?7}?Phvoq;NWDTe{I)^unMRTPf)}i3fz6$l*8cs(>4i?Qd1`e
zZWUwNNIYUXIq6ei0)C{M3On-z;h_z$DnC<bj!G{Qxgxlt?LW$SJh{pqSeO4I>e{Ey
zO}VJY?|rEa#G1H!Tk9q*zGnpc)=1+kg)Z5jQT&SZvKi>A+-T0Q-B9AHaa5XgJ@@(U
zEzm2@^PDXI;fB>H78k+YNvwNLC_@^lODJXx_z_M=GwmD@^(63(91i^t+!Sb8cpZY2
zYT(vUd0w2dVfnA$!sMhJDhVxhr6JpibjC>8kr0R4OMp30Gc;nuR}cHu2uWS=uX{eD
z4^8CCr;`YjZ;{o2q5(aOB_Df7eJH2oPC)wFQ`f*#)xwDs5i@~NltjbaL%%2;vi$HJ
z$C=c}a3_0Y0Q@f+GSV6M7&ycls?T4?_xgux;|HJ)#$s=@YN;ts0K@wi_1i#fvzYZy
zlLU<tYb<f92&m5@FddQ_GjC@l+<@r?gY&$-5>GnGgx+u^ZxO2uv7*?nTmdXhbEPgI
z(M~kBR!Rjm2amO?S*%y8SwHcyswnf%6YxE!354Ie8tHkO>MICibmAaghkQF-m|J#i
z?wPI8lle>ssMSYv<Gb=ux-(;H242()OC8%M6IVEeu^*!ASk*vJ4uAba_anlb8@^64
z+Uc?{ZR+=$QTN>2q}3i8ovkwTSAek$hQF;4)?t~o#MbJ(H(2*HN9_!qJn>HY7)Mn>
zxs4Gn#=hd9Mp1IMp7N688IMx-*Bot)kYdqEr5Bl>ZUQa~9sV!E#$(t1pOmc<Qsk^6
z>G!Ipc?5Iomm2(zK+!g)k5t#M+$6GtV|vU93^w6^U)3e5#vit3VDxKQp_lkXZg@id
zTC9aZVWp5CWkFA3GzWF)52Qc*sW>y^Gu-JwYO8*I2SM2Sg3xLWy*CBPP8NgZ>o!Zw
zOpqLS@1G)+_Usz5p<D4eQP9qBR&6-X(E?F#%X*bkSjyz>ZhdrEA0Sr{FkY14D)?$3
zy_00}SoVJ7ZZtoAo&Wekb>|4T?L*@3o>HUoDxtGN&4F9T{0Wc0MnZF}u$7(=U>m0R
zmoGit6!4*i=|Nq6NeG`#vU(4lSh*DH{-K@XgY^!*z-AQ;#cqN~FRJe_29LV-U2XM>
z@C*zYcX4K|V@ATi!vziAuC^0&wI`merUprMBdARbS6DBNqk?lB=HSiFRg2KQl`|Q?
z>ROc-ggOO8<!lk@&Te9FOtSytq>q$z9ox{lXLa{<Kb^e&p7gb@8=vNI3hv)V;K@i7
z^W<G^y~?n1GC`}a_XWFDL1pgzP_S<-&LL~PaCIoEbHx`y3?ChrBGk%6or3CvFGGh`
zBOi@&@<os29I4xFO;PCdrYm?t_Hj0`7>nNcFtFD|({B>5v5yV-p)U@jR`{j=gbqm`
zF>WyOpR!y0JZ&?J%nn5;at_u5CYno`rQ(|9M8}s9zi)<yJ8LKCr(<n>rkCOKhryIJ
zvMwI?FdLBt#691ByF0gybwD33{{Gu~-Lqu2yoWrTKMXg)|3d6Gm2z+N<S=@uye;i|
znH|2OO_HE1<Aq{+S|y5LIg2?tyDC4+lhQ|briRTXu`{awX3p7_;){D2Ms?QS=t0)!
zA(<_~&s)ReE!wn?GB||@!hhNEY4%%veq_NrsZ3w%j&lRH3VPpF)|Y#kYjf+KksW3c
zbGRxn6ZF=*QPZSX08*;xi@g`=AUwdHPOxU{KpH+ra?W)hvvD%~E(7THWdr!PMbpE<
zqc?0&l^^shPA^zqyOWMD*`8~w#vAfhh-rT#q)BGj!8qI%WEbDqzX&%zzLtd*`@nOA
zd$#1h=fU6CWBZvTdn;Oe)2YLFiXo6+5;oW{;711BiJ}#^wX>IB88={Wq5j{$e5Y!-
zoSM2|H@Xh>=fqc$1C(`7JA_xnKQ$M6;h;8BKVJ2XikzEZoHH#>7wMEr^&bX$`V6%y
zB!n&LUeXiDT{v0l9afM28}1tqc|wkfzv@wi5`)yXxQOBH0MTDh7WaltRqq_v9c{?D
z-l4Z#aqM>FqKG7N;7%7Db@%{Pc2kI*5znxT|Bs(?<X=;3F?)*;soBvE^#;<mMf&a-
zGA9Ri$M4+lUT-!c4Bq7g8i&qSzkkTbXw~6g7L~3*8`2gXx?L@syNN`vqM@D3`z&Js
z>Hdg#M~xv$gv#c5s86ZlsP@bsAq5%L7OVxI*%f`D(4DN0m`%j;>ItFi(>Is>y=CSM
zl_R8UaFV`&dn@fB$hL_Cdkf42^~p@f#OEDk?D?^7Hcpgj7;0rmU1>_pyd(D@J=C+$
zOW~DH%R`(JWxhDGe;2kUX~%GU$Ng!Rt(44%Px_v6K&9wxFcp>Q(Sx0+NnB!Nk%Baw
zC|h#V{;az8mG-p%uuAcpT;3Z~E1-{oy!&keumKuo4Ce4&8!B+bb1)!RCf=B)iJw%7
zSJ;}#H;ykhO`>|{mq{@?6KIWYLZIJ+$a@7FF$=AS5ouy~zIY=Xha2VU`VrDyz2`$V
zNc)3yJ=dtfWWEfhwigM;SM|(F(((*ORi63!Gd!_2v<`i|K66h7ddrsn?V#1SsM88!
zP!);$CPcnzgu<JH{qO1a%IrE*$$L@vZfu>fU%$^U&A)6}eEsa;33a&Cc9a*3&64ai
z9&(ORskZ!Ch$B6%u!n?Jlgj9bDZIvtdh2hvBB&HOXN(%YE^A@is+Z3#^_u}zo?h3^
zXExW{i(^!Z2b~(B`0pn-U5anw49rn=%(Q5u1?LsCYq*<b>&Tz71Cd)%{D5LMPT13d
z=b=PqvwfFX9hvyjk<8EE3vL7?$}RuSbx>jqBUiLf&2~}*qUN6pG?;HV6Dt~9ReeL*
zLsGMRI+I<gg#*AYvMJk-n4!m;D5!BZ_>2tLx5iE%sB!o#e_#Yy?GT=}vzrgI#fQ>|
z|5OJw1EC71p8D+6<a+mZ29<JJZetwK+eg5NdIMLw6Q*Aq^y|Vmd1g<9fIZq0vT;$z
zj<tR#+lJ_KE9NU5N<9){3YEsd!<2z%-L6G<*Ee>GBgw!WW3_O#Hf;V4swjiCHUS2p
z9NLQvhJ{@AUFiJUnf5!y7KLH8;9~34l4gL%C01aNt}073;9_5{r;Pi=K9t=cGy@zE
z&83Rtlxb}pwL*QM+)(f%TQX_+CQ;YV$i%<@X)(WUS8wuA<zj1>L1l0JxqGL%%tD7@
zf?;(4MaVpD3%N4O_pcR^#wG=fESMUM7r5F?feVY_E*@*G`~Wk<n~fLXDh(17$?`FM
z<yY7rjCOFLy#iPibc4I9Xc!i#y>`3h7V&+FFkOHUYg=-sUWu3N1l@LqIkB%SjmH$n
z+Ai<wINj?c8plhaXTSWe&)#HtvjcP&SVgS^bu71!$nI@6B36aB=uMX<(+;`wDA?%3
z%lnO)nH0fwx6x=z#o{GGD$@14g`_4uJLt9M!-$IrLdnBf?~iD0PV`l|mqH5m9QYT}
z?+o2T33RDM)CKf<8eCKLerLc!q$0CR^QMF<-&W|EqO~9S4c_O;m&xm)855|(7U5Pi
z&a#(aMK3uEi#14k_7_j-yDSQy67}W&FAK0&F@Ir%^_lsNXhX)1<H(0a<T7jm-x}4A
zXeJ0ZQ)?@Cbz4mfg<i?}ad?ns=@iCJ#wCn40fa|D3kXQNPYbg|JIV3^hu!=jmGWtR
zn0~k}o<G%<wQ&y8^c6(0lx)QnLT#lJBKnlaCUqIRWwZ6yd?3Z_92~1_co_DE$3d;w
z2YD<X)@20hvoNfTx+8P?g$?8U;Ejow`<^<yHN|mYs_ltR>#!34&zlr=@~zn17{YEL
zvh(8?az&K(cS52E6W@*cG{C?*Ew>T*;&t8vbOKy9f`28o_&BZaXTEY(E8-gTdH#!n
zlb1)T+8ROf?n(P;Ura{U6wlbf@k@tXn&c&zeZpTLeOLX8wW^(Hn@_qZXlX*bYXwP^
zl!KcDt;fHwK6?ldY76Lyp2@K2YNb~f<Ir>o)s|I*CQRQijn6^yC!e*RlnC&B3hxgI
ze#f4)9sv%sx{I7<pMlufR61_74d28uM#p+$z(gs`D1K6)CgWT@F8njTxCjl}-BVES
zzJA`7+|&nb3=S-wY;6Y)(l52&d}c&L7be8vyAo?zM{$C$1bS=T%TC*lS=Pr0CU}Va
z-t3)jqo2g4vUc8r`e@Uz7^{h#nC=p7>E=GyzbBSHAz^a<nIyT_KySN_0tx!V0<@KH
zJvab73~j6jY@yItO7j|&%9Fs8D1cZ}ViU)QsGmzl;KugNI4a3<L*IY&#WJ0&w=Y;U
z=#xV0-3SIx@?j8z1n+a&ncsCwM?<o^_RRo>L^_u_2pj|K)Nhg9g1Caka3VbnKhoX-
zSh5v(GFq#l#KrV6G*|w~BGs=f2W1>%nuR`HstyTV+?CK=PU=7wJ(w^O=hGxh^uq%+
z_&^Zr7#12d;XSjb-#_{t@E04EE~il|;TT&lN+<F^UD`pHcXfBX>^`CA!4y8wxPJv)
zZ~P$C8r+MvxtJwb-~iYJnTkEM-yFk?Udx@|dU#Am8ii9*Esvz!{Yb0oP;5hK-4mz6
zN1J=w@vhd9hed|KhX{;qCz7^@FAn_RwE!1wK8v@6OkODX5t?i{pu|hDTP)spBUhKj
ztoBhv?(N%QPTK}J^epebAEhJbvwsO|Pvw}Wj0Fa^J)(lx?9GUeIEJW}q;|;Pz!NfC
z*|Zg0c?PtT_44zynJ~bk*RJ?+$<3I}jrLfim~riyz3~}-VSX{*F4^N?Ae88@@0-*1
z%tN++h^@8LV)dg)43+UPN5rheGk4vO88O<gsttjIPJA#=*hEat`>#j~Ai*17PQWR{
zbexCxg6sI4g!RWXGULK@-Sd=hS=aHEQ;Pn#I+Ho<ZFzR~ZeVrU+eH+v-(FIu^c#$T
zYM!B6Kl~~af!>nu5wh6?y9Ih*c5Aat?1aDTv|c{|Sxfr;mY&SP$LX_X^j77@f|kEl
z47KEa{~!#qBhuw0CNn@+-eR4aD}}nsNULx#_E3Y<k(b%a;#i=<k5R^>q?Z9`^3Zt^
zSZLTQd=(&^r5vACzpTk!+*9N17ullumhq8nK|ombeOdVP2Q-=uRvge?Ym&KmTl&F8
z!JUkM+)XD@1m@6!_gzI&0W@sBFI-?juEo}NFHZx&aIy2s@>~s6*l<E^(dCt%3oblu
zQ%~pSg|BE~dQn7esv~NvB=DmWn!jD$uUDHcsNpTGKD~g_LZzAY<kbkehw5in*51*)
zU{Nli^1YR}xUT#3{muM9efA8l(h6V5+0Z-1T!ERY{Qc=+oni>GFxDU5>KIv$|6PyZ
zQhIMR-V6ltGk>Dg>=s&o+i0Yhq#XQe<R$)Mqes9_-S!gK>3zQ;*tMUNDiugmz<9)S
zjgNBShvS9i#8peyE7nL<i~8wZC}Fx$KICs3<ivou<8#)*n$Z#c469Ul+Z5iloejSg
zay@Ys5+yum>kU_e27fQCKD#M-Sn<*3X&BMMZcHMcmji|F9~}y9kXbgn%~N`c&Np{j
z3->~`VN9bT+ztB;{4|?5QDQ$lApqM;@J~e2oPWW?S0-OR9H<#fw>Hcx467&1jqL@G
z_?YQ8c*YX%aFLVLr8X)!zAix$*UQV>I_#Fl5iQWQiW&>id%Ag26f%jd!qgdlg-S>r
z_?t^R(pOVH+}VR?w-nNj0nNkJ*9hrAey*27+Cq+Tw;VEOBVn=$F8IO6pzBtx(z+`E
zDIdv6J06W8JHW4%9=EMF_))uzd512|+N#*AFS;Q=;^TS&XiPt1=Ma#RwcGo`8F2Bt
zggP)+EtbZQyY|(F+kQtE?0h2QhC=Wbl6;yd+^NoomMIR9AMws~GHbOsJlJaiHU4wT
zd<33BXG>uSoR9&3vfhXfHKHp(iMG>G&*&gTU-_I1MAm2w05=kDDHaLJE%>>1+UoXW
zl3!jGYtWdy8Y>Rq2it*lkg4r^l?I=`zniDfzZ=$j@XWIj*?-6h48`tQPn4akNvrdx
zVo!jJLr=bh*rhGv3N6-We*=Jlkk?JJv>QhsP7tt{6_RUXg`dSJ3fkZhiHu6G$Tvg|
zKR=MW3!hPq_$YA`xN>RHRO4gQ4osBHshUkpjov0ZGWx5myrtI-Y8gJys=DsPiLJ;N
zoE(+f@Y|@z>}8GTIb&J_HM}QI3CkgBNPZfyZ&$GOqH>lg;<U8?vO<Q&DXtmpsBlmm
z7;7WKc6BQ}g&L_N<+n6AQ2LjNPVL%}o7IMUb?~AI_sf~ethwf9XR{1?Xtkl-_XSW0
ziu3aN+^f+Z^gjt6@2If6bqpEuVVQ%M^Nb9}L3Y}S*lK79-r6%x`&he)Hb2F+!Pjp|
zBTt~EV^jDd&P1M{bjX}Sm2*TpXI*eWPqFqJ5uZ7p-|@ah(l|1(11akW$mKMCqA{|!
z3bXQXMAD2$2q_qUfcx8`m2avnS3nhJ^)-llq}ZQgsh9jj{;n-%(<^tV9!WEWD-vSb
zo3xvxGZjQ?QSmyDT4~l_fS&8ic!wKO(_QkR+??!Lw0_$xyjFve$flD<s2|9}d2~!f
z9r~6LDIgqSYJ72*xX509V@Xrgs4vH%yhN#{z?>q2&-sYu9)H^A!d(~EQxiHeS&i}$
z`Y-FqQXEe$0Pw*6=-0{mwg`!S1~<wxE#R+V(Wq$lOn}T(w}Nn{(pHPaBWudLcidvO
zy#%jiRAbK7->iAYJkZJ$&&r{2a}lg|Yfc6WEYzuT<PyCLzD$-$;lQnat-uY){Nl~<
zZUx9+5kc4eVSOyQ=6IvG>5q+HOgimYx!SthQOP55jvjwcz3_OVwZd*!7YG=aqhn+)
zwqgtgv4rsRi5zNZEh1t?8oUa!D#;g^GG2sbFy)Dh$PgD3;QIZEjbQC0e#XYUbgV7{
zJ*QNt(T}HiC9l5W%Hb_DN?wtqS|Z`W$r0t2y*-Ag%7a5wVKb9r%Xr;u1l&do4$IXc
z$6juZc|%6hqy){{6tD6?x2Bd!o1C6%33+Zof(0hyTZr9bTZL1EiDCTQb%Hf-+TX#^
zHfGL(*_0YO)FPqlGRL2Jl$=X#S4E`gz7&N`C7n^i1(6A#KY{K7iRx_RE#^G+Rbx+7
zwfAR`y9JSfblzO}ckcqC@Rsl~<a8K$CApj?{Lv}wvsRG2*t><xX~JDY40#JI3mx7M
zjV6n_5RfyTy;M5fGK#_a+aew-Cp{CiEb?!+-<mZugT@~$YX3$&&=$?(NN+i%-Q~2?
zI=c?2+zEhbo0!9|>7So;N{3aqbg#T>Kq`t#TG-E_r1%tbK#I`Vt&I>FK0ZpfL=Naw
zm0)&Z9N|r~D(ASF+awV?bET6&aR6<MM`T_iZTzvvTY%$2E`jT2-O#H7_Q^_L*;~5s
zMr!<;CSmD~yE<1Pb%39y;TZu&+}mD9UKkv99JeYXT^Y@{X!Qj8Who5l7849cdbIjA
z1b60YnbJ_b(sOZjkorJI$bS+%lrxBPoDh&2-*4Q6=gb)Lso=$KMb2f$6#9gw{TO=Q
z(aPS5Q`WoxB$<a8i3TJvIq{8sBonqT5jK7SO6m!m5cVY?qbo*m4HcR`^NbQwkZ*S;
zt<F^ubctXuVx$|?4}U>9DAptal&D{Qa;=H1*N?)m`2a5}Gu$<Z#Rd_7<EGX|b=ZLm
zEnU&j6IyHC@QT;r?JH5dvb)>0zNyl#=!9-qoI%>mFd!FnHE00wz3BdK>mJ;Vl}&Ec
zd&nN0$+^DX)K>{QxCV@ZOodFn=>;U?oSW!}Gp6$6y<c*$w?M_jw;HEX^5Gd!4eNXi
ze96HxNQg7VON*&ojD~*10fYf*`u*-W+-BWgm7;(vb-vip3^~dV|J(pr*aM6bf*@kC
z&VNo3tkW;ojn78|O%jCs;#7Bd?yOvI`?ibeM78!2hYq>BN;)AE5(({pDjOm!)X?Hg
zO_&(astuX!*=hqcOlS|;rq)pyLTY62m|hZ5w^@D<ZSz9Jw_RYPMeyWl$CQba5^jUj
zM$v09>HeY6jMKK)IPvb5NZrzB6#5`Lkuo3hMu~%u>wpX!szj5BfITIS`2d0%oTF{f
zK**}wEVbVaEQOGGJY;$wucA?sQ(65NVeEx}e3$Z+rEAfNv6v~FU2a%vI8|vSpc86d
z6xWP#5bGiM_q7GNTA#O=#d5U$`qY=s8NMOF*gleSm7>hBB{=FvqVhNwe<n0s4)1Cc
za@;+hhZ8(;Tn?@Ul4uwyCfVNcHOPsdDgL`z?4P;sG6cNovkvzrP7Hs!WIR;%PLYi?
ziH<A2GWa99yQuMAGgt@$8~p&wg>Cv}qT(i<Nz_stf9=(IKz#TbSdf&FS-7@XXz%dv
z6lgISdWG0!zhzi4687HJUT~%nc`<bYhVM`0MRWB}1sw)Gz9k4P`+hq#Lu8+*bNUr$
z1($OWlBCIHJbn7gA(T_Ce@H)SJo?J0-Cqo7CBRe97_^o@)WW~0@w^%mYA3_iz?Mxs
z()-Ui8*tfHfkw@|9(mKo6ydtr8_OU+)VsI`F(3U+Z>BTB5ueJha_;bFwvh^6a1t_i
z%|9`mea}vfP`CHaSlycH(c`EWs;|~llPANub^kaDoxL6Li6UGIArde}jnr_893eR{
zN&mv7E+EJJsaodgOYWTT4d@IAt?KbfkDyk@wzq3}KFI|$eh`AEGgRi`x24;8#i7eG
zv1FH0D;Sqa921GnO3J^<`XrR$)T0K(y?NOo0ZQ%C^uGnm&V9D8#Up_g>2rbGi~h(n
zqD|gH*C@V@c!Ea1#sKe61m$%(g(^^G^9{!1jL@=rB}ze_r+sb}VRb;B5uA~lc@+ef
zCTd{qo#G>F<^N~S5};L1b1Z>+WW#YFuNCOSY4ovN@|G8QQ|#?lo7-KENEfyzm~>kg
z54+iAme4e&NN){@k$o-wPIvVz<|U&n!&D1|!f4WU+XxxIx%>Y^jjwhe%Y^Xfq=7l4
zsQxY-s&5t5Ao%FQ8TQ*YCj+)HP`}iE_)f+=yCe^@SJ2AgEaNi0eDB)t$~+I2NC3x?
zg!2O#>j405kMhwRD_4J|A{y_w$%L!h_>I!?6TCX4?SOdEwpAj&9-PpT@lEtt3!$k5
zxFT~D67$*?k_SnAIK3~!>^;1M<>GPHu;B%4#3ji@vV~W0thCM6XHOJeC%i|9RkkCO
z_2@FEyL|J|Qe?6AJ9A{q_@Avq2UY5WOWxg2WE_y?93i^gB00<RRoZDAFTPKYVoV=j
z6>dNKwVciMQ2z@@l)eKYm&9=<CaLPnm!3wXZbzhsTloH(7PDTl0a`+K5zwPivuD$3
zTes5YPxE}(jiB9R+P4)5y@{<%AEo{jx8jzqdJjD-%`hVQNdwFG{wUZo%nL|^>{n6&
zu88?uC13F`WKP-EvM6{@AgK$8Q<qlAcewzUmS<@R$+#M3G$dBgE_E4Xz+3GL_W@!r
z@Gn5$*{7@0|K>M~HJ%FP8f**Eat=zVMwu)FbH>a900{7m)Ky!H<ATcGrY`5Q3~<mV
zVb9!>qwpCw^HTUB4k4!-$7xJ<1rpKeuQKjV1M$&p+?i8it*O5lsNPfb9CD%WbNs}u
z@Nc9JK%aGHb~H@6j><CJ0m-Cfp!8fjsb~oat>rrG^-|0?1WOeII`;t*zi^B9QgMts
z-OUjG9SBJd)@S1he{PYG%<7iQW03puq^f2~l!usQzcj9hc6x28w7xILv}9EbJSYJe
zFA~XNe`IvoR<VW09$C(yj(>GCEa*5~dCo#1Lk~hKGSW;1DtIzsGz@LY+uodR<rM#R
z5qkJ2QN=5PJcD~y*##D`JAZ*+{zM7YxM3XMT;ei9gClxN=hTdd^vtD7?dKB=uf`xR
z8xvs!0NP~A*mo-JlIB+$VD_I&9c%xnMdwoCuWEYVnEDAq?~7+3J=z0_4Lx*wXTBAo
zt3W$iaBJAyV9Rf$XN`F(owEM=;}~(sse^LSFw#h;;SaG8mnBuGHa{TyKM2n=w9)pU
z!ycy4etdjMQTwxbcw4VS5YVEuu60LNh%3&{)~7$Nr7gflEl*z=H>pMqIBgsQ&JWm4
zxjP9{zHyGN6L4-s*4W|%T>92rDBTbN$Go{PWydL7Y0rKC4K@g*pZS_3htNKf`_`Pu
zK<rm%gB)P6htt*?DRNSE8K{=-29b5``#AMFwtKL7+fV7d_vz}mL$8%jjO<h}AgHXx
z{h7pk{n_bXOJq5md~O~8(tX}E7pf4@gYJ=H-JUv<&qw(5yJZkbj21Ql9=k^qg`Qs`
z9H8HD&cnYset0bs7Eo`h1;dHWp;o?pUJ3Wbht53%a*^T+3kJT1rnB;BvUlW>f~_Iu
z!|5)njZ)M2k=h12U}Jvz`@Kqcgc<$~e`g_(0aDZ~oBy<mwF;<0g~E+_9h494#8Ys>
z>SX59S+5`bW^YX<?rI;nb+*$Z2%&ytA3Vmjs}2Q<u6*4rFz?mudCh4uYX{4RG!trn
z0?)9_;1f?8IntAa_dsm6TW@kfqI!{&$MbT}Raq2cNm&zQa~PiYRy(!ZCzB?wa_BZe
z-XLZggsrc&fH(3OCN_(5t-ayYwI9MC4&TDWrK*}%nXU%z$m<m;WTA?NzfFFgttC<%
zc-D&jY>W6SvX4)Je^BF5LOv*_<wv@d=BOO2-6_rZ=E(Vp|6py&J`Ygqinl!pwa5-g
z*FAl2#C(fC^*LhZ6S-rIA-l#bH3bwJ;xH&o_3@ak_g*MA8#3PN*c^%ymGw4opF4=0
z(p_Iw--_M35k1&;p|5NrUCHQYaiKSb61$h$h%l9%twH@tE>$+LpuUIdx{1eBFmAG%
z?2ols)5_8nrcISyT;Bo-8SmSCRpuC><+iVw-y~2d0qssiH)$-Ap>RRg-a|ma<2kBy
z{zm)^{Y(<qSTFp;B?KH=jVdwkY|-t`QuX!57?$%}anS%=RA3r8hv@S9k9@$It^f4f
zuNFVRcC4mb;w7J##MKL*_s!&dpwi;ZEq8ovpF8=TzitQRR}srT0whi}KV;z^Hff7{
zhfF0X(X77bsqOPhUhD4@M`%pQz75qEWyt5Z?QnN8jiFfaI2GpTg-W3~W!E(fiRUAq
zY7RV5dds{*zw)%CxG`FZ{7hNamqHDIBpT}{tj%Gq5_T99_fR<4+3_FOOor;yf&<jS
zca`JFYQU2qAzxj5@|fOGe5nm}RO>knU%CK-b_9I{f|SRV-Jhi{h+V(}M^<3C6^z!T
z6rta#o*}+qp=K&S7S7ko17E;6(MH{$&*WcqeODU^K;J?|_QNA*%xN`7dTDrB*)vdN
z1Kv?n(1i??LAZ_pWaCux*W<;Hs4qxd=WE~rthz7a|5Mmm#YOc+dmM)D?rxC~q@@HT
z1OcVHk?!sxC8U*-mTr;G0Yo~ao1vvq8XUO$|8QUK%bm|WotblH=A5(lUhB8Mzcrk*
zq~3B1ICHuTzld{w@BJ6#8L_2f=FJeYy4DGp%S529x+&@XthnoRCNp>jNjPn-osqMR
zT=Ig*_8C<hZg>EO_pM@qKVk1dE4m7S$dZ?UC`kSkndhIC7TEdKz4vk-kYu@Orh2XY
z!dP{OomFDn?!U7CINt*=n2A2UFD`Y{t$0snqxNs%dgV*K+De1{v$SKQupgXkw+8Q7
zj4l$%hNu`=UQQ@H)!OUdfQ`v(7Dn9dk-`I0H0#MLT7y&wACe-cIMk+RBeuWJW;-VE
z2b3b^{dY6#^8o#etUw!L!kF{n-#fTCP+BV7`03>#adxPuD9dx<79#bo1o9P~R#@yg
zQCcy6%xZ5*S*xy4Pm0|ce?!blVOF&ptxX9*28{cv09i3_s9NF&O5^bp{T-I%ABznO
zMYExMfDkgN-lYO1n4a$^Y=--lWY9zvoz~*&#^Sd;T(&B%z5vq=nHh7DW94RqHyliL
zcLRh{bP2$QG67-tq>Cjf+FevkO_dP^uzXOpsRKJ!Fqc*s2ce0!^cH_fuln2nZhDGQ
z`i-6({{nPai>t4kpY&yrmEX-00Y<RurI=qiW~QeHkw&WkDBhrMw3{MhfzsCXiceqG
z+ZkQ0{M}}z+lph_!ei%3bA)5=pCz6oQtJOWSUQ=Z8|B|+f5iM$Or4B|j%u~2#40DT
zgTbg)wRi#z570U69$DZOFa2WKNL~HWxjq$dTx8@2NQlBXywcU;Qi4rYzZ%pPl^uSC
z`~W4Q7YyW_)oSmZp2QIjvy{m?QCDO+v;%$rb*Z1w1;LEMz)I*3M{VW8yvUiSf_#w5
z>kSYkq#a9?vFj0^uuC!W6XZ^m%XGYY1GV{K*TpG|(!swenhVH0R5%*QmN3JZ50AMM
z8thO21EFcgX4YgaPLeG8-AALLdfq*&JGGM3z2{u~vpOQAXnHKWbe_62Af7Mz1dUs;
zKQT1q2X}@V;$B`R$qFy*4;h)P{-62ZVYoRZc;6lO4l#MoE-?pgI5F+konUMr)@470
zsKi~26K68~5YTV(K+<@A^uFls59i%!^?&xuKqmXxs5_e|?8K^;gad@G`SHFY)<jPH
zwy{aB_K2VoAeF0RfQPvW;M{*>wpy(|Gsr_oN}2kf(kpIyJW#Selk+OI>^WD~xmBIr
zeoD72T_%3tOWDImS-^2iM<i7-*|7jw=mJ7C4uoNPiSC6Mtx^5(7RZFPhMrCU0Y6m=
zlo1yKBGhj1r}{g!do6__-dy@S&C3RcYq;wGBC2H^#s7R$VS+rar4YS>887}{$r0R4
zEK1{hf)Qey!9_Pirzq54l@V{t6Y<{A>d*^Vs~WGIg1A^`bZ=u_kx@e32}~M;TLi;p
zF@a>Sr|7=8?uTd#WKvQPf@{*G^e6mMK;p_7p5O9ne^62vLk+b_(H_~m{0fi)s>CF(
ze%}jgM0+*kI{8D)>wKRT@Z8%yveIctR3fH{$EK^S6MjGHzGObMQB3`AS+hzkrW&Me
z*TVn)E0LZ&W;9Nc-WOuop}&l-U{XBgz^ZPDF?bp9wtLzfwwHY8r;-#aCW7Jv&@4&w
zWL){1k&w@Sz6lVev^*9y><Ls*#oOGTC7{{!1_2Vb{51l2a(>zOzV9)D<F0!=X4Km`
zCPeViQcf|izk2fB1uQez3}3iIbQxA%k~W#clg<+3pdnYx<$%b+W3CF0`f>1zV)K;9
zqzJ9^7cU}+RW?t8RP5Lu<=+{n>8OQ1UdzV|lrTPW<ZeKwWJg?8RhGCEn~mLvf?~6{
zh(dH)Qb#w#-tXATpb3Od<O5ZL=y5o7O?Wnt{JKGyBuky^u%zDRjWh$Mgr4UMZI+&F
zVs^$)9NyS}WC}3$)evUS8n{FsOkc{<z8$upRqKLJ7yLl&h&l<OT4WxP#s~!T>7j*h
zRa9~wN3fN~V??lNL`3S0>fxA}^BCsiVlLL!UpiKE|6KjhKfrUkua~}UFXWJ7#8Oj|
zBg!SM^?9CKA^N<&Fr2c>!x-wo&fUct$R%^roZ7u~UTA=(G`VhP`Hl}gnf_lp+bl(?
z5Oo?LuJ_!s&GO`~HZf<pi^iZ^p`D)Dxw_H=DndUmMrEGZc4cqf6&;9+Z)eMWn+NsF
zms?f!7E+tFl?IyF80GeChg;faql(x*M(>z*E2%w`O<dg2y_CN`r`8FV<JhN#r$wk3
zcy3T!Ng$eEk1R+>Y9X)TVjcW@+It$T(Q;!;cG^J68J7IH-<-HNIBSu+(#(Y2j(;Ml
zvrY~!QTtlY&eXI9azM!HXyH)Ay|SfDMM`t7y(1u=j1s+%m2RB)dV?QQNv?`f?tGq<
zC4Ww&F!_jF1Ki1R&uL^Qmg#SJhCbq^Bi+y1)=Pw=M(YeaW#j%c&HvR8U(KFCK$V`p
zDf2z3#MJdKb~ijl2|1IzKDJ+%o|(5nT36-2eOBja^Chfw4mU#Dq2B)Yc@omJ3SmMW
zTa=F2YKgGYI@vN9qcuGGJM+mFRU(YYnJ%0vw&p#-)ZJd(pDXtr7w4AT{nqxP!syz8
z0wy0Z=qyK;urcO9Py8;V?Rl|qzuj}TN(nkQ(!}wF2pVWRI9ghq`V`|zx{A)C;=(fp
z#nAy_*2~>=P|eg-A#^UQt(8$DO64QZm;!T=Z?z>YmS7M7ydOigSY3XNon`?+&6{K@
z37=#x=~v+3-8FSyBXtUIy*j$-ppqn7<$exWR_J4J*Y#AJT9wRpF2VAxQLvKJ8+;eE
zUBnl+ZbtyWZLz#p`tp-Ss);9gp&6}B{~z$_zD7gaIEh7_&?)?Pi=*Ldp(eSf*}3}(
zI3O=c6D+lH%02(i;eEs}{2FH<`fJKmpF9b>K^kdYrIi~#a_3=SW(BFe%WuIJYvgqt
z@xFpM7r93dG{S~}evn0FAE<{uVu8Gv@}+c!xym9!_N=)^LY9f|Su&J8yolm|S%3)!
zmJbkfPewO;4kTTj*v*8uBd8&VADhY<dA6<VBNg88_YT|Yq3?@7t`?<#lU}=C;kpaM
zBGO!QWP!;h>`9}V;7}?a4hb7rFNY*<OS79ll|B3y%|CyK4kpZXBCVb<Us_R|0^x+d
zyqPyc#!XTu;*GpNl&o%1iyQ+t9x|Di8ScjQmFRav`O_PjILZ?<7Z-hiNOzAZTdI@;
zXbuVD4~@)q*eMJDXf>`+{^tL6%}uR@Vk=S{9e|760@&bppK^<J3TQeNGong$%<1h9
z7gDt8=jN8CbX4!<f;s^sd@8qDs3V8tgLI9=f#Q>4Wo1cBZ8ga(cv|&i%4~!U7S{3Z
zWP|ZFneV`NK^K?jX9DmO13Ml6GWB36pQ_$qPoE&1Lg}BzNif!`PxO^nUFb7~ve34>
zEGh?JI?XfAM_a3<iqVl~+^F9o8m~y`VsDUzT%Rhb_K9X=8G%H<u;W<799_YTO6!}_
z0qHy$_tmu0UiSf#H!zwO8|0Pte$yAqch2XM`xC8vERBx!_f20eh#OZ(EUhO4_@t^#
zNOgb(8Z2i$Y?Ui?+y|_8EB1ti^j)7lhv72N|C~&_JWr_$ALu^vWjwqL>59IIl)@}a
zIqxzoLx?bUb<B)_aq<n^#aI4`+R4Gv;elY9>$F_Ml@%=-R)TLH0=yq2aEkJK$(-gZ
z3%Kdd@i!yxWY(CS6S~P|XJ_obqOMQRoIp9P;-`8E;+tKRN;9g$Tf%g$7C!Vk^g4k$
z^0N|P*aU=nSLQEC0us@sa7><=36>3<d6w6;*ANlCCV?8v_fX9GdR<;7oA|D`;yyC6
zJez`7m&vlUTjyC3OwICXkOpHf>PlnJK<BA%Z5S<M^>pp{!0C*tlQ&&IC+AyT$ej~_
zlCINQHch_f2(QLXmx|0z&<<C|TO+&)vlj2Gm~?L&QrJ2ty?u?uB^km4r!5M5ODT@5
zOChNP&i<u*V5n8e6dlj9eyI|P)}M3ibTy0<+?H{VtZ+FmWZmAABHf>A)9$=wu6A6m
z4s<t{K8&r~3pK#hD)66uTwy>dg+RP5xsX`?i;xI}f;~g$6o91bA2D02D3zP0cQqQ%
z$F5gGScazEw!Ik`{XRa^T6_@1wXs8vYxzd)RN^twE4ms$KXKR_C*F8Zxe@qustQZF
zA}?<8=MmZhX5w93wEFI%y<NJ{!9&mw{+y`!N`5gpr#m5yf1V5x6rF~Tj|}jb7yU`9
z3V*Rg;%*(&x>98bdLx7`_&#+w8GWRh4P_PTHraObbIk)6n+?P>E}yF0ab&RqInGRh
zybFA9`!&KG>XkeM3W2VxoJ(_=Fq+0Bd;ntkE<M~gBCdhiS_io2bgLtRzdbF`&Mh#Q
z$>l%2qyve+Z~-2$jq623^ipAV4karM_MjGxZ;)L2JDV|s-M-noyB$}|ZT}0$hRYH2
zO6oQ;R?KYn%CqbeVHuZsOdhjU*aeZ47j82}M6z?XQJ68W2E4Yl%iqDgJmf|uznTr~
z`gkfpy`d=mxtKdQ6?#ti;ilIgE8QQ*FJ6GAfF>|$deNy69uK3o&C)69zW#b`j~>N{
zfwNkH<rNu&eE)?n!8Qd?KnIMn3;lw!u%Z|xXVcEnGH#qMn2&>n-HAmy5%Yg9ntmrS
zvxch-zMgMalI*ra%ofFT7{UqH(c=3dYtLzQ;&HY-T^t>wB6zB3?v^u^IKKtlZH3`C
z`WbKMGr!67KtA&V<!VNotYl#3!}T|%@uOc5-u;>m4F?L`lKQ&C6Iqu)@6mx(m_Ooj
z6?e*<d6h<2&nba4BD!x0W)mkkJ;gkFn8cVp_rTupya}|1xXg`4kx9Ck`8xIY3jNzB
z|5ic)o^90imHM1#K$m=(<e-b86Rv#Bux4gyx7%&u%0nQeHg-VnLvXpy1ykhSaUs}Z
z5xlN}58cqg4Ka&HiOmYF#k<i@2yTAi`0r&dJ*aa8KIo~(7t45^cQ19(7;S~?%EUq(
zWqJZ%;Z=-v;TQqtM*MOm$4i#G$#KsU?n30`faMBO=4a%$659<Y7Od!8umk%pI`j?$
zcu^i`<j{zT@=9>xR9A^yM%@<M0ZCdu8Zr8>_M>iSC2$LvR8LYH?L+|jfC%OmeLl_j
zK@8;DV#Au+E-SHhRDoy<NWKg$c)m|q7h?VAd{}y)!q{OpJj;H7n`e{9#CAIWjybZw
z0TYH9v38%;gf+Gbe!q}~+X@s5Y^l6>oH%jAQ$e6EXYdckI}u@LwqaEzEv=$S0JAuk
z65BpLeCtKOnN!l=MT5J4Y-rufTwr=D4yz~0AbB-=4Q-t(GANdja;!KHQB%jMx`na8
zh~DG6Z@69dTx8UOdTT3|fpT&Nu4CTWBB{H3|DJDiB&?U-xBE$(Ryd*{bE=gO^n?+c
z4Q?$F<pz~}*dAfngW8)q69Z`x6p~r1%vGglr4QM3P#X)WV7i+Ma27?D@+%CtEA6j%
z`KKkk9(-83`a}M6uQaolhwit-b3msXF_0eWryYA5G)+5!bZ*4kTfov5_;fRse8Oef
z&7R;p)MZ8CK(Ru*x%qZ*!Q(DsGIm)kp54Oi|9wo(CyCUQmmR7~e3mhV#(17$^m0-&
zfwQG#CTXTx<UY!WC?hG*&kWT{%*@*f=AWQL{)al0_yuPL;7slBU*S?Km_;7+;gK>?
z&h#Ae))Dk^^4f+7qZmT&A?-|d&nn+{>?mTo%sfKx3CT4IkMSMUha+5{oIOKK<HBu$
zA90Y;2;=hCpHqCqa`owA&fKHdT11!|9p+6@k~7hh`q6oESR#@C$~ZbhL=P0>AGJBl
zlUHveBWB;4(aLsQJ0Uu$tFQxQLU>=<Iypm}H4>`&VVg>Srr*QwH?S0i$rB1-6QRaL
zYt>y)dCbdEN7(#z2!ZcNea`g-Lj0msQZ0I31{(iT>9Ol|=qK?Y(j3gKW3QlhX4OTh
zUI^rRkE&S0<k^o&`P30_Khxr5=ckHed3f<R9saPjuyczdf?@M7jqAZ#5q=mgL@huQ
z-?x7dV#+>h*Zo5su64g$%n-jJ81Z*oACAR_lKmlxmbW~0R|u2o+p-<BD)o`9nv*oL
zRjISxyVK=0#YHqaT{J#6{13kNb9$6O{l-s1nz>?B8$W}!D3%2ys0#EWXO>{Qn2L+O
zMes5*kJ`)R!U`J*1M|huA>-%5N)3eeGHq#?3+kq+VF5wn#)~@=QcDD-FH#FYPHdon
z_zR{Lp2i_G%E2tyFuc3REP6Ybfo{a265G@iOR85}aa*6ln<V75ag;B9n&tI7Df3Q1
zq-Y7l%6#lDI9&UXvPRZZKFv$(np(Ek-Wcu)zxg!6!GfDU4={IyULl49uS7`53^Nl3
z1fz2IyK?Wf&UBtZ9VO@BnW1r@1EUvFGs>{nREIQr$-&LDseVw?6jyG93u#pjh5dpR
z+?^A-ezz9CM&bb>GH2Q5FJ?G4ocy@-8!QTQ^#*_DgLhzov*UNK>?OH8q5V6`Dum9I
zYKgkDa5#>UZ_WY7nb$Q^i)zlF4;3MmPlQ@<TIf0ZPWEMui=;zg*rQ*~nMmv!ct?e_
zNc1S`v`MH|RC?`E;Lk4w*f#j#dmy6v)c*#Hr$QfQ+R!_id?2#;)#S8rccvp_!Ut_!
zH(iEE?N$xW3Af*7+>i@8A*Q=dZnLXN)S6v<o#(V8c&m=og}eefKCFW*)rE&T?Mky5
zJE{B*#kD)Qi|UMJ^(GGVO=?uqZ=kA(fA$fxDy1eh`ROa&UqbZ>HK}+F47vwSp|dk2
zaT+1(SYmz#?NGx<JW-%r`w2C<u#xE*9z;m-eRwU1d;{uO>hp|MI>^p1ZA+#Dk=8+t
z#zN@*Yb)G2InhCN#sH?-eV7OU_v(KBSto7L6^Sw6rz$WG79J2i#S2t?tVY-LT0;N<
z%}@TWkr^R~D@G|+1~m+L;X_|l;M6AzaR}IMcu`5-@=9dsJkAqo4iAJ1dQEb`UJqhw
z&DqNdGS@>Au$&paye9_|O~*XQi!6qoN<$jT2-lzX%}b*`tb$D@LI?=Z?sUsr(;}!~
zcHji-R}-*Fpo61%0NsW^U%N4Z`=P%Tb_}+hYKcFvRRZAVJJ4vVq?+gat}{+sDKLVF
zFKn_IC$CLrz!9?&{yc4y*;%bpJS=IF2cJleSzTnKE5HCz`43IBT1;KC|HH8E@vLG-
zo$RjW`+wHJ|Lj^IQQ$i(GI&d4bJp&KoCpFMQk{jSlW&YYkZH|yMI6`Ov8g=S!dkiA
zY1-A8U?keFIE}mpr4RRV@FeW?M-<;W19LL^@X3ItaxDKBUfe?DbRqrg<&xXxL}vzR
zQZYXofD$J-%XeC3-bstP0tny**KYC-oi!`FQ6ruVljD^bEFDk^<>g^_$0Bz32vGkL
zAxYdpPCc_&Q8IV%@+jeO#(@2`o@@ERV`L$P=OC#Ofhds}rc&=4_&Z=pjP;#2bBknO
z%L_Gq^^fXut%1FapqRX&()&xRIx{3d*cDv`Q8f#njt=pD`%9L~vvv>rcj>Ksf_WK1
z`wZD%$x9aDG#IvO)zwS!1BYl@V;|7&r*PLmQaLFvwrH-%ocQehyDY10S9D&D4WsM7
zjs-SqJaBJgA>NkxS#>QH_^ui(@32MZJ*jJZukcmG7y<<*QxPMQ0E>Oo&_#@vV{P$B
zAlAtFca4UT!%Oa|(L?A1DYX+_S9-2qPRz}TKQ_Zf<TrU)ocFUW-d&E1<7@H``sU`-
z1ar{@|Ed^CnkKNSf<vR5y!3l;?&7Re8ui~oZ$IrIc9Hg&LcdBDSWleb#DUnkeDF0G
zSQpqZeR-Fs2-o<Iun4u$+G~$^*l<)TcE`N470zH~0JER%p9hMTaAb{6QC6c9%SFcF
z4qM1ihwMdY5ghAsC+`VkEx^PqwAOXY9<26BKo<|r`T?fT7p0}H<o*?c&@-!e2oCGY
zMt*3An&-43^ahP$=3HOF%z9a-4Z2R@+CDazTiAfD%%VAwBVJ^E3)>NtnpU8!r8w*A
zo5W2BHCTLcu{N){C)bF~QCCr}RyDqFQ}#E4%k%N__4r;~uY&uizk9E-0)MF{!n$Bg
zZnMq4Um5T!vq}y{)FlRzLV?M5*;NE@LW`;8f#p37(0ZV#`*dr3LGANEbHROW?$?QV
zi1#<g(pI(7w{9dg@$?Cm`zSQJL?4h?JUghJa;nN4tllKt`p~49Iic!=>Jf;|wq$um
zMer>V9wggSD1E;Z{|kTe$+TikmTObOc;+_=<3*Q8nPh|+We_8O3x3df2uw)HDnRq+
z>52*+feU&CY>7C=>XBJCD8-tvJ^A<VCTjM}$?SD~f);?EUIxh8mZu4kSQAh(>S;~B
zpk7kS0b^hZmYxLPmmBi609{Bvz?K!v$l}IWN=$Ul&FN*cbn&vvc;A@o!Wn=??H7rx
z%Aa&(L5f&Clpra_HtdfCSQ~HHO>9l16mlS@7~u1}l*#;<WSt<gs0*632I9=z8S7Q0
zlh~bmA#x$~sstX9mwXE3u8H^upSag?vb4_*$zKdqW=bO;4w+4zTZ3Cfl(JpNFHS6a
z!oe$o<aZ|Rx>IRWMqVRS8pzX$pt*&`Ur3xF4h16<nPqb7*asS4-l~_!$Zbv+7Q^py
zgsZE|bKNe4)9M!<3J0%*{*F_LQ-Uupd-YuZSL8~35yNQWKgp5r=^&M@1wEtC1L=KN
z>vL3y+#BTmmXg2LzVGh{ksCwne~Px^3_6~;h$ydvw`L6w-P#=%(G_Iy2A<$j;&C;6
zr8n3@ow&G;u$kb7YeSTmr$hIFHQshnjdLec@+ueMs`jzK`+1L=nT2G-s)-ScIOD}&
z<Y*rA-Z+#<uRu+_o+1z7?YqZmk-$WBQ;RZSKRTL!CZHN~t3}$gBTaF6d+Ad^Z~s`M
zWs38?hLRA%_2X}=cnbZrp>NFH_F=r7#jpXC1th`Z+$|p`m1kL_W_;VP_tAF8UeqKD
zCBMy+3Hp{ZhGOm><(-gs`4?X}`R;v#ODy5vRV-Q%#s5q@7Nm0GdY8Hox3pRM0@@7-
zyE5r(C#!f`B?jKVOQ3ClM*Oy3#8Ppy&!u>o^x?rA?6Z>f9!W315sI;Eq+m=V)XBjJ
zrIztF9Wh6XJAnqeEke4~_zUO(7|2*P3~QaqG<~{N6HKE)-N{kMv$@p<@a()Nonufk
zBO=w!fEjPu-zdQK+TPNAWjV=kAgqUcgGD7E{So%mm5{mD{uw;+B6M5JNf+bHA?Hjo
zk`A<890o@K)&JX<B;XJh;zb84jWY3Zp_-uWgJ}rfb#ztoFIc2fW0_QZPrM*i_^Rw<
z6Z4rd>!e3`*EZ-$cWpl6{QzZ6zhd=%S@@3tBuU7Z-5ulw?M|Lf0kp2jx8(tC+H$6t
zw5I_lUU>CtSFd6Vk5m}E8m@gpXH{97IXeb{L`ZE8U7_HNeo>#un`_GWdf~%`D@hh1
z!#w%ZmJ^u@s%{GAbB8A~WCq#GNZpXDs`~XcBsGPy&-ZesUO%cyR!6Uq@fB&0w(dqU
zt`tMHry_+(C?h|mnbIv_GIi2?l`igDxJi1e2WH=9LiDK|f4d{6B1eP_C>8>3XBJ^>
z8@WtxkY8DrFNUr6<sdLq7l{I>@8x-zmG8|QM!fN51HH&)CpsgqdMJ&>RS|Z9_g`TK
zXgAhM@-B0EJr^W-MoLc_Ktjsc%hcfXOvnZ^<=G9#f6j+MAZ1=jbuo%_Wv*t0HPXnk
zG<<P(o{iv>C@Hz0mZ8?tsyyv;xF4~1LUphrY#hj;3e}FZHz}0)PjdpWBl1e@546i&
zBT?*f$hp|M$KJ)e0wK}`FuMAc+)th$<~39UB*|cMvN%Gu<iBEE!w}dv40T0$cehbf
zW)jAT+5I&tBG3p-^|B(3%mB#)P)Q6oJd0Fs4<nC5$w$104dyy)d8RgC=69M6-8Ro%
z>0CSKc#KX^8}l-Ujk$M<57G~dh*0OaS-H(}PpT@*oVqwu>cmht7U*XfOxQQ4Um*L+
z_+0UKE>w*{KY$B4d%bciDAfj?0D_n8*@v>eE(Qy%l;@rtbzqt9Fl45+>Eq0(1TDpU
zxse_~4)y6b1`v@@r9NZ_A610U?5*>&HnfFufrOXn2JbA>L~Fkp{Q)#mEC?DUT1N}~
z$Vw-27$sErGe8)H!=ULLgh{J-?ix#I5&)uZ<Uh2sjG+IA$=YG*8RA#|Kq<OJYW$<%
zCIt<6dH^0U5A95rCGogREh+An#yCp+l$19UH}--sCip}J$CoJu|2qkBuB)ZYwIny+
z0L>HgK-b<EnV@k?ZQ#TzeoT))07B?Zj`+j>mYlW@?1z2%mAA%Xh5$-sAS?6z(~7DX
zJ(eh>_4$RSuKMV9D1Z)gz%MjZLJfIWu0{bYVsc-XI<XG7?N>9L4+%~uSIWYPsgt<0
zZO8W2PeCuiIFO;x#4L4Z<v!!+7Isx;n6A%~3kxDnd3NiDd~J-?0<3hOsdLgeo)46i
zdHcnI-Z7Rh9};GC4o}pN6EW8Uk|S1Kkh@VzF7vS-^v8ydQseXxg3X$5`Zp$!Y=koG
zGOXhRqbHwr0^N{-l8|-bqWGbT|1NhK1aLu6lt4W5eBWk_EPi~qsVhz!PpiO*_jdAM
z4fw!mtj}SgM2g0&#;WLVzMQ=hCisN>&f?!WP0!4wq|dk0)<l-uXj3g@;o@=C1)yy_
zx||wW9#vEz{Zq9m!L<xcTlF6P-r%Z4Q-G;}C5nufmd{Lt%FJIxE%>*N5KTfTg3$7f
zXcToJk*tN*3?-=`JL=na;hT(@7cw|gMo9;rPZ@2X7E}fXKN%d1+XHe2B=?R2cBSUh
z-<0G8On97jUM)G)4*X?zUN?uMmz;%7KvBB33w`}KtQ@QTewrdDX2I;kdUADAOw)>z
zKMAp%D02-d{Mfh%ht1*{J>`{C{vvdYq{cP03Y&oBoM^$RDf)wQm>Vvxz2QvMdd_R8
zI+B{ZUHCrpxW*#WHkbB>caN)fY>U_{HL^R{y{8}P!$_TMUoaF?hq|+wSCAlAO%?kX
zmaJwLN<Xxs#;=0i!)aRr(9x&4Df(56N%J-eZ{AS!<H(9~s4=!&6@6xve~!bARwKs@
zk^S~V{!a({JfR7O6v^*~AedLyS*>LQchSqUruQ8K30&HFIw@Yhk#A{=C1?3)-0*I`
zRxIannCbmM4RbL{k8>bujyNTH52nvvQhKMdw0!XjX>8Bo9hf~u|G7AmTxD1HBO}}X
z8#AGp;d`b0sD633+Bl27Lf?Y8&09^+_aP&QPFsr}1<!{inEmC}9pRbmuYr=GK2eE{
zATOBppQrFZihd_k&eebrb&R=jRWmZ%k4atZ4D*){Dlp8;e%{=uB6+(qrytVI=vTS;
z{|aE7dv7J2YpY`Ry=JZC{;0Bc)w3MwD|yeB-~^twuoZ01qaO_mFm|W~5ZzDlN$c%R
z9rBrdi`%Rr#^AGK^CQCYMR<*CUQRLhY%fU>Fw+n*W#FtF75d7wKg0Rl&Eoc@^=C9z
zRh`5hBA^4xs8_zE@tNa!_UYG8pJEDrl5LW~{o$FkrT!oI*0!y&YMO~YY}laW{N-kC
zsweq5sH5IzpCx>%721e)Lrol(%(=Aw-FQr4YJq#4vrY<&_HD`ByRBb=hWO?P_A?zW
z!8#7DsASTCc1X^h0^E|0ut^{)0=gQlMP(mb*VH7!tj6rB(NTYCFfQp3o{g7nc-~z4
zT=2+EDH-~~!>B!Ja%yKPPYd>bNR2OcyTCpY`MR6dk~fy&rMGe|w(9{eT%0#nq~x=e
zp?I3YIeQa>;Bu!|p<&;v5SrR%CND-@#xAM2j>Kk^TI-_@T`iKIW3cnb_@i&1mpPk}
z9FuHjo$kajn-}X*hX{YAAy18E+cj#YNB9W|%)AYja+Mj=olBKWIA*5kR~&n_r^Gcx
zUmqaQo&OF|UB=@mi+fh!-8Js@jyAv`-5gTM=|^C3UvXS?I7lBd8&3&S$tmu1=u}2D
z<>VZ7w=X?k3cK!*mZ>0#%%{1jkK3Fco=Z_Rqq?-$Jx?||RD5&Rh&Q9PRGm6vOv>=C
zByGpo!6zypSf_C?%@E?J($@@iLH>f0<Im*kP>QPb1!iBZfA`YL#;yMOo_gtL)`=^Z
zXDLQ?4fv<V9C0ka{l{>Br6|02v1=i^VcO_uQAeL^ItbtoomDW<ZcMGj>1$MChsIFO
zv1ytVc!b7nejka|K1ZKJy8J9hgM32Z>0&JK%f+GNVV=3Yi0L;PujjkKKd2;O;8%9A
z<=g87Db0n~s=E!c3#wR->o?Kd)WmIuk4y;~k%|}n(3F%&VD-i+kSDEfUO=HWy0{Ik
zCFYGBmSwH%Bc5(pQZe(=Ec|XoWM2GOvsBf^KW47}Zl%DT)3yCB;xoU>GYqwgt$;q5
zlRVzY+BX~&Tfy^l`{%hKbL>Bam_D%_-9v>c;y>7S=OPVUH-7mkQpwGfKZ-wTPEf|n
zB`X|ZvjvlPOWb|g_TerYPefCK;EEeGP>oW+s;1@`AV3;W_ZXyy?}1@bSGEhM3-Ck=
zZEP7t_$u5OCRuqEw4k=kP<%xDIs6OxF4aLKzLqp}r<3o4uP=o;66ZV97N$V)&!yUQ
zI7Z>9n0fkp<+&4fuC>;}8YxH06#bI3Y7DZjv$hFblW(%7&jR2jg{k4qxW+n8?P0V#
zg}&y=_kR-%Ra<b2F_`Q=s}FHCbVwl{kgmTk$p2aKo~ozjt?L+H8hiXuzr90y+7XFb
zE)u<dT<9xQAMS~B$x*Q!JNE-;h7(^l*4pT>&^N(G1&6I_Ez*&`Dr2{fBeZf_x&FJ-
z&Fism=|t@C04x)-yfBqMn@U+RLJs@oF)ltGHH<=}Yj<U@DJP2NxDy5Jif_M|eky!G
z`t1`=!QzY@6#An7Y~lCh?!m3c+SXLCNK5@Xo=J(ovGozds1ZRT<oaVg{&B{U$=#|M
zK^-xt<6DBDHY@R}bv!8n;TIS7mn*Z^S!kyVCai?Mmx8IYsW6Hu<$AHiI`?;Px@lHw
z5yqq;dT4Uds89@u;#GUkrR7&SmWTVnzrh_{t@z*ecyOLHJj|Y=GgM;74xJ1=Iy!n{
zQuGfnx+N;2X8l9ITZMlGdz7z#s5qXs_lzV~OZBqnK?Eh&oF?M>p0dDPLf4rViJF<d
z1qL|ONE^~Phw^ezR37j8!k^?+V_>fgRKrxk62#wszb{7&s~&fI;7BrXTc6jkp5c0B
zFIXu*xZ6{j>A$rVY^G}PT6m{*95pWo8u7fk@WFV<-w*wU)72Dgw`#3jIxXXb6U8p;
zReprb&(gd+D!g%JrP?ljp&z;JW-PW+xijhBXuXWd9W)uPjV7sP^PzZ2rc$=BS!Uww
zxkgkl$7XA1>F%xn#Zu4<feD$Wez~2(Hi>FhpEu{uv6$Q!x48<~wky@e83#`3a-kCk
zFGby`#}3|GDY~}IHR%p`y=O94;jp`Bs7&o)c6#hWZ+!gn!mslqsYW$pc|L;**N}%k
zyAefy9<yazft@efYi3_*&_&+-ICX%jJvI(%>3QozX<?hUoPT|hrFOug<lbe@n$-Ei
z+XPj3M(t)yVesPlh$p&fkJNSK^N)8pDC4pER2-&sFgKU_g#=QcjM&x}hcz#;1D%nh
zlHO)k!@866*A`(Cv$Q1+`t3+akkJ4BBS2m2zJKU0c=wIl11Ph>Hz2~56&}YN9o9}%
z$LqByQnD$WUBx8x2K5x<odhkKjXi{;iqAW8!;hGCIZjjvrR$o#vM<uka(53Vu>4mK
zw!3uiH(C5mT|8r92bxay_&I&i;~M(f`@B{dCvk)L+KJvpILSYPQ8X7=@uxCx-W>Y|
zET&^Ms6@VM&h=<}ZTUs*c{h?tdC4MY9jjhG#Hu8tc>Z*vu-w-f-=*bAmp<C)OIScw
zsr2mQ#B5V0XWoxBtcYzS9=H;{h8Y6I?T6v34EK%dvy<HUysGd(3|DP~*G;}7DIb!a
zo6WNrE>%L$p>iBVzJB8WM9(PT%N6gAUJZwlHJTsE)H7At>{g=t?6;3vOqEGpdsL9+
zC@vgTY`rKyQgEydz)DAJe6rg1ac%Y}yk<k;TFtC&PnSj~>{BjeXrzI?npNB$ck4b!
z@mRJL!hk&f(lH`v$=O)5VWZ_bz{rVH4(0;Im{NXDTz{O^i1@yyTY9~v<BO5zTa~Rg
z8GeM6Q~Z4~2WDF8E}T=f)$*j~#GSs{{vVUQbj4Etnile9%6OI`*xepwn(t%V`znb%
zvRmgtOT0cl-2d~mWN13KqEw)7efP@SbEmUx?`YuzYFn4(m^tN7){iL5v-)i~&)Nz%
zAR{D3rN}-^ZW;mAs<?d_5zeevS6p^%ts=GO?#`h*g*Sw(0(*N^Jh**jsSGH(MW3x~
za>J`f)6FTt|L0)g_1T`X6;Q3>^$jW!ehnZx9?pXCeH?Y~v-)688TJ1^KaGbVcaKXY
V50<8ZCKX6XujSQV)ySHK{SUFmcg+9*

diff --git a/www/src/images/favicon.ico b/www/src/images/favicon.ico
deleted file mode 100644
index d3a0a00f51ebe0129dc008b1e091c26443ba1e5e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 15086
zcmds-2auK36@cH;iwdF?QQ2Lk2~t!L1$B{XLlgyUh@yajAR>vVC~Kk!b{Q2-Bw5pJ
zh>0;FMdOaq6fp_W^ccmA8cj92QG&9(eBZzKzWLdGZ;LF9lQ;8m`#I;Hdv1A;&18x)
zEi*%hW=Kmi5BAAq4$ovVB_*NUIg@#Xy3VAwU(_m-xt<RF>BErBd0>6=>0Oijzy7<V
z&t64P3Wt77(YB&O{->=4oCphHK|NfY>SO+sFhAfp$BS*X<;1bI+iI8NxF~B8vb3#5
zA^WYTy)Enu`#=xq3Hzn6yeG5-{m}`Az!*3hY)^bd+7Z&S%<moav?AXP)FXR??dlZs
z-JxZD_SSBrzj7{t7vL3m5-x(da3}m49tP*|Wq1az1ATK2tb<t)V{rxfKY+3xgR#N>
zvr_dpl0OpefIq>@PyrL6ZEYJHDl^78ya-viH})sr9?pji&=($uTcJ&=k8}My9Bm!x
zVE6|pYe}ec>~BKdM$!XA{W$WQp&F)J_fbBK?F>H$b>6KE(hjhH$QzSmVHNaC>!55L
zJFYzR?MMEtP-jdVcV7tQw@D|(@#K$z_hBoX8paz(9b=!yr1Z~c{~^?07-ZURjE;oF
z_oV8%6kZ4Izbf=i+wVS~2JgW(SPr@PCZErK$0Y017~50!MgJS)1K>WmvbGHB+z0NL
zUx9wp_P@Z0JoZ;m|I5(lS<>!ld6d)k&!K!0R6=RGUqgBNr~U8#yakNurRlMhyTZc|
z?KW=RH~Ki9L23WrOTByBee)_TgT10m^4jm(C`W&-hgYB^_GwH?|Fr!v{^wHvX~&aB
z+l=*X5bbsyjH9GI^iA7;ai}Y%&mY0Hy4E^B<h4J>|0(1>M_jYGzjJbHM&$pO{`u_h
zMg8%x2aFH;?jo-Zt6|?Ljr>G7AoR&+zh}YI;Mk|2edwFEKki@8W$%aK(5QVtKV$kA
zp#126&vVhX<w4(N<o^XjQntIVzX^whJ_nKiD<~`azZ>~@K39-$8TyuykN%JLx1g>a
z+y*}V>ivYi`uPn|=M$h`lsy-I3wJ4mv=sE;V$er};Pc=aG!#05W3)+GYhV=I0DlAb
z!GIuZFY;G_dubb74@ZFhcb&CoSiQ#A*rXg|Z)RWy=~S2&$`_C(XG_pqOxZoDo!(vQ
zI}P>=#Bs_y2b3klVYg@xdGE9{A?iJw{ORC5t$fqmUXSByr}SxXkJtxX*IeIpKFXx7
zHSnS@{Bay?C#z6z`xa`mKFHBG<#2Ta*k?jo9%bXHIM$Ir7tTzTU6bwhAms_rSbf^o
z(EGC+eYB%7bcwc^GA4<SSQliZ=QD}A<PJ~u>C#AD+S4tLYmO9oM?%`aT`9Zwlei|m
z92TpK)N|Li<oz7#obT}Fu;ru3K)3G--*Fv+JtN5f6b?$+cSgt$4sC~qvUh;7v)%j8
zww?JwUmIu_b&%KQZ$K|-1)iIIz`Z*KCWH0;U`WV&zdQixw`Y6Gxp#P!-`puWJX_~Q
zx#SOkMWD^vxeR^}hrtiQ`@^%+_k!`{yxhn0!JinC5BZDX#8}>0DLRbtf#8{u#4f46
zeIDk4d(^wqe%d_@dcZ0${x5;&AiinbL!NcUVs3BjEc=y<9?y(>VImv|2g6#J9`%yf
z$6tbVFfdi`o_z?k*RdzUJ<uuk*%>MFM}o0Zl;UXee}TE+9b{~2+f?xWtcEOn8pgqc
zFbj;K1@Jl?0cn}Nt!wT%AXB~L;butUlvG`}f-%q$ehk|C0vroJ0^ez_)Azx)m!Kz%
zf?J?eTS?vLH-LR-Hn;sjhiBe3;F+oa?gP(~-9ek~geov@?Cbm8*lz_l!n^P=6hkNQ
zPWU`r2FHQ>Aa}Oyj5&mPxZc;n6X5x|9)1a)m!9)`*49nkZlP@)sq5t0jDc@~>rn5z
zptiimmXX^M{2p2Y6QDonZ_gIrs<v$bW8?aU<kII8p|AbjH=W^da6JZqF}g3D46PfI
z*HAk$T>A^*P*@l8^GM$UeQ%6Zz?0D6zN1e+cnlte1Hkoq9o*yd!TmoFoLjTrXUOXc
z?LoV*1!G=coeqtD2hi6woCf=VGTl?2WgRRx<kOGZj_fwj0`>>vraOEcjD<%ac?Z=e
zpFX?6H^DLPWn<7g!1z>lbNgJG$AD|?S#bs|f_GpNJPX=lx<`Gs+eRPHtLMNmmEbx1
zFSrW)zOWj+`$j{(-+da=74)@6&O$f@=78t6b2%Hd#dTi+)1ed!o+Gq*7C81yaLh>9
z1I~iJpr71p?&HPK<lk=d%?UYmzPC{~6Fm1ki`4f#Y=RT=$q2rfO#7eVr=Y#=rInyx
zw$o9&Tu5e9>XF$7Tw~YbR@eaUKi>@>f-zwn=u_`4V^7?t&hxWiAJ1E3-m~)=xCcB#
z&w(92GxN;}xt=+L;X!cy-G};pDh!8J@D(@?z6ZYr&+-%Cckpen?S63Xj!DifQs?V>
zeihWw?BB_dIUA0G4v?G?r0%`{z`{6Z^4hC^_49JLDdabkj!X5sjI!^EQPz>Vw#JkD
zc2?}yTq!b(B<NC)YcLE>1MfEXn``8G=sD#Y*nR{&0e6G@-95Vq95V%6hv|^Kdq{J7
zn#=aI9OP^Jfv_G<4)YmG{;#kMO2KngTg4df0w+TWTnBH$!C|a1^f)+fSG?Wy*#gim
z&sO(=d(U&UD;O_tfqq>J#=C3qchL53p{)O%mok*)n&iF@r+wC(`JgLz$5TEQHbC#-
z&%?-jp6mN-!1Ktw_eJu3mvnD<8qSKgk#}A@^*dP96;t%}1bwS7TfqRh7n0wsNIgqp
zoOo}ofxb`#L%_Y-Bg)&=DZ0l)`nL%8#Y#y2FMxD4+^$`uz2F8YiFT4V4oAoGu1?YI
z-IRNykoW!{8SNn72Xeo6l6OyxO|`pb1>YO7->yorWda-<^^x~ZO2_yp$~*lxo~VCE
zQ*7-H&H9_`j@tBb8=p-+nM|Q{>#Pxblx8!TtyeBxv)FXmhxb&OmRHrJGoSfPRXOG2
zwm1CSw7huDV$)@1HT{<|ZWHCji&wr=QCLr1{hQy;X6;{DU6Xz=vnGA%r6jF>Woc#7
ze%ZxIdGo9ZZ(Dx<wV#xmZmrl-mbBltC29X>#g^|_Mp|W3U;N*i`r`j4^-<5ZjaB8z
z_>HfXnQngWjzn(u@?J^*?3Riot=?2snaFu}a!vhH!Om#+`wMI8vwV<~eCnqC35XIH
z4Y|M5>P(@)hj{kP@eQ{tsB<=<*E{=Em>QUt%KMJ8EN7%r^Y-_xVj9~l$NsTR8NTf-
zZ}<N*x`euxFbuqp?K=ie0>}6UIv&)aji-QTz~11SY6hGDzBh(~-$gvLeFOO2;WY4m
z^i3k$eJ6@bLj53k6`le6d;eCz`EWm|w-d~U)zA^HhH97(`@v5@86!aZ-v{sK2Hz0$
z=?cGx_0SG_gZHCz)DO}AOUeHUd?#qzhcE?vhi!(r!Kc1?s$e<zo-2-X&6m<1_5XnU
zc(?*w7xg;V(eMbU!#>99EcgKKfxp38NPh1ijr#8(ubs*Nedp61>{b8o;5k?Zs~~<i
zFt+{)@4>?`IE=Y~{8rG`C9naegf{iR3lD+sr`(;F&j#A#{J%}!?{4}){~KrP;CUDa
z&O82JR@Co1-Z8(1A47XEe)PZVvOkP~Qpo#VmU?x)3{OB8FrKb~gWyKEBFsxU`lb!|
z8%Q-6AHEBXJ!95&I~t6?+rahHAD@Nf?<&$hpsomx0)PLw8jQJf;Y!diG1i>tY;fM)
z;3Bvk=74J~)@$2jxEU@5_re0W5L%{nhdJpl=P3i=U>F$6rh9@m+An^m>p{MI7~htB
za;}lu*D-N?T3$cu^UdG2GrnEleDn%>_Od<XmFrQTAsq|J_YYFnF`o?U)Y0JYY06B0
z7;`K*U;XO3Xvgs|5nP`c;68Po%F<(ZB#*3)U@WQ6cVl-jHu}ObV9fLf*Vpsc^|y~>
zI_`*W$09?&8rQqSac}~77OaF%z+AWqrojZTkLy1K#x#R|=V82;f%|zi41!|N9~Z#^
zpg!BYe_X2zpw2zpSbG?&58c1L!PveKt^#9v9XR)A;YCo_W8k^43|s@pIMy|4@>`iP
z?laeT0T^fMC<V{NSK%5s97e%Hcmt+@zR)k86OQczP5S+U{w=`$XzaBE*Hk~RfhR$|
z>A&&mKv}=*gNI-q7>|xshO!#H7W8%Q?kjyh306RVxCPcizW0lIz6jnk2f<1>4bB7O
zvPpY^{zcFUyn8&`2ZCqu=t40>n{l@k`hjD*fpgFM-l<1UE5;lM?lon4zU%+@Ao&})
zd}C?55&i?tc@;Qs{iv+GcU}QGZRvkR!1y^4jP0{w2@I$`jymrP+s=Z+!1Z^{hJ$09
z6oblVjCL4n#=du=`FG%R;F)XOiGKb9ybYcaSHL{5|3~_N8^$Tqz2;u(4yVKHfd2g%
zTn8&)1K7`aodc)BK49HA$o(!>+i!)+jB#GcZ%Cy2)-!h&jDZ30UHBB}^YviN+orFk
z!@%G}?Wl9#7Sdb0p0Tc>^XdnlKgN~uV4Z6#`o%iidV#hiV`|H5Y8g3$z<p>eTmt*U
zXi)xKP`5t!oHZsE!S3LgK~2?Hs6VodVdtvsPr|-165J=+WS!@h{TlrL-a>i`)gx0K
z#)SGOLK{$b662)q^>}6{f6re?){fMpV>d|rY6>yVjL{~)t9H;9@2N)LEBSQQ{C-gL
zZ`F*)%c`m$D64vBMcKQreW$o;Bjp*7kJy~8EKm1K^3|2utUpP7Ff*IovMHN=^UZAb
zfj6?rC#F>!v)Qd>*=%)XP2X(YkB?V>mMDST?-aRTKB-K7nCpJv`R4h0NJxi~4i07S
z;2~fi+ofj|LB0<x2V=#v$us467!TfCr-E-B&$`cm`f}%IC_h4K{CNf$|2M;YSPfr;
zYe75K!YIgn*C4OFuY-C^;7+iAU+_%#e)X<1t{;WTko(?F-t*@s@J@6N-tR{RmXV$V
z-jnXZl`s~PzZcgB<lRHc7JbwOw8_0}n`vjzeq|g9$@h*hz9r>W&>GxpeLy+U2L0U+
zY_pGjbMsHFgKeIxWuUKJi}OR?I@=1~*R*M~zIW^rSPYlKRWKE7%l+Md)EnlYP1-#k
z7Qk$12W`N6O*yV_Z>VDfb#eSj<kfdnly4qf!%3iyI+0ABK6LHXuWs${0p3%W!v&!J
zVyH7d%%LZ3`h7ag0b^B^Hw|ptC)!mzrA-^0pJ(UEpqw+nIgJ3@>a1H@4(+YMyY666
zpKEVkyX*KZJvQd)R|KBt#+;bX`&RU~&P|&$nV0#t{RjS<(R|JCpZU{m<=fZ)4^Jl-
AhX4Qo

diff --git a/www/src/jsonextractor.js b/www/src/jsonextractor.js
deleted file mode 100644
index 3a8e280..0000000
--- a/www/src/jsonextractor.js
+++ /dev/null
@@ -1,293 +0,0 @@
-/**
- * This is the json extractor. It tries to extract from the json datacite object the required fields to render the DOI
- * landing page.
- */
-function JsonExtractor() {
-}
-
-/**
- * Extract the DOI title from the datacite's JSON response.
- * @param {json} data The data object provided by datacite
- * @return {string} doi title. Null if it does not exist
- */
-JsonExtractor.prototype.getTitle = function (data) {
-    if (data) {
-        if (data.titles) {
-            if (data.titles.length > 0) {
-                if (data.titles[0].title) {
-                    return data.titles[0].title;
-                }
-            }
-        }
-    }
-    console.log('[JSON EXTRACTOR ERROR] title extraction failed.');
-    return null;
-};
-
-/**
- * Extract the DOI number from the datacite's JSON response.
- * @param {json} data The data object provided by datacite
- * @return {string} doi number. Null if it does not exist.
- */
-JsonExtractor.prototype.getDOI = function (data) {
-    if (data) {
-        if (data.doi) {
-            return data.doi.toUpperCase();
-        }
-    }
-    console.log('[JSON EXTRACTOR ERROR] doi extraction failed.');
-    return null;
-};
-
-/**
- * Extract the DOI publisher from the datacite's JSON response.
- * @param {json} data The data object provided by datacite
- * @return {string} doi publisher. Null if it does not exist.
- */
-JsonExtractor.prototype.getPublisher = function (data) {
-    if (data) {
-        if (data.publisher) {
-            return data.publisher;
-        }
-    }
-
-    console.log('[JSON EXTRACTOR ERROR] publisher extraction failed.');
-    return null;
-};
-
-/**
- * Extract the DOI authors/creators from the datacite's JSON response.
- * @param {json} data The data object provided by datacite
- * @return {array} doi creators. Null if creators does not exist. When creators details are not available, it returns 
- * an empty item within the array for each badly extracted creator.
- */
-JsonExtractor.prototype.getCreators = function (data) {
-    if (data) {
-        if (data.creators) {
-            return _.map(data.creators, function (item) {
-                if ((item.givenName && item.familyName) || item.name) {
-                    return item;
-                } else {
-                    console.log('[JSON EXTRACTOR ERROR] one of the creator could not be properly extracted.');
-                    return {};
-                }
-            });
-        }
-    }
-    console.log('[JSON EXTRACTOR ERROR] Extraction of the creators failed.');
-    return null;
-};
-
-/**
- * Extract the DOI contributors from the datacite's JSON response.
- * @param {json} data The data object provided by datacite
- * @return {array} doi contributors. Null if contributors does not exist. When contributors details are not available, it returns 
- * an empty item within the array for each badly extracted contributor.
- */
- JsonExtractor.prototype.getContributors = function (data) {
-    if (data && data.contributors) {
-        return _.map(data.contributors, function (item) {
-            if ((item.givenName && item.familyName) || item.name) {
-                return item;
-            } else {
-                console.log('[JSON EXTRACTOR ERROR] one of the contributors could not be properly extracted.');
-                return {};
-            }
-        });
-    }
-    return null;
-};
-
-
-
-/**
- * Extract the year the DOI referenced data will become publicly available.
- * @param {json} data json datacite object 
- * @return {string} the year. Null if extraction failed.
- */
-JsonExtractor.prototype.getPubliclyAccessibleYear = function (data) {
-    if (data && data.publicationYear) {
-        return data.publicationYear;
-    }
-    console.log('[JSON EXTRACTOR ERROR] Extraction of the publication year failed.');
-    return null;
-};
-
-/**
- * Extract investigationId from the data.doi field as received from the json response.
- * @param {string} data The data object provided by datacite
- * @return {string} investigationID requested for accessing data in ICAT. Null if it failed
- */
-JsonExtractor.prototype.getInvestigationId = function (data) {
-    var regExp = RegExp(/\/\w*-*[Ee][Ss][Rr][Ff]-[Ee][Ss]-(\d+)$/);
-    if (regExp.exec(data.doi)) {
-        return regExp.exec(data.doi)[1];
-    }
-
-    console.log('[JSON EXTRACTOR ERROR] investigationId extraction failed.');
-    return null;
-};
-
-/**
- * Extract field value (beamline, proposal number and proposal type) from the
- * data json object. Returns null if the field is not found.
- * @param {array} subject The array containing objects of interest template
- * @param {string} field The text field which is searched
- * @returns {array} the found field in an array. When the field is string composed of coma separated items, each item is returned in the array. When there is no text, an empty array is returned
- */
-JsonExtractor.prototype.getFieldFromSubject = function (subjects, field) {
-    if (subjects) {
-        var regExp = new RegExp("^" + field + "$", 'i');
-        for (var i = 0; i < subjects.length; i++) {
-            if (regExp.test(subjects[i].subjectScheme)) {
-                if (subjects[i].subject) {
-                    return _.split(subjects[i].subject, ',');
-                }
-            }
-        }
-    }
-    return null;
-};
-
-/**
- * Get minting year from the data object.
- * @param {object} data The data object provided by datacite template
- * @return {string} The minting year. Null if it does not exist.
- */
-JsonExtractor.prototype.getMintingYear = function (data) {
-
-    // if (data) {
-    //     if (data.date_registered && data.date_registered != null) {
-    //         return moment(data.date_registered).year();
-    //     }
-    // }
-
-    // return null;
-};
-
-/**
- * Get session date from the data object.
- * @param {object} data The data object provided by datacite
- * @return {string} The formatted (YYY-M-D) session date. Null if it does not exist.
- */
-JsonExtractor.prototype.getSessionDate = function (data) {
-    if (data) {
-        if (data.dates && data.dates instanceof Array) {
-            var sessionDate = _.find(data.dates, function (item) {
-                if (item.dateType) {
-                    return item.dateType.toLowerCase() === "collected";
-                }
-            });
-
-            if (sessionDate && sessionDate.date) {
-                return moment(sessionDate.date).format('YYYY-MM-DD');
-            }
-        }
-    }
-    console.log('[JSON EXTRACTOR ERROR] Extraction of session date failed.');
-    return null;
-};
-
-
-/** 
- * Get the resource type general
- * @param {object} data The data object provided by datacite
- * @return {string} The resource type general. Null if it does not exist.
- * */
-JsonExtractor.prototype.getResourceTypeGeneral = function (data) {
-    // if (data && data.resource_type_general) {
-    //     return data.resource_type_general;
-    // }
-    // return null;
-
-
-    if (data && data.types) {
-        for (var key in data.types) {
-            if (key === 'resourceTypeGeneral') {
-                return data.types[key];
-            }
-        }
-    }
-    console.log('[JSON EXTRACTOR ERROR] Extraction of resource type general failed.');
-    return null;
-
-};
-
-/** 
- * Get the resource type ("Experiment Session" or "Datacollection")
- * @param {object} data The data object provided by datacite
- * @return {string} Resource type. Null if it does not exist.
- * */
-JsonExtractor.prototype.getResourceType = function (data) {
-    if (data && data.types) {
-        for (var key in data.types) {
-            if (key === 'resourceType') {
-                if (data.types[key] === "Experiment Session") {
-                    return CONSTANTS.ES_RESOURCE_TYPE;
-                }
-                if (data.types[key] === "Datacollection") {
-                    return CONSTANTS.DC_RESOURCE_TYPE;
-                }
-            }
-        }
-    }
-    console.log('[JSON EXTRACTOR ERROR] Extraction of resource type failed.');
-    return null;
-};
-
-/**
- * Get the abstract from the data
- * @param {*} data data object provided by datacite
- * @return {string} the abstract . Null if it does not exist.
- */
-JsonExtractor.prototype.getAbstract = function (data) {
-    if (data && data.descriptions) {
-        var abstractObject = _.find(data.descriptions, function (item) {
-            return item.descriptionType.toLowerCase() === 'abstract';
-        });
-
-        if (abstractObject) {
-            return abstractObject.description;
-        }
-    }
-
-    console.log('[JSON EXTRACTOR ERROR] Extraction of the abstract failed.');
-    return null;
-};
-
-/**
- * merge proposal and beamlines together and remove proposal, beamline duplicates if any
- * @param {array} proposals the extracted proposals
- * @param {array} beamlines the extracted beamlines
- * @param {array} beamlineUrls  the extracted beamline urls
- * @return {array} array of the form [ {proposal: 'proposal1', beamline: 'beamline1', beamlineUrl: 'beamlineUrl' ] , {}, ...  ]. Null if input array length are not equal
- */
-JsonExtractor.prototype.getMergedProposalAndBeamline = function (proposals, beamlines, beamlineUrls) {
-    if (proposals && beamlines && beamlineUrls) {
-        var result = [];
-        var index = 0;
-        if (proposals.length === beamlines.length && proposals.length === beamlineUrls.length) {
-            for (index; index < proposals.length; index++) {
-                result.push({
-                    proposal: proposals[index],
-                    beamline: beamlines[index],
-                    beamlineUrl: beamlineUrls[index]
-                });
-            }
-            return _.uniqBy(result, function (value) { return JSON.stringify(value); });
-        }
-
-        if (proposals.length >= 1 && beamlines.length === 1 && beamlineUrls.length === 1) {
-            for (index = 0; index < proposals.length; index++) {
-                result.push({
-                    proposal: proposals[index],
-                    beamline: beamlines[0],
-                    beamlineUrl: beamlineUrls[0]
-                });
-            }
-            return _.uniqBy(result, function (value) { return JSON.stringify(value); });
-        }
-    }
-    return null;
-};
-
diff --git a/www/src/metadataTableHelper.js b/www/src/metadataTableHelper.js
deleted file mode 100644
index 2210843..0000000
--- a/www/src/metadataTableHelper.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Helper function which displays the proposals and beamlines under the form of a table. Used in the context of a doi 
- * created for a dataset collection.
- */
-function proposalBeamlineTable(chunk, context, bodies, params) {
-    var proposalAndBeamlines = params.mergedProposalBeamlines;
-
-    chunk.write('<table class="table table-striped">');
-    chunk.write('<thead>');
-    chunk.write('<tr>');
-    chunk.write('<th scope="col">Proposals</th>');
-    chunk.write('<th scope="col">Beamlines</th>');
-    chunk.write('</tr>');
-    chunk.write('</thead>');
-    chunk.write('<tbody>');
-
-    if (proposalAndBeamlines) {
-        for (var index = 0; index < proposalAndBeamlines.length; index++) {
-            if (proposalAndBeamlines[index]) {
-                var proposal = proposalAndBeamlines[index].proposal || 'unknown';
-                var beamline = proposalAndBeamlines[index].beamline || 'unknown';
-                var beamlineUrl = proposalAndBeamlines[index].beamlineUrl;
-
-                chunk.write('<tr>');
-                chunk.write('<td>' + proposal + '</td>');
-                if (beamlineUrl === "noLink") {
-                    chunk.write('<td>' + beamline + '</td>');
-                } else {
-                    chunk.write('<td> <a href="' + beamlineUrl + '" target="_blank">' + beamline + ' </a> </td>');
-                }
-                chunk.write('</tr>');
-            } else {
-                chunk.write('<tr>');
-                chunck.write('<td> unknown </td>');
-                chunck.write('<td> unknown </td>');
-                chunk.write('</tr>');
-            }
-        }
-        chunk.write('</tbody>');
-        chunk.write('</table>');
-
-        return chunk.render(bodies.block, context);
-    }
-}
-
-/** Helper function which dislays the abstract for a given doi */
-function abstract(chunk, context, bodies, params) {
-    var abstract = params.abstract;
-    chunk.write('<div class="myBorder-left">');
-    chunk.write('<label> Abstract </label>');
-    chunk.write('<div class="padding-left-15">');
-    if (abstract) {
-        chunk.write(abstract);
-    } else {
-        chunk.write('There is no abstract for this session.');
-    }
-
-    chunk.write('</div >');
-    chunk.write('</div >');
-    return chunk.render(bodies.block, context);
-}
-
-dust.helpers.proposalBeamlineTable = proposalBeamlineTable;
-dust.helpers.abstract = abstract;
-
-
diff --git a/www/templates/badges_tpl.js b/www/templates/badges_tpl.js
deleted file mode 100644
index d996cd0..0000000
--- a/www/templates/badges_tpl.js
+++ /dev/null
@@ -1,36 +0,0 @@
-<div class="row margin-left-0 margin-right-0">
-
-  {@eq key=data.resourceType value=constants.ES_RESOURCE_TYPE}
-  <div class="col-auto padding-right-2 padding-left-2">
-    <span class="badge badge-secondary font-1p4rem " > Session </span>
-  </div>
-  {/eq}  
-  
-  {@eq key=data.resourceType value=constants.DC_RESOURCE_TYPE}
-  <div class="col-auto padding-right-2 padding-left-2">
-    <span class="badge badge-secondary font-1p4rem " > Data collection </span>
-  </div>
-  {/eq}  
-  
-  <div class="col"> </div>
-  
-  {@eq key=data.resourceTypeGeneral value="Dataset"}
-  
-  <div class="col-auto padding-right-2 padding-left-2">
-    <span class="badge badge-secondary font-1p4rem"> Dataset </span>
-  </div>
-  {/eq}
-
-  {@eq key=data.accessibility value="Open access"}
-  <div class="col-auto padding-right-2 padding-left-2">
-    <span class="badge badge-success font-1p4rem "> Open access </span>
-  </div>
-  {/eq}
-    
-  {@eq key=data.accessibility value="Restricted access"}
-  <div class="col-auto padding-right-2 padding-left-2">
-    <span class="badge badge-warning font-1p4rem "> Restricted access </span>
-  </div>
-  {/eq}
-    
-</div>
\ No newline at end of file
diff --git a/www/templates/doinotfound2_tpl.js b/www/templates/doinotfound2_tpl.js
deleted file mode 100644
index ac5be45..0000000
--- a/www/templates/doinotfound2_tpl.js
+++ /dev/null
@@ -1 +0,0 @@
-{message|s}
\ No newline at end of file
diff --git a/www/templates/doinotfound_tpl.js b/www/templates/doinotfound_tpl.js
deleted file mode 100644
index d855a58..0000000
--- a/www/templates/doinotfound_tpl.js
+++ /dev/null
@@ -1,9 +0,0 @@
-<div class="container-fluid " style="color:black;">
-  <div class="row">
-  <div class="col-3"> </div>
-    <div class="col-6 lightRedBackground text-center rounded">   
-      <p> {message|s} </p> 
-    </div>
-  </div>
-  <div class="col-3"> </div>
-</div>      
diff --git a/www/templates/experimentalreport_tpl.js b/www/templates/experimentalreport_tpl.js
deleted file mode 100644
index ebce350..0000000
--- a/www/templates/experimentalreport_tpl.js
+++ /dev/null
@@ -1,49 +0,0 @@
-<div class="card-header text-center">
-  <label>Experimental report </label>
-</div>
-  
-<div class="card-body padding10">
-  {?data}
-    {@eq key=data.length value=1}
-      <p class="card-text"> <b> One </b> report has been found for this proposal. </p>
-</div>
-      <div class="card-body">             
-        <button type="button" class="btn btn-primary btn-lg btn-block" onclick="javascript:(function(){ var expRep = new ExperimentalReportController(); expRep.openFileInNewTab('{data[0]}'); })()" > <span class="fa fa-download whiteFont"></span> {data[0]} </button>
-      </div>
-  {/eq}
-    
-    {@gt key=data.length value=1}
-      <p class="card-text"> In total, <b> {data.length} </b> reports have been found for this proposal: </p>
-</div>      
-      <div class="card-body">
-        <div class="scroll-box">
-          {#data}  
-            {@sep}
-              <div class="row">   
-                <div class="col-1"> </div>
-                <div class="col-10 padding-bottom-10">
-                  <button type="button" class="btn btn-primary btn-lg btn-block" onclick="javascript:(function(){ var expRep = new ExperimentalReportController(); expRep.openFileInNewTab('{.}'); })()" > <span class="fa fa-download whiteFont"></span> <span class="whitefont"> {.}</span> </button>
-                </div>
-                <div class="col-1"> </div>              
-              </div>
-            {/sep}
-            {@last}
-              <div class="row">   
-                <div class="col-1"> </div>
-                <div class="col-10">
-                  <button type="button" class="btn btn-primary btn-lg btn-block" onclick="javascript:(function(){ var expRep = new ExperimentalReportController(); expRep.openFileInNewTab('{.}'); })()" > <span class="fa fa-download whiteFont"></span> <span class="whitefont"> {.}</span> </button>
-                </div>
-                <div class="col-1"> </div>              
-              </div>
-            {/last}
-          {/data}
-        </div> 
-      </div>
-    {/gt}      
-
-    {:else}
-      <p class="card-text"> There is currently no experimental report. </p>
-</div>
-{/data}
-
-  
diff --git a/www/templates/landingpage_tpl.js b/www/templates/landingpage_tpl.js
deleted file mode 100644
index 8a9b83d..0000000
--- a/www/templates/landingpage_tpl.js
+++ /dev/null
@@ -1,143 +0,0 @@
-<div class="container-fluid">
-  <div class="row padding-top-15">
-    <div class="col-12 col-md-9">
-      <div class="row">
-        <div class="col-12">
-          <div id="badges"> </div>     
-        </div>
-      </div>
-    
-      <div class="row">
-        <div class="col-12 fontSize-20 text-center text-uppercase font-weight-bold py-3">{data.title}</div>
-      </div>
-    
-      <div class="row">
-        <div class="col-12">
-          <div class="myBorder-left">
-            <div>
-              <cite>
-              {#data.creators}
-                {@sep}
-                  {?.givenName} {.givenName} {.familyName} ; {:else} {.name} ; {/.givenName}
-                {/sep}
-                {@last}
-                  {?.givenName} {.givenName} {.familyName}. {:else} {.name}. {/.givenName}
-                {/last}
-              {/data.creators}
-              </cite>
-            </div>
-          </div>
-        </div>
-      </div>
-      <div class="padding-top-15"></div>
-    </div>
-    <div class="col-12 col-md-3">
-      <div class="card">
-        <div class="card-body">
-          <div class="card-text">
-            <label> DOI </label>
-            <div class="padding-left-15">  
-              <span class="doiBadge borderRadius-5 font-1p4rem"> 
-                <a id="doiLink" href={data.dataciteLink}> {data.doi} </a>
-            </span> 
-            </div>
-                  
-            <label class="padding-top-5"> Licence (for files) </label>
-            <div class="padding-left-15">
-              <p> <a href="https://creativecommons.org/licenses/by/4.0/"> Creative Commons Attribution 4.0 </a> </p>
-            </div>                        
-          </div>
-        </div>
-      </div>
-    </div>
-  </div>
-  
-  <hr>  
-
-  {?data.contributors}
-    <div class="row">
-      <div class="col-12">
-        <div class="myBorder-left">
-          <label class="greyGradientToRight padding-left-10 padding-right-20"> 
-            Contributors 
-          </label>
-          <div class="padding-left-25">
-            <cite>
-              {#data.contributors}
-                {@sep}
-                  {?.givenName} {.givenName} {.familyName} ; {:else} {.name} ; {/.givenName}
-                {/sep}
-                {@last}
-                  {?.givenName} {.givenName} {.familyName}. {:else} {.name}. {/.givenName}
-                {/last}
-              {/data.contributors}
-            </cite>
-          </div>
-        </div>
-      </div>
-    </div>
-    <hr>
-  {/data.contributors}
-  
-        
-  <div id="metadata"> </div>
-    
-  <hr>
-      
-  <div class="row">
-    <div class="col-12">  
-      <div class="card" id="expReport">
-        <div class="card-header text-center">
-          <label>Experimental report </label>
-        </div>
-      </div>
-    </div>
-  </div>
- 
-  <br>
- 
-  <div class="row">
-    <div class="col-12">
-      <div class="card">
-        <div class="card-header text-center">
-          <label>Experimental data </label>
-        </div>
-        <div class="card-body padding10">
-          <p class="card-text" >{data.accessMessage|s}</p>
-        </div>
-        <div class="card-body">
-          <div class="row">
-            <div class="col-1"> </div>
-            <div class="col-10">
-            {@eq key=data.resourceType value=constants.ES_RESOURCE_TYPE}
-              <form action="https://data.esrf.fr/investigation/{data.investigationId}/datasets" target="_blank">
-            {:else}
-            <form action="https://data.esrf.fr/public/{data.doi}" target="_blank" method="get">
-            {/eq}  
-              <button type="submit" class="btn btn-primary btn-lg btn-block"> Access data </button>
-              </form>
-            </div>
-            <div class="col-1"> </div>
-          </div>
-        </div>
-      </div>     
-    </div>
-  </div>
-      
-  <hr>
-      
-  <div class="row">
-    <div class="col-12">
-      <div class="myBorder-left">
-        <label class="greyGradientToRight padding-left-10 padding-right-20"> Reference </label>
-        <div class="padding-left-25">
-          <p> Below is the recommended format for citing this work in a research publication.</p>
-          <div class="padding-left-25">
-            <cite> {data.citation|s} </cite>
-          </div>
-        </div>
-      </div>  
-    </div>
-  </div>
-</div>
-    
\ No newline at end of file
diff --git a/www/templates/metadata_tpl.js b/www/templates/metadata_tpl.js
deleted file mode 100644
index efde53f..0000000
--- a/www/templates/metadata_tpl.js
+++ /dev/null
@@ -1,105 +0,0 @@
-{! Presentation of the metadata for the DOI which are from sessions !}
-{@eq key=data.resourceType value=constants.ES_RESOURCE_TYPE}
-<div class="row">
-  {?data.mergedProposalBeamlines}
-    {?data.mergedProposalBeamlines[0]}
-      <div class="col-6 col-md">
-        <div class="myBorder-left">
-          <label> Proposal </label>
-            {?data.mergedProposalBeamlines[0].proposal}
-              <div class="padding-left-15">{data.mergedProposalBeamlines[0].proposal}</div>
-            {:else}
-              <div class="padding-left-15"> Not available</div>
-            {/data.mergedProposalBeamlines[0].proposal}
-        </div>
-      </div>
-    
-      <div class="col-6 col-md">
-        <div class="myBorder-left">
-          <label> Publication year </label>
-          {?data.publiclyAccessibleYear}
-            <div class="padding-left-15">{data.publiclyAccessibleYear}</div>
-          {:else}
-            <div class="padding-left-15"> Not available</div>
-          {/data.publiclyAccessibleYear}
-        </div>
-      </div>
-    
-      <div class="col-6 col-md">
-        <div class="myBorder-left">
-          <label> Beamline </label>            
-            {?data.mergedProposalBeamlines[0].beamline}
-              {@eq key=data.mergedProposalBeamlines[0].beamlineUrl value="noLink"}
-                 <div class="padding-left-15">{data.mergedProposalBeamlines[0].beamline}</div>
-              {:else}
-                 <div class="padding-left-15">
-                   <a href="{data.mergedProposalBeamlines[0].beamlineUrl}" target="_blank"> {data.mergedProposalBeamlines[0].beamline} </a>
-                 </div>
-              {/eq}
-            {:else}
-              <div class="padding-left-15">Not available</div>
-            {/data.mergedProposalBeamlines[0].beamline}
-        </div>
-      </div>
-    
-      <div class="col-6 col-md">
-        <div class="myBorder-left">
-          <label> Session date </label>
-          {?data.sessionDate}
-          <div class="padding-left-15">{data.sessionDate}</div>
-          {:else}
-          <div class="padding-left-15"> Not available</div>
-          {/data.sessionDate}
-        </div>
-      </div>  
-    
-      <div class="col-12 col-md-4">
-        <div class="myBorder-left">
-        <label>Category </label>
-        {?data.proposalType}
-          <div class="padding-left-15">{data.proposalType}</div>
-        {:else}
-          <div class="padding-left-15"> Not available</div>
-        {/data.proposalType}
-        </div>
-      </div>     
-    {/data.mergedProposalBeamlines[0]}
-  {/data.mergedProposalBeamlines}
-</div>
-      
-<hr> 
-
-<div class="row">
-  <div class="col-12">
-    {@abstract abstract=data.abstract} {/abstract}
-  </div>
-</div>
-{/eq}
-
-
-{! Presentation of the metadata for the DOI which are from dataset collections !}
-{@eq key=data.resourceType value=constants.DC_RESOURCE_TYPE}
-    <div class="row">
-      <div class="col-md-12 col-xl-8">
-         {@abstract abstract=data.abstract} {/abstract}
-         </br>
-      </div>
-
-      <div class="col-sm-6 col-xl-2">
-        <div class="myBorder-left" style="margin-right:-15px">
-          {@proposalBeamlineTable mergedProposalBeamlines=data.mergedProposalBeamlines} {/proposalBeamlineTable}
-        </div>
-      </div>
-
-      <div class="col-sm-6 col-xl-2" >
-        <div class="myBorder-left">
-          <label> Publication year </label>
-            {?data.mintingYear}
-          <div class="padding-left-15">{data.mintingYear}</div>
-            {:else}
-          <div class="padding-left-15"> Not available</div>
-            {/data.mintingYear}
-        </div>
-      </div>
-    </div>
-{/eq} 
\ No newline at end of file
diff --git a/www/templates/welcome_tpl.js b/www/templates/welcome_tpl.js
deleted file mode 100644
index ca4ee40..0000000
--- a/www/templates/welcome_tpl.js
+++ /dev/null
@@ -1,72 +0,0 @@
-  <div class="container-fluid">
-    <div class="row">
-      <div class="col-12 flexCentered whiteFont" style="color:#132577; font-size: 6.4rem; height: 200px; margin-top: 10px; margin-bottom: 10px; text-align: center;">ESRF DOI Portal</div>
-    </div>
-  </div>
-  
-  <div class="container-fluid">
-    <div class="row">
-      <div class="col-12 col-md-4">
-        <div class="padding10">
-          <div class="card-header text-center">
-            <h1 class="font-3p2rem">About the portal</h1>
-          </div>
-          <div class="card-body padding10">
-            This page centralizes the <a href="http://www.esrf.eu/home/UsersAndScience/UserGuide/esrf-data-policy/doi.html" target="_blank"> DOI</a> services offered by the ESRF to access data stored at the facility as part of its data policy. 
-            Data referred to by ESRF DOIs are accessed via the ESRF data catalogue <a href="https://data.esrf.fr" target="_blank"> data.esrf.fr</a>.
-            <p> In case you require a DOI for a subset of data please send an email with the following high level metadata - "proposal", "title", "authors", "abstract", "datasets" to datapolicy@esrf.fr </p>
-          </div>
-        </div>
-      </div>
-      
-      <div class="col-12 col-md-4">
-        <div class="padding10">
-          <div class="card-header text-center ">
-            <h1 class="font-3p2rem">DOI resolver</h1>
-          </div>
-          <div class="card-body padding10">
-            <p>
-              The search engine below only searches DOIs which have been minted at the ESRF. <br/> Use 
-              <a href="https://doi.org">
-              doi.org 
-              </a> 
-              search engine for other DOIs.
-            </p>
-            <div class="row">
-              <div class="col-xl-9 padding-right-0">
-                <p> <input id="doiSearchBox" class="form-control" placeholder="10.15151/ESRF-ES-90632078" type="text" required/> </p>
-                <div class="text-danger" id="error"> </div>  
-              </div>
-              <div class="col searchButtonDiv">   
-                <input class="btn btn-primary" type="submit" value="Search" onclick="searchDOI()" />    
-              </div>
-            </div>
-            <div class="row">
-              <div class="col">
-                <p> <a href="https://search.datacite.org/works?query=10.15151%2F*"> List all ESRF DOIs </a> </p>
-              </div>
-            </div>
-          </div>  
-        </div>
-      </div>
-      
-      <div class="col-12 col-md-4">
-        <div class="padding10">
-          <div class="card-header text-center">
-            <h1 class="font-3p2rem">About DOI </h1>
-          </div>
-          <div class="card-body padding10">
-          
-            The Digital Object Identifier (<a href="http://www.esrf.eu/home/UsersAndScience/UserGuide/esrf-data-policy/doi.html">DOI</a>) is a code composed of digits and characters. It identifies data in a 
-            unique and permanent way thereby allowing data to be referenced worldwide. The DOI has two parts, namely the DOI prefix and the DOI suffix separated by a slash ("/"). The ESRF prefix is 10.15151 followed by a slash and the ESRF suffix. 
-            Currently the following suffix(es) are defined:
-            </p>
-            <pre>
-             ESRF-ES - for a session at the ESRF 
-             </pre>
-            Refer to the <a href="http://www.esrf.eu/home/UsersAndScience/UserGuide/esrf-data-policy/doi/doi---concepts.html">DOI concepts</a> page to find out what a session is.
-          </div>
-        </div>
-      </div>
-    </div>
-  </div>
\ No newline at end of file
diff --git a/www/tests/citation.test.js b/www/tests/citation.test.js
deleted file mode 100644
index fbba193..0000000
--- a/www/tests/citation.test.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import Citation from '../src/citation';
-
-describe('citation', () => {
-    describe('getDOIRegistrationYear', () => {
-        it('Returns the year for experimental session', () => {
-            let actualDoiData = {
-                resourceType: "experimental session resource type",
-                sessionDate="2017-12-31",
-                publiclyAccessibleYear = "2018"
-            };
-
-            let expectedYear = 2017;
-            let myCitation = new Citation();
-            expect(myCitation.getDOIRegistrationYear(actualDoiData)).toEqual(expectedYear);
-        })
-
-        it('Returns the year for datacollection session', () => {
-            // thre is no sessionDate for this kind of DOI
-            let actualDoiData = {
-                resourceType: "dataset collection resource type",
-                publiclyAccessibleYear = "2018"
-            };
-
-            let expectedYear = 2018;
-            let myCitation = new Citation();
-            expect(myCitation.getDOIRegistrationYear(actualDoiData)).toEqual(expectedYear);
-        })
-
-        it('Returns an empty string when sessionDate is not provided', () => {
-            let actualDoiData = {
-            };
-
-            let expectedYear = "";
-            let myCitation = new Citation();
-            expect(myCitation.getDOIRegistrationYear(actualDoiData)).toEqual(expectedYear);
-        })
-
-    })
-
-})
\ No newline at end of file
diff --git a/www/tests/doiController.test.js b/www/tests/doiController.test.js
deleted file mode 100644
index e3d8377..0000000
--- a/www/tests/doiController.test.js
+++ /dev/null
@@ -1,83 +0,0 @@
-describe("Tests on doi controller", () => {
-    describe("getBeamlineUrl()", () => {
-        it("return beamlineurl for a 'ES' doi", () => {
-            let actualBeamlines = ['ID11'];
-            let actualDate = "2018-03-07"
-            let actualResourceType = CONSTANTS.ES_RESOURCE_TYPE;
-            let expectedBeamlineUrls = ["http://www.esrf.fr/UsersAndScience/Experiments/StructMaterials/ID11"];
-
-            myDoiController = new DOIController(null);
-            expect(myDoiController.getBeamlineUrl(actualBeamlines, actualDate, actualResourceType)).toEqual(expectedBeamlineUrls);
-        })
-
-        it("return beamlineurl for a 'ES' doi without date", () => {
-            let actualBeamlines = ['ID11'];
-            let actualDate = null;
-            let actualResourceType = CONSTANTS.ES_RESOURCE_TYPE;
-            let expectedBeamlineUrls = ["noLink"];
-
-            myDoiController = new DOIController(null);
-            expect(myDoiController.getBeamlineUrl(actualBeamlines, actualDate, actualResourceType)).toEqual(expectedBeamlineUrls);
-        })
-
-        it("return beamlineurl for a 'ES' doi which beamline does not exists", () => {
-            let actualBeamlines = ['ID11', 'ID100'];
-            let actualDate = "2018-03-07";
-            let actualResourceType = CONSTANTS.ES_RESOURCE_TYPE;
-            let expectedBeamlineUrls = ["http://www.esrf.fr/UsersAndScience/Experiments/StructMaterials/ID11", "noLink"];
-
-            myDoiController = new DOIController(null);
-            expect(myDoiController.getBeamlineUrl(actualBeamlines, actualDate, actualResourceType)).toEqual(expectedBeamlineUrls);
-        })
-
-        it("return beamlineurl for a 'ES' doi which beamline which exists but it does not exist at the provided date ", () => {
-            let actualBeamlines = ['ID11', 'ID100'];
-            let actualDate = "1900-01-01"; //ESRF was not built at this time
-            let actualResourceType = CONSTANTS.ES_RESOURCE_TYPE;
-            let expectedBeamlineUrls = ["noLink", "noLink"];
-
-            myDoiController = new DOIController(null);
-            expect(myDoiController.getBeamlineUrl(actualBeamlines, actualDate, actualResourceType)).toEqual(expectedBeamlineUrls);
-        })
-
-        it("return beamlineurl for a 'DC' doi", () => {
-            let actualBeamlines = ['ID11', 'ID21'];
-            let actualDate = "2018-03-07"
-            let actualResourceType = CONSTANTS.DC_RESOURCE_TYPE;
-            let expectedBeamlineUrls = ["http://www.esrf.fr/UsersAndScience/Experiments/StructMaterials/ID11", "http://www.esrf.eu/UsersAndScience/Experiments/XNP/ID21"];
-
-            myDoiController = new DOIController(null);
-            expect(myDoiController.getBeamlineUrl(actualBeamlines, actualDate, actualResourceType)).toEqual(expectedBeamlineUrls);
-        })
-
-        it("return beamlineurl for a 'DC' doi without date", () => {
-            let actualBeamlines = ['ID11', 'ID21'];
-            let actualDate = null
-            let actualResourceType = CONSTANTS.DC_RESOURCE_TYPE;
-            let expectedBeamlineUrls = ["noLink", "noLink"];
-
-            myDoiController = new DOIController(null);
-            expect(myDoiController.getBeamlineUrl(actualBeamlines, actualDate, actualResourceType)).toEqual(expectedBeamlineUrls);
-        })
-
-        it("return beamlineurl for a 'DC' doi which beamline does not exists", () => {
-            let actualBeamlines = ['ID11', 'ID100'];
-            let actualDate = "2018-03-07";
-            let actualResourceType = CONSTANTS.DC_RESOURCE_TYPE;
-            let expectedBeamlineUrls = ["http://www.esrf.fr/UsersAndScience/Experiments/StructMaterials/ID11", "noLink"];
-
-            myDoiController = new DOIController(null);
-            expect(myDoiController.getBeamlineUrl(actualBeamlines, actualDate, actualResourceType)).toEqual(expectedBeamlineUrls);
-        })
-
-        it("return beamlineurl for a 'DC' doi which beamline which exists but it does not exist at the provided date ", () => {
-            let actualBeamlines = ['ID11', 'ID100'];
-            let actualDate = "1900-01-01"; //ESRF was not built at this time
-            let actualResourceType = CONSTANTS.DC_RESOURCE_TYPE;
-            let expectedBeamlineUrls = ["noLink", "noLink"];
-
-            myDoiController = new DOIController(null);
-            expect(myDoiController.getBeamlineUrl(actualBeamlines, actualDate, actualResourceType)).toEqual(expectedBeamlineUrls);
-        })
-    })
-})
\ No newline at end of file
diff --git a/www/tests/doiData.test.js b/www/tests/doiData.test.js
deleted file mode 100644
index 7769456..0000000
--- a/www/tests/doiData.test.js
+++ /dev/null
@@ -1,22 +0,0 @@
-describe('DoiData', () => {
-    describe('getAccessibilityStatus', () => {
-        it('Returns open access when today is after publication date', () => {
-            let doiData = new DoiData();
-            let actualReourceType = CONSTANTS.ES_RESOURCE_TYPE;
-            let actualSessionDate = "2017-01-01"
-            let actualPubliclyAccessibleYear = "2018"
-            expect(doiData.getAccessibilityStatus(actualReourceType, actualSessionDate, actualPubliclyAccessibleYear)).toEqual("Open access");
-        })
-
-        it('Returns Restricted access when today is before publication date', () => {
-            let doiData = new DoiData();
-            let actualReourceType = CONSTANTS.ES_RESOURCE_TYPE;
-            let actualSessionDate = "2017-01-01"
-            let actualPubliclyAccessibleYear = "2020"
-            expect(doiData.getAccessibilityStatus(actualReourceType, actualSessionDate, actualPubliclyAccessibleYear)).toEqual("Restricted access");
-        })
-
-
-    })
-
-})
\ No newline at end of file
diff --git a/www/tests/googleMetadataObject.test.js b/www/tests/googleMetadataObject.test.js
deleted file mode 100644
index ca0fd7b..0000000
--- a/www/tests/googleMetadataObject.test.js
+++ /dev/null
@@ -1,47 +0,0 @@
-require('it-each')({ testPerIteration: true });
-let resources = require('./resources/googleMetadataObject.resource');
-
-describe("googleMetadataObject unit tests", () => {
-    describe("initialization", () => {
-        it.each(resources.initialization, '[initialization: %s ]', ['aboutThisTest'],
-            function (element, next) {
-                let gmo = new GoogleMetadataObject(element.data);
-
-                expect(gmo.getMetadata()).toEqual(element.expected);
-                next();
-            })
-    })
-
-    describe("setLicense", () => {
-        it.each(resources.setLicense, '[setLicense: %s ]', ['aboutThisTest'],
-            function (element, next) {
-                let gmo = new GoogleMetadataObject(element.data);
-                gmo.setLicense();
-
-                expect(gmo.getMetadata()).toEqual(element.expected);
-                next();
-            })
-    })
-
-    describe("setDescription", () => {
-        it.each(resources.setDescription, '[setDescription: %s ]', ['aboutThisTest'],
-            function (element, next) {
-                let gmo = new GoogleMetadataObject(element.data);
-                gmo.setDescription();
-
-                expect(gmo.getMetadata()).toEqual(element.expected);
-                next();
-            })
-    })
-
-    describe("setPublisherLogo", () => {
-        it.each(resources.setPublisherLogo, '[setPublisherLogo: %s ]', ['aboutThisTest'],
-            function (element, next) {
-                let gmo = new GoogleMetadataObject(element.data);
-                gmo.setPublisherLogo();
-
-                expect(gmo.getMetadata()).toEqual(element.expected);
-                next();
-            })
-    })
-})
\ No newline at end of file
diff --git a/www/tests/jsonExtractor.test.js b/www/tests/jsonExtractor.test.js
deleted file mode 100644
index 8a86a4e..0000000
--- a/www/tests/jsonExtractor.test.js
+++ /dev/null
@@ -1,124 +0,0 @@
-require('it-each')({ testPerIteration: true });
-let resources = require('./resources/jsonExtractor.resource');
-
-describe("jsonExtractor unit tests", () => {
-    describe("getFieldFromSubject()", () => {
-        it.each(resources.getFieldFromSubject, '[getFieldFromSubject: %s ]', ['aboutThisTest'],
-            function (element, next) {
-                let jsonExtractor = new JsonExtractor();
-
-                expect(jsonExtractor.getFieldFromSubject(element.subjects, element.field)).toEqual(element.expected);
-                next();
-            })
-    })
-
-    describe("getResourceType()", () => {
-        it.each(resources.getResourceType, '[getResourceType: %s ]', ['aboutThisTest'],
-            function (element, next) {
-                let jsonExtractor = new JsonExtractor();
-
-                expect(jsonExtractor.getResourceType(element.doi)).toEqual(element.expected);
-                next();
-            })
-    })
-
-    describe('getResourceTypeGeneral', () => {
-        it.each(resources.getResourceTypeGeneral, '[getResourceTypeGeneral: %s ]', ['aboutThisTest'],
-            function (element, next) {
-                let jsonExtractor = new JsonExtractor();
-
-                expect(jsonExtractor.getResourceTypeGeneral(element.doi)).toEqual(element.expected);
-                next();
-            })
-    })
-
-    describe('getSessionDate', () => {
-        it.each(resources.getSessionDate, '[getSessionDate: %s ]', ['aboutThisTest'],
-            function (element, next) {
-                let jsonExtractor = new JsonExtractor();
-
-                expect(jsonExtractor.getSessionDate(element.doi)).toEqual(element.expected);
-                next();
-            })
-    })
-
-    describe("getMergedProposalAndBeamline", () => {
-        it.each(resources.getMergedProposalAndBeamline, '[getMergedProposalAndBeamline: %s ]', ['aboutThisTest'],
-            function (element, next) {
-                let jsonExtractor = new JsonExtractor();
-
-                expect(jsonExtractor.getMergedProposalAndBeamline(element.proposals, element.beamlines, element.beamlineUrls)).toEqual(element.expected);
-                next();
-            })
-    })
-
-    describe("getInvestigationId()", () => {
-        it.each(resources.getInvestigationId, '[getInvestigationId: %s ]', ['aboutThisTest'],
-            function (element, next) {
-                let jsonExtractor = new JsonExtractor();
-
-                expect(jsonExtractor.getInvestigationId(element.doi)).toEqual(element.expected);
-                next();
-            })
-    })
-
-    describe("getTitle()", () => {
-        it.each(resources.getTitle, '[getTitle: %s ]', ['aboutThisTest'],
-            function (element, next) {
-                let jsonExtractor = new JsonExtractor();
-
-                expect(jsonExtractor.getTitle(element.doi)).toEqual(element.expected);
-                next();
-            })
-    })
-
-    describe("getDOI()", () => {
-        it.each(resources.getDOI, '[getDOI: %s ]', ['aboutThisTest'],
-            function (element, next) {
-                let jsonExtractor = new JsonExtractor();
-
-                expect(jsonExtractor.getDOI(element.doi)).toEqual(element.expected);
-                next();
-            })
-    })
-
-    describe("getPublisher()", () => {
-        it.each(resources.getPublisher, '[getPublisher: %s ]', ['aboutThisTest'],
-            function (element, next) {
-                let jsonExtractor = new JsonExtractor();
-
-                expect(jsonExtractor.getPublisher(element.doi)).toEqual(element.expected);
-                next();
-            })
-    })
-
-    describe("getCreators()", () => {
-        it.each(resources.getCreators, '[getCreators: %s ]', ['aboutThisTest'],
-            function (element, next) {
-                let jsonExtractor = new JsonExtractor();
-
-                expect(jsonExtractor.getCreators(element.doi)).toEqual(element.expected);
-                next();
-            })
-    })
-
-    describe("getPubliclyAccessibleYear", () => {
-        it.each(resources.getPubliclyAccessibleYear, '[getPubliclyAccessibleYear: %s ]', ['aboutThisTest'],
-            function (element, next) {
-                let jsonExtractor = new JsonExtractor();
-
-                expect(jsonExtractor.getPubliclyAccessibleYear(element.doi)).toEqual(element.expected);
-                next();
-            })
-    })
-
-    describe("getAbstract()", () => {
-        it.each(resources.getAbstract, '[getAbstract: %s ]', ['aboutThisTest'],
-            function (element, next) {
-                let jsonExtractor = new JsonExtractor();
-
-                expect(jsonExtractor.getAbstract(element.doi)).toEqual(element.expected);
-                next();
-            })
-    })
-})
\ No newline at end of file
diff --git a/www/tests/readme.txt b/www/tests/readme.txt
deleted file mode 100644
index 996691f..0000000
--- a/www/tests/readme.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Below are doi created for the tests:
-
-- 10.5072/TEST-ESRF-MAX3 : data collection DOI
-- DOI=10.5072/ESRF-ES-130884741 : experiment session DOI
\ No newline at end of file
diff --git a/www/tests/resources/doiLibrary.resource.js b/www/tests/resources/doiLibrary.resource.js
deleted file mode 100644
index 367fe54..0000000
--- a/www/tests/resources/doiLibrary.resource.js
+++ /dev/null
@@ -1,180 +0,0 @@
-module.exports = {
-    doi_ES1: {
-        id: "https://doi.org/10.15151/esrf-es-92162610",
-        doi: "10.15151/ESRF-ES-92162610",
-        url: "https://doi.esrf.fr/10.15151/ESRF-ES-92162610",
-        types: {
-            ris: "DATA",
-            bibtex: "misc",
-            citeproc: "dataset",
-            schemaOrg: "Dataset",
-            resourceType: "Experiment Session",
-            resourceTypeGeneral: "Dataset"
-        },
-        creators: [
-            {
-                name: "Wright, Jonathan",
-                nameType: "Personal",
-                givenName: "Jonathan",
-                familyName: "Wright"
-            },
-            {
-                name: "GLEYZOLLE, Henri",
-                nameType: "Personal",
-                givenName: "Henri",
-                familyName: "GLEYZOLLE"
-            },
-            {
-                name: "MAJKUT, Marta",
-                nameType: "Personal",
-                givenName: "Marta",
-                familyName: "MAJKUT"
-            },
-            {
-                name: "GIACOBBE, Carlotta",
-                nameType: "Personal",
-                givenName: "Carlotta",
-                familyName: "GIACOBBE"
-            },
-            {
-                name: "LUDWIG, Wolfgang",
-                nameType: "Personal",
-                givenName: "Wolfgang",
-                familyName: "LUDWIG"
-            }
-        ],
-        titles: [
-            {
-                title: "Align, radiation test and texture measurements on test samples"
-            }
-        ],
-        publisher: "European Synchrotron Radiation Facility",
-        container: {},
-        subjects: [
-            {
-                subject: "In-house Method and Instrumentation",
-                subjectScheme: "Proposal Type Description"
-            },
-            {
-                subject: "IH-MI-1382",
-                subjectScheme: "Proposal"
-            },
-            {
-                subject: "id11",
-                subjectScheme: "instrument"
-            }
-        ],
-        contributors: [],
-        dates: [
-            {
-                date: "2018-03-26",
-                dateType: "Collected"
-            },
-            {
-                date: "2021",
-                dateType: "Issued"
-            }
-        ],
-        publicationYear: 2021,
-        language: "eng",
-        identifiers: [
-            {
-                identifier: "https://doi.org/10.15151/esrf-es-92162610",
-                identifierType: "DOI"
-            }
-        ],
-        sizes: [],
-        formats: [],
-        rightsList: [],
-        descriptions: [],
-        geoLocations: [],
-        fundingReferences: [],
-        relatedIdentifiers: [],
-        schemaVersion: "http://datacite.org/schema/kernel-3",
-        providerId: "inist",
-        clientId: "inist.esrf",
-        state: "findable"
-    },
-    doi_DC1: {
-
-        id: "https://doi.org/10.15151/esrf-dc-142915526",
-        doi: "10.15151/ESRF-DC-142915526",
-        url: "https://doi.esrf.fr/10.15151/ESRF-DC-142915526",
-        types: {
-            ris: "DATA",
-            bibtex: "misc",
-            citeproc: "dataset",
-            schemaOrg: "Dataset",
-            resourceType: "Datacollection",
-            resourceTypeGeneral: "Dataset"
-        },
-        creators: [
-            {
-                name: "Naschberger, Andreas",
-                nameType: "Personal",
-                givenName: "Andreas",
-                familyName: "Naschberger"
-            },
-            {
-                name: "Bowler, Matthew W.",
-                nameType: "Personal",
-                givenName: "Matthew W.",
-                familyName: "Bowler"
-            },
-            {
-                name: "Rupp, Bernhard",
-                nameType: "Personal",
-                givenName: "Bernhard",
-                familyName: "Rupp"
-            }
-        ],
-        titles: [
-            {
-                title: "Controlled dehydration, structural flexibility, and Gadolinium MRI contrast compound binding in human plasma glycoprotein afamin"
-            }
-        ],
-        publisher: "European Synchrotron Radiation Facility",
-        container: {},
-        subjects: [
-            {
-                subject: "OPID-1",
-                subjectScheme: "Proposal"
-            },
-            {
-                subject: "ID30A1",
-                subjectScheme: "Instrument"
-            }
-        ],
-        contributors: [],
-        dates: [
-            {
-                date: "2018",
-                dateType: "Issued"
-            }
-        ],
-        publicationYear: 2018,
-        language: "en",
-        identifiers: [
-            {
-                identifier: "https://doi.org/10.15151/esrf-dc-142915526",
-                identifierType: "DOI"
-            }
-        ],
-        sizes: [],
-        formats: [],
-        rightsList: [],
-        descriptions: [
-            {
-                description: "Afamin, a human blood plasma glycoprotein, a putative multi-functional transporter of hydrophobic molecules and a marker for metabolic syndrome, poses multiple challenges for crystallographic structure determination, both practically and in analysis of the models. Several hundred crystals were analysed, and unusual variability in cell volume and difficulty solving the structure despite a ~34% sequence identity with non-glycosylated human serum albumin indicated that the molecule exhibits variable and context-sensitive packing, despite greatly simplified glycosylation in insect cell expressed recombinant afamin. Controlled dehydration of the crystals was able to stabilise the orthorhombic crystal form reducing the number of molecules in the asymmetric unit from the monoclinic form and changing the conformational states of the protein.  An iterative strategy using fully automatic experiments available on MASSIF-1 was used to quickly determine the optimal protocol to achieve the phase transition that should be readily applicable to many types of sample. The study also highlights the drawback of using a single crystallographic structure model for computation modelling purposes given that conformational state of the binding sites and electron density in the binding site, likely resulting from PEGs, greatly varies between models. This also holds for the analysis of unspecific low-affinity ligands, where often a variety fragments with similar uncertainty can be modelled, inviting interpretative bias. As a promiscuous transporter, afamin can also bind Gadoteridol, a magnetic resonance imaging contrast compound in two sites, one near the human albumin Sudlow-site and a second hitherto unknown binding site.",
-                descriptionType: "Abstract"
-            }
-        ],
-        geoLocations: [],
-        fundingReferences: [],
-        relatedIdentifiers: [],
-        schemaVersion: "http://datacite.org/schema/kernel-3",
-        providerId: "inist",
-        clientId: "inist.esrf",
-        state: "findable"
-    }
-}
\ No newline at end of file
diff --git a/www/tests/resources/googleMetadataLibrary.resource.js b/www/tests/resources/googleMetadataLibrary.resource.js
deleted file mode 100644
index b46d082..0000000
--- a/www/tests/resources/googleMetadataLibrary.resource.js
+++ /dev/null
@@ -1,90 +0,0 @@
-module.exports = {
-    googleMetadata1: {
-        "@context": "http://schema.org",
-        "@type": "Dataset",
-        "@id": "https://doi.org/10.15151/esrf-es-47877949",
-        "identifier": {
-            "@type": "PropertyValue",
-            "propertyID": "DOI",
-            "value": "https://doi.org/10.15151/esrf-es-47877949"
-        },
-        "url": "https://doi.esrf.fr/10.15151/ESRF-ES-47877949",
-        "additionalType": "Experiment Session",
-        "name": "Nanoscopic Metal Composition of Phagosomal Compartments during Engulfment of E. coli by Professional Phagocytes.",
-        "author": [
-            {
-                "name": "Björn DE SAMBER",
-                "givenName": "Björn DE",
-                "familyName": "SAMBER",
-                "@type": "Person"
-            },
-            {
-                "name": "Constantin URBAN",
-                "givenName": "Constantin",
-                "familyName": "URBAN",
-                "@type": "Person"
-            },
-            {
-                "name": "Bart VEKEMANS",
-                "givenName": "Bart",
-                "familyName": "VEKEMANS",
-                "@type": "Person"
-            },
-            {
-                "name": "Gerald FALKENBERG",
-                "givenName": "Gerald",
-                "familyName": "FALKENBERG",
-                "@type": "Person"
-            },
-            {
-                "name": "Ella DE PAUW",
-                "givenName": "Ella DE",
-                "familyName": "PAUW",
-                "@type": "Person"
-            }
-        ],
-        "keywords": "Life Sciences, LS-2550, id16a",
-        "inLanguage": "eng",
-        "datePublished": "2020",
-        "schemaVersion": "http://datacite.org/schema/kernel-3",
-        "publisher": {
-            "@type": "Organization",
-            "name": "European Synchrotron Radiation Facility"
-        },
-        "provider": {
-            "@type": "Organization",
-            "name": "DataCite"
-        }
-    },
-    googleMetadata2: {
-        "@context": "http://schema.org",
-        "@type": "Dataset",
-        "@id": "https://doi.org/10.15151/esrf-es-94374108",
-        "identifier": {
-            "@type": "PropertyValue",
-            "propertyID": "DOI",
-            "value": "https://doi.org/10.15151/esrf-es-94374108"
-        },
-        "url": "https://doi.esrf.fr/10.15151/ESRF-ES-94374108",
-        "additionalType": "Experiment Session",
-        "name": "High resolution 3-D structure of Thyroglobulin.",
-        "author": {
-            "name": "Didier NURIZZO",
-            "givenName": "Didier",
-            "familyName": "NURIZZO",
-            "@type": "Person"
-        },
-        "keywords": "Macromolecular Crystallography, MX-2038, cm01",
-        "inLanguage": "eng",
-        "datePublished": "2021",
-        "schemaVersion": "http://datacite.org/schema/kernel-3",
-        "publisher": {
-            "@type": "Organization",
-            "name": "European Synchrotron Radiation Facility"
-        },
-        "provider": {
-            "@type": "Organization",
-            "name": "DataCite"
-        }
-    }
-}
\ No newline at end of file
diff --git a/www/tests/resources/googleMetadataObject.resource.js b/www/tests/resources/googleMetadataObject.resource.js
deleted file mode 100644
index c99234c..0000000
--- a/www/tests/resources/googleMetadataObject.resource.js
+++ /dev/null
@@ -1,239 +0,0 @@
-let library = require('./googleMetadataLibrary.resource');
-
-module.exports = {
-    initialization: [
-        {
-            aboutThisTest: 'initialization',
-            data: library.googleMetadata1,
-            expected: library.googleMetadata1
-        }
-    ],
-    setLicense: [
-        {
-            aboutThisTest: 'it sets the expected license',
-            data: library.googleMetadata1,
-            expected: {
-                "@context": "http://schema.org",
-                "@type": "Dataset",
-                "@id": "https://doi.org/10.15151/esrf-es-47877949",
-                "identifier": {
-                    "@type": "PropertyValue",
-                    "propertyID": "DOI",
-                    "value": "https://doi.org/10.15151/esrf-es-47877949"
-                },
-                "url": "https://doi.esrf.fr/10.15151/ESRF-ES-47877949",
-                "additionalType": "Experiment Session",
-                "name": "Nanoscopic Metal Composition of Phagosomal Compartments during Engulfment of E. coli by Professional Phagocytes.",
-                "author": [
-                    {
-                        "name": "Björn DE SAMBER",
-                        "givenName": "Björn DE",
-                        "familyName": "SAMBER",
-                        "@type": "Person"
-                    },
-                    {
-                        "name": "Constantin URBAN",
-                        "givenName": "Constantin",
-                        "familyName": "URBAN",
-                        "@type": "Person"
-                    },
-                    {
-                        "name": "Bart VEKEMANS",
-                        "givenName": "Bart",
-                        "familyName": "VEKEMANS",
-                        "@type": "Person"
-                    },
-                    {
-                        "name": "Gerald FALKENBERG",
-                        "givenName": "Gerald",
-                        "familyName": "FALKENBERG",
-                        "@type": "Person"
-                    },
-                    {
-                        "name": "Ella DE PAUW",
-                        "givenName": "Ella DE",
-                        "familyName": "PAUW",
-                        "@type": "Person"
-                    }
-                ],
-                "keywords": "Life Sciences, LS-2550, id16a",
-                "inLanguage": "eng",
-                "datePublished": "2020",
-                "schemaVersion": "http://datacite.org/schema/kernel-3",
-                "publisher": {
-                    "@type": "Organization",
-                    "name": "European Synchrotron Radiation Facility"
-                },
-                "provider": {
-                    "@type": "Organization",
-                    "name": "DataCite"
-                },
-                "license": "https://creativecommons.org/licenses/by/4.0"
-            }
-        }
-    ],
-    setDescription: [
-        {
-            aboutThisTest: 'description made using title, authors as array and additional message',
-            data: library.googleMetadata1,
-            expected: {
-                "@context": "http://schema.org",
-                "@type": "Dataset",
-                "@id": "https://doi.org/10.15151/esrf-es-47877949",
-                "identifier": {
-                    "@type": "PropertyValue",
-                    "propertyID": "DOI",
-                    "value": "https://doi.org/10.15151/esrf-es-47877949"
-                },
-                "url": "https://doi.esrf.fr/10.15151/ESRF-ES-47877949",
-                "additionalType": "Experiment Session",
-                "name": "Nanoscopic Metal Composition of Phagosomal Compartments during Engulfment of E. coli by Professional Phagocytes.",
-                "author": [
-                    {
-                        "name": "Björn DE SAMBER",
-                        "givenName": "Björn DE",
-                        "familyName": "SAMBER",
-                        "@type": "Person"
-                    },
-                    {
-                        "name": "Constantin URBAN",
-                        "givenName": "Constantin",
-                        "familyName": "URBAN",
-                        "@type": "Person"
-                    },
-                    {
-                        "name": "Bart VEKEMANS",
-                        "givenName": "Bart",
-                        "familyName": "VEKEMANS",
-                        "@type": "Person"
-                    },
-                    {
-                        "name": "Gerald FALKENBERG",
-                        "givenName": "Gerald",
-                        "familyName": "FALKENBERG",
-                        "@type": "Person"
-                    },
-                    {
-                        "name": "Ella DE PAUW",
-                        "givenName": "Ella DE",
-                        "familyName": "PAUW",
-                        "@type": "Person"
-                    }
-                ],
-                "keywords": "Life Sciences, LS-2550, id16a",
-                "inLanguage": "eng",
-                "datePublished": "2020",
-                "schemaVersion": "http://datacite.org/schema/kernel-3",
-                "publisher": {
-                    "@type": "Organization",
-                    "name": "European Synchrotron Radiation Facility"
-                },
-                "provider": {
-                    "@type": "Organization",
-                    "name": "DataCite"
-                },
-                "description": "Nanoscopic Metal Composition of Phagosomal Compartments during Engulfment of E. coli by Professional Phagocytes.; Björn DE SAMBER,Constantin URBAN,Bart VEKEMANS,Gerald FALKENBERG,Ella DE PAUW; There is currently no additional information regarding the description of this DOI.",
-            }
-        },
-        {
-            aboutThisTest: 'description made using the title, the single author and the additional message',
-            data: library.googleMetadata2,
-            expected: {
-                "@context": "http://schema.org",
-                "@type": "Dataset",
-                "@id": "https://doi.org/10.15151/esrf-es-94374108",
-                "identifier": {
-                    "@type": "PropertyValue",
-                    "propertyID": "DOI",
-                    "value": "https://doi.org/10.15151/esrf-es-94374108"
-                },
-                "url": "https://doi.esrf.fr/10.15151/ESRF-ES-94374108",
-                "additionalType": "Experiment Session",
-                "name": "High resolution 3-D structure of Thyroglobulin.",
-                "author": {
-                    "name": "Didier NURIZZO",
-                    "givenName": "Didier",
-                    "familyName": "NURIZZO",
-                    "@type": "Person"
-                },
-                "keywords": "Macromolecular Crystallography, MX-2038, cm01",
-                "inLanguage": "eng",
-                "datePublished": "2021",
-                "schemaVersion": "http://datacite.org/schema/kernel-3",
-                "publisher": {
-                    "@type": "Organization",
-                    "name": "European Synchrotron Radiation Facility"
-                },
-                "provider": {
-                    "@type": "Organization",
-                    "name": "DataCite"
-                },
-                "description": "High resolution 3-D structure of Thyroglobulin.; Didier NURIZZO; There is currently no additional information regarding the description of this DOI."
-            }
-        }
-    ],
-    setPublisherLogo: [
-        {
-            aboutThisTest: 'set publisher s logo',
-            data: library.googleMetadata1,
-            expected: {
-                "@context": "http://schema.org",
-                "@type": "Dataset",
-                "@id": "https://doi.org/10.15151/esrf-es-47877949",
-                "identifier": {
-                    "@type": "PropertyValue",
-                    "propertyID": "DOI",
-                    "value": "https://doi.org/10.15151/esrf-es-47877949"
-                },
-                "url": "https://doi.esrf.fr/10.15151/ESRF-ES-47877949",
-                "additionalType": "Experiment Session",
-                "name": "Nanoscopic Metal Composition of Phagosomal Compartments during Engulfment of E. coli by Professional Phagocytes.",
-                "author": [
-                    {
-                        "name": "Björn DE SAMBER",
-                        "givenName": "Björn DE",
-                        "familyName": "SAMBER",
-                        "@type": "Person"
-                    },
-                    {
-                        "name": "Constantin URBAN",
-                        "givenName": "Constantin",
-                        "familyName": "URBAN",
-                        "@type": "Person"
-                    },
-                    {
-                        "name": "Bart VEKEMANS",
-                        "givenName": "Bart",
-                        "familyName": "VEKEMANS",
-                        "@type": "Person"
-                    },
-                    {
-                        "name": "Gerald FALKENBERG",
-                        "givenName": "Gerald",
-                        "familyName": "FALKENBERG",
-                        "@type": "Person"
-                    },
-                    {
-                        "name": "Ella DE PAUW",
-                        "givenName": "Ella DE",
-                        "familyName": "PAUW",
-                        "@type": "Person"
-                    }
-                ],
-                "keywords": "Life Sciences, LS-2550, id16a",
-                "inLanguage": "eng",
-                "datePublished": "2020",
-                "schemaVersion": "http://datacite.org/schema/kernel-3",
-                "publisher": {
-                    "@type": "Organization",
-                    "name": "European Synchrotron Radiation Facility",
-                    "logo": "https://doi.esrf.fr/src/images/esrfLogoBlue.png"
-                },
-                "provider": {
-                    "@type": "Organization",
-                    "name": "DataCite"
-                },
-            }
-        },
-    ]
-};
\ No newline at end of file
diff --git a/www/tests/resources/jsonExtractor.resource.js b/www/tests/resources/jsonExtractor.resource.js
deleted file mode 100644
index 2d5e8e6..0000000
--- a/www/tests/resources/jsonExtractor.resource.js
+++ /dev/null
@@ -1,289 +0,0 @@
-const doiLibrary = require('./doiLibrary.resource');
-module.exports = {
-    getFieldFromSubject: [
-        {
-            aboutThisTest: 'subject has test without coma',
-            subjects: [
-                {
-                    subjectScheme: 'Proposal',
-                    subject: 'IH-HC-3376'
-                },
-            ],
-            field: 'Proposal',
-            expected: ['IH-HC-3376']
-        },
-        {
-            aboutThisTest: 'subject has text with coma coma',
-            subjects: [
-                {
-                    subjectScheme: 'Proposal',
-                    subject: 'MA-4196,MD-1207'
-                },
-            ],
-            field: 'Proposal',
-            expected: ['MA-4196', 'MD-1207']
-        },
-        {
-            aboutThisTest: 'is case insensitive on the subject',
-            subjects: [
-                {
-                    subjectScheme: 'instrument',
-                    subject: 'id01'
-                },
-            ],
-            field: 'Instrument',
-            expected: ['id01']
-        },
-        {
-            aboutThisTest: 'returns null when the subject is not found',
-            subjects: [
-                {
-                    subjectScheme: 'Instrument',
-                    subject: 'id01'
-                },
-            ],
-            field: 'Proposal',
-            expected: null
-        },
-        {
-            aboutThisTest: 'returns null when the subject scheme exists but has no subject associated',
-            subjects: [
-                {
-                    subjectScheme: 'Proposal',
-                },
-            ],
-            field: 'Proposal',
-            expected: null
-        }
-    ],
-
-    getResourceType: [
-        {
-            aboutThisTest: 'DOI corresponds to experimental session',
-            doi: doiLibrary.doi_ES1,
-            expected: CONSTANTS.ES_RESOURCE_TYPE
-        },
-        {
-            aboutThisTest: 'DOI corresponds to a data collection',
-            doi: doiLibrary.doi_DC1,
-            expected: CONSTANTS.DC_RESOURCE_TYPE
-        },
-        {
-            aboutThisTest: 'returns null when the doi resource type is not present',
-            doi: { title: 'just a title' },
-            expected: null
-        },
-    ],
-
-    getResourceTypeGeneral: [
-        {
-            aboutThisTest: 'DOI corresponds to experimental session',
-            doi: doiLibrary.doi_ES1,
-            expected: 'Dataset'
-        },
-        {
-            aboutThisTest: 'returns null when the doi resource type general is not present',
-            doi: { title: 'just a title' },
-            expected: null
-        },
-    ],
-
-    getSessionDate: [
-        {
-            aboutThisTest: 'DOI corresponds to experimental session',
-            doi: doiLibrary.doi_ES1,
-            expected: '2018-03-26'
-        },
-        {
-            aboutThisTest: 'DOI corresponds to a data collection',
-            doi: doiLibrary.doi_DC1,
-            expected: null
-        },
-    ],
-
-    getMergedProposalAndBeamline: [
-        {
-            aboutThisTest: 'merge proposals and beamlines in a single table',
-            proposals: ['MA-4196', 'MD-1207'],
-            beamlines: ['ID11', 'ID21'],
-            beamlineUrls: ["http://www.esrf.fr/UsersAndScience/Experiments/StructMaterials/ID11", "http://www.esrf.eu/UsersAndScience/Experiments/XNP/ID21"],
-            expected: [
-                { proposal: 'MA-4196', beamline: 'ID11', beamlineUrl: "http://www.esrf.fr/UsersAndScience/Experiments/StructMaterials/ID11" },
-                { proposal: 'MD-1207', beamline: 'ID21', beamlineUrl: "http://www.esrf.eu/UsersAndScience/Experiments/XNP/ID21" }
-            ]
-        },
-        {
-            aboutThisTest: 'merge proposals and beamlines in a single table and remove duplicates',
-            proposals: ['MA-4196', 'MD-1207', 'MA-4196'],
-            beamlines: ['ID11', 'ID21', 'ID11'],
-            beamlineUrls: ["http://www.esrf.fr/UsersAndScience/Experiments/StructMaterials/ID11", "http://www.esrf.eu/UsersAndScience/Experiments/XNP/ID21", "http://www.esrf.fr/UsersAndScience/Experiments/StructMaterials/ID11"],
-            expected: [
-                { proposal: 'MA-4196', beamline: 'ID11', beamlineUrl: "http://www.esrf.fr/UsersAndScience/Experiments/StructMaterials/ID11" },
-                { proposal: 'MD-1207', beamline: 'ID21', beamlineUrl: "http://www.esrf.eu/UsersAndScience/Experiments/XNP/ID21" },
-            ]
-        },
-        {
-            aboutThisTest: 'merge proposals and from a single beamline in a single table',
-            proposals: ['MA-4196', 'MD-1207'],
-            beamlines: ['ID21'],
-            beamlineUrls: ["http://www.esrf.eu/UsersAndScience/Experiments/XNP/ID21"],
-            expected: [
-                { proposal: 'MA-4196', beamline: 'ID21', beamlineUrl: "http://www.esrf.eu/UsersAndScience/Experiments/XNP/ID21" },
-                { proposal: 'MD-1207', beamline: 'ID21', beamlineUrl: "http://www.esrf.eu/UsersAndScience/Experiments/XNP/ID21" }
-            ]
-        }
-    ],
-    getInvestigationId: [
-        {
-            aboutThisTest: 'returns null for an experimental session DOI',
-            doi: doiLibrary.doi_ES1,
-            expected: '92162610'
-        },
-        {
-            aboutThisTest: 'returns null for a data collection DOI',
-            doi: doiLibrary.doi_DC1,
-            expected: null
-        },
-    ],
-
-    getTitle: [
-        {
-            aboutThisTest: 'returns the title for an experimental session DOI',
-            doi: doiLibrary.doi_ES1,
-            expected: 'Align, radiation test and texture measurements on test samples'
-        },
-        {
-            aboutThisTest: 'returns null when titles is empty',
-            doi: { "titles": [] },
-            expected: null,
-        },
-        {
-            aboutThisTest: 'returns null when title is empty',
-            doi: { "titles": [{ "title": null }] },
-            expected: null,
-        },
-    ],
-    getDOI: [
-        {
-            aboutThisTest: 'returns the DOI for an experimental session DOI',
-            doi: doiLibrary.doi_ES1,
-            expected: '10.15151/ESRF-ES-92162610'
-        },
-        {
-            aboutThisTest: 'returns null when DOI is empty',
-            doi: { "doi": null, },
-            expected: null
-        },
-    ],
-    getPublisher: [
-        {
-            aboutThisTest: 'returns the publisher for an experimental session DOI',
-            doi: doiLibrary.doi_ES1,
-            expected: 'European Synchrotron Radiation Facility'
-        },
-        {
-            aboutThisTest: 'returns null when the publisher is not set',
-            doi: { "publisher": null },
-            expected: null
-        },
-    ],
-    getCreators: [
-        {
-            aboutThisTest: 'returns the creators for an experimental session doi',
-            doi: doiLibrary.doi_ES1,
-            expected: [
-                {
-                    name: "Wright, Jonathan",
-                    nameType: "Personal",
-                    givenName: "Jonathan",
-                    familyName: "Wright"
-                },
-                {
-                    name: "GLEYZOLLE, Henri",
-                    nameType: "Personal",
-                    givenName: "Henri",
-                    familyName: "GLEYZOLLE"
-                },
-                {
-                    name: "MAJKUT, Marta",
-                    nameType: "Personal",
-                    givenName: "Marta",
-                    familyName: "MAJKUT"
-                },
-                {
-                    name: "GIACOBBE, Carlotta",
-                    nameType: "Personal",
-                    givenName: "Carlotta",
-                    familyName: "GIACOBBE"
-                },
-                {
-                    name: "LUDWIG, Wolfgang",
-                    nameType: "Personal",
-                    givenName: "Wolfgang",
-                    familyName: "LUDWIG"
-                }
-            ]
-        },
-        {
-            aboutThisTest: 'returns only the creators for which givenName && familyName is defined or name is defined',
-            doi: {
-                creators: [
-                    {
-                        nameType: "Personal",
-                        name: "LEAKE, Steven",
-                    },
-                    {
-                        nameType: "Personal",
-                    },
-                    {
-                        nameType: "Personal",
-                        name: "ZATTERIN, Edoardo",
-                        givenName: "Edoardo",
-                        familyName: "ZATTERIN"
-                    }
-                ]
-            },
-            expected: [
-                {
-                    nameType: "Personal",
-                    name: "LEAKE, Steven",
-                },
-                {},
-                {
-                    nameType: "Personal",
-                    name: "ZATTERIN, Edoardo",
-                    givenName: "Edoardo",
-                    familyName: "ZATTERIN"
-                }
-            ]
-        }
-    ],
-
-    getPubliclyAccessibleYear: [
-        {
-            aboutThisTest: 'returns the year the data will be publicly accessible',
-            doi: doiLibrary.doi_ES1,
-            expected: 2021
-        },
-        {
-            aboutThisTest: 'returns null when the year the data will be publicly accessible is not available',
-            doi: { publicationYear: null },
-            expected: null
-        }
-    ],
-
-    getAbstract: [
-        {
-            aboutThisTest: 'returns the abstract',
-            doi: doiLibrary.doi_DC1,
-            expected: 'Afamin, a human blood plasma glycoprotein, a putative multi-functional transporter of hydrophobic molecules and a marker for metabolic syndrome, poses multiple challenges for crystallographic structure determination, both practically and in analysis of the models. Several hundred crystals were analysed, and unusual variability in cell volume and difficulty solving the structure despite a ~34% sequence identity with non-glycosylated human serum albumin indicated that the molecule exhibits variable and context-sensitive packing, despite greatly simplified glycosylation in insect cell expressed recombinant afamin. Controlled dehydration of the crystals was able to stabilise the orthorhombic crystal form reducing the number of molecules in the asymmetric unit from the monoclinic form and changing the conformational states of the protein.  An iterative strategy using fully automatic experiments available on MASSIF-1 was used to quickly determine the optimal protocol to achieve the phase transition that should be readily applicable to many types of sample. The study also highlights the drawback of using a single crystallographic structure model for computation modelling purposes given that conformational state of the binding sites and electron density in the binding site, likely resulting from PEGs, greatly varies between models. This also holds for the analysis of unspecific low-affinity ligands, where often a variety fragments with similar uncertainty can be modelled, inviting interpretative bias. As a promiscuous transporter, afamin can also bind Gadoteridol, a magnetic resonance imaging contrast compound in two sites, one near the human albumin Sudlow-site and a second hitherto unknown binding site.'
-        },
-        {
-            aboutThisTest: 'returns null when there is no abstract',
-            doi: doiLibrary.doi_ES1,
-            expected: null
-        },
-    ]
-
-
-}
\ No newline at end of file
diff --git a/www/tests/testSamples.js b/www/tests/testSamples.js
deleted file mode 100644
index dfc4a8d..0000000
--- a/www/tests/testSamples.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- * This file contains data received from datacite for different DOIs.
- * doiData1 : metadata associated to a doi created from an experimental session
- * doiData2 : metadata associated to a doi created from dataset collection
- */
-
-export const doiData1 = {
-    "id": "https://doi.org/10.15151/esrf-es-90632078",
-    "doi": "10.15151/esrf-es-90632078",
-    "creator": [
-        {
-            "type": "Person",
-            "name": "Steven LEAKE",
-            "givenName": "Steven",
-            "familyName": "LEAKE"
-        },
-        {
-            "type": "Person",
-            "name": "Edoardo ZATTERIN",
-            "givenName": "Edoardo",
-            "familyName": "ZATTERIN"
-        }
-    ],
-    "title": "Kmapping of Ge microdisks",
-    "publisher": "European Synchrotron Radiation Facility",
-    "resource_type_general": "Dataset",
-    "resource_type": "Experiment Session",
-    "subject": [
-        [
-            {
-                "subject_scheme": "Proposal Type Description",
-                "text": "In-house Hard Condensed Matter Science"
-            },
-            {
-                "subject_scheme": "Proposal",
-                "text": "IH-HC-3376"
-            },
-            {
-                "subject_scheme": "instrument",
-                "text": "id01"
-            }
-        ]
-    ],
-    "date_collected": "2018-03-07",
-    "date_published": "2021",
-    "date_registered": "2018-03-07T14:37:09Z",
-    "date_updated": "2018-03-08T16:30:22Z",
-    "publication_year": 2021,
-    "language": "eng",
-    "schemaVersion": "http://datacite.org/schema/kernel-3",
-    "provider_id": "INIST",
-    "client_id": "INIST.ESRF"
-}
-
-export const doiData2 = {
-    "id": "https://handle.test.datacite.org/10.5072/esrf-dc-0123456",
-    "doi": "10.5072/esrf-dc-0123456",
-    "creator": [
-        {
-            "type": "Person",
-            "name": "Sophie LANONE",
-            "givenName": "Sophie",
-            "familyName": "LANONE"
-        },
-        {
-            "type": "Person",
-            "name": "Ana Elena PRADAS",
-            "givenName": "Ana",
-            "familyName": "Elena PRADAS"
-        }
-    ],
-    "title": "mint 2 different datasets from 2 different proposals, test2",
-    "publisher": "European Synchrotron Radiation Facility",
-    "resource_type_general": "Dataset",
-    "resource_type": "Datacollection",
-    "subject": [
-        [
-            {
-                "subject_scheme": "Proposal",
-                "text": "MA-4196,MD-1207"
-            },
-            {
-                "subject_scheme": "Instrument",
-                "text": "ID11,ID21"
-            }
-        ]
-    ],
-    "date_published": "2018",
-    "date_updated": "2018-10-10T14:37:22.000Z",
-    "publication_year": 2018,
-    "language": "en",
-    "version": "1",
-    "description": {
-        "type": "Abstract",
-        "text": "no abstract"
-    },
-    "schemaVersion": "http://datacite.org/schema/kernel-3",
-    "provider_id": "datacite",
-    "client_id": "datacite.esrf",
-    "provider": "DataCite"
-}  
\ No newline at end of file
-- 
GitLab