diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 343be79a9baa0fad6ae1c8556ca6184966d94c89..bd57ae6fad2be41141d38ece336a98139bed8413 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -5,7 +5,7 @@ stages:
  - integration
  - acceptance
  - release
- - deployment
+ - deploy
 
 # default image for jobs
 default:
@@ -33,6 +33,7 @@ build:
       - dist/
   except:
     - tags
+    - feature/ansible
   tags:
     - test
 
@@ -53,6 +54,7 @@ test:e2e:
     - cypress run -e CYPRESS_baseUrl=http://localhost:3000
   except:
     - tags
+    - feature/ansible
   tags:
     - test
 
@@ -67,8 +69,10 @@ test1:
   extends: .ansible
   stage: integration
   environment:
-    name: test1
+    name: dev/test1
     url: https://test1.startinblox.com
+  variables:
+    ANSIBLE_INVENTORY: inventory/dev/
   only:
     - /^feature\/.*/
   when: manual
@@ -77,8 +81,10 @@ test2:
   extends: .ansible
   stage: integration
   environment:
-    name: test2
+    name: dev/test2
     url: https://test2.startinblox.com
+  variables:
+    ANSIBLE_INVENTORY: inventory/dev
   only:
     - /^feature\/.*/
   when: manual
@@ -87,8 +93,10 @@ test3:
   extends: .ansible
   stage: integration
   environment:
-    name: test3
+    name: dev/test3
     url: https://test3.startinblox.com
+  variables:
+    ANSIBLE_INVENTORY: inventory/dev
   only:
     - /^feature\/.*/
   when: manual
@@ -97,8 +105,10 @@ stg1:
   extends: .ansible
   stage: acceptance
   environment:
-    name: stg1
+    name: review/stg1
     url: https://stg1.startinblox.com
+  variables:
+    ANSIBLE_INVENTORY: inventory/stg
   only:
     - /^release\/.*/
   when: manual
@@ -107,8 +117,10 @@ stg2:
   extends: .ansible
   stage: acceptance
   environment:
-    name: stg2
+    name: review/stg2
     url: https://stg2.startinblox.com
+  variables:
+    ANSIBLE_INVENTORY: inventory/stg
   only:
     - /^release\/.*/
   when: manual
@@ -129,6 +141,16 @@ publish:
 
 hublworld:
   extends: .ansible
+  variables:
+    ANSIBLE_INVENTORY: inventory/prd
+  only:
+    - master
+  when: manual
+
+hublunderworld:
+  extends: .ansible
+  variables:
+    ANSIBLE_INVENTORY: inventory/prd
   only:
     - master
   when: manual
diff --git a/README.md b/README.md
index 5ab7d7578e801c1bcfe854b8ba2869ed23d61dde..8e5861c5813302ff386bd1a476a59432184639dd 100644
--- a/README.md
+++ b/README.md
@@ -267,7 +267,8 @@ Eg.:
             "get": "http://server.url/events/",
             "post": "http://server.url/events/",
             "typeevents": "http://server.url/typeevents/",
-            "postTypeevents": "http://server.url/typeevents/"
+            "postTypeevents": "http://server.url/typeevents/",
+            "uploads": "http://server.url/upload/"
           }
         }
       ]
@@ -295,6 +296,24 @@ To activate community on Hubl, add this module declaration your `config.json`:
     }
 ```
 
+#### Activate the community directory
+
+When you work with a federated application, you may want a directory for communities.
+
+You can activate it by changing the route to anything else than false. Some endpoints will also get needed:
+
+```json
+    {
+      "type": "communities",
+      "endpoints": {
+        "get": "http://server/communities/",
+        "addresses": "http://server/community-addresses/",
+        "uploads": "http://server/upload/"
+      },
+      "route": "communities"
+    }
+```
+
 ### Dashboard
 
 Dashboard includes card generation from HTML. To activate them, you need:
@@ -335,7 +354,8 @@ Module declaration, on `config.json`:
         "get": "http://server.url/events/",
         "post": "http://server.url/events/",
         "typeevents": "http://server.url/typeevents/",
-        "postTypeevents": "http://server.url/typeevents/"
+        "postTypeevents": "http://server.url/typeevents/",
+        "uploads": "http://server.url/upload/"
       }
     }
 ```
@@ -404,6 +424,36 @@ Where:
 
 Setting custom langs will not allow user to choose their own lang.
 
+### Invoices
+
+Invoices allow your Projects to manage invoices
+
+Project is mandatory.
+
+You'll need:
+
+On Server: `djangoldp_invoice` packages
+
+Module declaration, on `config.json`:
+
+```json
+    {
+      "type": "projects",
+      "extensions": [
+        {
+          "type": "invoices",
+          "endpoints": {
+            "uploads": "http://server.url/upload/"
+          }
+        }
+      ]
+    }
+```
+
+Where:
+
+* `xmpp` is your [Prosody](https://prosody.im/) with [appropriate modules](https://git.startinblox.com/infra/prosody-modules/) configured on.
+
 ### Job Offers
 
 Job Offers includes a job board with conversation. To activate them
@@ -478,7 +528,10 @@ On `config.json`:
       "type": "polls",
       "endpoints": {
         "get": "http://server.url/polls/",
-        "post": "http://server.url/polls/"
+        "post": "http://server.url/polls/",
+        "pollRangeTags": "http://server.url/tags/",
+        "pollRangeCircles": "http://server.url/circles/",
+        "uploads": "http://server.url/upload/"
       }
     }
 ```
@@ -632,6 +685,29 @@ Some module don't need any route to be active, set `route` to `false` so.
 
 Components can get the route of a module with `window.hubl.getRoute('componentName')`.
 
+#### Change the default route
+
+By default, Hubl will take a Dashboard as a default route.
+
+You can enforce a component to be the default one by adding `defaultRoute` to its parameters.
+
+Eg.:
+
+```json
+    {
+      "type": "profileDirectory",
+      "endpoints": {
+        "get": "http://server.url/users/",
+        "skills": "http://server.url/skills/",
+        "uploads": "http://server.url/upload/"
+      },
+      "route": "directory",
+      "defaultRoute": true
+    }
+```
+
+If there is more than one component with this parameter, it'll be ignored.
+
 ## Troubleshooting
 
 ### Circles or Projects are missing the @user list
diff --git a/package-lock.json b/package-lock.json
index 1fad494925a2b8d42e8fe2b0a58db598b3f49d63..01b4a7ddcec251a03967fe71b06814a998f2b84c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5,49 +5,73 @@
   "requires": true,
   "dependencies": {
     "@babel/code-frame": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
-      "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz",
+      "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==",
       "requires": {
-        "@babel/highlight": "^7.10.4"
+        "@babel/highlight": "^7.12.13"
       }
     },
     "@babel/compat-data": {
-      "version": "7.12.7",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz",
-      "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw=="
+      "version": "7.13.15",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz",
+      "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA=="
     },
     "@babel/core": {
-      "version": "7.12.9",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz",
-      "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==",
-      "requires": {
-        "@babel/code-frame": "^7.10.4",
-        "@babel/generator": "^7.12.5",
-        "@babel/helper-module-transforms": "^7.12.1",
-        "@babel/helpers": "^7.12.5",
-        "@babel/parser": "^7.12.7",
-        "@babel/template": "^7.12.7",
-        "@babel/traverse": "^7.12.9",
-        "@babel/types": "^7.12.7",
+      "version": "7.13.15",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz",
+      "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==",
+      "requires": {
+        "@babel/code-frame": "^7.12.13",
+        "@babel/generator": "^7.13.9",
+        "@babel/helper-compilation-targets": "^7.13.13",
+        "@babel/helper-module-transforms": "^7.13.14",
+        "@babel/helpers": "^7.13.10",
+        "@babel/parser": "^7.13.15",
+        "@babel/template": "^7.12.13",
+        "@babel/traverse": "^7.13.15",
+        "@babel/types": "^7.13.14",
         "convert-source-map": "^1.7.0",
         "debug": "^4.1.0",
-        "gensync": "^1.0.0-beta.1",
+        "gensync": "^1.0.0-beta.2",
         "json5": "^2.1.2",
-        "lodash": "^4.17.19",
-        "resolve": "^1.3.2",
-        "semver": "^5.4.1",
+        "semver": "^6.3.0",
         "source-map": "^0.5.0"
       },
       "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/parser": {
+          "version": "7.13.15",
+          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz",
+          "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        },
         "json5": {
-          "version": "2.1.3",
-          "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
-          "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
+          "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
           "requires": {
             "minimist": "^1.2.5"
           }
         },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+        },
         "source-map": {
           "version": "0.5.7",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
@@ -56,15 +80,30 @@
       }
     },
     "@babel/generator": {
-      "version": "7.12.5",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz",
-      "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==",
+      "version": "7.13.9",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz",
+      "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==",
       "requires": {
-        "@babel/types": "^7.12.5",
+        "@babel/types": "^7.13.0",
         "jsesc": "^2.5.1",
         "source-map": "^0.5.0"
       },
       "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        },
         "source-map": {
           "version": "0.5.7",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
@@ -73,189 +112,410 @@
       }
     },
     "@babel/helper-annotate-as-pure": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz",
-      "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz",
+      "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==",
       "requires": {
-        "@babel/types": "^7.10.4"
+        "@babel/types": "^7.12.13"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz",
-      "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz",
+      "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==",
       "requires": {
-        "@babel/helper-explode-assignable-expression": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      }
-    },
-    "@babel/helper-builder-react-jsx": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz",
-      "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/types": "^7.10.4"
-      }
-    },
-    "@babel/helper-builder-react-jsx-experimental": {
-      "version": "7.12.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz",
-      "integrity": "sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og==",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/helper-module-imports": "^7.12.1",
-        "@babel/types": "^7.12.1"
+        "@babel/helper-explode-assignable-expression": "^7.12.13",
+        "@babel/types": "^7.12.13"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/helper-compilation-targets": {
-      "version": "7.12.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz",
-      "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==",
+      "version": "7.13.13",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz",
+      "integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==",
       "requires": {
-        "@babel/compat-data": "^7.12.5",
-        "@babel/helper-validator-option": "^7.12.1",
+        "@babel/compat-data": "^7.13.12",
+        "@babel/helper-validator-option": "^7.12.17",
         "browserslist": "^4.14.5",
-        "semver": "^5.5.0"
+        "semver": "^6.3.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+        }
       }
     },
     "@babel/helper-create-class-features-plugin": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz",
-      "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==",
+      "version": "7.13.11",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz",
+      "integrity": "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==",
       "requires": {
-        "@babel/helper-function-name": "^7.10.4",
-        "@babel/helper-member-expression-to-functions": "^7.12.1",
-        "@babel/helper-optimise-call-expression": "^7.10.4",
-        "@babel/helper-replace-supers": "^7.12.1",
-        "@babel/helper-split-export-declaration": "^7.10.4"
+        "@babel/helper-function-name": "^7.12.13",
+        "@babel/helper-member-expression-to-functions": "^7.13.0",
+        "@babel/helper-optimise-call-expression": "^7.12.13",
+        "@babel/helper-replace-supers": "^7.13.0",
+        "@babel/helper-split-export-declaration": "^7.12.13"
       }
     },
     "@babel/helper-create-regexp-features-plugin": {
-      "version": "7.12.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz",
-      "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==",
+      "version": "7.12.17",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz",
+      "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==",
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
+        "@babel/helper-annotate-as-pure": "^7.12.13",
         "regexpu-core": "^4.7.1"
       }
     },
-    "@babel/helper-define-map": {
-      "version": "7.10.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz",
-      "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==",
+    "@babel/helper-define-polyfill-provider": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz",
+      "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==",
       "requires": {
-        "@babel/helper-function-name": "^7.10.4",
-        "@babel/types": "^7.10.5",
-        "lodash": "^4.17.19"
+        "@babel/helper-compilation-targets": "^7.13.0",
+        "@babel/helper-module-imports": "^7.12.13",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/traverse": "^7.13.0",
+        "debug": "^4.1.1",
+        "lodash.debounce": "^4.0.8",
+        "resolve": "^1.14.2",
+        "semver": "^6.1.2"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+        }
       }
     },
     "@babel/helper-explode-assignable-expression": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz",
-      "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz",
+      "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==",
       "requires": {
-        "@babel/types": "^7.12.1"
+        "@babel/types": "^7.13.0"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/helper-function-name": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
-      "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz",
+      "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==",
       "requires": {
-        "@babel/helper-get-function-arity": "^7.10.4",
-        "@babel/template": "^7.10.4",
-        "@babel/types": "^7.10.4"
+        "@babel/helper-get-function-arity": "^7.12.13",
+        "@babel/template": "^7.12.13",
+        "@babel/types": "^7.12.13"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/helper-get-function-arity": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
-      "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz",
+      "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==",
       "requires": {
-        "@babel/types": "^7.10.4"
+        "@babel/types": "^7.12.13"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/helper-hoist-variables": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz",
-      "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz",
+      "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==",
       "requires": {
-        "@babel/types": "^7.10.4"
+        "@babel/traverse": "^7.13.0",
+        "@babel/types": "^7.13.0"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/helper-member-expression-to-functions": {
-      "version": "7.12.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz",
-      "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==",
+      "version": "7.13.12",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz",
+      "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==",
       "requires": {
-        "@babel/types": "^7.12.7"
+        "@babel/types": "^7.13.12"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/helper-module-imports": {
-      "version": "7.12.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz",
-      "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==",
+      "version": "7.13.12",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz",
+      "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==",
       "requires": {
-        "@babel/types": "^7.12.5"
+        "@babel/types": "^7.13.12"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/helper-module-transforms": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz",
-      "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==",
-      "requires": {
-        "@babel/helper-module-imports": "^7.12.1",
-        "@babel/helper-replace-supers": "^7.12.1",
-        "@babel/helper-simple-access": "^7.12.1",
-        "@babel/helper-split-export-declaration": "^7.11.0",
-        "@babel/helper-validator-identifier": "^7.10.4",
-        "@babel/template": "^7.10.4",
-        "@babel/traverse": "^7.12.1",
-        "@babel/types": "^7.12.1",
-        "lodash": "^4.17.19"
+      "version": "7.13.14",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz",
+      "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==",
+      "requires": {
+        "@babel/helper-module-imports": "^7.13.12",
+        "@babel/helper-replace-supers": "^7.13.12",
+        "@babel/helper-simple-access": "^7.13.12",
+        "@babel/helper-split-export-declaration": "^7.12.13",
+        "@babel/helper-validator-identifier": "^7.12.11",
+        "@babel/template": "^7.12.13",
+        "@babel/traverse": "^7.13.13",
+        "@babel/types": "^7.13.14"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/helper-optimise-call-expression": {
-      "version": "7.12.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz",
-      "integrity": "sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz",
+      "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==",
       "requires": {
-        "@babel/types": "^7.12.7"
+        "@babel/types": "^7.12.13"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/helper-plugin-utils": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
-      "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz",
+      "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ=="
     },
     "@babel/helper-remap-async-to-generator": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz",
-      "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz",
+      "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==",
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/helper-wrap-function": "^7.10.4",
-        "@babel/types": "^7.12.1"
+        "@babel/helper-annotate-as-pure": "^7.12.13",
+        "@babel/helper-wrap-function": "^7.13.0",
+        "@babel/types": "^7.13.0"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/helper-replace-supers": {
-      "version": "7.12.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz",
-      "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==",
-      "requires": {
-        "@babel/helper-member-expression-to-functions": "^7.12.1",
-        "@babel/helper-optimise-call-expression": "^7.10.4",
-        "@babel/traverse": "^7.12.5",
-        "@babel/types": "^7.12.5"
+      "version": "7.13.12",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz",
+      "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==",
+      "requires": {
+        "@babel/helper-member-expression-to-functions": "^7.13.12",
+        "@babel/helper-optimise-call-expression": "^7.12.13",
+        "@babel/traverse": "^7.13.0",
+        "@babel/types": "^7.13.12"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/helper-simple-access": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz",
-      "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==",
+      "version": "7.13.12",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz",
+      "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==",
       "requires": {
-        "@babel/types": "^7.12.1"
+        "@babel/types": "^7.13.12"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/helper-skip-transparent-expression-wrappers": {
@@ -267,11 +527,28 @@
       }
     },
     "@babel/helper-split-export-declaration": {
-      "version": "7.11.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz",
-      "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz",
+      "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==",
       "requires": {
-        "@babel/types": "^7.11.0"
+        "@babel/types": "^7.12.13"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/helper-validator-identifier": {
@@ -280,39 +557,80 @@
       "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw=="
     },
     "@babel/helper-validator-option": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz",
-      "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A=="
+      "version": "7.12.17",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz",
+      "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw=="
     },
     "@babel/helper-wrap-function": {
-      "version": "7.12.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz",
-      "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==",
-      "requires": {
-        "@babel/helper-function-name": "^7.10.4",
-        "@babel/template": "^7.10.4",
-        "@babel/traverse": "^7.10.4",
-        "@babel/types": "^7.10.4"
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz",
+      "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==",
+      "requires": {
+        "@babel/helper-function-name": "^7.12.13",
+        "@babel/template": "^7.12.13",
+        "@babel/traverse": "^7.13.0",
+        "@babel/types": "^7.13.0"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/helpers": {
-      "version": "7.12.5",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz",
-      "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==",
+      "version": "7.13.10",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz",
+      "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==",
       "requires": {
-        "@babel/template": "^7.10.4",
-        "@babel/traverse": "^7.12.5",
-        "@babel/types": "^7.12.5"
+        "@babel/template": "^7.12.13",
+        "@babel/traverse": "^7.13.0",
+        "@babel/types": "^7.13.0"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/highlight": {
-      "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-      "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
+      "version": "7.13.10",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz",
+      "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==",
       "requires": {
-        "@babel/helper-validator-identifier": "^7.10.4",
+        "@babel/helper-validator-identifier": "^7.12.11",
         "chalk": "^2.0.0",
         "js-tokens": "^4.0.0"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        }
       }
     },
     "@babel/parser": {
@@ -320,124 +638,136 @@
       "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz",
       "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg=="
     },
+    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+      "version": "7.13.12",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz",
+      "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1",
+        "@babel/plugin-proposal-optional-chaining": "^7.13.12"
+      }
+    },
     "@babel/plugin-proposal-async-generator-functions": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz",
-      "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==",
+      "version": "7.13.15",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz",
+      "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-remap-async-to-generator": "^7.12.1",
-        "@babel/plugin-syntax-async-generators": "^7.8.0"
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/helper-remap-async-to-generator": "^7.13.0",
+        "@babel/plugin-syntax-async-generators": "^7.8.4"
       }
     },
     "@babel/plugin-proposal-class-properties": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz",
-      "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz",
+      "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==",
       "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.12.1",
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-create-class-features-plugin": "^7.13.0",
+        "@babel/helper-plugin-utils": "^7.13.0"
       }
     },
     "@babel/plugin-proposal-dynamic-import": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz",
-      "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==",
+      "version": "7.13.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz",
+      "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.0"
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-export-namespace-from": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz",
-      "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz",
+      "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.12.13",
         "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-json-strings": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz",
-      "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==",
+      "version": "7.13.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz",
+      "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-json-strings": "^7.8.0"
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-json-strings": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-logical-assignment-operators": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz",
-      "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==",
+      "version": "7.13.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz",
+      "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.13.0",
         "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
       }
     },
     "@babel/plugin-proposal-nullish-coalescing-operator": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz",
-      "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==",
+      "version": "7.13.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz",
+      "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-numeric-separator": {
-      "version": "7.12.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz",
-      "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz",
+      "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.12.13",
         "@babel/plugin-syntax-numeric-separator": "^7.10.4"
       }
     },
     "@babel/plugin-proposal-object-rest-spread": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz",
-      "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==",
+      "version": "7.13.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz",
+      "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
-        "@babel/plugin-transform-parameters": "^7.12.1"
+        "@babel/compat-data": "^7.13.8",
+        "@babel/helper-compilation-targets": "^7.13.8",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+        "@babel/plugin-transform-parameters": "^7.13.0"
       }
     },
     "@babel/plugin-proposal-optional-catch-binding": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz",
-      "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==",
+      "version": "7.13.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz",
+      "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-optional-chaining": {
-      "version": "7.12.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz",
-      "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==",
+      "version": "7.13.12",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz",
+      "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.13.0",
         "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.0"
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-private-methods": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz",
-      "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz",
+      "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==",
       "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.12.1",
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-create-class-features-plugin": "^7.13.0",
+        "@babel/helper-plugin-utils": "^7.13.0"
       }
     },
     "@babel/plugin-proposal-unicode-property-regex": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz",
-      "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz",
+      "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==",
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.12.1",
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-create-regexp-features-plugin": "^7.12.13",
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-syntax-async-generators": {
@@ -449,11 +779,11 @@
       }
     },
     "@babel/plugin-syntax-class-properties": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz",
-      "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+      "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-syntax-dynamic-import": {
@@ -473,11 +803,11 @@
       }
     },
     "@babel/plugin-syntax-flow": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.1.tgz",
-      "integrity": "sha512-1lBLLmtxrwpm4VKmtVFselI/P3pX+G63fAtUUt6b2Nzgao77KNDwyuRt90Mj2/9pKobtt68FdvjfqohZjg/FCA==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz",
+      "integrity": "sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-syntax-json-strings": {
@@ -489,11 +819,11 @@
       }
     },
     "@babel/plugin-syntax-jsx": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz",
-      "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz",
+      "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-syntax-logical-assignment-operators": {
@@ -545,385 +875,434 @@
       }
     },
     "@babel/plugin-syntax-top-level-await": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz",
-      "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz",
+      "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-transform-arrow-functions": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz",
-      "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz",
+      "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.13.0"
       }
     },
     "@babel/plugin-transform-async-to-generator": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz",
-      "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz",
+      "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==",
       "requires": {
-        "@babel/helper-module-imports": "^7.12.1",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-remap-async-to-generator": "^7.12.1"
+        "@babel/helper-module-imports": "^7.12.13",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/helper-remap-async-to-generator": "^7.13.0"
       }
     },
     "@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz",
-      "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz",
+      "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-transform-block-scoping": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz",
-      "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz",
+      "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-transform-classes": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz",
-      "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==",
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.10.4",
-        "@babel/helper-define-map": "^7.10.4",
-        "@babel/helper-function-name": "^7.10.4",
-        "@babel/helper-optimise-call-expression": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-replace-supers": "^7.12.1",
-        "@babel/helper-split-export-declaration": "^7.10.4",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz",
+      "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.12.13",
+        "@babel/helper-function-name": "^7.12.13",
+        "@babel/helper-optimise-call-expression": "^7.12.13",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/helper-replace-supers": "^7.13.0",
+        "@babel/helper-split-export-declaration": "^7.12.13",
         "globals": "^11.1.0"
       }
     },
     "@babel/plugin-transform-computed-properties": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz",
-      "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz",
+      "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.13.0"
       }
     },
     "@babel/plugin-transform-destructuring": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz",
-      "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz",
+      "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.13.0"
       }
     },
     "@babel/plugin-transform-dotall-regex": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz",
-      "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz",
+      "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==",
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.12.1",
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-create-regexp-features-plugin": "^7.12.13",
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-transform-duplicate-keys": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz",
-      "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz",
+      "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz",
-      "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz",
+      "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==",
       "requires": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13",
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-transform-flow-strip-types": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.12.1.tgz",
-      "integrity": "sha512-8hAtkmsQb36yMmEtk2JZ9JnVyDSnDOdlB+0nEGzIDLuK4yR3JcEjfuFPYkdEPSh8Id+rAMeBEn+X0iVEyho6Hg==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.13.0.tgz",
+      "integrity": "sha512-EXAGFMJgSX8gxWD7PZtW/P6M+z74jpx3wm/+9pn+c2dOawPpBkUX7BrfyPvo6ZpXbgRIEuwgwDb/MGlKvu2pOg==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-flow": "^7.12.1"
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-flow": "^7.12.13"
       }
     },
     "@babel/plugin-transform-for-of": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz",
-      "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz",
+      "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.13.0"
       }
     },
     "@babel/plugin-transform-function-name": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz",
-      "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz",
+      "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==",
       "requires": {
-        "@babel/helper-function-name": "^7.10.4",
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-function-name": "^7.12.13",
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-transform-literals": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz",
-      "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz",
+      "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-transform-member-expression-literals": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz",
-      "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz",
+      "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-transform-modules-amd": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz",
-      "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz",
+      "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==",
       "requires": {
-        "@babel/helper-module-transforms": "^7.12.1",
-        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-module-transforms": "^7.13.0",
+        "@babel/helper-plugin-utils": "^7.13.0",
         "babel-plugin-dynamic-import-node": "^2.3.3"
       }
     },
     "@babel/plugin-transform-modules-commonjs": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz",
-      "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==",
+      "version": "7.13.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz",
+      "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==",
       "requires": {
-        "@babel/helper-module-transforms": "^7.12.1",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-simple-access": "^7.12.1",
+        "@babel/helper-module-transforms": "^7.13.0",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/helper-simple-access": "^7.12.13",
         "babel-plugin-dynamic-import-node": "^2.3.3"
       }
     },
     "@babel/plugin-transform-modules-systemjs": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz",
-      "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==",
-      "requires": {
-        "@babel/helper-hoist-variables": "^7.10.4",
-        "@babel/helper-module-transforms": "^7.12.1",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-validator-identifier": "^7.10.4",
+      "version": "7.13.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz",
+      "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==",
+      "requires": {
+        "@babel/helper-hoist-variables": "^7.13.0",
+        "@babel/helper-module-transforms": "^7.13.0",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/helper-validator-identifier": "^7.12.11",
         "babel-plugin-dynamic-import-node": "^2.3.3"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        }
       }
     },
     "@babel/plugin-transform-modules-umd": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz",
-      "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz",
+      "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==",
       "requires": {
-        "@babel/helper-module-transforms": "^7.12.1",
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-module-transforms": "^7.13.0",
+        "@babel/helper-plugin-utils": "^7.13.0"
       }
     },
     "@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz",
-      "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz",
+      "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==",
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.12.1"
+        "@babel/helper-create-regexp-features-plugin": "^7.12.13"
       }
     },
     "@babel/plugin-transform-new-target": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz",
-      "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz",
+      "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-transform-object-super": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz",
-      "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz",
+      "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-replace-supers": "^7.12.1"
+        "@babel/helper-plugin-utils": "^7.12.13",
+        "@babel/helper-replace-supers": "^7.12.13"
       }
     },
     "@babel/plugin-transform-parameters": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz",
-      "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz",
+      "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.13.0"
       }
     },
     "@babel/plugin-transform-property-literals": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz",
-      "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz",
+      "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-transform-react-jsx": {
-      "version": "7.12.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.7.tgz",
-      "integrity": "sha512-YFlTi6MEsclFAPIDNZYiCRbneg1MFGao9pPG9uD5htwE0vDbPaMUMeYd6itWjw7K4kro4UbdQf3ljmFl9y48dQ==",
-      "requires": {
-        "@babel/helper-builder-react-jsx": "^7.10.4",
-        "@babel/helper-builder-react-jsx-experimental": "^7.12.4",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/plugin-syntax-jsx": "^7.12.1"
+      "version": "7.13.12",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz",
+      "integrity": "sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA==",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.12.13",
+        "@babel/helper-module-imports": "^7.13.12",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/plugin-syntax-jsx": "^7.12.13",
+        "@babel/types": "^7.13.12"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/plugin-transform-regenerator": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz",
-      "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==",
+      "version": "7.13.15",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz",
+      "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==",
       "requires": {
         "regenerator-transform": "^0.14.2"
       }
     },
     "@babel/plugin-transform-reserved-words": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz",
-      "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz",
+      "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-transform-shorthand-properties": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz",
-      "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz",
+      "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-transform-spread": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz",
-      "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz",
+      "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.13.0",
         "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1"
       }
     },
     "@babel/plugin-transform-sticky-regex": {
-      "version": "7.12.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz",
-      "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz",
+      "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-transform-template-literals": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz",
-      "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==",
+      "version": "7.13.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz",
+      "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.13.0"
       }
     },
     "@babel/plugin-transform-typeof-symbol": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz",
-      "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz",
+      "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-transform-unicode-escapes": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz",
-      "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz",
+      "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==",
       "requires": {
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/plugin-transform-unicode-regex": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz",
-      "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz",
+      "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==",
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.12.1",
-        "@babel/helper-plugin-utils": "^7.10.4"
+        "@babel/helper-create-regexp-features-plugin": "^7.12.13",
+        "@babel/helper-plugin-utils": "^7.12.13"
       }
     },
     "@babel/preset-env": {
-      "version": "7.12.7",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.7.tgz",
-      "integrity": "sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew==",
-      "requires": {
-        "@babel/compat-data": "^7.12.7",
-        "@babel/helper-compilation-targets": "^7.12.5",
-        "@babel/helper-module-imports": "^7.12.5",
-        "@babel/helper-plugin-utils": "^7.10.4",
-        "@babel/helper-validator-option": "^7.12.1",
-        "@babel/plugin-proposal-async-generator-functions": "^7.12.1",
-        "@babel/plugin-proposal-class-properties": "^7.12.1",
-        "@babel/plugin-proposal-dynamic-import": "^7.12.1",
-        "@babel/plugin-proposal-export-namespace-from": "^7.12.1",
-        "@babel/plugin-proposal-json-strings": "^7.12.1",
-        "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1",
-        "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
-        "@babel/plugin-proposal-numeric-separator": "^7.12.7",
-        "@babel/plugin-proposal-object-rest-spread": "^7.12.1",
-        "@babel/plugin-proposal-optional-catch-binding": "^7.12.1",
-        "@babel/plugin-proposal-optional-chaining": "^7.12.7",
-        "@babel/plugin-proposal-private-methods": "^7.12.1",
-        "@babel/plugin-proposal-unicode-property-regex": "^7.12.1",
-        "@babel/plugin-syntax-async-generators": "^7.8.0",
-        "@babel/plugin-syntax-class-properties": "^7.12.1",
-        "@babel/plugin-syntax-dynamic-import": "^7.8.0",
+      "version": "7.13.15",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.15.tgz",
+      "integrity": "sha512-D4JAPMXcxk69PKe81jRJ21/fP/uYdcTZ3hJDF5QX2HSI9bBxxYw/dumdR6dGumhjxlprHPE4XWoPaqzZUVy2MA==",
+      "requires": {
+        "@babel/compat-data": "^7.13.15",
+        "@babel/helper-compilation-targets": "^7.13.13",
+        "@babel/helper-plugin-utils": "^7.13.0",
+        "@babel/helper-validator-option": "^7.12.17",
+        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12",
+        "@babel/plugin-proposal-async-generator-functions": "^7.13.15",
+        "@babel/plugin-proposal-class-properties": "^7.13.0",
+        "@babel/plugin-proposal-dynamic-import": "^7.13.8",
+        "@babel/plugin-proposal-export-namespace-from": "^7.12.13",
+        "@babel/plugin-proposal-json-strings": "^7.13.8",
+        "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8",
+        "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8",
+        "@babel/plugin-proposal-numeric-separator": "^7.12.13",
+        "@babel/plugin-proposal-object-rest-spread": "^7.13.8",
+        "@babel/plugin-proposal-optional-catch-binding": "^7.13.8",
+        "@babel/plugin-proposal-optional-chaining": "^7.13.12",
+        "@babel/plugin-proposal-private-methods": "^7.13.0",
+        "@babel/plugin-proposal-unicode-property-regex": "^7.12.13",
+        "@babel/plugin-syntax-async-generators": "^7.8.4",
+        "@babel/plugin-syntax-class-properties": "^7.12.13",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.3",
         "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
-        "@babel/plugin-syntax-json-strings": "^7.8.0",
+        "@babel/plugin-syntax-json-strings": "^7.8.3",
         "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
         "@babel/plugin-syntax-numeric-separator": "^7.10.4",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.0",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.0",
-        "@babel/plugin-syntax-top-level-await": "^7.12.1",
-        "@babel/plugin-transform-arrow-functions": "^7.12.1",
-        "@babel/plugin-transform-async-to-generator": "^7.12.1",
-        "@babel/plugin-transform-block-scoped-functions": "^7.12.1",
-        "@babel/plugin-transform-block-scoping": "^7.12.1",
-        "@babel/plugin-transform-classes": "^7.12.1",
-        "@babel/plugin-transform-computed-properties": "^7.12.1",
-        "@babel/plugin-transform-destructuring": "^7.12.1",
-        "@babel/plugin-transform-dotall-regex": "^7.12.1",
-        "@babel/plugin-transform-duplicate-keys": "^7.12.1",
-        "@babel/plugin-transform-exponentiation-operator": "^7.12.1",
-        "@babel/plugin-transform-for-of": "^7.12.1",
-        "@babel/plugin-transform-function-name": "^7.12.1",
-        "@babel/plugin-transform-literals": "^7.12.1",
-        "@babel/plugin-transform-member-expression-literals": "^7.12.1",
-        "@babel/plugin-transform-modules-amd": "^7.12.1",
-        "@babel/plugin-transform-modules-commonjs": "^7.12.1",
-        "@babel/plugin-transform-modules-systemjs": "^7.12.1",
-        "@babel/plugin-transform-modules-umd": "^7.12.1",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1",
-        "@babel/plugin-transform-new-target": "^7.12.1",
-        "@babel/plugin-transform-object-super": "^7.12.1",
-        "@babel/plugin-transform-parameters": "^7.12.1",
-        "@babel/plugin-transform-property-literals": "^7.12.1",
-        "@babel/plugin-transform-regenerator": "^7.12.1",
-        "@babel/plugin-transform-reserved-words": "^7.12.1",
-        "@babel/plugin-transform-shorthand-properties": "^7.12.1",
-        "@babel/plugin-transform-spread": "^7.12.1",
-        "@babel/plugin-transform-sticky-regex": "^7.12.7",
-        "@babel/plugin-transform-template-literals": "^7.12.1",
-        "@babel/plugin-transform-typeof-symbol": "^7.12.1",
-        "@babel/plugin-transform-unicode-escapes": "^7.12.1",
-        "@babel/plugin-transform-unicode-regex": "^7.12.1",
-        "@babel/preset-modules": "^0.1.3",
-        "@babel/types": "^7.12.7",
-        "core-js-compat": "^3.7.0",
-        "semver": "^5.5.0"
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+        "@babel/plugin-syntax-top-level-await": "^7.12.13",
+        "@babel/plugin-transform-arrow-functions": "^7.13.0",
+        "@babel/plugin-transform-async-to-generator": "^7.13.0",
+        "@babel/plugin-transform-block-scoped-functions": "^7.12.13",
+        "@babel/plugin-transform-block-scoping": "^7.12.13",
+        "@babel/plugin-transform-classes": "^7.13.0",
+        "@babel/plugin-transform-computed-properties": "^7.13.0",
+        "@babel/plugin-transform-destructuring": "^7.13.0",
+        "@babel/plugin-transform-dotall-regex": "^7.12.13",
+        "@babel/plugin-transform-duplicate-keys": "^7.12.13",
+        "@babel/plugin-transform-exponentiation-operator": "^7.12.13",
+        "@babel/plugin-transform-for-of": "^7.13.0",
+        "@babel/plugin-transform-function-name": "^7.12.13",
+        "@babel/plugin-transform-literals": "^7.12.13",
+        "@babel/plugin-transform-member-expression-literals": "^7.12.13",
+        "@babel/plugin-transform-modules-amd": "^7.13.0",
+        "@babel/plugin-transform-modules-commonjs": "^7.13.8",
+        "@babel/plugin-transform-modules-systemjs": "^7.13.8",
+        "@babel/plugin-transform-modules-umd": "^7.13.0",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13",
+        "@babel/plugin-transform-new-target": "^7.12.13",
+        "@babel/plugin-transform-object-super": "^7.12.13",
+        "@babel/plugin-transform-parameters": "^7.13.0",
+        "@babel/plugin-transform-property-literals": "^7.12.13",
+        "@babel/plugin-transform-regenerator": "^7.13.15",
+        "@babel/plugin-transform-reserved-words": "^7.12.13",
+        "@babel/plugin-transform-shorthand-properties": "^7.12.13",
+        "@babel/plugin-transform-spread": "^7.13.0",
+        "@babel/plugin-transform-sticky-regex": "^7.12.13",
+        "@babel/plugin-transform-template-literals": "^7.13.0",
+        "@babel/plugin-transform-typeof-symbol": "^7.12.13",
+        "@babel/plugin-transform-unicode-escapes": "^7.12.13",
+        "@babel/plugin-transform-unicode-regex": "^7.12.13",
+        "@babel/preset-modules": "^0.1.4",
+        "@babel/types": "^7.13.14",
+        "babel-plugin-polyfill-corejs2": "^0.2.0",
+        "babel-plugin-polyfill-corejs3": "^0.2.0",
+        "babel-plugin-polyfill-regenerator": "^0.2.0",
+        "core-js-compat": "^3.9.0",
+        "semver": "^6.3.0"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+        }
       }
     },
     "@babel/preset-modules": {
@@ -939,37 +1318,80 @@
       }
     },
     "@babel/runtime": {
-      "version": "7.12.5",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
-      "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
+      "version": "7.13.10",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz",
+      "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==",
       "requires": {
         "regenerator-runtime": "^0.13.4"
       }
     },
     "@babel/template": {
-      "version": "7.12.7",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz",
-      "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==",
+      "version": "7.12.13",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz",
+      "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==",
       "requires": {
-        "@babel/code-frame": "^7.10.4",
-        "@babel/parser": "^7.12.7",
-        "@babel/types": "^7.12.7"
+        "@babel/code-frame": "^7.12.13",
+        "@babel/parser": "^7.12.13",
+        "@babel/types": "^7.12.13"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/parser": {
+          "version": "7.13.15",
+          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz",
+          "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/traverse": {
-      "version": "7.12.9",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz",
-      "integrity": "sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==",
-      "requires": {
-        "@babel/code-frame": "^7.10.4",
-        "@babel/generator": "^7.12.5",
-        "@babel/helper-function-name": "^7.10.4",
-        "@babel/helper-split-export-declaration": "^7.11.0",
-        "@babel/parser": "^7.12.7",
-        "@babel/types": "^7.12.7",
+      "version": "7.13.15",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz",
+      "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==",
+      "requires": {
+        "@babel/code-frame": "^7.12.13",
+        "@babel/generator": "^7.13.9",
+        "@babel/helper-function-name": "^7.12.13",
+        "@babel/helper-split-export-declaration": "^7.12.13",
+        "@babel/parser": "^7.13.15",
+        "@babel/types": "^7.13.14",
         "debug": "^4.1.0",
-        "globals": "^11.1.0",
-        "lodash": "^4.17.19"
+        "globals": "^11.1.0"
+      },
+      "dependencies": {
+        "@babel/helper-validator-identifier": {
+          "version": "7.12.11",
+          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+          "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
+        },
+        "@babel/parser": {
+          "version": "7.13.15",
+          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz",
+          "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ=="
+        },
+        "@babel/types": {
+          "version": "7.13.14",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
+          "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
+          "requires": {
+            "@babel/helper-validator-identifier": "^7.12.11",
+            "lodash": "^4.17.19",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
       }
     },
     "@babel/types": {
@@ -1070,6 +1492,40 @@
         }
       }
     },
+    "@hapi/address": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz",
+      "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ=="
+    },
+    "@hapi/bourne": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz",
+      "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA=="
+    },
+    "@hapi/hoek": {
+      "version": "8.5.1",
+      "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz",
+      "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow=="
+    },
+    "@hapi/joi": {
+      "version": "15.1.1",
+      "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz",
+      "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==",
+      "requires": {
+        "@hapi/address": "2.x.x",
+        "@hapi/bourne": "1.x.x",
+        "@hapi/hoek": "8.x.x",
+        "@hapi/topo": "3.x.x"
+      }
+    },
+    "@hapi/topo": {
+      "version": "3.1.6",
+      "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz",
+      "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==",
+      "requires": {
+        "@hapi/hoek": "^8.3.0"
+      }
+    },
     "@iarna/toml": {
       "version": "2.2.5",
       "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz",
@@ -1159,9 +1615,9 @@
       }
     },
     "@startinblox/hubl-styling-framework": {
-      "version": "1.8.15",
-      "resolved": "https://registry.npmjs.org/@startinblox/hubl-styling-framework/-/hubl-styling-framework-1.8.15.tgz",
-      "integrity": "sha512-2bK5zsHOxI0wekAyIhI2MkD1FcWBuNnWpmrDigxHRrsO4kFDOGvIyIewW//5dZjwaL4aTgZzRFvEYb7kNSYYyg=="
+      "version": "1.8.21",
+      "resolved": "https://registry.npmjs.org/@startinblox/hubl-styling-framework/-/hubl-styling-framework-1.8.21.tgz",
+      "integrity": "sha512-4T0sqL7rqqe8uFmH4f8geigxZ4pIxI1ze3sycM762CQFtM5fXadAI9tl7wwAOQbY15y6xfZfDcPoK0YEjv0v9g=="
     },
     "@types/q": {
       "version": "1.5.4",
@@ -1343,9 +1799,9 @@
       },
       "dependencies": {
         "bn.js": {
-          "version": "4.11.9",
-          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
-          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+          "version": "4.12.0",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
         }
       }
     },
@@ -1429,6 +1885,14 @@
       "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
       "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
     },
+    "babel-extract-comments": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz",
+      "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==",
+      "requires": {
+        "babylon": "^6.18.0"
+      }
+    },
     "babel-plugin-dynamic-import-node": {
       "version": "2.3.3",
       "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
@@ -1437,6 +1901,54 @@
         "object.assign": "^4.1.0"
       }
     },
+    "babel-plugin-polyfill-corejs2": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz",
+      "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==",
+      "requires": {
+        "@babel/compat-data": "^7.13.11",
+        "@babel/helper-define-polyfill-provider": "^0.2.0",
+        "semver": "^6.1.1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+        }
+      }
+    },
+    "babel-plugin-polyfill-corejs3": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz",
+      "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==",
+      "requires": {
+        "@babel/helper-define-polyfill-provider": "^0.2.0",
+        "core-js-compat": "^3.9.1"
+      }
+    },
+    "babel-plugin-polyfill-regenerator": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz",
+      "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==",
+      "requires": {
+        "@babel/helper-define-polyfill-provider": "^0.2.0"
+      }
+    },
+    "babel-plugin-syntax-object-rest-spread": {
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+      "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U="
+    },
+    "babel-plugin-transform-object-rest-spread": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
+      "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
+      "requires": {
+        "babel-plugin-syntax-object-rest-spread": "^6.8.0",
+        "babel-runtime": "^6.26.0"
+      }
+    },
     "babel-runtime": {
       "version": "6.26.0",
       "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
@@ -1479,6 +1991,11 @@
         "@babel/types": "^7.9.6"
       }
     },
+    "babylon": {
+      "version": "6.18.0",
+      "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+      "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
+    },
     "babylon-walk": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/babylon-walk/-/babylon-walk-1.0.2.tgz",
@@ -1557,9 +2074,9 @@
       "dev": true
     },
     "bn.js": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz",
-      "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ=="
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz",
+      "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw=="
     },
     "boolbase": {
       "version": "1.0.0",
@@ -1690,18 +2207,25 @@
       "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
       "requires": {
         "pako": "~1.0.5"
+      },
+      "dependencies": {
+        "pako": {
+          "version": "1.0.11",
+          "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+          "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
+        }
       }
     },
     "browserslist": {
-      "version": "4.14.7",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz",
-      "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==",
+      "version": "4.16.3",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz",
+      "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==",
       "requires": {
-        "caniuse-lite": "^1.0.30001157",
+        "caniuse-lite": "^1.0.30001181",
         "colorette": "^1.2.1",
-        "electron-to-chromium": "^1.3.591",
+        "electron-to-chromium": "^1.3.649",
         "escalade": "^3.1.1",
-        "node-releases": "^1.1.66"
+        "node-releases": "^1.1.70"
       }
     },
     "buffer": {
@@ -1763,12 +2287,12 @@
       "dev": true
     },
     "call-bind": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz",
-      "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
       "requires": {
         "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.0.0"
+        "get-intrinsic": "^1.0.2"
       }
     },
     "call-me-maybe": {
@@ -1797,6 +2321,11 @@
       "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
       "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
     },
+    "camelcase": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+    },
     "caniuse-api": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
@@ -1809,9 +2338,9 @@
       }
     },
     "caniuse-lite": {
-      "version": "1.0.30001161",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001161.tgz",
-      "integrity": "sha512-JharrCDxOqPLBULF9/SPa6yMcBRTjZARJ6sc3cuKrPfyIk64JN6kuMINWqA99Xc8uElMFcROliwtz0n9pYej+g=="
+      "version": "1.0.30001208",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz",
+      "integrity": "sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA=="
     },
     "caseless": {
       "version": "0.12.0",
@@ -2036,6 +2565,77 @@
         }
       }
     },
+    "cliui": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+      "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+      "requires": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^6.2.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+          "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
+        },
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+        },
+        "is-fullwidth-code-point": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+          "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+        },
+        "string-width": {
+          "version": "4.2.2",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
+          "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+          "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+          "requires": {
+            "ansi-regex": "^5.0.0"
+          }
+        },
+        "wrap-ansi": {
+          "version": "6.2.0",
+          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+          "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+          "requires": {
+            "ansi-styles": "^4.0.0",
+            "string-width": "^4.1.0",
+            "strip-ansi": "^6.0.0"
+          }
+        }
+      }
+    },
     "clone": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
@@ -2089,18 +2689,18 @@
       "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
     },
     "color-string": {
-      "version": "1.5.4",
-      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz",
-      "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==",
+      "version": "1.5.5",
+      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz",
+      "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==",
       "requires": {
         "color-name": "^1.0.0",
         "simple-swizzle": "^0.2.2"
       }
     },
     "colorette": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
-      "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw=="
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
+      "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w=="
     },
     "colors": {
       "version": "1.4.0",
@@ -2130,8 +2730,7 @@
     "common-tags": {
       "version": "1.8.0",
       "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz",
-      "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==",
-      "dev": true
+      "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw=="
     },
     "component-emitter": {
       "version": "1.3.0",
@@ -2199,11 +2798,11 @@
       "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
     },
     "core-js-compat": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.0.tgz",
-      "integrity": "sha512-o9QKelQSxQMYWHXc/Gc4L8bx/4F7TTraE5rhuN8I7mKBt5dBIUpXpIR3omv70ebr8ST5R3PqbDQr+ZI3+Tt1FQ==",
+      "version": "3.10.1",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.10.1.tgz",
+      "integrity": "sha512-ZHQTdTPkqvw2CeHiZC970NNJcnwzT6YIueDMASKt+p3WbZsLXOcoD392SkcWhkC0wBBHhlfhqGKKsNCQUozYtg==",
       "requires": {
-        "browserslist": "^4.14.7",
+        "browserslist": "^4.16.3",
         "semver": "7.0.0"
       },
       "dependencies": {
@@ -2240,9 +2839,9 @@
       },
       "dependencies": {
         "bn.js": {
-          "version": "4.11.9",
-          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
-          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+          "version": "4.12.0",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
         }
       }
     },
@@ -2456,20 +3055,20 @@
       "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
     },
     "cssnano": {
-      "version": "4.1.10",
-      "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz",
-      "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==",
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz",
+      "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==",
       "requires": {
         "cosmiconfig": "^5.0.0",
-        "cssnano-preset-default": "^4.0.7",
+        "cssnano-preset-default": "^4.0.8",
         "is-resolvable": "^1.0.0",
         "postcss": "^7.0.0"
       }
     },
     "cssnano-preset-default": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz",
-      "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==",
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz",
+      "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==",
       "requires": {
         "css-declaration-sorter": "^4.0.1",
         "cssnano-util-raw-cache": "^4.0.1",
@@ -2499,7 +3098,7 @@
         "postcss-ordered-values": "^4.1.2",
         "postcss-reduce-initial": "^4.0.3",
         "postcss-reduce-transforms": "^4.0.2",
-        "postcss-svgo": "^4.0.2",
+        "postcss-svgo": "^4.0.3",
         "postcss-unique-selectors": "^4.0.1"
       }
     },
@@ -2527,17 +3126,17 @@
       "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q=="
     },
     "csso": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/csso/-/csso-4.1.1.tgz",
-      "integrity": "sha512-Rvq+e1e0TFB8E8X+8MQjHSY6vtol45s5gxtLI/018UsAn2IBMmwNEZRM/h+HVnAJRHjasLIKKUO3uvoMM28LvA==",
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
+      "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
       "requires": {
-        "css-tree": "^1.0.0"
+        "css-tree": "^1.1.2"
       },
       "dependencies": {
         "css-tree": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz",
-          "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==",
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
+          "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
           "requires": {
             "mdn-data": "2.0.14",
             "source-map": "^0.6.1"
@@ -2692,6 +3291,11 @@
         "ms": "2.1.2"
       }
     },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+    },
     "decode-uri-component": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
@@ -2769,9 +3373,9 @@
       },
       "dependencies": {
         "bn.js": {
-          "version": "4.11.9",
-          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
-          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+          "version": "4.12.0",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
         }
       }
     },
@@ -2790,14 +3394,14 @@
       },
       "dependencies": {
         "domelementtype": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz",
-          "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA=="
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+          "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
         },
         "entities": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
-          "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w=="
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+          "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
         }
       }
     },
@@ -2877,9 +3481,9 @@
       "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
     },
     "electron-to-chromium": {
-      "version": "1.3.607",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.607.tgz",
-      "integrity": "sha512-h2SYNaBnlplGS0YyXl8oJWokfcNxVjJANQfMCsQefG6OSuAuNIeW+A8yGT/ci+xRoBb3k2zq1FrOvkgoKBol8g=="
+      "version": "1.3.710",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.710.tgz",
+      "integrity": "sha512-b3r0E2o4yc7mNmBeJviejF1rEx49PUBi+2NPa7jHEX3arkAXnVgLhR0YmV8oi6/Qf3HH2a8xzQmCjHNH0IpXWQ=="
     },
     "elegant-spinner": {
       "version": "1.0.1",
@@ -2888,31 +3492,30 @@
       "dev": true
     },
     "elliptic": {
-      "version": "6.5.3",
-      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
-      "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
+      "version": "6.5.4",
+      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
+      "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
       "requires": {
-        "bn.js": "^4.4.0",
-        "brorand": "^1.0.1",
+        "bn.js": "^4.11.9",
+        "brorand": "^1.1.0",
         "hash.js": "^1.0.0",
-        "hmac-drbg": "^1.0.0",
-        "inherits": "^2.0.1",
-        "minimalistic-assert": "^1.0.0",
-        "minimalistic-crypto-utils": "^1.0.0"
+        "hmac-drbg": "^1.0.1",
+        "inherits": "^2.0.4",
+        "minimalistic-assert": "^1.0.1",
+        "minimalistic-crypto-utils": "^1.0.1"
       },
       "dependencies": {
         "bn.js": {
-          "version": "4.11.9",
-          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
-          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+          "version": "4.12.0",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
         }
       }
     },
     "emoji-regex": {
       "version": "8.0.0",
       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
     },
     "encodeurl": {
       "version": "1.0.2",
@@ -2934,9 +3537,9 @@
       "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
     },
     "envinfo": {
-      "version": "7.7.3",
-      "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz",
-      "integrity": "sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA=="
+      "version": "7.8.1",
+      "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz",
+      "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw=="
     },
     "error-ex": {
       "version": "1.3.2",
@@ -2947,27 +3550,46 @@
       }
     },
     "es-abstract": {
-      "version": "1.17.7",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
-      "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
+      "version": "1.18.0",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz",
+      "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==",
       "requires": {
+        "call-bind": "^1.0.2",
         "es-to-primitive": "^1.2.1",
         "function-bind": "^1.1.1",
+        "get-intrinsic": "^1.1.1",
         "has": "^1.0.3",
-        "has-symbols": "^1.0.1",
-        "is-callable": "^1.2.2",
-        "is-regex": "^1.1.1",
-        "object-inspect": "^1.8.0",
+        "has-symbols": "^1.0.2",
+        "is-callable": "^1.2.3",
+        "is-negative-zero": "^2.0.1",
+        "is-regex": "^1.1.2",
+        "is-string": "^1.0.5",
+        "object-inspect": "^1.9.0",
         "object-keys": "^1.1.1",
-        "object.assign": "^4.1.1",
-        "string.prototype.trimend": "^1.0.1",
-        "string.prototype.trimstart": "^1.0.1"
+        "object.assign": "^4.1.2",
+        "string.prototype.trimend": "^1.0.4",
+        "string.prototype.trimstart": "^1.0.4",
+        "unbox-primitive": "^1.0.0"
       },
       "dependencies": {
+        "has-symbols": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
+          "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
+        },
+        "is-regex": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz",
+          "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==",
+          "requires": {
+            "call-bind": "^1.0.2",
+            "has-symbols": "^1.0.1"
+          }
+        },
         "object-inspect": {
-          "version": "1.8.0",
-          "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
-          "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA=="
+          "version": "1.9.0",
+          "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz",
+          "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw=="
         }
       }
     },
@@ -3006,19 +3628,12 @@
         "esutils": "^2.0.2",
         "optionator": "^0.8.1",
         "source-map": "~0.6.1"
-      },
-      "dependencies": {
-        "esprima": {
-          "version": "3.1.3",
-          "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
-          "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
-        }
       }
     },
     "esprima": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
-      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+      "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
     },
     "estraverse": {
       "version": "4.3.0",
@@ -3042,9 +3657,9 @@
       "dev": true
     },
     "events": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
-      "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg=="
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
     },
     "evp_bytestokey": {
       "version": "1.0.3",
@@ -3343,6 +3958,15 @@
         "to-regex-range": "^2.1.0"
       }
     },
+    "find-up": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+      "requires": {
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
+      }
+    },
     "for-in": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -3417,16 +4041,26 @@
       "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
       "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
     },
+    "get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
+    },
     "get-intrinsic": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz",
-      "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
+      "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
       "requires": {
         "function-bind": "^1.1.1",
         "has": "^1.0.3",
         "has-symbols": "^1.0.1"
       }
     },
+    "get-own-enumerable-property-symbols": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
+      "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g=="
+    },
     "get-port": {
       "version": "3.2.0",
       "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
@@ -3558,6 +4192,11 @@
         "ansi-regex": "^2.0.0"
       }
     },
+    "has-bigints": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
+      "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA=="
+    },
     "has-flag": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -3654,11 +4293,6 @@
       "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
       "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg="
     },
-    "html-comment-regex": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
-      "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ=="
-    },
     "html-encoding-sniffer": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
@@ -3864,6 +4498,11 @@
       "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
       "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
     },
+    "is-bigint": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz",
+      "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg=="
+    },
     "is-binary-path": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
@@ -3872,15 +4511,23 @@
         "binary-extensions": "^1.0.0"
       }
     },
+    "is-boolean-object": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz",
+      "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==",
+      "requires": {
+        "call-bind": "^1.0.0"
+      }
+    },
     "is-buffer": {
       "version": "1.1.6",
       "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
       "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
     },
     "is-callable": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz",
-      "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA=="
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
+      "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ=="
     },
     "is-ci": {
       "version": "2.0.0",
@@ -4005,6 +4652,11 @@
         "is-path-inside": "^3.0.1"
       }
     },
+    "is-negative-zero": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
+      "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w=="
+    },
     "is-number": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
@@ -4013,6 +4665,11 @@
         "kind-of": "^3.0.2"
       }
     },
+    "is-number-object": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz",
+      "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw=="
+    },
     "is-obj": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
@@ -4054,6 +4711,11 @@
         "has-symbols": "^1.0.1"
       }
     },
+    "is-regexp": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+      "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk="
+    },
     "is-resolvable": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
@@ -4065,13 +4727,10 @@
       "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
       "dev": true
     },
-    "is-svg": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
-      "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
-      "requires": {
-        "html-comment-regex": "^1.1.0"
-      }
+    "is-string": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
+      "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ=="
     },
     "is-symbol": {
       "version": "1.0.3",
@@ -4132,12 +4791,19 @@
       "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
     },
     "js-yaml": {
-      "version": "3.14.0",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
-      "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
+      "version": "3.14.1",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+      "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
       "requires": {
         "argparse": "^1.0.7",
         "esprima": "^4.0.0"
+      },
+      "dependencies": {
+        "esprima": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+          "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+        }
       }
     },
     "jsbn": {
@@ -4195,6 +4861,11 @@
             "source-map": "~0.6.1"
           }
         },
+        "esprima": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+          "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+        },
         "ws": {
           "version": "6.2.1",
           "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
@@ -4423,16 +5094,34 @@
         }
       }
     },
+    "locate-path": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+      "requires": {
+        "p-locate": "^4.1.0"
+      }
+    },
     "lodash": {
       "version": "4.17.20",
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
       "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
     },
+    "lodash._reinterpolate": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+      "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0="
+    },
     "lodash.clone": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
       "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y="
     },
+    "lodash.debounce": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+      "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
+    },
     "lodash.memoize": {
       "version": "4.1.2",
       "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -4449,6 +5138,23 @@
       "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
       "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg="
     },
+    "lodash.template": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
+      "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
+      "requires": {
+        "lodash._reinterpolate": "^3.0.0",
+        "lodash.templatesettings": "^4.0.0"
+      }
+    },
+    "lodash.templatesettings": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
+      "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
+      "requires": {
+        "lodash._reinterpolate": "^3.0.0"
+      }
+    },
     "lodash.uniq": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
@@ -4656,9 +5362,9 @@
       },
       "dependencies": {
         "bn.js": {
-          "version": "4.11.9",
-          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
-          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+          "version": "4.12.0",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
         }
       }
     },
@@ -4805,9 +5511,9 @@
       "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg=="
     },
     "node-forge": {
-      "version": "0.7.6",
-      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz",
-      "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw=="
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+      "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA=="
     },
     "node-libs-browser": {
       "version": "2.2.1",
@@ -4837,12 +5543,19 @@
         "url": "^0.11.0",
         "util": "^0.11.0",
         "vm-browserify": "^1.0.1"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+        }
       }
     },
     "node-releases": {
-      "version": "1.1.67",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz",
-      "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg=="
+      "version": "1.1.71",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz",
+      "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg=="
     },
     "normalize-path": {
       "version": "3.0.0",
@@ -4980,12 +5693,13 @@
       }
     },
     "object.getownpropertydescriptors": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
-      "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz",
+      "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==",
       "requires": {
+        "call-bind": "^1.0.2",
         "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1"
+        "es-abstract": "^1.18.0-next.2"
       }
     },
     "object.pick": {
@@ -4997,13 +5711,13 @@
       }
     },
     "object.values": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz",
-      "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==",
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz",
+      "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==",
       "requires": {
+        "call-bind": "^1.0.2",
         "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1",
-        "function-bind": "^1.1.1",
+        "es-abstract": "^1.18.0-next.2",
         "has": "^1.0.3"
       }
     },
@@ -5122,21 +5836,42 @@
       "integrity": "sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=",
       "dev": true
     },
+    "p-limit": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+      "requires": {
+        "p-try": "^2.0.0"
+      }
+    },
+    "p-locate": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+      "requires": {
+        "p-limit": "^2.2.0"
+      }
+    },
     "p-map": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
       "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
       "dev": true
     },
+    "p-try": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+    },
     "pako": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
-      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
+      "version": "0.2.9",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+      "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU="
     },
     "parcel-bundler": {
-      "version": "1.12.4",
-      "resolved": "https://registry.npmjs.org/parcel-bundler/-/parcel-bundler-1.12.4.tgz",
-      "integrity": "sha512-G+iZGGiPEXcRzw0fiRxWYCKxdt/F7l9a0xkiU4XbcVRJCSlBnioWEwJMutOCCpoQmaQtjB4RBHDGIHN85AIhLQ==",
+      "version": "1.12.5",
+      "resolved": "https://registry.npmjs.org/parcel-bundler/-/parcel-bundler-1.12.5.tgz",
+      "integrity": "sha512-hpku8mW67U6PXQIenW6NBbphBOMb8XzW6B9r093DUhYj5GN2FUB/CXCiz5hKoPYUsusZ35BpProH8AUF9bh5IQ==",
       "requires": {
         "@babel/code-frame": "^7.0.0",
         "@babel/core": "^7.4.4",
@@ -5181,7 +5916,7 @@
         "json5": "^1.0.1",
         "micromatch": "^3.0.4",
         "mkdirp": "^0.5.1",
-        "node-forge": "^0.7.1",
+        "node-forge": "^0.10.0",
         "node-libs-browser": "^2.0.0",
         "opn": "^5.1.0",
         "postcss": "^7.0.11",
@@ -5223,6 +5958,16 @@
         }
       }
     },
+    "parcel-plugin-sw-cache": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/parcel-plugin-sw-cache/-/parcel-plugin-sw-cache-0.3.1.tgz",
+      "integrity": "sha512-YPD3bap7V/gicZhxDjQc/DRgRU3t+jyoof5H0hMrTSgULeiWlqwO5CfLI+yxueJgqb55IUsPpxDUTqD1hJUwGg==",
+      "requires": {
+        "replace-in-file": "^4.1.0",
+        "rimraf": "^2.6.3",
+        "workbox-build": "^4.3.1"
+      }
+    },
     "parse-asn1": {
       "version": "5.1.6",
       "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
@@ -5269,6 +6014,11 @@
       "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
       "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
     },
+    "path-exists": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+    },
     "path-is-absolute": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -5784,11 +6534,10 @@
       }
     },
     "postcss-svgo": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
-      "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz",
+      "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==",
       "requires": {
-        "is-svg": "^3.0.0",
         "postcss": "^7.0.0",
         "postcss-value-parser": "^3.0.0",
         "svgo": "^1.0.0"
@@ -5827,9 +6576,9 @@
       }
     },
     "posthtml-render": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz",
-      "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw=="
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.3.1.tgz",
+      "integrity": "sha512-eSToKjNLu0FiF76SSGMHjOFXYzAc/CJqi677Sq6hYvcvFCBtD6de/W5l+0IYPf7ypscqAfjCttxvTdMJt5Gj8Q=="
     },
     "prelude-ls": {
       "version": "1.1.2",
@@ -5839,8 +6588,7 @@
     "pretty-bytes": {
       "version": "5.4.1",
       "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.4.1.tgz",
-      "integrity": "sha512-s1Iam6Gwz3JI5Hweaz4GoCD1WUNUIyzePFy5+Js2hjwGVt2Z79wNN+ZKOZ2vB6C+Xs6njyB84Z1IthQg8d9LxA==",
-      "dev": true
+      "integrity": "sha512-s1Iam6Gwz3JI5Hweaz4GoCD1WUNUIyzePFy5+Js2hjwGVt2Z79wNN+ZKOZ2vB6C+Xs6njyB84Z1IthQg8d9LxA=="
     },
     "process": {
       "version": "0.11.10",
@@ -5879,9 +6627,9 @@
       },
       "dependencies": {
         "bn.js": {
-          "version": "4.11.9",
-          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
-          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+          "version": "4.12.0",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
         }
       }
     },
@@ -6008,9 +6756,9 @@
       }
     },
     "punycode": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
-      "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
     },
     "purgecss": {
       "version": "2.3.0",
@@ -6218,9 +6966,9 @@
       "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A=="
     },
     "regjsparser": {
-      "version": "0.6.4",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz",
-      "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==",
+      "version": "0.6.9",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz",
+      "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==",
       "requires": {
         "jsesc": "~0.5.0"
       },
@@ -6252,6 +7000,16 @@
       "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
       "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
     },
+    "replace-in-file": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-4.3.1.tgz",
+      "integrity": "sha512-FqVvfmpqGTD2JRGI1JjJ86b24P17x/WWwGdxExeyJxnh/2rVQz2+jXfD1507UnnhEQw092X0u0DPCBf1WC4ooQ==",
+      "requires": {
+        "chalk": "^2.4.2",
+        "glob": "^7.1.6",
+        "yargs": "^15.0.2"
+      }
+    },
     "request": {
       "version": "2.88.2",
       "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
@@ -6306,6 +7064,16 @@
         "tough-cookie": "^2.3.3"
       }
     },
+    "require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+    },
+    "require-main-filename": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+      "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
+    },
     "resolve": {
       "version": "1.19.0",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz",
@@ -6478,6 +7246,11 @@
         "send": "0.17.1"
       }
     },
+    "set-blocking": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+    },
     "set-value": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
@@ -6764,6 +7537,11 @@
             "optionator": "^0.8.1",
             "source-map": "~0.6.1"
           }
+        },
+        "esprima": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+          "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
         }
       }
     },
@@ -6899,20 +7677,20 @@
       }
     },
     "string.prototype.trimend": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz",
-      "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==",
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
+      "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
       "requires": {
-        "call-bind": "^1.0.0",
+        "call-bind": "^1.0.2",
         "define-properties": "^1.1.3"
       }
     },
     "string.prototype.trimstart": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz",
-      "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==",
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
+      "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
       "requires": {
-        "call-bind": "^1.0.0",
+        "call-bind": "^1.0.2",
         "define-properties": "^1.1.3"
       }
     },
@@ -6924,6 +7702,23 @@
         "safe-buffer": "~5.2.0"
       }
     },
+    "stringify-object": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
+      "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
+      "requires": {
+        "get-own-enumerable-property-symbols": "^3.0.0",
+        "is-obj": "^1.0.1",
+        "is-regexp": "^1.0.0"
+      },
+      "dependencies": {
+        "is-obj": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+          "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
+        }
+      }
+    },
     "strip-ansi": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
@@ -6932,6 +7727,15 @@
         "ansi-regex": "^2.0.0"
       }
     },
+    "strip-comments": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz",
+      "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==",
+      "requires": {
+        "babel-extract-comments": "^1.0.0",
+        "babel-plugin-transform-object-rest-spread": "^6.26.0"
+      }
+    },
     "strip-final-newline": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
@@ -7159,13 +7963,6 @@
       "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
       "requires": {
         "punycode": "^2.1.0"
-      },
-      "dependencies": {
-        "punycode": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-          "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
-        }
       }
     },
     "tslib": {
@@ -7205,6 +8002,24 @@
       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
       "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
     },
+    "unbox-primitive": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
+      "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
+      "requires": {
+        "function-bind": "^1.1.1",
+        "has-bigints": "^1.0.1",
+        "has-symbols": "^1.0.2",
+        "which-boxed-primitive": "^1.0.2"
+      },
+      "dependencies": {
+        "has-symbols": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
+          "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
+        }
+      }
+    },
     "uncss": {
       "version": "0.17.3",
       "resolved": "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz",
@@ -7274,13 +8089,6 @@
       "requires": {
         "pako": "^0.2.5",
         "tiny-inflate": "^1.0.0"
-      },
-      "dependencies": {
-        "pako": {
-          "version": "0.2.9",
-          "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
-          "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU="
-        }
       }
     },
     "union-value": {
@@ -7439,9 +8247,9 @@
       "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
     },
     "v8-compile-cache": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
-      "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q=="
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+      "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA=="
     },
     "vendors": {
       "version": "1.0.4",
@@ -7535,6 +8343,23 @@
         "isexe": "^2.0.0"
       }
     },
+    "which-boxed-primitive": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+      "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+      "requires": {
+        "is-bigint": "^1.0.1",
+        "is-boolean-object": "^1.1.0",
+        "is-number-object": "^1.0.4",
+        "is-string": "^1.0.5",
+        "is-symbol": "^1.0.3"
+      }
+    },
+    "which-module": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+    },
     "with": {
       "version": "7.0.2",
       "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
@@ -7551,6 +8376,228 @@
       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
       "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
     },
+    "workbox-background-sync": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz",
+      "integrity": "sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==",
+      "requires": {
+        "workbox-core": "^4.3.1"
+      },
+      "dependencies": {
+        "workbox-core": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz",
+          "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg=="
+        }
+      }
+    },
+    "workbox-broadcast-update": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz",
+      "integrity": "sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==",
+      "requires": {
+        "workbox-core": "^4.3.1"
+      },
+      "dependencies": {
+        "workbox-core": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz",
+          "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg=="
+        }
+      }
+    },
+    "workbox-build": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz",
+      "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==",
+      "requires": {
+        "@babel/runtime": "^7.3.4",
+        "@hapi/joi": "^15.0.0",
+        "common-tags": "^1.8.0",
+        "fs-extra": "^4.0.2",
+        "glob": "^7.1.3",
+        "lodash.template": "^4.4.0",
+        "pretty-bytes": "^5.1.0",
+        "stringify-object": "^3.3.0",
+        "strip-comments": "^1.0.2",
+        "workbox-background-sync": "^4.3.1",
+        "workbox-broadcast-update": "^4.3.1",
+        "workbox-cacheable-response": "^4.3.1",
+        "workbox-core": "^4.3.1",
+        "workbox-expiration": "^4.3.1",
+        "workbox-google-analytics": "^4.3.1",
+        "workbox-navigation-preload": "^4.3.1",
+        "workbox-precaching": "^4.3.1",
+        "workbox-range-requests": "^4.3.1",
+        "workbox-routing": "^4.3.1",
+        "workbox-strategies": "^4.3.1",
+        "workbox-streams": "^4.3.1",
+        "workbox-sw": "^4.3.1",
+        "workbox-window": "^4.3.1"
+      },
+      "dependencies": {
+        "fs-extra": {
+          "version": "4.0.3",
+          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+          "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "jsonfile": "^4.0.0",
+            "universalify": "^0.1.0"
+          }
+        },
+        "jsonfile": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+          "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+          "requires": {
+            "graceful-fs": "^4.1.6"
+          }
+        },
+        "universalify": {
+          "version": "0.1.2",
+          "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+          "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
+        },
+        "workbox-cacheable-response": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz",
+          "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==",
+          "requires": {
+            "workbox-core": "^4.3.1"
+          }
+        },
+        "workbox-core": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz",
+          "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg=="
+        },
+        "workbox-expiration": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz",
+          "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==",
+          "requires": {
+            "workbox-core": "^4.3.1"
+          }
+        },
+        "workbox-precaching": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz",
+          "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==",
+          "requires": {
+            "workbox-core": "^4.3.1"
+          }
+        },
+        "workbox-routing": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz",
+          "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==",
+          "requires": {
+            "workbox-core": "^4.3.1"
+          }
+        },
+        "workbox-strategies": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz",
+          "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==",
+          "requires": {
+            "workbox-core": "^4.3.1"
+          }
+        },
+        "workbox-window": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz",
+          "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==",
+          "requires": {
+            "workbox-core": "^4.3.1"
+          }
+        }
+      }
+    },
+    "workbox-google-analytics": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz",
+      "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==",
+      "requires": {
+        "workbox-background-sync": "^4.3.1",
+        "workbox-core": "^4.3.1",
+        "workbox-routing": "^4.3.1",
+        "workbox-strategies": "^4.3.1"
+      },
+      "dependencies": {
+        "workbox-core": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz",
+          "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg=="
+        },
+        "workbox-routing": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz",
+          "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==",
+          "requires": {
+            "workbox-core": "^4.3.1"
+          }
+        },
+        "workbox-strategies": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz",
+          "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==",
+          "requires": {
+            "workbox-core": "^4.3.1"
+          }
+        }
+      }
+    },
+    "workbox-navigation-preload": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz",
+      "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==",
+      "requires": {
+        "workbox-core": "^4.3.1"
+      },
+      "dependencies": {
+        "workbox-core": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz",
+          "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg=="
+        }
+      }
+    },
+    "workbox-range-requests": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz",
+      "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==",
+      "requires": {
+        "workbox-core": "^4.3.1"
+      },
+      "dependencies": {
+        "workbox-core": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz",
+          "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg=="
+        }
+      }
+    },
+    "workbox-streams": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz",
+      "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==",
+      "requires": {
+        "workbox-core": "^4.3.1"
+      },
+      "dependencies": {
+        "workbox-core": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz",
+          "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg=="
+        }
+      }
+    },
+    "workbox-sw": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz",
+      "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w=="
+    },
     "wrap-ansi": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz",
@@ -7606,6 +8653,68 @@
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
       "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
     },
+    "y18n": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+      "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
+    },
+    "yargs": {
+      "version": "15.4.1",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+      "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+      "requires": {
+        "cliui": "^6.0.0",
+        "decamelize": "^1.2.0",
+        "find-up": "^4.1.0",
+        "get-caller-file": "^2.0.1",
+        "require-directory": "^2.1.1",
+        "require-main-filename": "^2.0.0",
+        "set-blocking": "^2.0.0",
+        "string-width": "^4.2.0",
+        "which-module": "^2.0.0",
+        "y18n": "^4.0.0",
+        "yargs-parser": "^18.1.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+          "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
+        },
+        "is-fullwidth-code-point": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+          "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+        },
+        "string-width": {
+          "version": "4.2.2",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
+          "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+          "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+          "requires": {
+            "ansi-regex": "^5.0.0"
+          }
+        }
+      }
+    },
+    "yargs-parser": {
+      "version": "18.1.3",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+      "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+      "requires": {
+        "camelcase": "^5.0.0",
+        "decamelize": "^1.2.0"
+      }
+    },
     "yauzl": {
       "version": "2.10.0",
       "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
diff --git a/package.json b/package.json
index eb6b56681035b809988ae9318f1f53ac6a933915..5bd77755d7ed4983032d33c339d6fe77c02708b1 100644
--- a/package.json
+++ b/package.json
@@ -15,6 +15,9 @@
     "cypress:info": "cypress info",
     "test": "cypress run"
   },
+  "browserslist": [
+    "last 2 Chrome versions"
+  ],
   "release": {
     "branches": [
       "master"
@@ -44,12 +47,22 @@
       "@semantic-release/gitlab"
     ]
   },
+  "cache": {
+    "strategy": "inject",
+    "swSrc": "./src/service-worker.js",
+    "swDest": "service-worker.js",
+    "globPatterns": [
+      "**/*.{html,js,map,css,jpg,png,gif,webp,svg,eot,ttf,woff,woff2,json}"
+    ],
+    "clearDist": false
+  },
   "dependencies": {
-    "@startinblox/hubl-styling-framework": "^1.8.15",
+    "@startinblox/hubl-styling-framework": "^1.8.21",
     "cross-env": "^7.0.3",
     "fs-extra": "^9.0.1",
     "normalize.css": "^8.0.1",
-    "parcel-bundler": "^1.12.4",
+    "parcel-bundler": "^1.12.5",
+    "parcel-plugin-sw-cache": "^0.3.1",
     "pug": "^3.0.0",
     "rimraf": "^2.7.1",
     "sass": "^1.29.0"
diff --git a/src/components/hubl-status.js b/src/components/hubl-status.js
deleted file mode 100644
index 299b8827d496dd797e6013a2d89891725f06d053..0000000000000000000000000000000000000000
--- a/src/components/hubl-status.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import {
-  widgetFactory,
-  Helpers
-} from 'https://cdn.skypack.dev/@startinblox/core@0.16';
-import SlimSelect from 'https://cdn.skypack.dev/slim-select@1.23';
-
-const HublStatus = widgetFactory(
-  'hubl-status',
-  `<label>\${label}</label>
-    <select
-      data-holder
-      name="\${name}">
-      <option
-        value="Public"
-        \${value=="Public" ? 'selected' : ''} data-trans="hublStatus.public">Public</option>
-      <option
-        value="Private"
-        \${value=="Private" ? 'selected' : ''} data-trans="hublStatus.private">Privé</option>
-    </select>`,
-  '',
-  formWidget => {
-    let select = formWidget.querySelector('select');
-    if (!select) return;
-    const slimSelect = new SlimSelect({
-      select: select
-    });
-    Helpers.importCSS('https://dev.jspm.io/slim-select/dist/slimselect.min.css');
-    select.addEventListener('change', () => slimSelect.render());
-  },
-);
-
-export {
-  HublStatus
-}
\ No newline at end of file
diff --git a/src/components/sw-toolbox.js b/src/components/sw-toolbox.js
new file mode 100644
index 0000000000000000000000000000000000000000..4b11fd0010a177c310077b89d666867f1f515eb8
--- /dev/null
+++ b/src/components/sw-toolbox.js
@@ -0,0 +1,47 @@
+import {
+  Workbox,
+  messageSW
+} from 'https://storage.googleapis.com/workbox-cdn/releases/6.1.1/workbox-window.prod.mjs';
+
+if ('serviceWorker' in navigator) {
+  window.addEventListener('load', function () {
+
+    const wb = new Workbox('/service-worker.js');
+    let registration;
+
+    const showSkipWaitingPrompt = (event) => {
+      if(hubl.intl.t('serviceWorker.newUpdate') != undefined) {
+        Swal.fire({
+          position: 'bottom-end',
+          backdrop: false,
+          title: "",
+          text: hubl.intl.t('serviceWorker.newUpdate') + ". " + hubl.intl.t('serviceWorker.wantToUpdate'),
+          imageUrl: hubl.client.logo || 'https://cdn.startinblox.com/logos/webp/hubl.webp',
+          imageAlt: hubl.client.name,
+          showCancelButton: true,
+          confirmButtonClass: 'button text-xsmall text-bold text-center reversed color-secondary bordered icon icon-check no-background-image',
+          cancelButtonClass: 'button text-xsmall text-bold text-center reversed color-primary bordered icon icon-exclamation no-background-image',
+          confirmButtonText: hubl.intl.t('serviceWorker.yes'),
+          cancelButtonText: hubl.intl.t('serviceWorker.no')
+        }).then((result) => {
+          if (result.isConfirmed) {
+            wb.addEventListener('controlling', (event) => {
+              window.location.reload();
+            });
+
+            if (registration && registration.waiting) {
+              messageSW(registration.waiting, {
+                type: 'SKIP_WAITING'
+              });
+            }
+          }
+        });
+      }
+    };
+
+    wb.addEventListener('waiting', showSkipWaitingPrompt);
+    wb.addEventListener('externalwaiting', showSkipWaitingPrompt);
+
+    wb.register().then((r) => registration = r);
+  });
+}
\ No newline at end of file
diff --git a/src/dependencies.pug b/src/dependencies.pug
index d530a0f4995dff6e1d81675ecd7dbb3ba55b9792..1ede7e9e1080c3e02371a60f64793de68ab1c28a 100644
--- a/src/dependencies.pug
+++ b/src/dependencies.pug
@@ -4,7 +4,13 @@ script(type="module" src="https://cdn.skypack.dev/@startinblox/core@0.16" defer)
 script(type="module" src="https://cdn.skypack.dev/@startinblox/router@0.11" defer)
 //- script(type="module" src="/lib/sib-router/src/index.js" defer)
 
-- const componentSet = new Set(components.map(c=>c.type));
+-
+  const componentSet = new Set(components.map(c=>c.type));
+  components.map(c => {
+    if(c.extensions) {
+      c.extensions.forEach(e => componentSet.add(e.type));
+    }
+  });
 
 if componentSet.has("autoLogin") || componentSet.has("registering")
   script(type="module" src="https://cdn.skypack.dev/@startinblox/oidc@0.14" defer)
@@ -14,6 +20,10 @@ if componentSet.has("chat") || componentSet.has("circles") || componentSet.has("
   script(type="module" src="https://cdn.skypack.dev/@startinblox/component-chat@5.2" defer)
   //- script(type="module" src="/lib/solid-xmpp-chat/dist/index.js" defer)
 
+if componentSet.has("communities")
+  script(type="module" src="https://cdn.skypack.dev/@startinblox/core@0.16/dist/components/solid-map.js" defer)
+  //- script(type="module" src="/lib/sib-core/dist/components/solid-map.js" defer)
+
 if componentSet.has("dashboard")
   script(type="module" src="https://cdn.skypack.dev/@startinblox/component-dashboard@4.0" defer)
   //- script(type="module" src="/lib/solid-dashboard/dist/index.js" defer)
@@ -23,8 +33,8 @@ if componentSet.has("events")
   //- script(type="module", src="/lib/solid-event/solid-event.js", defer)
 
 //- Disabled - Not in core@0.16
-//- if componentSet.has("events") || componentSet.has("polls") || componentSet.has("resources")
-  script(type="module" src="https://cdn.skypack.dev/@startinblox/component-conversation@0.9" defer)
+if componentSet.has("events") || componentSet.has("polls") || componentSet.has("resources")
+  script(type="module" src="https://cdn.skypack.dev/@startinblox/component-conversation@0.10" defer)
 
 if componentSet.has("jobBoard")
   script(type="module" src="https://cdn.skypack.dev/@startinblox/component-job-board@5.0" defer)
@@ -34,10 +44,9 @@ if componentSet.has("notification")
   script(type="module" src="https://cdn.skypack.dev/@startinblox/component-notifications@0.12" defer)
   //- script(type="module" src="/lib/sib-notifications/index.js" defer)
 
-//- Disabled - Not in core@0.16
-//- if componentSet.has("polls")
-//-   script(type="module" src="https://cdn.skypack.dev/@startinblox/component-poll@1.2" defer)
-//-   //- script(type="module" src="/lib/sib-polls-component/index.js" defer)
+if componentSet.has("polls")
+  script(type="module" src="https://cdn.skypack.dev/@startinblox/component-poll@2.1" defer)
+  //script(type="module" src="/lib/solid-poll/index.js" defer)
 
 if componentSet.has("profileDirectory")
   script(type="module" src="https://cdn.skypack.dev/@startinblox/component-directory@5.1" defer)
diff --git a/src/hubl-router.pug b/src/hubl-router.pug
index a4eada980368f6880e818df7fc8244797b62fab7..844c353027162f7e61658c1234c073a3a5dedb26 100644
--- a/src/hubl-router.pug
+++ b/src/hubl-router.pug
@@ -53,6 +53,22 @@ for component of components
       routes.add(route);
       component.route = route;
     }
+  if(component.extensions)
+    for extension of component.extensions
+      -
+        if(typeof extension.route === 'undefined') {
+          extension.route = extension.type;
+        }
+        if(extension.route) {
+          extension.uniq = Math.random().toString(16).slice(2);
+          let route = extension.route;
+          if (routes.has(extension.route)) {
+            route += "-" + extension.uniq;
+          }
+          routes.add(route);
+          extension.route = route;
+        }
+
 -
   const defaultComponent = components.filter(e=>e.defaultRoute != undefined);
   let defaultRoute = "dashboard";
@@ -60,5 +76,5 @@ for component of components
     defaultRoute = defaultComponent[0].uniq;
   }
 
-- const hublComponents = `window.hubl={};window.hubl.components = ${JSON.stringify(components)};window.hubl.defaultRoute = "${defaultRoute}";`;
+- const hublComponents = `window.hubl={};window.hubl.components = ${JSON.stringify(components)};window.hubl.defaultRoute = "${defaultRoute}";window.hubl.client = ${JSON.stringify(client)}`;
 script!=hublComponents
\ No newline at end of file
diff --git a/src/index.pug b/src/index.pug
index d3c72a05ee0613af401937be0f60f25e5c15d1d5..fd4c073f0e2f68a34f08e9f9b1861e1d724e4d4d 100644
--- a/src/index.pug
+++ b/src/index.pug
@@ -31,8 +31,8 @@ html(lang="en")
     script(type="module" src="/components/sentry.js" defer)
     script(type="module" src="/components/hubl-auto-login.js" defer)
     script(type="module" src="/components/hubl-search-users.js" defer)
-    script(type="module" src="/components/hubl-status.js" defer)
     script(type="module" src="/components/hubl-reactivity.js" defer)
+    script(type="module" src="/components/sw-toolbox.js" defer)
     script(src="index.js" defer)
 
     include dependencies.pug
@@ -99,7 +99,7 @@ html(lang="en")
                   include views/page-messages.pug
 
               if component.type == "circles"
-                .with-sidebar.whitespace-normal
+                .with-sidebar.whitespace-normal.jsMobileContentSidebarControl
                   hubl-reactivity(bind-user nested-field='inbox' target-src="store://user.circles")
                   hubl-reactivity(bind-user nested-field="circles" target-src="store://user")
                   hubl-reactivity(data-src=`${component.endpoints.get}joinable/` target-src=`${component.endpoints.get}`)
@@ -111,6 +111,10 @@ html(lang="en")
                   hubl-reactivity(bind-user nested-field="circles" target-src=`${component.endpoints.get}joinable/`)
                   include views/page-circle.pug
 
+              if component.type == "communities"
+                .scrollbar-content.whitespace-normal
+                  include views/page-communities.pug
+
               if component.type == "dashboard"
                 .scrollbar-content
                   include views/page-dashboard.pug
@@ -133,11 +137,11 @@ html(lang="en")
                   include views/page-job-board.pug
 
               if component.type == "polls"
-                .with-sidebar
+                .scrollbar-content
                   include views/page-polls.pug
 
               if component.type == "projects"
-                .with-sidebar.whitespace-normal
+                .with-sidebar.whitespace-normal.jsMobileContentSidebarControl
                   hubl-reactivity(bind-user nested-field='inbox' target-src="store://user.projects")
                   hubl-reactivity(bind-user nested-field="projects" target-src="store://user")
                   hubl-reactivity(data-src=`${component.endpoints.post}joinable/` target-src=`${component.endpoints.get}`)
@@ -178,7 +182,7 @@ html(lang="en")
 
             if component.type == "lang"
               hubl-lang(
-                hidden 
+                hidden
                 lang=component.parameters.name
                 file=component.parameters.file
               )
@@ -217,12 +221,12 @@ html(lang="en")
           div
           div
           div
-        div#something-goes-wrong(hidden) 
+        div#something-goes-wrong(hidden)
           br
           span(data-trans="errors.somethingGoesWrong")
           span &nbsp;
           a(data-trans='errors.reload' href='/')
-    
+
     if client.i18n
       hubl-fallback-lang(
         hidden
diff --git a/src/locales/en.json b/src/locales/en.json
index cde20c60196d878c0ed245f9aa6943e6dd51ce49..955cc4fc58cffacf9f2cbdec5f529493e5a5bf47 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -24,6 +24,7 @@
     "resources": "Resources",
     "jobBoard": "Job offers",
     "profileDirectory": "Profiles directory",
+    "communities": "Communities",
     "projects": "Projects",
     "closeMenu": "Close menu",
     "projectsBrowse": "Browse projects",
@@ -32,13 +33,7 @@
     "circlesBrowse": "Browse circles",
     "circleCreate": "Create circle",
     "messages": "Messages",
-    "search": "Search...",
-    "republiqueESS": {
-      "home": "Home",
-      "contribute": "Contribute",
-      "thematics": "Thematics",
-      "community": "Community"
-     }
+    "search": "Search"
   },
   "about": {
     "title": "About",
@@ -131,13 +126,11 @@
       "subTitle": "Members :"
     },
     "extensions": {
-      "associated": "Associated circle",
-      "republiqueESS": {
-        "associatedThematic": "Associated thematic"
-      }
+      "associated": "Associated circle"
     }
   },
   "communities": {
+    "back": "Back",
     "title": "Administration",
     "menuMobile": "MENU",
     "linkInvite": "Invite a new user",
@@ -156,6 +149,42 @@
       "email": "Email*",
       "password": "Password*",
       "formCreateAccount": "Create an account"
+    },
+    "list": {
+      "title": "Communities",
+      "searchBy": "Find by name",
+      "searchButton": "Search",
+      "members": "members"
+    },
+    "profile": {
+      "back": "Back",
+      "members": "members",
+      "edit": "Edit the page"
+    },
+    "edit": {
+      "labelShortDescription": "Community headline",
+      "labelDescription": "community description",
+      "labelPhone": "Phone",
+      "labelEmail": "Email",
+      "labelWebsite": "Website",
+      "labelTwitter": "Twitter",
+      "labelFacebook": "Facebook",
+      "labelLinkedin": "Linkedin",
+      "labelInstagram": "Instagram",
+      "labelPicture1": "Picture 1",
+      "labelPicture2": "Picture 2",
+      "labelPicture3": "Picture 3",
+      "labelAddressLine1": "New address line 1",
+      "labelAddressLine2": "New address line 2",
+      "labelLogo": "Community Logo",
+      "subTitle": "Pictures",
+      "subTitle1": "Address",
+      "buttonSubmit": "Save",
+      "noPermission": "You don't have access to this page",
+      "tableHeader1": "Address line 1",
+      "tableHeader2": "Address line 2",
+      "buttonDelete": "Delete",
+      "buttonAdd": "Add"
     }
   },
   "project": {
@@ -248,10 +277,7 @@
   "template-captain": {
     "isLead": "Captain"
   },
-  "hublStatus": {
-    "private": "Private",
-    "public": "Public"
-  },
+  "hublStatus": "Public = Public, Private = Private",
   "success": "Success!",
   "errors": {
     "somethingGoesWrong": "Something goes wrong, try to",
@@ -312,5 +338,11 @@
     "edit": "Edit",
     "back": "Back",
     "goButton": "GO"
+  },
+  "serviceWorker": {
+    "newUpdate": "A new version is available",
+    "wantToUpdate": "Do you want to update?",
+    "yes": "Yes",
+    "no": "No"
   }
 }
diff --git a/src/locales/es.json b/src/locales/es.json
index a393f2b72746368c5fe93e86e35bee53cfef1c21..9ad1628bdc0e1a07e0bb13da6f26d4aaab0e5370 100644
--- a/src/locales/es.json
+++ b/src/locales/es.json
@@ -24,6 +24,7 @@
     "resources": "Recursos",
     "jobBoard": "Ofertas de trabajo",
     "profileDirectory": "Directorio de miembrxs",
+    "communities": "Las comunidades",
     "projects": "Proyectos",
     "closeMenu": "Cerrar menú",
     "projectsBrowse": "Examinar los proyectos",
@@ -32,13 +33,7 @@
     "circlesBrowse": "Examinar los círculos",
     "circleCreate": "Crea un círculo.",
     "messages": "Mensajes",
-    "search": "Buscar...",
-    "republiqueESS": {
-      "home": "Hogar",
-      "contribute": "Contribuir",
-      "thematics": "Temáticas",
-      "community": "Comunidad"
-     }
+    "search": "Buscar"
   },
   "about": {
     "title": "Acerca de",
@@ -131,13 +126,11 @@
       "subTitle": "Miembrxs: "
     },
     "extensions": {
-      "associated": "Círculo asociado",
-      "republiqueESS": {
-        "associatedThematic": "Temática asociada"
-      }
+      "associated": "Círculo asociado"
     }
   },
   "communities": {
+    "back": "Volver",
     "title": "Administración",
     "menuMobile": "MENÚ",
     "linkInvite": "Invita a un/a nuevx usuarix",
@@ -156,6 +149,42 @@
       "email": "Correo electrónico*",
       "password": "Contraseña*",
       "formCreateAccount": "Crear una cuenta"
+    },
+    "list": {
+      "title": "Comunidades",
+      "searchBy": "Buscar por nombre",
+      "searchButton": "Buscar",
+      "members": "miembros"
+    },
+    "profile": {
+      "back": "Volver",
+      "members": "miembros",
+      "edit": "Editar la página"
+    },
+    "edit": {
+      "labelShortDescription": "Subtítulo del comunidad",
+      "labelDescription": "Descripción de la comunidad",
+      "labelPhone": "Teléfono",
+      "labelEmail": "Email",
+      "labelWebsite": "Página web",
+      "labelTwitter": "Twitter",
+      "labelFacebook": "Facebook",
+      "labelLinkedin": "Linkedin",
+      "labelInstagram": "Instagram",
+      "labelPicture1": "Foto 1",
+      "labelPicture2": "Foto 2",
+      "labelPicture3": "Foto 3",
+      "labelAddressLine1": "Nueva línea de dirección 1",
+      "labelAddressLine2": "Nueva línea de dirección 2",
+      "labelLogo": "Logotipo comunitario",
+      "subTitle": "Foto",
+      "subTitle1": "Dirección",
+      "buttonSubmit": "Guardar",
+      "noPermission": "No tiene permiso",
+      "tableHeader1": "Dirección línea 1",
+      "tableHeader2": "Dirección línea 2",
+      "buttonDelete": "Eliminar",
+      "buttonAdd": "Añadir"
     }
   },
   "project": {
@@ -248,10 +277,7 @@
   "template-captain": {
     "isLead": "Líder"
   },
-  "hublStatus": {
-    "private": "Privado",
-    "public": "Público"
-  },
+  "hublStatus": "Público = Public, Privado = Private",
   "success": "¡Éxito!",
   "errors": {
     "somethingGoesWrong": "Algo sale mal, intenta",
@@ -312,5 +338,11 @@
     "edit": "Modificar",
     "back": "Atrás",
     "goButton": "GO"
+  },
+  "serviceWorker": {
+    "newUpdate": "Una nueva version esta disponible",
+    "wantToUpdate": "¿Quieres actualizar?",
+    "yes": "Sí",
+    "no": "No"
   }
 }
diff --git a/src/locales/fr.json b/src/locales/fr.json
index e58d485c375fdddedba9758869f24aef873c3dc8..3cb4ba478ff440153bf0a4370726066a79521424 100644
--- a/src/locales/fr.json
+++ b/src/locales/fr.json
@@ -9,9 +9,7 @@
   },
   "menuLeft": {
     "emptyCircleProjectContact": {
-      "empty": "Il n'y a aucun résultat dans cette section.",
-      "project": "projet",
-      "circle": "cercle"
+      "empty": "Il n'y a aucun résultat dans cette section."
     },
     "contact": {
       "create": "Retrouve tes contacts sur",
@@ -24,6 +22,7 @@
     "resources": "Ressources",
     "jobBoard": "Offres de mission",
     "profileDirectory": "Annuaire des membres",
+    "communities": "Les communautés",
     "projects": "Projets",
     "closeMenu": "Fermer le menu",
     "projectsBrowse": "Parcourir les projets",
@@ -32,13 +31,7 @@
     "circlesBrowse": "Parcourir les cercles",
     "circleCreate": "Créer un cercle",
     "messages": "Messages",
-    "search": "Rechercher...",
-    "republiqueESS": {
-      "home": "Accueil",
-      "contribute": "Contribuer",
-      "thematics": "Thématiques",
-      "community": "Communauté"
-     }
+    "search": "Rechercher"
   },
   "about": {
     "title": "A propos",
@@ -131,13 +124,11 @@
       "subTitle": "Membres :"
     },
     "extensions": {
-      "associated": "Cercle associé",
-      "republiqueESS": {
-        "associatedThematic": "Thématique associée"
-      }
+      "associated": "Cercle associé"
     }
   },
   "communities": {
+    "back": "Retour",
     "title": "Administration",
     "menuMobile": "MENU",
     "linkInvite": "Inviter un nouvel utilisateur",
@@ -156,6 +147,42 @@
       "email": "E-mail*",
       "password": "Mot de passe*",
       "formCreateAccount": "Créer un compte"
+    },
+    "list": {
+      "title": "Les communautés",
+      "searchBy": "Trouver par nom",
+      "searchButton": "Rechercher",
+      "members": "membres"
+    },
+    "profile": {
+      "back": "Retour",
+      "members": "membres",
+      "edit": "Editer la page"
+    },
+    "edit": {
+      "labelShortDescription": "Sous-titre de la communauté",
+      "labelDescription": "Description de la communauté",
+      "labelPhone": "Téléphone",
+      "labelEmail": "Email",
+      "labelWebsite": "Site web",
+      "labelTwitter": "Twitter",
+      "labelFacebook": "Facebook",
+      "labelLinkedin": "Linkedin",
+      "labelInstagram": "Instagram",
+      "labelPicture1": "Photo 1",
+      "labelPicture2": "Photo 2",
+      "labelPicture3": "Photo 3",
+      "labelAddressLine1": "Nouvelle adresse ligne 1",
+      "labelAddressLine2": "Nouvelle adresse ligne 2",
+      "labelLogo": "Logo de la communauté",
+      "subTitle": "Photos",
+      "subTitle1": "Adresse",
+      "buttonSubmit": "Enregistrer",
+      "noPermission": "Vous n'avez pas la permission",
+      "tableHeader1": "Adresse ligne 1",
+      "tableHeader2": "Adresse ligne 2",
+      "buttonDelete": "Effacer",
+      "buttonAdd": "Ajouter"
     }
   },
   "project": {
@@ -248,10 +275,7 @@
   "template-captain": {
     "isLead": "Capitaine"
   },
-  "hublStatus": {
-    "private": "Privé",
-    "public": "Public"
-  },
+  "hublStatus": "Public = Public, Privé = Private",
   "success": "Succès!",
   "errors": {
     "somethingGoesWrong": "Quelque chose ne va pas, essayez de",
@@ -312,5 +336,11 @@
     "edit": "Editer",
     "back": "Retour",
     "goButton": "GO"
+  },
+  "serviceWorker": {
+    "newUpdate": "Une nouvelle version est disponible",
+    "wantToUpdate": "Voulez-vous mettre à jour ?",
+    "yes": "Oui",
+    "no": "Non"
   }
 }
diff --git a/src/scripts/hubl-geocoord.js b/src/scripts/hubl-geocoord.js
new file mode 100644
index 0000000000000000000000000000000000000000..7d9551fd2508a22e6c6608bf4e0c3fb1770b83a9
--- /dev/null
+++ b/src/scripts/hubl-geocoord.js
@@ -0,0 +1,33 @@
+/*
+  Geocoord helper using Nominatim
+  Usage:
+  const madrid = await hubl.geocoord('Madrid');
+  madrid == ["-3.7035825", "40.4167047"]
+*/
+window.hubl.geocoord = async (address = false) => {
+  if (address) {
+    const nominatim = await fetch('https://nominatim.openstreetmap.org/?format=geocodejson&limit=1&q=' + encodeURI(address));
+    const response = await nominatim.json();
+    if (response.features[0]) {
+      const coords = response.features[0].geometry.coordinates;
+      if (coords[0] && coords[1]) {
+        return [String(coords[0]), String(coords[1])];
+      }
+    } else {
+      console.error("Address not found");
+    }
+  } else {
+    console.error("Missing address");
+  }
+  return ["-47.15", "-123.716667"];
+}
+
+window.hubl.geocalc = (element) => {
+  const editionForm = element.parentElement.parentElement.parentElement.parentElement;
+  window.hubl.geocoord(editionForm.querySelector('input[name="address_line1"]').value + " " + editionForm.querySelector('input[name="address_line2"]').value).then(coords => {
+    editionForm.querySelector('input[name="lat"]').value = coords[1];
+    editionForm.querySelector('input[name="lng"]').value = coords[0];
+    editionForm.querySelector('input[type="submit"]').click();
+  });
+  return false;
+}
\ No newline at end of file
diff --git a/src/scripts/intl.js b/src/scripts/intl.js
index 5c02ae43029af8e4f888183d96c6c1c5de8c6c5e..04bbe022a2e65211c892792eb1385bb7ebe2884c 100644
--- a/src/scripts/intl.js
+++ b/src/scripts/intl.js
@@ -6,27 +6,27 @@ class JsI18n {
   constructor() {
     this.locale = ""; //Current locale
     this.locales = new Array(); //Available locales
+    this.overwrites = new Array();
     this.defaultLocale = "fr";
   }
 
   /*
     Method for automatically detecting the language, does not work in every browser.
   */
-  detectLanguage() {
+  async detectLanguage() {
     const customLangs = document.querySelectorAll('hubl-lang');
-    if(customLangs) {
-      for(let lang of customLangs) {
-        let name = lang.getAttribute('lang'), 
-            file = lang.getAttribute('file');
-        if(window.hubl.intl.locales[name.toString()] == undefined) {
-          return fetch(file).then((result) => {
-            if (result.ok) {
-              result.json().then(e => {
-                window.hubl.intl.addLocale(name, e);
-              });
-            }
-            window.hubl.intl.resumeDetection();
-          });
+    if (customLangs) {
+      for (let lang of customLangs) {
+        let name = lang.getAttribute('lang'),
+          file = lang.getAttribute('file');
+        let result = await fetch(file);
+        if (result.ok) {
+          let json = await result.json();
+          if(this.overwrites[name.toString()] != undefined) {
+            this.mergeDeep(this.overwrites[name.toString()], json);
+          } else {
+            this.overwrites[name.toString()] = json;
+          }
         }
       }
     }
@@ -35,10 +35,10 @@ class JsI18n {
 
   resumeDetection() {
     const langComponent = document.querySelector('hubl-fallback-lang');
-    if(langComponent) {
-      if(langComponent.hasAttribute('lang')) {
+    if (langComponent) {
+      if (langComponent.hasAttribute('lang')) {
         this.defaultLocale = langComponent.getAttribute('lang');
-        if(langComponent.hasAttribute('force')) {
+        if (langComponent.hasAttribute('force')) {
           localStorage.setItem('language', this.defaultLocale);
         }
       }
@@ -52,6 +52,30 @@ class JsI18n {
     }
   };
 
+  isObject(item) {
+    return (item && typeof item === 'object' && !Array.isArray(item));
+  }
+
+  mergeDeep(target, ...sources) {
+    if (!sources.length) return target;
+    const source = sources.shift();
+    if (this.isObject(target) && this.isObject(source)) {
+      for (const key in source) {
+        if (this.isObject(source[key])) {
+          if (!target[key]) Object.assign(target, {
+            [key]: {}
+          });
+          this.mergeDeep(target[key], source[key]);
+        } else {
+          Object.assign(target, {
+            [key]: source[key]
+          });
+        }
+      }
+    }
+    return this.mergeDeep(target, ...sources);
+  }
+
   /*
     Translates tag contents and
     attributes depending on the
@@ -78,6 +102,17 @@ class JsI18n {
               this.translateNodeContent(label, k);
             }
           }
+          // https://git.startinblox.com/framework/sib-core/issues/755
+          if (attr.startsWith('placeholder-')) {
+            let placeholder = node.querySelector('[placeholder="' + attr.replace("placeholder-", "") + '"]');
+            if (placeholder != null) {
+              this.translateNodeContent(placeholder.attributes['placeholder'], k);
+              let input = node.querySelector('[name="' + attr.replace("placeholder-", "") + '"] > input');
+              if (input != null) {
+                this.translateNodeContent(input.attributes['placeholder'], k);
+              }
+            }
+          }
           this.translateNodeContent(node.attributes[attr], k);
         }
       }
@@ -134,21 +169,20 @@ class JsI18n {
     if the locale is already defined.
   */
   addLocale(locale, translations) {
+    if (this.overwrites[locale.toString()] != undefined) {
+      this.mergeDeep(translations, this.overwrites[locale.toString()]);
+    }
     this.locales[locale.toString()] = translations;
   }
 
   fetchLocale(locale) {
-    if(this.locales[locale.toString()] == undefined) {
-      return fetch(`/locales/${locale}.json`).then((result) => {
-        if (result.ok) {
-          result.json().then(e => {
-            this.addLocale(locale, e);
-          });
-        }
-      });
-    } else {
-      return (new Promise()).resolve();
-    }
+    return fetch(`/locales/${locale}.json`).then((result) => {
+      if (result.ok) {
+        result.json().then(e => {
+          this.addLocale(locale, e);
+        });
+      }
+    });
   }
 
   /*
@@ -157,7 +191,7 @@ class JsI18n {
   setLocale(locale) {
     try {
       this.fetchLocale(locale).then(() => {
-        if(this.locale) {
+        if (this.locale) {
           localStorage.setItem('language', this.locale);
         }
         this.processPage();
@@ -179,11 +213,11 @@ class JsI18n {
   t(key) {
     var translations = this.locales[this.locale];
     if (translations == undefined) {
-      if(this.locales.length > 1) {
+      if (this.locales.length > 1) {
         translations = this.locales[this.defaultLocale];
       }
     }
-    if(translations != undefined) {
+    if (translations != undefined) {
       let translation = key.toString().split('.').reduce((o, i) => (o ? o[i] : undefined), translations);
       if (typeof translation == "string") {
         return translation;
diff --git a/src/scripts/keyboard-shortcuts.js b/src/scripts/keyboard-shortcuts.js
new file mode 100644
index 0000000000000000000000000000000000000000..561c41dc6234c991f4e64492f73a2271a61026e6
--- /dev/null
+++ b/src/scripts/keyboard-shortcuts.js
@@ -0,0 +1,9 @@
+document.addEventListener("keydown", function (e) {
+  /*
+      CTRL + K : Focus on the user search
+  */
+  if(e.ctrlKey && e.key == "k") {
+    document.querySelector('#general-search input[type="text"]').focus();
+    e.preventDefault();
+  }
+});
diff --git a/src/scripts/navigate-event.js b/src/scripts/navigate-event.js
index d2fc2e7fbcce36f7d38112c5fd5a6aa96f917675..9fb041a650bfa7732c90e863037ce79df6f6ff66 100644
--- a/src/scripts/navigate-event.js
+++ b/src/scripts/navigate-event.js
@@ -19,13 +19,27 @@ function closeRightMenu() {
       el.querySelector('.text-right').setAttribute('hidden', '');
       el.querySelector('.text-left').removeAttribute('hidden');
     });
-    Array.from(rightMenu).forEach(el => el.removeAttribute("open"));
+    Array.from(rightMenu).forEach(el => {
+      el.removeAttribute("open");
+      el.classList.add('sm-hidden');
+      Array.from(el.parentElement.querySelectorAll('.jsMobileRightMenuButton')).forEach(ac => {
+        ac.classList.remove('icon-close');
+        ac.classList.add('icon-options-vertical');
+      });
+    });
   }
 }
 
 function openRightMenu() {
   let rightMenu = document.querySelectorAll(".jsRightMenu");
-  Array.from(rightMenu).forEach(el => el.setAttribute("open", ""));
+  Array.from(rightMenu).forEach(el => {
+    el.setAttribute("open", "");
+    el.classList.remove('sm-hidden');
+    Array.from(el.parentElement.querySelectorAll('.jsMobileRightMenuButton')).forEach(ac => {
+      ac.classList.remove('icon-options-vertical');
+      ac.classList.add('icon-close');
+    });
+  });
   Array.from(document.querySelectorAll(".jsOffsiteToggle")).forEach(el => {
     el.querySelector('.text-left').setAttribute('hidden', '');
     el.querySelector('.text-right').removeAttribute('hidden');
@@ -35,6 +49,32 @@ function openRightMenu() {
   );
 }
 
+function closeRightMobileMenu() {
+  let rightMenu = document.querySelectorAll(".jsRightMenu");
+  if (Array.from(rightMenu).filter(el => el.hasAttribute("mobile-open")).length > 0) {
+    Array.from(rightMenu).forEach(el => {
+      el.removeAttribute("mobile-open");
+      el.classList.add('sm-hidden');
+      Array.from(el.parentElement.querySelectorAll('.jsMobileRightMenuButton')).forEach(ac => {
+        ac.classList.remove('icon-close');
+        ac.classList.add('icon-options-vertical');
+      });
+    });
+  }
+}
+
+function openRightMobileMenu() {
+  let rightMenu = document.querySelectorAll(".jsRightMenu");
+  Array.from(rightMenu).forEach(el => {
+    el.setAttribute("mobile-open", "");
+    el.classList.remove('sm-hidden');
+    Array.from(el.parentElement.querySelectorAll('.jsMobileRightMenuButton')).forEach(ac => {
+      ac.classList.remove('icon-options-vertical');
+      ac.classList.add('icon-close');
+    });
+  });
+}
+
 document.addEventListener("DOMContentLoaded", function () {
   const componentSet = new Set(window.hubl.components.map(c => c.type));
 
@@ -112,9 +152,11 @@ document.addEventListener("DOMContentLoaded", function () {
       closeLeftMenu();
     }
     if (
-      !event.target.closest(".jsOffsiteToggle")
+      !event.target.closest(".jsOffsiteToggle") &&
+      !event.target.classList.contains('jsMobileRightMenuButton')
     ) {
       closeRightMenu();
+      closeRightMobileMenu();
     }
   });
 
@@ -125,6 +167,7 @@ document.addEventListener("DOMContentLoaded", function () {
       closeUserControls();
       closeLeftMenu();
       closeRightMenu();
+      closeRightMobileMenu();
     }
   };
 
@@ -152,10 +195,15 @@ document.addEventListener("DOMContentLoaded", function () {
     });
   });
 
-  Array.from(document.querySelectorAll(".jsMobileSidebarOpenButton")).forEach(
+
+  Array.from(document.querySelectorAll(".jsMobileRightMenuButton")).forEach(
     el => {
       el.addEventListener("click", () => {
-        openRightMenu();
+        if (el.closest('.jsMobileContentSidebarControl').querySelector('nav.jsRightMenu').hasAttribute("mobile-open")) {
+          closeRightMobileMenu();
+        } else {
+          openRightMobileMenu();
+        }
       });
     }
   );
diff --git a/src/scripts/register-sw.js b/src/scripts/register-sw.js
deleted file mode 100644
index 2cd921ee5bc9f05da8db75cbded9384461abc57e..0000000000000000000000000000000000000000
--- a/src/scripts/register-sw.js
+++ /dev/null
@@ -1,11 +0,0 @@
-if ('serviceWorker' in navigator) {
-  var refreshing;
-  navigator.serviceWorker.addEventListener('controllerchange', () => {
-    if (refreshing) {
-      return;
-    }
-    refreshing = true;
-    window.location.reload();
-  });
-  navigator.serviceWorker.register('/sw.js');
-}
\ No newline at end of file
diff --git a/src/service-worker.js b/src/service-worker.js
new file mode 100644
index 0000000000000000000000000000000000000000..3244688eee2e7f2fac5f89a6054d1b93cf212e5d
--- /dev/null
+++ b/src/service-worker.js
@@ -0,0 +1,81 @@
+importScripts('https://storage.googleapis.com/workbox-cdn/releases/6.1.1/workbox-sw.js');
+
+workbox.precaching.precacheAndRoute([]);
+
+addEventListener('message', (event) => {
+  if (event.data && event.data.type === 'SKIP_WAITING') {
+    skipWaiting();
+  }
+});
+
+workbox.routing.registerRoute(
+  ({url}) => url.origin === 'https://fonts.gstatic.com',
+  new workbox.strategies.CacheFirst({
+    cacheName: 'google-fonts-webfonts',
+    plugins: [
+      new workbox.cacheableResponse.CacheableResponsePlugin({
+        statuses: [0, 200],
+      }),
+      new workbox.expiration.ExpirationPlugin({
+        maxAgeSeconds: 60 * 60 * 24 * 365,
+        maxEntries: 30,
+      }),
+    ],
+  })
+);
+
+workbox.routing.registerRoute(
+  ({url}) => [
+    'https://cdn.jsdelivr.net',
+    'https://unpkg.com',
+    'https://cdn.skypack.dev',
+    'https://jspm.dev',
+    'https://fonts.googleapis.com',
+    'https://cdn.startinblox.com'
+  ].includes(url.origin),
+  new workbox.strategies.StaleWhileRevalidate({
+    cacheName: 'cdn',
+  })
+);
+
+workbox.routing.registerRoute(
+  ({ request }) => request.destination === 'image',
+  new workbox.strategies.CacheFirst({
+    cacheName: 'images',
+    plugins: [
+      new workbox.cacheableResponse.CacheableResponsePlugin({
+        statuses: [200],
+      }),
+      new workbox.expiration.ExpirationPlugin({
+        maxEntries: 300,
+        maxAgeSeconds: 60 * 60 * 24 * 30,
+      }),
+    ],
+  }),
+);
+
+workbox.routing.registerRoute(
+  ({ request }) =>
+    request.destination === 'style' ||
+    request.destination === 'script',
+  new workbox.strategies.StaleWhileRevalidate({
+    cacheName: 'assets',
+    plugins: [
+      new workbox.cacheableResponse.CacheableResponsePlugin({
+        statuses: [200],
+      }),
+    ],
+  }),
+);
+
+workbox.routing.registerRoute(
+  ({ request }) => request.mode === 'navigate',
+  new workbox.strategies.NetworkFirst({
+    cacheName: 'pages',
+    plugins: [
+      new workbox.cacheableResponse.CacheableResponsePlugin({
+        statuses: [200],
+      }),
+    ],
+  }),
+);
diff --git a/src/styles/admin-circles/_index.scss b/src/styles/admin-circles/_index.scss
index e80679a599e8375e6ce63beaa6139bd91cb65ab7..7ac883df750b81ed4a9abe1357e4bdd8d5c7634b 100644
--- a/src/styles/admin-circles/_index.scss
+++ b/src/styles/admin-circles/_index.scss
@@ -1,12 +1,13 @@
 #admin-circles,
-#admin-circles-leave {
+#admin-circles-leave,
+.communities-directory {
 
   /* Fix on Join button in admin (circles + projects) */
   /* Styles on buttons and .children-link don't work because this input is inside too many elements. */
   /* And no I can't add that stupid icon because it'a an input. */
   /* But now, with 0.16, it's a button and you can :D */
   .join-button {
-  
+
     input,
     button {
       padding: 9px 20px;
@@ -18,7 +19,7 @@
       background-color: var(--color-secondary);
       color: white;
       border: 1px solid var(--color-secondary);
-  
+
       &:before {
         font-size: 15px;
         margin-right: 6px;
@@ -37,17 +38,17 @@
         -webkit-font-smoothing: antialiased;
         -moz-osx-font-smoothing: grayscale;
       }
-  
+
       &:hover {
         background: white;
         color: var(--color-secondary);
       }
     }
-  
+
     @media (max-width: 768px) {
-  
+
       &.sm-full {
-  
+
         input,
         button {
           width: 100%;
@@ -57,10 +58,15 @@
   }
 
   .form.search-button :not(.add-member)+button[type=submit] {
-    background-color: #E9F2FF;
-    border: none;
+    background-color: transparent;
+    border: 1px solid var(--color-secondary);
     color: var(--color-secondary);
 
+    &:hover {
+      background-color: var(--color-secondary);
+      color: #fff;
+    }
+
     &:before {
       font-size: 15px;
       margin-right: 6px;
@@ -75,11 +81,11 @@
       text-align: center;
       font-variant: normal;
       text-transform: none;
-      line-height: 1em;
+      line-height: 13px;
       -webkit-font-smoothing: antialiased;
       -moz-osx-font-smoothing: grayscale;
     }
-  }  
+  }
 
   .masonry>div:nth-child(1) {
     /* change from directory (nth-child(2))*/
@@ -95,6 +101,7 @@
   .segment.hover:hover {
     box-shadow: 0 0 16px 0 rgba(46, 63, 88, 0.34);
     bottom: 2px;
+    cursor: pointer;
   }
 
   hubl-admin-circle-name:hover {
@@ -105,6 +112,40 @@
     height: 76px;
     width: 100%;
     display: block;
+
+    div {
+      display: block;
+      width: 100%;
+      height: 100%;
+      background-position: center;
+      background-repeat: no-repeat;
+      background-size: contain;
+    }
+  }
+
+  .community-profile solid-multiple {
+
+    [name="address_line1"]::before {
+      font-family: 'material-design-icons';
+      content: "\F34E";
+      position: relative;
+      top: 2px;
+      color: var(--color-third);
+      font-size: 20px;
+      margin-right: 10px;
+    }
+  
+    [name="address_line2"] {
+      display: block;
+      margin-left: 30px;
+    }
+  }
+
+  hubl-communities-profile-logo {
+    height: 155px;
+    width: 100%;
+    display: block;
+
     div {
       display: block;
       width: 100%;
@@ -121,6 +162,107 @@
     padding-bottom: 10px;
   }
 
+  .communities-profile-picture {
+    
+    >div:not(:empty) {
+      height: 200px;
+
+      div:first-child {
+        display: block;
+        width: 100%;
+        height: 100%;
+        background-position: center;
+        background-repeat: no-repeat;
+        background-size: contain;
+      }
+    }
+  }
+
+  .communities-map {
+
+    .leaflet-popup-content-wrapper {
+      border-radius: 5px;
+
+      .leaflet-popup-content {
+        width: 340px !important;
+        margin: 0;
+
+        .description {
+          height: 32px;
+        }
+
+        .title:hover {
+          cursor: pointer;
+          text-decoration: underline;
+        }
+      }
+    }
+
+    .leaflet-popup-close-button {
+      display: none;
+    }
+  }
+
+  .edit-img {
+
+    input[type="file"] {
+      display: block;
+      margin-top: 10px;
+    }
+
+    img {
+      display: block;
+      margin-top: 15px;
+    }
+
+    &.edit-logo {
+
+      img{
+        width: 280px;
+      }
+    }
+
+    &.edit-picture {
+
+      &>div {
+        position: relative;
+
+        button {
+          margin-top: 10px;
+          color: #636363;
+          font-weight: bold;
+          line-height: 19px;
+          font-size: 22px;
+        }
+      }
+      
+      img {
+        width: 100%;
+      }
+    }
+  }
+
+  .edit-address {
+
+    form {
+      display: table-row;
+    }
+
+    .segment.table-cell {
+      display: table-cell;
+      border-bottom: 1px solid #C9C8C8;
+      border-right: 1px solid #C9C8C8;
+      height: 60px;
+      padding: 10px;
+      vertical-align: middle;
+      width: 250px;
+    }
+
+    input[type='submit'] {
+      display: none;
+    }
+  }
+
   @media (max-width: 768px) {
 
     .tabs {
@@ -143,5 +285,66 @@
         }
       }
     }
+
+    .community-profile-logo {
+      border-bottom: 1px solid #D6CECE;
+    }
+
+    hubl-communities-profile-logo {
+      height: 100px;
+    }
+
+    .communities-profile-picture {
+      
+      >div:not(:empty) {
+        height: 180px;
+      }
+    }
+
+    .mobile-map-search-field {
+      position: fixed;
+      top: 70px;
+      z-index: 1000;
+      width: 97%;
+
+      button[type='submit'] {
+        background: var(--color-secondary) !important;
+        color: white !important;
+
+        &:hover {
+          background: white !important;
+          color: var(--color-secondary) !important;
+        }
+      }
+    }
+
+    .communities-map {
+      height: calc(100vh - 50px) !important;
+
+      .leaflet-top.leaflet-left {
+        display: none;
+      }
+
+      .leaflet-popup-close-button {
+        display: block;
+        font-size: 20px;
+        margin-top: 5px;
+        margin-right: 5px;
+      }
+    }
+
+    .edit-img {
+
+      &.edit-logo {
+
+        img {
+          width: 100%;
+        }
+      }
+    }
+  }
+  
+  .flex {
+    display: flex;
   }
 }
\ No newline at end of file
diff --git a/src/styles/content/_index.scss b/src/styles/content/_index.scss
index c1e7d05cce42284b8eb73117be923fd885f4bf37..782105b0544b613ef6d789a3985912abacce5436 100644
--- a/src/styles/content/_index.scss
+++ b/src/styles/content/_index.scss
@@ -2,6 +2,10 @@ main {
   height: 100vh;
 }
 
+.no-background-image {
+  background-image: none !important;
+}
+
 /* Styles of the right-hand menu + pages with that menu */
 .with-sidebar {
   flex-grow: 1;
@@ -65,11 +69,28 @@ main {
 
     /* Styles use with JS to open/close the sidebar */
     &.jsRightMenu {
-      display: block;
+      @media (min-width: 768,01px) {
+        display: block;
+      }
+
+      @media (max-width: 768px) {
+        position: fixed;
+        top: 99px;
+        right: 0;
+        height: auto;
+        z-index: 2999;
+        box-shadow: 0 4px 6px 0 rgba(0, 0, 0, 0.14);
+      }
+
       solid-link[active] {
         color: white;
         background: var(--color-heading);
+
+        >li {
+          border-bottom: 1px solid var(--color-heading);
+        }
       }
+
       solid-link:not([active]):hover {
         background: #e4e4e4;
       }
@@ -79,30 +100,18 @@ main {
       @media (min-width: 768.01px) {
         transform: translate(152px);
       }
-
-      /* Quick fix. When you got time, use animation on the span instead */
-      @media (max-width: 768px) {
-        ul>li:first-child>span,
-        ul>li:first-child>a {
-          visibility: hidden;
-        }
-      }
     }
 
     &.jsRightMenu[open] {
       display: block;
       bottom: 0;
       right: 0;
-
-      @media(max-width: 768px) {
-        box-shadow: 0 2px 9px 0 rgba(0, 0, 0, 0.12);
-        min-width: 60%;
-        position: fixed;
-        top: 50px;
-        z-index: 3000;
-      }
     }
   }
+
+  .jsMobileRightMenuButton {
+    float: right;
+  }
 }
 
 /* Add scrollbar to the left menu and to the content */
@@ -118,7 +127,7 @@ main {
   height: 100vh;
 }
 
-/* Custom scrollbar of the left-menu*/
+/* Custom scrollbar of the right-menu */
 /* Works on Firefox*/
 .scrollbar-nav {
   scrollbar-width: thin;
@@ -142,9 +151,6 @@ main {
   }
 }
 
-
-
-
 /* Custom scrollbar of the content */
 /* Works on Firefox */
 .scrollbar-content {
@@ -168,6 +174,7 @@ main {
     border: 3px solid white;                  /* creates padding around scroll thumb */
   }
 }
+/* End scrollbar*/
 
 
 solid-display-value-markdown {
diff --git a/src/styles/left-nav/_index.scss b/src/styles/left-nav/_index.scss
index 0288baf882158b9d5988b018b4f6fe2626271912..8b1e70a5d48dba0652a0aa2fc39b88abf7900718 100644
--- a/src/styles/left-nav/_index.scss
+++ b/src/styles/left-nav/_index.scss
@@ -131,10 +131,10 @@ nav#main__menu {
     .menu-admin {
       position: absolute;
       z-index: 3016;
-      left: 78px;
+      left: 15%;
       top: 36px;
       text-align: end;
-      width: 64%;
+      width: 80%;
 
       @media (max-width: 768px) {
         width: 100%;
@@ -242,6 +242,7 @@ nav#main__menu {
 
       solid-set-default[name="message"] {
         margin-right: 9px;
+        width: 74%;
       }
 
       hubl-menu-contact-removed {
diff --git a/src/sw.js b/src/sw.js
deleted file mode 100644
index 87b192fbc58b45c6dcb8d0e6764eff7237b5122b..0000000000000000000000000000000000000000
--- a/src/sw.js
+++ /dev/null
@@ -1,115 +0,0 @@
-const CACHE_NAME = 'hubl-store-epm9475';
-
-self.addEventListener('install', function (e) {
-  self.skipWaiting();
-  e.waitUntil(
-    caches.open(CACHE_NAME).then(function (cache) {
-      return cache.addAll([
-        '/locales/es.json',
-        '/locales/fr.json',
-        '/scripts/index.js',
-        '/syles/index.css',
-        '/index.html',
-        '/'
-      ]);
-    })
-  );
-});
-
-self.addEventListener('activate', function (e) {
-  // invalidate older versions
-  e.waitUntil(
-    caches.keys()
-    .then(function (keyList) {
-      return Promise.all(keyList.map(function (key) {
-        if (key !== CACHE_NAME && key !== (CACHE_NAME + "-cdn") && key !== (CACHE_NAME + "-api")) {
-          return caches.delete(key);
-        }
-      }));
-    }));
-  self.clients.claim();
-});
-
-if(process.env.NODE_ENV === 'production'){
-  self.addEventListener('fetch', function (event) {
-    let requestURL = new URL(event.request.url);
-    if (requestURL.origin == location.origin) {
-      // Static asset, cache then network
-      event.respondWith(
-        caches.open(CACHE_NAME).then(function (cache) {
-          return cache.match(event.request).then(function (response) {
-            var fetchPromise = fetch(event.request).then(function (networkResponse) {
-              cache.put(event.request, networkResponse.clone());
-              return networkResponse;
-            });
-            return response || fetchPromise;
-          });
-        }),
-      );
-    } else {
-      if (
-        event.request.method == 'POST' ||
-        event.request.method == 'PUT'
-      ) {
-        // disabled: lead to cors errors
-        // // POST/PUT to api, rewrite the cache
-        // event.respondWith(
-        //   caches.open(CACHE_NAME + '-api').then(function (cache) {
-        //     return fetch(event.request).then(function (response) {
-        //       cache.put(event.request, response.clone());
-        //       return response;
-        //     })
-        //   }));
-        // api: no cache
-        event.respondWith(fetch(event.request));
-      } else if (
-        /matomo/.test(requestURL.origin) ||
-        /sentry/.test(requestURL.origin) ||
-        /jabber/.test(requestURL.origin) ||
-        /xmpp/.test(requestURL.origin)
-      ) {
-        // analytics, always distant
-        event.respondWith(fetch(event.request));
-      } else {
-        if (
-          /unpkg/.test(requestURL.origin) ||
-          /skypack/.test(requestURL.origin) ||
-          /jspm/.test(requestURL.origin) ||
-          /jsdeliver/.test(requestURL.origin) ||
-          /cdn/.test(requestURL.origin) ||
-          /googleapis/.test(requestURL.origin)
-        ) {
-          // cdn: cache then network
-          event.respondWith(
-            caches.open(CACHE_NAME + '-cdn').then(function (cache) {
-              return cache.match(event.request).then(function (response) {
-                var fetchPromise = fetch(event.request).then(function (networkResponse) {
-                  cache.put(event.request, networkResponse.clone());
-                  return networkResponse;
-                });
-                return response || fetchPromise;
-              });
-            }),
-          );
-        } else {
-          // disabled: lead to cors errors
-          // // api: distant then cache
-          // event.respondWith(
-          //   fetch(event.request)
-          //   .then((response) => {
-          //     caches.open(CACHE_NAME + '-api').then(function (cache) {
-          //       cache.put(event.request, response.clone());
-          //       return response;
-          //     });
-          //   })
-          //   .catch(() => {
-          //     return caches.match(event.request);
-          //   })
-          // );
-          // api: no cache
-          event.respondWith(fetch(event.request));
-        }
-      }
-    }
-  });
-}
\ No newline at end of file
diff --git a/src/views/page-admin.pug b/src/views/page-admin.pug
index a715eeef73f5e364658ded89d3eabe27f8d16c81..6e715bf0638632ca7d8849482b2b6e630540d264 100644
--- a/src/views/page-admin.pug
+++ b/src/views/page-admin.pug
@@ -1,4 +1,4 @@
-.with-sidebar.whitespace-normal.bg-color-white.only-on-admin(hidden)
+.with-sidebar.jsMobileContentSidebarControl.whitespace-normal.bg-color-white.only-on-admin(hidden)
   .scrollbar-content.views-container.sidebar-is-closed
     for component of components
       if component.route
@@ -57,10 +57,10 @@
           )
             include partials/admin/page-admin-chat-create.pug
 
-  nav.jsRightMenu.text-disable-selection.sidebar.whitespace-normal(role='navigation')
+  nav.jsRightMenu.segment.sm-hidden.text-disable-selection.sidebar.whitespace-normal(role='navigation')
     .segment.whitespace-normal.text-color-heading.text-bold
       ul
-        li.segment.full.padding-small.text-normal.jsOffsiteToggle
+        li.segment.full.sm-hidden.padding-small.text-normal.jsOffsiteToggle
           span.icon.icon-arrow-left.icon-xsmall.margin-left-xxsmall.text-left
           span.segment.full.text-right(hidden)
             span.icon.icon-arrow-right.icon-xsmall.margin-right-xxsmall
diff --git a/src/views/page-circle.pug b/src/views/page-circle.pug
index 1fc3060d67ae1b7fc33740a2365287f886e81105..d06725c50010a7b94b2d8d54a5c340ad62bf500e 100644
--- a/src/views/page-circle.pug
+++ b/src/views/page-circle.pug
@@ -14,55 +14,37 @@
       no-render
     )
       include partials/circle/page-circle-profile.pug
-    //- Note:
-      Instead of using flat events/resources or polls components, you
-      may you to expend the way circle work to handle events & cie.
-      Like:
-        {
-          "type": "circles",
-          ...
-          "extensions": [
-            {
-              "type": "events",
-              "endpoints": {...},
-              ...
-            }
-          ]
-        }
-    -
-      let extensions = new Set();
-      if(component.extensions) {
-        extensions = new Set(component.extensions.map(c=>c.type));
-      }
-    if extensions.has('events')
-      div(
-        id=`${component.route}-events`
-        hidden
-        data-view=`${component.route}-events`
-        no-render
-      )
-        include partials/circle/page-circle-events.pug
-    if extensions.has('resources')
-      div(
-        id=`${component.route}-resources`
-        hidden
-        data-view=`${component.route}-resources`
-        no-render
-      )
-        include partials/circle/page-circle-resources.pug
-    if extensions.has('polls')
-      div(
-        id=`${component.route}-polls`
-        hidden
-        data-view=`${component.route}-polls`
-        no-render
-      )
-        include partials/circle/page-circle-polls.pug
+    if component.extensions
+      for extension of component.extensions
+        if extension.type == 'events'
+          div(
+            id=`${extension.route}-events`
+            hidden
+            data-view=`${extension.route}-events`
+            no-render
+          )
+            include partials/circle/page-circle-events.pug
+        if extension.type == 'resources'
+          div(
+            id=`${extension.route}-resources`
+            hidden
+            data-view=`${extension.route}-resources`
+            no-render
+          )
+            include partials/circle/page-circle-resources.pug
+        if extension.type == 'polls'
+          div(
+            id=`${extension.route}-polls`
+            hidden
+            data-view=`${extension.route}-polls`
+            no-render
+          )
+            include partials/circle/page-circle-polls.pug
 
-nav.jsRightMenu.text-disable-selection.sidebar.whitespace-normal(role='navigation')
+nav.jsRightMenu.segment.sm-hidden.text-disable-selection.sidebar.whitespace-normal(role='navigation')
   solid-router.segment.whitespace-normal.text-color-heading.text-bold(default-route=`${component.route}-chat`)
     ul
-      li.segment.full.padding-small.text-normal.jsOffsiteToggle
+      li.segment.full.sm-hidden.padding-small.text-normal.jsOffsiteToggle
         span.icon.icon-arrow-left.icon-xsmall.margin-left-xxsmall.text-left
         span.segment.full.text-right(hidden)
           span.icon.icon-arrow-right.icon-xsmall.margin-right-xxsmall
@@ -75,18 +57,20 @@ nav.jsRightMenu.text-disable-selection.sidebar.whitespace-normal(role='navigatio
         li.segment.full.padding-medium
           span.icon.ci-information.icon-xlarge.margin-right-medium
           a(data-trans='circle.menuRight.information')
-      if extensions.has('resources')
-        solid-route.segment.full(name=`${component.route}-resources` use-id)
-          li.segment.full.padding-medium
-            span.icon.ci-networking.icon-xlarge.margin-right-medium
-            a(data-trans='circle.menuRight.resources')
-      if extensions.has('events')
-        solid-route.segment.full(name=`${component.route}-events` use-id)
-          li.segment.full.padding-medium
-            span.icon.ci-networking.icon-xlarge.margin-right-medium
-            a(data-trans='circle.menuRight.events')
-      if extensions.has('polls')
-        solid-route.segment.full(name=`${component.route}-polls` use-id)
-          li.segment.full.padding-medium
-            span.icon.ci-networking.icon-xlarge.margin-right-medium
-            a(data-trans='circle.menuRight.polls')    
+      if component.extensions
+        for extension of component.extensions
+          if extension.type == 'resources'
+            solid-route.segment.full(name=`${extension.route}-resources` use-id)
+              li.segment.full.padding-medium
+                span.icon.ci-file.icon-xlarge.margin-right-medium
+                a(data-trans='circle.menuRight.resources')
+          if extension.type == 'events'
+            solid-route.segment.full(name=`${extension.route}-events` use-id)
+              li.segment.full.padding-medium
+                span.icon.ci-appointment.icon-xlarge.margin-right-medium
+                a(data-trans='circle.menuRight.events')
+          if extension.type == 'polls'
+            solid-route.segment.full(name=`${extension.route}-polls` use-id)
+              li.segment.full.padding-medium
+                span.icon.ci-list.icon-xlarge.margin-right-medium
+                a(data-trans='circle.menuRight.polls')    
diff --git a/src/views/page-communities.pug b/src/views/page-communities.pug
new file mode 100644
index 0000000000000000000000000000000000000000..dfa56879ccad5101caa767209b2c83c0befea1e0
--- /dev/null
+++ b/src/views/page-communities.pug
@@ -0,0 +1,34 @@
+div.communities-directory
+  solid-router(default-route=`${component.route}-directory` hidden)
+    solid-route(name=`${component.route}-directory`)
+    solid-route(name=`${component.route}-map`)
+    solid-route(name=`${component.route}-profile` use-id)
+    solid-route(name=`${component.route}-edit` use-id)
+  div(
+    id=`${component.route}-directory`
+    hidden
+    data-view=`${component.route}-directory`
+    no-render
+  )
+    include partials/communities/page-community-directory.pug
+  div(
+    id=`${component.route}-map`
+    hidden
+    data-view=`${component.route}-map`
+    no-render
+  )
+    include partials/communities/page-community-map.pug
+  div(
+    id=`${component.route}-profile`
+    hidden
+    data-view=`${component.route}-profile`
+    no-render
+  )
+    include partials/communities/page-community-profile.pug
+  div(
+    id=`${component.route}-edit`
+    hidden
+    data-view=`${component.route}-edit`
+    no-render
+  )
+    include partials/communities/page-community-edit.pug
diff --git a/src/views/page-polls.pug b/src/views/page-polls.pug
index 6f36cecaedff2370b7a62eb1b45ef5dfd6056c9c..1a4ef23d701006bdc04f459c7a46cb0add6e94c0 100644
--- a/src/views/page-polls.pug
+++ b/src/views/page-polls.pug
@@ -1,8 +1,8 @@
-.views-container
-  solid-poll(
-    data-src=`${component.endpoints.get}`
-    range-base-polls=`${component.endpoints.pollRangeBase}`
-    upload-dir=`${component.endpoints.uploads}`
-    id-prefix='default'
-    uniq=component.uniq
-  )
\ No newline at end of file
+solid-poll(
+  data-src=component.endpoints.get
+  data-dest=component.endpoints.post
+  range-tags=component.endpoints.pollRangeTags
+  range-circles=component.endpoints.pollRangeCircles
+  upload-dir=component.endpoints.uploads
+  uniq=component.uniq
+)
diff --git a/src/views/page-project.pug b/src/views/page-project.pug
index b79b4e9b4e2a3be52ec7796632aa4be1f1372bbc..2d1721885669b280d463d0097957116f90e170b3 100644
--- a/src/views/page-project.pug
+++ b/src/views/page-project.pug
@@ -21,11 +21,21 @@
       no-render
     )
       include partials/project/page-project-picture.pug
+    if component.extensions
+      for extension of component.extensions
+        if extension.type == 'invoices'
+          div(
+            id=`${extension.route}-invoices`
+            hidden
+            data-view=`${extension.route}-invoices`
+            no-render
+          )
+            include partials/project/page-project-invoices.pug
 
-nav.jsRightMenu.text-disable-selection.sidebar.whitespace-normal(role='navigation')
+nav.jsRightMenu.segment.sm-hidden.text-disable-selection.sidebar.whitespace-normal(role='navigation')
   solid-router.segment.whitespace-normal.text-color-heading.text-bold(default-route=`${component.route}-chat`)
     ul
-      li.segment.full.padding-small.text-normal.jsOffsiteToggle
+      li.segment.full.sm-hidden.padding-small.text-normal.jsOffsiteToggle
         span.icon.icon-arrow-left.icon-xsmall.margin-left-xxsmall.text-left
         span.segment.full.text-right(hidden)
           span.icon.icon-arrow-right.icon-xsmall.margin-right-xxsmall
@@ -39,3 +49,10 @@ nav.jsRightMenu.text-disable-selection.sidebar.whitespace-normal(role='navigatio
           span.icon.ci-information.icon-xlarge.margin-right-medium
           a(data-trans='project.menuRight.information')
       solid-route(name=`${component.route}-picture` use-id)
+      if component.extensions
+        for extension of component.extensions
+          if extension.type == 'invoices'
+            solid-route.segment.full(name=`${extension.route}-invoices` use-id)
+              li.segment.full.padding-medium
+                span.icon.ci-list.icon-xlarge.margin-right-medium
+                a(data-trans='circle.menuRight.invoices')    
diff --git a/src/views/partials/admin/page-admin-chat-create.pug b/src/views/partials/admin/page-admin-chat-create.pug
index 85ce2ffca6cc6e36a7344f59d6aebe2c57c5c562..a2a70bbe0fcaa7cca572a28cae785edb6779df8a 100644
--- a/src/views/partials/admin/page-admin-chat-create.pug
+++ b/src/views/partials/admin/page-admin-chat-create.pug
@@ -1,8 +1,10 @@
 div.segment.full.padding-large.sm-padding-top-small.sm-padding-right-xsmall.sm-padding-bottom-small.sm-padding-left-xsmall.padding-large.border-bottom.border-color-grey
-  div.segment.half.sm-full
+  div.segment.full.sm-three-quarter
     h2.margin-none.text-color-heading.text-uppercase.text-xlarge.text-letter-spacing-large(data-trans='communities.title')
   div.segment.half.sm-hidden.text-right
     solid-link(class="backlink", next=`admin-${getRoute('chat', true)}` data-trans='circle.create.backlink')
+  div.segment.lg-hidden.sm-quarter.text-right
+    div.jsMobileRightMenuButton.icon.icon-options-vertical.icon-heading
 
 div.segment.full.padding-large.sm-padding-xsmall.sm-padding-top-medium.whitespace-normal
   div#loader-users-title.loader.loader
@@ -11,12 +13,6 @@ div.segment.full.padding-large.sm-padding-xsmall.sm-padding-top-medium.whitespac
     div
     div
 
-  div#loader-users-create.loader.loader-top
-    div
-    div
-    div
-    div
-
   div.segment.margin-bottom-medium
     div.segment
       solid-display.text-color-heading.text-semibold.text-xlarge.text-letter-spacing-large(
@@ -27,6 +23,12 @@ div.segment.full.padding-large.sm-padding-xsmall.sm-padding-top-medium.whitespac
         loader-id='loader-users-title'
       )
 
+  div#loader-users-create.loader.loader-top
+    div
+    div
+    div
+    div
+
   solid-form.form#selected-community(
     bind-resources
     nested-field='members'
diff --git a/src/views/partials/admin/page-admin-chat.pug b/src/views/partials/admin/page-admin-chat.pug
index 0d7fdf04735a40127043afc45c36c774b17d16f3..8af70194460b60f10c84bc7fd8c15a80fa03a2ea 100644
--- a/src/views/partials/admin/page-admin-chat.pug
+++ b/src/views/partials/admin/page-admin-chat.pug
@@ -1,5 +1,8 @@
 div.segment.full.padding-large.sm-padding-top-small.sm-padding-right-xsmall.sm-padding-bottom-small.sm-padding-left-xsmall.border-bottom.border-color-grey.whitespace-normal
-  h2.margin-none.text-color-heading.text-uppercase.text-xlarge.text-letter-spacing-large(data-trans='communities.title')
+  div.segment.full.sm-three-quarter
+    h2.margin-none.text-color-heading.text-uppercase.text-xlarge.text-letter-spacing-large(data-trans='communities.title')
+  div.segment.lg-hidden.sm-quarter.text-right
+    div.jsMobileRightMenuButton.icon.icon-options-vertical.icon-heading
 
 div.segment.full.padding-large.sm-padding-xsmall.sm-padding-top-medium.whitespace-normal
 
diff --git a/src/views/partials/admin/page-admin-circles-create.pug b/src/views/partials/admin/page-admin-circles-create.pug
index effa98e3e3273b301b52ef3c970aee6c5ddcb498..c5e5f70a4cf302e5aa3a7631beb60302e3e8e510 100644
--- a/src/views/partials/admin/page-admin-circles-create.pug
+++ b/src/views/partials/admin/page-admin-circles-create.pug
@@ -1,8 +1,10 @@
 div.segment.full.padding-large.sm-padding-top-small.sm-padding-right-xsmall.sm-padding-bottom-small.sm-padding-left-xsmall.border-bottom.border-color-grey
-  div.segment.half.sm-full  
+  div.segment.full.sm-three-quarter
     h2.margin-none.text-color-heading.text-uppercase.text-xlarge.text-letter-spacing-large(data-trans='circle.create.title')
   div.segment.half.sm-hidden.text-right
     solid-link(class="backlink", next=`admin-${getRoute('circles', true)}` data-trans='circle.create.backlink')
+  div.segment.lg-hidden.sm-quarter.text-right
+    div.jsMobileRightMenuButton.icon.icon-options-vertical.icon-heading
 
 div.segment.full.padding-large.sm-padding-xsmall.sm-padding-top-medium.whitespace-normal
   div.loader.loader-top(id=`loader-admin-${getComponent('circles').uniq}`)
@@ -14,32 +16,34 @@ div.segment.full.padding-large.sm-padding-xsmall.sm-padding-top-medium.whitespac
   solid-form.form(
     data-src=`${getComponent('circles').endpoints.post}`
 
-    fields='status, community, name, subtitle, description, help'
+    fields='status, community.community, name, subtitle, description, help'
     required-status
-    required-community
+    required-community.community
     required-name
     required-subtitle
     loader-id=`loader-admin-${getComponent('circles').uniq}`
 
     class-status='segment margin-bottom-medium half sm-full padding-right-small sm-padding-none text-small text-semibold text-uppercase text-color-heading whitespace-normal'
-    class-community='segment margin-bottom-medium half sm-full padding-left-small sm-padding-none text-small text-semibold text-uppercase text-color-heading whitespace-normal'
+    class-community.community='segment margin-bottom-medium half sm-full padding-left-small sm-padding-none text-small text-semibold text-uppercase text-color-heading whitespace-normal'
     class-name='segment margin-bottom-medium half sm-full padding-right-small sm-padding-none text-small text-semibold text-uppercase text-color-heading'
     class-subtitle='segment margin-bottom-medium half sm-full padding-left-small sm-padding-none text-small text-semibold text-uppercase text-color-heading'
     class-description='segment margin-bottom-xxsmall full text-small text-semibold text-uppercase text-color-heading'
     class-help='segment full text-small margin-bottom-medium padding-left-small'
 
     label-status=''
-    label-community=''
+    label-community.community=''
     label-name=''
     label-subtitle=''
     label-description=''
     label-help=''
 
-    range-community='store://user.communities'
-    option-label-community="community.name"
+    range-community.community='store://user.communities'
+    option-label-community.community="community.name"
+    option-value-community.community="community"
 
-    widget-status='hubl-status'
-    widget-community='solid-form-dropdown-autocompletion-label'
+    widget-status='solid-form-dropdown-autocompletion-label'
+    enum-status=""
+    widget-community.community='solid-form-dropdown-autocompletion-label'
     widget-linebreak='solid-form-hidden'
 
     widget-description='solid-form-richtext-label'
@@ -50,5 +54,5 @@ div.segment.full.padding-large.sm-padding-xsmall.sm-padding-top-medium.whitespac
     submit-button=''
     submit-widget="button"
 
-    data-trans='label-status=circle.create.labelStatus;label-community=circle.create.labelCommunity;label-name=circle.create.labelName;label-description=circle.create.labelDescription;submit-button=circle.create.buttonSubmit;label-subtitle=circle.create.labelSubtitle;label-help=circle.create.descriptionHelp'
+    data-trans='enum-status=hublStatus;label-status=circle.create.labelStatus;label-community.community=circle.create.labelCommunity;label-name=circle.create.labelName;label-description=circle.create.labelDescription;submit-button=circle.create.buttonSubmit;label-subtitle=circle.create.labelSubtitle;label-help=circle.create.descriptionHelp'
   )
diff --git a/src/views/partials/admin/page-admin-circles.pug b/src/views/partials/admin/page-admin-circles.pug
index 9aae27b7922400a1116d21ee6c33f606d4632b67..e9c98432565385b7e433142a2629d65f3456a81d 100644
--- a/src/views/partials/admin/page-admin-circles.pug
+++ b/src/views/partials/admin/page-admin-circles.pug
@@ -1,5 +1,8 @@
 div.segment.full.padding-large.sm-padding-top-small.sm-padding-right-xsmall.sm-padding-bottom-small.sm-padding-left-xsmall.border-bottom.border-color-grey.whitespace-normal
-  h2.margin-none.text-color-heading.text-uppercase.text-xlarge.text-letter-spacing-large(data-trans='circle.list.title')
+  div.segment.full.sm-three-quarter
+    h2.margin-none.text-color-heading.text-uppercase.text-xlarge.text-letter-spacing-large(data-trans='circle.list.title')
+  div.segment.lg-hidden.sm-quarter.text-right
+    div.jsMobileRightMenuButton.icon.icon-options-vertical.icon-heading
 
 div.segment.full.padding-large.padding-top-medium.padding-bottom-xsmall.sm-padding-xsmall.sm-padding-top-xxsmall.whitespace-normal
 
diff --git a/src/views/partials/admin/page-admin-projects-create.pug b/src/views/partials/admin/page-admin-projects-create.pug
index 662b5e04afd069a60266fbc46c314278e91f9e4c..467b7ae309ac2dbed08a424fdfe0eb45bc093ebd 100644
--- a/src/views/partials/admin/page-admin-projects-create.pug
+++ b/src/views/partials/admin/page-admin-projects-create.pug
@@ -1,8 +1,10 @@
 div.segment.full.padding-large.sm-padding-top-small.sm-padding-right-xsmall.sm-padding-bottom-small.sm-padding-left-xsmall.border-bottom.border-color-grey
-  div.segment.half.sm-full
+  div.segment.full.sm-three-quarter
     h2.margin-none.text-color-heading.text-uppercase.text-xlarge.text-letter-spacing-large(data-trans='project.create.title')
   div.segment.half.sm-hidden.text-right
     solid-link(class="backlink", next=`admin-${getRoute('projects', true)}` data-trans='project.create.backlink')
+  div.segment.lg-hidden.sm-quarter.text-right
+    div.jsMobileRightMenuButton.icon.icon-options-vertical.icon-heading
 
 div.segment.full.padding-large.sm-padding-xsmall.sm-padding-top-medium.whitespace-normal
   div.loader.loader-top(id=`loader-admin-${getComponent('projects').uniq}`)
diff --git a/src/views/partials/admin/page-admin-projects.pug b/src/views/partials/admin/page-admin-projects.pug
index e7bdc26ea39c0f7ea42d9be51c549fe6056e94ab..1258c553dbdf0c91e346647c37552e0f5e1aadb9 100644
--- a/src/views/partials/admin/page-admin-projects.pug
+++ b/src/views/partials/admin/page-admin-projects.pug
@@ -1,5 +1,8 @@
 div.segment.full.padding-large.sm-padding-top-small.sm-padding-right-xsmall.sm-padding-bottom-small.sm-padding-left-xsmall.border-bottom.border-color-grey.whitespace-normal
-  h2.margin-none.text-color-heading.text-uppercase.text-xlarge.text-letter-spacing-large(data-trans='project.list.title')
+  div.segment.full.sm-three-quarter
+    h2.margin-none.text-color-heading.text-uppercase.text-xlarge.text-letter-spacing-large(data-trans='project.list.title')
+  div.segment.lg-hidden.sm-quarter.text-right
+    div.jsMobileRightMenuButton.icon.icon-options-vertical.icon-heading
 
 div.segment.full.padding-large.sm-padding-xsmall.sm-padding-top-medium.whitespace-normal
 
diff --git a/src/views/partials/circle/page-circle-chat.pug b/src/views/partials/circle/page-circle-chat.pug
index 16a1ebf855f2d6bab24cd626681353a51cbe4998..80ad844f3d5d57c907ba0ced8606976049c20082 100644
--- a/src/views/partials/circle/page-circle-chat.pug
+++ b/src/views/partials/circle/page-circle-chat.pug
@@ -1,13 +1,16 @@
 div.segment.full.padding-large.sm-padding-top-small.sm-padding-right-xsmall.sm-padding-bottom-small.sm-padding-left-xsmall.border-bottom.border-color-grey.whitespace-normal
-  solid-display.text-xxlarge.text-letter-spacing-large(
-    bind-resources
-    fields='name, dash, subtitle'
+  div.segment.full.sm-three-quarter.whitespace-normal
+    solid-display.text-xlarge.text-letter-spacing-large(
+      bind-resources
+      fields='name, dash, subtitle'
 
-    value-dash=' - '
+      value-dash=' - '
 
-    class-name='text-color-heading text-bold'
-    class-dash='text-color-heading text-bold'          
-  )
+      class-name='text-color-heading text-bold'
+      class-dash='text-color-heading text-bold'          
+    )
+  div.segment.lg-hidden.sm-quarter.text-right
+    div.jsMobileRightMenuButton.icon.icon-options-vertical.icon-heading
 
 .chat-view.segment.full.whitespace-normal
   solid-xmpp-chat(
diff --git a/src/views/partials/circle/page-circle-edit.pug b/src/views/partials/circle/page-circle-edit.pug
index be7d998877a702a1b83ea10a6c0618574d3b0cce..1e0bfcd44c778cc6e561eaeee2933c628bc3f2b7 100644
--- a/src/views/partials/circle/page-circle-edit.pug
+++ b/src/views/partials/circle/page-circle-edit.pug
@@ -1,7 +1,7 @@
 solid-ac-checker(permission='acl:Read', bind-resources)
   div.segment.full.padding-large.border-bottom.border-color-grey
-    div.segment.half.sm-full
-      solid-display.text-xxlarge.text-letter-spacing-large(
+    div.segment.half.sm-three-quarter.whitespace-normal
+      solid-display.text-xlarge.text-letter-spacing-large(
         bind-resources
         fields='name, dash, subtitle'
 
@@ -12,6 +12,8 @@ solid-ac-checker(permission='acl:Read', bind-resources)
       )
     div.segment.half.sm-hidden.text-right
       solid-link(class="backlink", bind-resources, next=`${component.route}-profile` data-trans='circle.edit.backlink')
+    div.segment.lg-hidden.sm-quarter.text-right
+        div.jsMobileRightMenuButton.icon.icon-options-vertical.icon-heading
 
 div.segment.full.padding-large.whitespace-normal
 
@@ -25,12 +27,12 @@ div.segment.full.padding-large.whitespace-normal
     solid-form.form(
       bind-resources
 
-      fields='name, subtitle, description, status, community, owner'
+      fields='name, subtitle, description, status, community.community, owner'
       required-status
       required-name
       required-owner
       required-subtitle
-      required-community
+      required-community.community
       range-owner=`${component.endpoints.owners}`
 
       label-name=''
@@ -38,25 +40,27 @@ div.segment.full.padding-large.whitespace-normal
       label-description=''
       label-subtitle=''
       label-status=''
-      label-community=''
+      label-community.community=''
       label-help=''
 
       class-name='segment margin-bottom-medium half sm-full padding-right-small sm-padding-none text-small text-semibold text-uppercase text-color-heading'
       class-subtitle='segment margin-bottom-medium half sm-full padding-left-small sm-padding-none text-small text-semibold text-uppercase text-color-heading'
       class-description='segment margin-bottom-medium full text-small text-semibold text-uppercase text-color-heading'
       class-status='segment margin-bottom-medium half sm-full padding-right-small sm-padding-none text-small text-semibold text-uppercase text-color-heading whitespace-normal'
-      class-community='segment margin-bottom-medium half sm-full padding-left-small sm-padding-none text-small text-semibold text-uppercase text-color-heading whitespace-normal'
+      class-community.community='segment margin-bottom-medium half sm-full padding-left-small sm-padding-none text-small text-semibold text-uppercase text-color-heading whitespace-normal'
       class-owner='hidden'
       class-help='segment full text-small margin-bottom-medium padding-left-small'
 
-      widget-status='hubl-status'
+      widget-status='solid-form-dropdown-autocompletion-label'
+      enum-status=""
       widget-description='solid-form-richtext-label'
       widget-help='solid-form-hidden-label'
-      widget-community='solid-form-dropdown-autocompletion-label'
+      widget-community.community='solid-form-dropdown-autocompletion-label'
       widget-owner='solid-form-dropdown-autocompletion-label'
 
-      range-community='store://user.communities'
-      option-label-community="community.name"
+      range-community.community='store://user.communities'
+      option-label-community.community="community.name"
+      option-value-community.community="community"
 
       partial=''
 
@@ -64,7 +68,7 @@ div.segment.full.padding-large.whitespace-normal
       submit-widget="button"
       next=`${component.route}-information`
 
-      data-trans='label-status=circle.edit.labelStatus;label-community=circle.edit.labelCommunity;label-name=circle.edit.labelName;label-owner=circle.edit.labelOwner;label-description=circle.edit.labelDescription;submit-button=circle.edit.buttonSubmit;label-subtitle=circle.edit.labelSubtitle;label-help=circle.edit.descriptionHelp'
+      data-trans='enum-status=hublStatus;label-status=circle.edit.labelStatus;label-community.community=circle.edit.labelCommunity;label-name=circle.edit.labelName;label-owner=circle.edit.labelOwner;label-description=circle.edit.labelDescription;submit-button=circle.edit.buttonSubmit;label-subtitle=circle.edit.labelSubtitle;label-help=circle.edit.descriptionHelp'
     )
 
   h3.segment.full.padding-bottom-small.border-bottom.border-color-grey.text-color-heading.text-bold.text-letter-spacing-large(data-trans='circle.edit.subTitle')
diff --git a/src/views/partials/circle/page-circle-events.pug b/src/views/partials/circle/page-circle-events.pug
index a17294dc28fac1df7abb96acbee79858bb8a6457..d9a88c3ff0bc3150d9cfe2c1c610714932552da3 100644
--- a/src/views/partials/circle/page-circle-events.pug
+++ b/src/views/partials/circle/page-circle-events.pug
@@ -1,10 +1,9 @@
 solid-event(
-  class='w700'
   bind-resources
   nested-field="events"
-  range-event-type=`${component.extensions.find(c => c.type=='events').endpoints.typeevents}`
-  range-event-circle=`${component.endpoints.get}/`
-  upload-dir=`${component.extensions.find(c => c.type=='events').endpoints.uploads}`
-  id-prefix=`${component.route}`
-  uniq=component.uniq
+  range-event-type=`${extension.endpoints.typeevents}`
+  range-event-circle=`${getComponent('circles').endpoints.get}/`
+  upload-dir=`${extension.endpoints.uploads}`
+  id-prefix='default'
+  uniq=extension.uniq
 )
diff --git a/src/views/partials/circle/page-circle-polls.pug b/src/views/partials/circle/page-circle-polls.pug
index 2a51451a9a077d81696a5d8332d26654ff862706..e73dedc5b15025ead67f4859216cd5ebfa1a538d 100644
--- a/src/views/partials/circle/page-circle-polls.pug
+++ b/src/views/partials/circle/page-circle-polls.pug
@@ -1,9 +1,9 @@
 solid-poll(
-  class='w700'
-  id-prefix='circles'
   bind-resources
   nested-field="polls"
-  range-base-polls=`${component.get('polls').endpoints.pollRangeBase}`
-  upload-dir=`${component.get('polls').endpoints.uploads}`
-  uniq=component.uniq
-)
\ No newline at end of file
+  data-dest=extension.endpoints.post
+  range-tags=extension.endpoints.pollRangeTags
+  range-circles=extension.endpoints.pollRangeCircles
+  upload-dir=extension.endpoints.uploads
+  uniq=extension.uniq
+)
diff --git a/src/views/partials/circle/page-circle-profile.pug b/src/views/partials/circle/page-circle-profile.pug
index 30a5b43c1b1ecccaed49b3275e130ec5bbf1e4a8..cf29c6897b350ae7a118cb22a22965a8134727e5 100644
--- a/src/views/partials/circle/page-circle-profile.pug
+++ b/src/views/partials/circle/page-circle-profile.pug
@@ -9,15 +9,18 @@ div(
 )
   solid-ac-checker.segment.block(permission='acl:Read', bind-resources)
     div.segment.full.padding-large.sm-padding-top-small.sm-padding-right-xsmall.sm-padding-bottom-small.sm-padding-left-xsmall.border-bottom.border-color-grey.whitespace-normal
-      solid-display.text-xxlarge.text-letter-spacing-large(
-        bind-resources
-        fields='name, dash, subtitle'
+      div.segment.full.sm-three-quarter.whitespace-normal
+        solid-display.text-xlarge.text-letter-spacing-large(
+          bind-resources
+          fields='name, dash, subtitle'
 
-        value-dash=' - '
+          value-dash=' - '
 
-        class-name='text-color-heading text-bold'
-        class-dash='text-color-heading text-bold'          
-      )
+          class-name='text-color-heading text-bold'
+          class-dash='text-color-heading text-bold'          
+        )
+      div.segment.lg-hidden.sm-quarter.text-right
+        div.jsMobileRightMenuButton.icon.icon-options-vertical.icon-heading
 
   div.segment.full.padding-large.sm-padding-xsmall.sm-padding-top-xlarge
     div.loader(id=`loader-${component.route}-profile-1`)
diff --git a/src/views/partials/circle/page-circle-resources.pug b/src/views/partials/circle/page-circle-resources.pug
index db44f8fce570b90446f1102f5f723b9ede6a3c87..cd46f6b76bf4cfdb37a58caf53d26a8792176362 100644
--- a/src/views/partials/circle/page-circle-resources.pug
+++ b/src/views/partials/circle/page-circle-resources.pug
@@ -1,10 +1,15 @@
 solid-resource(
-  class='w700'
   bind-resources
   nested-field="resources"
-  range-resource-type=`${component.extensions.find(c => c.type=='resources').endpoints.resourcestypes}`
-  range-resource-keyword=`${component.extensions.find(c => c.type=='resources').endpoints.resourceskeywords}`
-  range-resource-circle=`${component.endpoints.get}/`
-  upload-dir=`${component.extensions.find(c => c.type=='resources').endpoints.uploads}`
-  id-prefix='circles'
+  post-data-src=`${extension.endpoints.post}`
+  range-resource-type=`${extension.endpoints.types}`
+  post-data-type-src=`${extension.endpoints.postTypes}`
+  range-resource-keyword=`${extension.endpoints.keywords}`
+  post-data-keyword-src=`${extension.endpoints.postKeywords}`
+  range-resource-circle=`${getComponent('circles').endpoints.get}/`
+  associated-circle-label=""
+  data-trans=`associated-circle-label=${extension.parameters && extension.parameters.associatedName ? extension.parameters.associatedName : 'circle.extensions.associated'}`
+  upload-dir=`${extension.endpoints.uploads}`
+  id-prefix='default'
+  uniq=extension.uniq
 )
diff --git a/src/views/partials/communities/page-community-directory.pug b/src/views/partials/communities/page-community-directory.pug
new file mode 100644
index 0000000000000000000000000000000000000000..1076af9b4579a83029630ba69855739fbc9db7cb
--- /dev/null
+++ b/src/views/partials/communities/page-community-directory.pug
@@ -0,0 +1,46 @@
+.padding-small.sm-padding-none.sm-padding-top-medium.sm-padding-bottom-medium
+  h2.margin-top-xxsmall.margin-left-xsmall.margin-bottom-medium.sm-margin-none.sm-margin-right-xsmall.sm-margin-bottom-small.sm-margin-left-xsmall.text-xlarge.text-bold.text-color-heading.text-uppercase(data-trans='communities.list.title')
+
+  div.padding-top-xxsmall.margin-left-xsmall.margin-right-xsmall.sm-padding-none.sm-margin-none.sm-margin-right-xsmall.sm-margin-left-xsmall
+    div.segment.quarter.sm-full
+      solid-form-search.form.search-form.search-button(
+        id=`communities-filter`
+        fields='name'
+        placeholder-name=''
+        widget-name='solid-form-placeholder-text'
+        class-name="segment margin-bottom-medium sm-margin-bottom-none three-quarter sm-full padding-right-small sm-padding-none text-small input-bg-white children-shadow"
+        submit-button=""
+        submit-widget="button"
+        data-trans='placeholder-name=communities.list.searchBy;submit-button=communities.list.searchButton'
+      )
+    div.segment.three-quarter.sm-full.text-right
+      solid-link.segment.children-link-rounded.children-icon-map.children-link-reversed.color-secondary.bordered(next=`${component.route}-map`)
+        span
+
+  div.segment.full.padding-top-xsmall.sm-padding-xsmall.whitespace-normal
+    div.loader(id=`loader-${component.route}-directory`)
+      div
+      div
+      div
+      div
+    solid-display(
+      class='segment full children children-quarter sm-children-full children-margin-bottom-medium sm-children-margin-bottom-xsmall children-padding-right-xsmall children-padding-left-xsmall sm-children-padding-none sm-whitespace-normal masonry pagination text-disable-selection'
+      data-src=`${component.endpoints.get}`
+      loader-id=`loader-${component.route}-directory`
+      fields='segment1(segment2(logo), segment3(name, profile.shortDescription, counter))'
+      filtered-by=`communities-filter`
+      order-by='name'
+      paginate-by='20'
+
+      class-segment1='segment hover bg-color-white shadow border-rounded-xxsmall full text-top whitespace-normal'
+      class-segment2='segment block padding-xlarge text-center'
+      class-segment3='segment full padding-xlarge sm-padding-medium border-top border-color-grey text-center whitespace-normal'
+      class-name='segment block one-line-ellipsis text-xlarge text-bold text-color-heading margin-bottom-xsmall'
+      class-profile.shortDescription='segment two-lines-ellipsis margin-bottom-xlarge sm-margin-bottom-medium whitespace-normal circle-subtitle-custom'
+      class-counter='segment block whitespace-normal'
+
+      widget-logo='hubl-admin-community-logo'
+      action-counter="counter"
+      widget-counter='hubl-communities-counter-alternate'
+      next=`${component.route}-profile`
+    )
diff --git a/src/views/partials/communities/page-community-edit.pug b/src/views/partials/communities/page-community-edit.pug
new file mode 100644
index 0000000000000000000000000000000000000000..d89dc66cc40eba58f1e79f27be390fc4b41695e4
--- /dev/null
+++ b/src/views/partials/communities/page-community-edit.pug
@@ -0,0 +1,162 @@
+div.bg-color-white
+  solid-ac-checker(permission="acl:Read", bind-resources)
+    div.segment.full.padding-large.border-bottom.border-color-grey
+      div.segment.half.sm-full
+        solid-display.text-color-heading.text-bold.text-xxlarge.text-letter-spacing-large(
+          bind-resources
+          fields="name"         
+        )
+      div.segment.half.sm-hidden.text-right
+        solid-link(class="backlink", bind-resources, next=`${component.route}-profile` data-trans="communities.back")
+
+  div.segment.full.padding-large.whitespace-normal
+
+    solid-ac-checker(permission="acl:Write", bind-resources)
+      div.loader.loader-top(id=`loader-${component.route}-edit`)
+        div
+        div
+        div
+        div
+
+      solid-form.form(
+        bind-resources
+        loader-id=`loader-${component.route}-edit`
+
+        fields="profile.shortDescription, profile.description, segment(logo), profile.website, profile.email, profile.phone, profile.tweeter, profile.facebook, profile.linkedin, segment1(profile.instagram)"
+
+        label-profile.shortDescription=""
+        label-profile.description=""
+        label-logo=""
+        label-profile.website=""
+        label-profile.email=""
+        label-profile.phone=""
+        label-profile.tweeter=""
+        label-profile.facebook=""
+        label-profile.linkedin=""
+        label-profile.instagram=""
+
+        class-profile.shortDescription="segment margin-bottom-medium full text-small text-semibold text-uppercase text-color-heading"
+        class-profile.description="segment margin-bottom-medium full text-small text-semibold text-uppercase text-color-heading"
+
+        class-segment="segment full"
+        class-logo="edit-img edit-logo segment margin-bottom-medium full sm-padding-none text-small text-semibold text-uppercase text-color-heading"
+        class-profile.website="segment margin-bottom-medium third sm-full padding-right-small sm-padding-none"
+        class-profile.email="segment margin-bottom-medium third sm-full padding-right-small padding-left-small sm-padding-none"
+        class-profile.phone="segment margin-bottom-medium third sm-full padding-left-small sm-padding-none text-small text-semibold text-uppercase text-color-heading"
+
+        class-profile.tweeter="segment margin-bottom-medium third sm-full padding-right-small sm-padding-none text-small text-semibold text-uppercase text-color-heading"
+        class-profile.facebook="segment margin-bottom-medium third sm-full padding-right-small padding-left-small sm-padding-none text-small text-semibold text-uppercase text-color-heading"
+        class-profile.linkedin="segment margin-bottom-medium third sm-full padding-left-small sm-padding-none text-small text-semibold text-uppercase text-color-heading"
+        class-segment1="segment full"
+        class-profile.instagram="segment margin-bottom-medium third sm-full padding-right-small sm-padding-none text-small text-semibold text-uppercase text-color-heading"
+
+        widget-profile.description="solid-form-richtext-label"
+        widget-profile.email="hubl-communities-edit-email"
+        widget-profile.website="hubl-communities-edit-website"
+        upload-url-logo=component.endpoints.uploads
+        widget-logo="solid-form-image-label"
+
+        submit-button=""
+        submit-widget="button"
+
+        data-trans="label-logo=communities.edit.labelLogo;label-profile.shortDescription=communities.edit.labelShortDescription;label-profile.description=communities.edit.labelDescription;label-profile.phone=communities.edit.labelPhone;label-profile.tweeter=communities.edit.labelTwitter;label-profile.facebook=communities.edit.labelFacebook;label-profile.linkedin=communities.edit.labelLinkedin;label-profile.instagram=communities.edit.labelInstagram;submit-button=communities.edit.buttonSubmit"
+      )
+
+      h3.segment.full.padding-bottom-small.border-bottom.border-color-grey.text-color-heading.text-bold.text-letter-spacing-large(data-trans="communities.edit.subTitle")
+
+      solid-form.form(
+        bind-resources
+
+        fields="profile.picture1, profile.picture2, profile.picture3"
+
+        upload-url-profile.picture1=component.endpoints.uploads
+        upload-url-profile.picture2=component.endpoints.uploads
+        upload-url-profile.picture3=component.endpoints.uploads
+
+        widget-profile.picture1="solid-form-image-label"
+        widget-profile.picture2="solid-form-image-label"
+        widget-profile.picture3="solid-form-image-label"
+
+        label-profile.picture1=""
+        label-profile.picture2=""
+        label-profile.picture3=""
+
+        class-profile.picture1="edit-img edit-picture segment margin-bottom-medium third sm-full padding-right-small sm-padding-none text-small text-semibold text-uppercase text-color-heading text-top"
+        class-profile.picture2="edit-img edit-picture segment margin-bottom-medium third sm-full padding-right-small padding-left-small sm-padding-none text-small text-semibold text-uppercase text-color-heading text-top"
+        class-profile.picture3="edit-img edit-picture segment margin-bottom-medium third sm-full padding-left-small sm-padding-none text-small text-semibold text-uppercase text-color-heading text-top"
+
+        submit-button=""
+        submit-widget="button"
+
+        data-trans="label-profile.picture1=communities.edit.labelPicture1;label-profile.picture2=communities.edit.labelPicture2;label-profile.picture3=communities.edit.labelPicture3;submit-button=communities.edit.buttonSubmit"
+      )
+
+      h3.segment.full.padding-bottom-small.border-bottom.border-color-grey.text-color-heading.text-bold.text-letter-spacing-large(data-trans="communities.edit.subTitle1")
+
+      solid-widget(name=`hubl-communities-edit-delete-button`)
+        template
+          solid-delete(
+            class='segment text-xsmall children-link-button children-link-text-bold children-link-text-uppercase children-link-color-secondary bordered'
+            data-src="${src}"
+            data-label=''
+            data-trans=''
+          )
+      
+      .segment.table-wrapper.margin-top-medium
+        .table
+          div.table-header.bg-color-third.text-color-heading
+            div.segment.table-cell.third(data-trans='communities.edit.tableHeader1')
+            div.segment.table-cell.third(data-trans='communities.edit.tableHeader2')
+            div.segment.table-cell.third
+
+          solid-display(
+            class='table-body'
+            bind-resources
+            nested-field='addresses'
+            fields='segment1(address_line1), segment2(address_line2), remove'
+            loader-id=`loader-${component.route}-edit`
+
+            class-segment1='segment table-cell third'
+            class-segment2='segment table-cell third'
+            class-remove='segment table-cell third text-center'
+
+            class-address_line1='text-small text-semibold'
+            class-address_line2='text-small text-semibold'
+
+            multiple-addresses
+            multiple-addresses-fields="address_line1, address_line2"
+
+            action-remove='remove'
+            widget-remove='hubl-circle-edit-members-delete'
+          )
+
+          solid-form.form.table-body.edit-address(
+            bind-resources
+            nested-field="addresses"
+            fields="segment1(address_line1), segment2(address_line2), lat, lng, segment3(addButton)"
+
+            placeholder-address_line1=""
+            placeholder-address_line2=""
+
+            class-segment1='segment table-cell third'
+            class-segment2='segment table-cell third'
+            class-segment3='segment table-cell third text-center'
+
+            class-address_line1="segment full text-small"
+            class-address_line2="segment full text-small"
+
+            class-lat="hidden"
+            class-lng="hidden"
+
+            widget-community="solid-form-hidden"
+            widget-address_line1="solid-form-placeholder-text"
+            widget-address_line2="solid-form-placeholder-text"
+            widget-lat="solid-form-hidden"
+            widget-lng="solid-form-hidden"
+            widget-addButton=`hubl-communities-edit-add-button`
+
+            data-trans="placeholder-address_line1=communities.edit.labelAddressLine1;placeholder-address_line2=communities.edit.labelAddressLine2"     
+          )
+
+    solid-ac-checker(no-permission="acl:Write", bind-resources)
+      span(data-trans="communities.edit.noPermission")
diff --git a/src/views/partials/communities/page-community-map.pug b/src/views/partials/communities/page-community-map.pug
new file mode 100644
index 0000000000000000000000000000000000000000..daf0ac79c7f546f56ed4ea6ad8216fda9c866675
--- /dev/null
+++ b/src/views/partials/communities/page-community-map.pug
@@ -0,0 +1,40 @@
+.padding-small.sm-padding-none
+  h2.segment.sm-hidden.margin-top-xxsmall.margin-left-xsmall.margin-bottom-medium.sm-margin-none.sm-margin-right-xsmall.sm-margin-bottom-large.sm-margin-left-xsmall.text-xlarge.text-bold.text-color-heading.text-uppercase(data-trans='communities.list.title')
+
+  div.mobile-map-search-field.padding-top-xxsmall.margin-left-xsmall.margin-right-xsmall.sm-padding-none.sm-margin-none.sm-margin-right-xsmall.sm-margin-left-xsmall
+    div.segment.quarter.sm-full
+      solid-form-search.form.search-form.search-button(
+        id=`communities-filter-map`
+        fields='filter'
+        search-filter='community.name, address_line1, address_line2'
+        placeholder-filter=''
+        widget-filter='solid-form-placeholder-text'
+        class-filter="segment margin-bottom-medium sm-margin-bottom-none three-quarter sm-full padding-right-small sm-padding-none text-small input-bg-white children-shadow"
+
+        submit-button=""
+        submit-widget="button"
+        data-trans='placeholder-filter=communities.list.searchBy;submit-button=communities.list.searchButton'
+      )
+    div.segment.three-quarter.sm-full.text-right
+      solid-link.segment.children-link-rounded.children-icon-grid.children-link-reversed.color-secondary.bordered(next=`${component.route}-directory`)
+        span
+
+  solid-map.communities-map.margin-right-xsmall.margin-left-xsmall.sm-margin-none.shadow(
+      data-src=`${component.endpoints.addresses}`
+      loader-id=`loader-${component.route}-map`
+      fields="position(segment1(community.logo), segment2(community.name, community.profile.shortDescription, community.members))"
+
+      class-segment1="segment block margin-medium"
+      class-segment2="segment full padding-top-xlarge padding-right-large padding-bottom-xlarge padding-left-large sm-padding-medium border-top border-color-grey text-center whitespace-normal"
+      class-community.name="title segment block margin-bottom-xsmall text-color-heading text-xlarge text-bold"
+      class-community.profile.shortDescription="segment block description text-medium margin-bottom-xsmall whitespace-normal two-lines-ellipsis"
+      
+      action-community.name=`${component.route}-profile`
+      widget-community.name='hubl-communities-map-fix-url-name'
+      widget-community.logo='hubl-admin-community-logo'
+      widget-community.members="hubl-communities-profile-members-counter"
+      
+      clustering=""
+      filtered-by=`communities-filter-map`
+      style="display:block;height:698px;"
+    )
\ No newline at end of file
diff --git a/src/views/partials/communities/page-community-profile.pug b/src/views/partials/communities/page-community-profile.pug
new file mode 100644
index 0000000000000000000000000000000000000000..59dcc9bcdfb74199db58fd7b9f4d0bcf653d861e
--- /dev/null
+++ b/src/views/partials/communities/page-community-profile.pug
@@ -0,0 +1,80 @@
+div.community-profile.padding-medium.sm-padding-none
+  div.segment.full.sm-hidden.text-right
+    solid-link.backlink.text-xlarge.line-xlarge.margin-right-xxsmall(next=`${component.route}-directory` data-trans="communities.back")
+
+  div.segment.block.shadow.bg-color-white.margin-right-xxsmall.margin-top-large.margin-left-xxsmall.sm-margin-none
+
+    div.loader(id=`loader-${component.route}-profile`)
+      div
+      div
+      div
+      div
+
+    solid-display.segment.block.whitespace-normal(
+      fields="segment0(segment1(community-picture(logo)), segment2(segment3(segment4(name),segment5(profile.tweeter, profile.facebook, profile.linkedin, profile.instagram)), segment6(profile.shortDescription), segment7(profile.tweeter, profile.facebook, profile.linkedin, profile.instagram), segment8(addresses, members, profile.website, profile.email, profile.phone), segment9(profile.description), segment10(edit))), segment11(profile.picture1, profile.picture2, profile.picture3)"
+      loader-id=`loader-${component.route}-profile`
+
+      class-segment0="segment full padding-xlarge sm-padding-none whitespace-normal"
+      class-segment1="community-profile-logo segment quarter sm-full margin-top-medium padding-top-medium padding-right-medium sm-margin-top-xsmall sm-padding-medium text-center"
+
+      class-segment2="segment three-quarter sm-full sm-padding-top-medium sm-padding-right-xsmall sm-padding-bottom-medium sm-padding-left-xsmall text-top sm-text-center whitespace-normal"
+
+      class-segment3="segment full sm-two-third"
+      class-segment4="segment half sm-two-third padding-top-xsmall"
+      class-name="segment block text-color-heading text-xxlarge text-bold sm-text-center margin-bottom-xxsmall whitespace-normal"
+      class-segment5="segment half text-right sm-hidden"
+      
+      class-segment6="segment two-third sm-full padding-top-xsmall sm-text-center"
+      class-profile.shortDescription="segment block sm-text-center margin-bottom-large whitespace-normal"
+
+      class-segment7="segment lg-hidden sm-full"
+
+      class-segment8="segment two-third sm-full padding-bottom-large padding-bottom-xxsmall sm-text-left"
+      class-addresses="segment block margin-bottom-xsmall"
+      class-members="segment block margin-bottom-xsmall"
+      class-profile.website="segment block"
+      class-profile.email="segment block"
+      class-profile.phone="segment block"
+
+      class-segment9="segment full"
+      class-profile.description="segment full whitespace-normal"
+
+      class-segment10="segment full text-right"
+
+      class-segment11="segment full whitespace-normal flex"
+      class-profile.picture1="communities-profile-picture segment third sm-full"
+      class-profile.picture2="communities-profile-picture segment third sm-full"
+      class-profile.picture3="communities-profile-picture segment third sm-full"
+
+      widget-logo="hubl-communities-profile-logo"
+      widget-profile.description="solid-display-value-markdown"
+      widget-profile.tweeter="hubl-communities-profile-twitter"
+      widget-profile.facebook="hubl-communities-profile-facebook"
+      widget-profile.linkedin="hubl-communities-profile-linkedin"
+      widget-profile.instagram="hubl-communities-profile-instagram"
+      widget-addresses="hubl-communities-profile-address"
+      widget-members="hubl-communities-profile-members-counter"
+      widget-profile.website="hubl-communities-profile-website"
+      widget-profile.email="hubl-communities-profile-email"
+      widget-profile.phone="hubl-communities-profile-phone"
+      widget-profile.picture1="hubl-communities-profile-picture"
+      widget-profile.picture2="hubl-communities-profile-picture"
+      widget-profile.picture3="hubl-communities-profile-picture"
+      action-edit="edit"
+      widget-edit="hubl-communities-edit-button"
+      multiple-addresses
+      multiple-addresses-fields="address_line1, address_line2"
+
+      bind-resources
+    )
+
+    solid-map.communities-profile-map(
+      bind-resources
+      nested-field="addresses"
+      fields="position(community.name, address_line1, address_line2)"
+      class-community.name="segment block margin-bottom-xsmall text-color-heading text-xlarge text-bold text-center"
+      class-address_line1="segment block"
+      class-address_line2="segment block"
+      clustering=""
+      style="display:block;height:450px;"
+    )
diff --git a/src/views/partials/header.pug b/src/views/partials/header.pug
index 7a57c4a23c3c8e0245e0c8d3c64da666082a387e..6a4f0c9d78ecb6649c9cf80a4ebf7716437caeae 100644
--- a/src/views/partials/header.pug
+++ b/src/views/partials/header.pug
@@ -99,7 +99,7 @@ div
                     if componentSet.has("communities") && getComponent("chat").route
                       solid-link.text-hover(next=`admin-${getRoute("chat", true)}`)
                         li.segment.padding-top-small.sm-padding-top-medium
-                          a.icon.icon-people.icon-third.icon-small.icon-margin-right-xsmall(data-trans='admin.menuRight.community')
+                          a.icon.icon-grid.icon-third.icon-small.icon-margin-right-xsmall(data-trans='admin.menuRight.community')
                     if componentSet.has("circles") && getComponent("circles").route
                       solid-link.text-hover(next=`admin-${getRoute("circles", true)}`)
                         li.segment.padding-top-small.sm-padding-top-medium
diff --git a/src/views/partials/menu-left.pug b/src/views/partials/menu-left.pug
index 2d59e0a9c6b64122b1ed5fcdcd106920e3c04026..b16a1d8328a32fe260a4662ead5ed179c34114cc 100644
--- a/src/views/partials/menu-left.pug
+++ b/src/views/partials/menu-left.pug
@@ -5,14 +5,15 @@ solid-form-search.icon.children-icon-magnifier(
   search-name='circle.name, project.customer.name, project.name, contact.username, contact.name'
   order-asc-names='name'
 
-  label-name='Rechercher'
+  placeholder-name=''
+  data-trans='placeholder-name=menuLeft.search'
   widget-name="solid-form-placeholder-text"
 
   submit-button=""
   submit-widget="button"
 )
 div.divider
-solid-router#navbar-router(default-route='dashboard')
+solid-router#navbar-router(default-route=defaultRoute)
   for component of components
     if component.route
       if component.type == "about"
@@ -23,6 +24,14 @@ solid-router#navbar-router(default-route='dashboard')
             div.icon.icon-small.icon-home
           div.segment.text-uppercase.text-letter-spacing-large(data-trans=`${component.name?component.name:"menuLeft.dashboard"}`)
         div.divider
+      if component.type == "communities"
+        solid-route.menu.segment.full.padding-xsmall.text-semibold.text-color-white.heading-active.bg-color-heading.hover.active(name=component.route)
+          div.segment.margin-right-xxsmall
+            div.segment.icon.icon-small.icon-grid
+          div.segment.text-uppercase.text-letter-spacing-large(data-trans="menuLeft.communities")
+        solid-route(name=`${component.route}-profile`)
+        div.divider
+          
       if component.type == "circles"
         div.jsMenuTab
           div.menu-header.segment.full.padding-xsmall.text-semibold.text-color-white.bg-color-heading.transparent-background.hover.cursor-pointer.jsMenuHeader
diff --git a/src/views/partials/project/page-project-chat.pug b/src/views/partials/project/page-project-chat.pug
index 6130ed17d2e36cfda977f4f849d873cd274a735f..0af862891c553597a70d4a7a6a67be17315e4926 100644
--- a/src/views/partials/project/page-project-chat.pug
+++ b/src/views/partials/project/page-project-chat.pug
@@ -1,17 +1,20 @@
 div.segment.full.padding-large.sm-padding-top-small.sm-padding-right-xsmall.sm-padding-bottom-small.sm-padding-left-xsmall.border-bottom.border-color-grey.whitespace-normal
-  solid-display.text-xxlarge.text-letter-spacing-large(
-    bind-resources
-    fields='const-title1, number, customer.name, dash, name'
+  div.segment.full.sm-three-quarter.whitespace-normal
+    solid-display.text-xlarge.text-letter-spacing-large(
+      bind-resources
+      fields='const-title1, number, customer.name, dash, name'
 
-    class-const-title1='text-color-heading text-bold text-uppercase'
-    class-number='text-color-heading text-bold text-uppercase word-spacing-right'
-    class-customer.name='text-color-heading text-bold text-uppercase'
-    class-dash='text-color-heading text-bold text-xlarge'
-    class-name=''
+      class-const-title1='text-color-heading text-bold text-uppercase'
+      class-number='text-color-heading text-bold text-uppercase word-spacing-right'
+      class-customer.name='text-color-heading text-bold text-uppercase'
+      class-dash='text-color-heading text-bold text-xlarge'
+      class-name=''
 
-    value-const-title1='N°'
-    value-dash=' - '
-  )
+      value-const-title1='N°'
+      value-dash=' - '
+    )
+  div.segment.lg-hidden.sm-quarter.text-right
+    div.jsMobileRightMenuButton.icon.icon-options-vertical.icon-heading
 
 .chat-view.segment.full.whitespace-normal
   solid-xmpp-chat(
diff --git a/src/views/partials/project/page-project-edit.pug b/src/views/partials/project/page-project-edit.pug
index 325ff6b50a38ab09a40922f43ad2586a558de591..08ff1a704b3e457e3dbddd7b4e9ec9db2d499869 100644
--- a/src/views/partials/project/page-project-edit.pug
+++ b/src/views/partials/project/page-project-edit.pug
@@ -1,7 +1,7 @@
 solid-ac-checker(permission='acl:Read', bind-resources)
-  div.segment.full.padding-large.border-bottom.border-color-grey
-    div.segment.half.sm-full
-      solid-display.text-xxlarge.text-letter-spacing-large(
+  div.segment.full.padding-large.sm-padding-top-small.sm-padding-right-xsmall.sm-padding-bottom-small.sm-padding-left-xsmall.border-bottom.border-color-grey.whitespace-normal
+    div.segment.half.sm-three-quarter.whitespace-normal
+      solid-display.text-xlarge.text-letter-spacing-large(
         bind-resources
         fields='const-title1, number, customer.name, dash, name'
 
@@ -16,6 +16,8 @@ solid-ac-checker(permission='acl:Read', bind-resources)
       )
     div.segment.half.sm-hidden.text-right
       solid-link(class='backlink', bind-resources, next=`${component.route}-profile` data-trans='project.edit.backlink')
+    div.segment.lg-hidden.sm-quarter.text-right
+      div.jsMobileRightMenuButton.icon.icon-options-vertical.icon-heading
 
 div.segment.full.padding-large.whitespace-normal
 
diff --git a/src/views/partials/project/page-project-invoices.pug b/src/views/partials/project/page-project-invoices.pug
new file mode 100644
index 0000000000000000000000000000000000000000..63eb05e678a307869ecbf07823448374bd63481f
--- /dev/null
+++ b/src/views/partials/project/page-project-invoices.pug
@@ -0,0 +1,5 @@
+solid-invoicing(
+  bind-resources
+  upload-dir=`${extension.endpoints.uploads}`
+  uniq=extension.uniq
+)
\ No newline at end of file
diff --git a/src/views/partials/project/page-project-profile.pug b/src/views/partials/project/page-project-profile.pug
index 9620c6d0943e199b7c620bca5d4f1781903f8b72..ca86e47c35eba38fd0657385be70b2fab8841f04 100644
--- a/src/views/partials/project/page-project-profile.pug
+++ b/src/views/partials/project/page-project-profile.pug
@@ -9,19 +9,22 @@ div(
 )
   solid-ac-checker.segment.block(permission='acl:Read', bind-resources)
     div.segment.full.padding-large.sm-padding-top-small.sm-padding-right-xsmall.sm-padding-bottom-small.sm-padding-left-xsmall.border-bottom.border-color-grey.whitespace-normal
-      solid-display.text-xxlarge.text-letter-spacing-large(
-        bind-resources
-        fields='const-title1, number, customer.name, dash, name'
+      div.segment.full.sm-three-quarter.whitespace-normal
+        solid-display.text-xlarge.text-letter-spacing-large(
+          bind-resources
+          fields='const-title1, number, customer.name, dash, name'
 
-        class-const-title1='text-color-heading text-bold text-uppercase'
-        class-number='text-color-heading text-bold text-uppercase word-spacing-right'
-        class-customer.name='text-color-heading text-bold text-uppercase'
-        class-dash='text-color-heading text-bold text-xlarge'
-        class-name=''
+          class-const-title1='text-color-heading text-bold text-uppercase'
+          class-number='text-color-heading text-bold text-uppercase word-spacing-right'
+          class-customer.name='text-color-heading text-bold text-uppercase'
+          class-dash='text-color-heading text-bold text-xlarge'
+          class-name=''
 
-        value-const-title1='N°'
-        value-dash=' - '
-      )
+          value-const-title1='N°'
+          value-dash=' - '
+        )
+      div.segment.lg-hidden.sm-quarter.text-right
+        div.jsMobileRightMenuButton.icon.icon-options-vertical.icon-heading
 
   div.segment.full.padding-large.sm-padding-xsmall.sm-padding-top-xlarge
     div.loader(id=`loader-${component.route}-profile`)
diff --git a/src/views/partials/widgets.pug b/src/views/partials/widgets.pug
index 09e01a262395a1979f10ead50a6a7c60383dc0e7..ee38e845af56d5242696e3af436dd21d2178fe1c 100644
--- a/src/views/partials/widgets.pug
+++ b/src/views/partials/widgets.pug
@@ -20,6 +20,23 @@ include widgets/hubl-circle-join-button.pug
 include widgets/hubl-circle-owner.pug
 include widgets/hubl-circle-team-contact.pug
 include widgets/hubl-circle-user-admin.pug
+include widgets/hubl-communities-counter-alternate.pug
+include widgets/hubl-communities-edit-button.pug
+include widgets/hubl-communities-edit-add-button.pug
+include widgets/hubl-communities-edit-email.pug
+include widgets/hubl-communities-edit-website.pug
+include widgets/hubl-communities-logo.pug
+include widgets/hubl-communities-map-fix-url-name.pug
+include widgets/hubl-communities-profile-email.pug
+include widgets/hubl-communities-profile-facebook.pug
+include widgets/hubl-communities-profile-instagram.pug
+include widgets/hubl-communities-profile-linkedin.pug
+include widgets/hubl-communities-profile-logo.pug
+include widgets/hubl-communities-profile-members-counter.pug
+include widgets/hubl-communities-profile-phone.pug
+include widgets/hubl-communities-profile-picture.pug
+include widgets/hubl-communities-profile-twitter.pug
+include widgets/hubl-communities-profile-website.pug
 include widgets/hubl-counter.pug
 include widgets/hubl-email-field.pug
 include widgets/hubl-menu-empty.pug
diff --git a/src/views/partials/widgets/hubl-admin-community-logo.pug b/src/views/partials/widgets/hubl-admin-community-logo.pug
index 8db707e4769abd348d49fbbafc4a5ab3b3435785..183b486e433494baf017a8639fcedad166dc31fe 100644
--- a/src/views/partials/widgets/hubl-admin-community-logo.pug
+++ b/src/views/partials/widgets/hubl-admin-community-logo.pug
@@ -1,3 +1,3 @@
-if componentSet.has('admin') && componentSet.has('circles')
+if (componentSet.has('admin') && componentSet.has('circles')) || componentSet.has('communities')
   solid-widget(name='hubl-admin-community-logo')
     template ${value != "" ? `<div \style="background-image:url(${value});" />` : `<div></div>`}
\ No newline at end of file
diff --git a/src/views/partials/widgets/hubl-communities-counter-alternate.pug b/src/views/partials/widgets/hubl-communities-counter-alternate.pug
new file mode 100644
index 0000000000000000000000000000000000000000..076edea225b9a3ab25fef5e227332641e689ae6f
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-counter-alternate.pug
@@ -0,0 +1,12 @@
+if componentSet.has('communities')
+  solid-widget(name='hubl-communities-counter-alternate')
+    template
+      div
+        span.icon.icon-people.icon-third.icon-large.margin-right-xsmall
+        solid-display(
+          fields=''
+          data-src="${src || value}"
+          nested-field="members"
+          counter-template="\\\${counter}"
+        )
+        span(data-trans="communities.list.members")
diff --git a/src/views/partials/widgets/hubl-communities-edit-add-button.pug b/src/views/partials/widgets/hubl-communities-edit-add-button.pug
new file mode 100644
index 0000000000000000000000000000000000000000..85b785899d6b6026ad0df5e657e88908e2b241a2
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-edit-add-button.pug
@@ -0,0 +1,11 @@
+if componentSet.has('communities') && getRoute('communities')
+  solid-widget(name='hubl-communities-edit-add-button')
+    template
+      div(
+        class="segment text-xsmall children-link-button children-link-text-bold children-link-text-uppercase children-link-color-secondary bordered"
+      )
+        button.form-sub(
+          data-trans="communities.edit.buttonAdd"
+          type="button"
+          onclick="window.hubl.geocalc(this);"
+        )
\ No newline at end of file
diff --git a/src/views/partials/widgets/hubl-communities-edit-address-delete.pug b/src/views/partials/widgets/hubl-communities-edit-address-delete.pug
new file mode 100644
index 0000000000000000000000000000000000000000..fa1937ab5c42c790f0cae67d73b843b2dee2d604
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-edit-address-delete.pug
@@ -0,0 +1,10 @@
+if componentSet.has('communities')
+  solid-widget(name="hubl-communities-edit-address-delete")
+    template
+      solid-ac-checker(permission="acl:Delete", data-src="${src}")
+        solid-delete(
+          class='segment text-xsmall children-link-button children-link-text-bold children-link-text-uppercase children-link-color-secondary bordered'
+          data-src="${src}"
+          data-label=''
+          data-trans='data-label=communities.edit.buttonDelete'
+        )
\ No newline at end of file
diff --git a/src/views/partials/widgets/hubl-communities-edit-button.pug b/src/views/partials/widgets/hubl-communities-edit-button.pug
new file mode 100644
index 0000000000000000000000000000000000000000..5f8b9fa670c18e5a16889b58e5c42993eb4cdb52
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-edit-button.pug
@@ -0,0 +1,14 @@
+if componentSet.has('communities') && getRoute('communities')
+  solid-widget(name='hubl-communities-edit-button')
+    template
+      solid-ac-checker(
+        permission='acl:Write'
+        data-src="${src}"
+        nested-field="profile"
+      )
+        solid-link(
+          class="segment margin-top-xxlarge sm-full button text-xsmall text-bold text-uppercase text-center reversed color-secondary bordered icon icon-pencil"
+          data-trans="communities.profile.edit"
+          data-src="${src}"
+          next=`${getRoute('communities', true)}-edit`
+        )
\ No newline at end of file
diff --git a/src/views/partials/widgets/hubl-communities-edit-email.pug b/src/views/partials/widgets/hubl-communities-edit-email.pug
new file mode 100644
index 0000000000000000000000000000000000000000..8ef4268ff5ae7cd3ef84bbf597fc01b1b2c23f86
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-edit-email.pug
@@ -0,0 +1,5 @@
+if componentSet.has('communities') && getRoute('communities')
+  solid-widget(name='hubl-communities-edit-email')
+    template
+      label(class="text-small text-semibold text-uppercase text-color-heading" data-trans="communities.edit.labelEmail")
+      input(type="email" label="communities.edit.labelEmail" name="profile.email" value="\${value}" data-holder)
diff --git a/src/views/partials/widgets/hubl-communities-edit-website.pug b/src/views/partials/widgets/hubl-communities-edit-website.pug
new file mode 100644
index 0000000000000000000000000000000000000000..c38c68fef9ab85076acffe0654aa381da7072aab
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-edit-website.pug
@@ -0,0 +1,5 @@
+if componentSet.has('communities') && getRoute('communities')
+  solid-widget(name='hubl-communities-edit-website')
+    template
+      label(class="text-small text-semibold text-uppercase text-color-heading" data-trans='communities.edit.labelWebsite')
+      input(type="url" label="communities.edit.labelWebsite" name="profile.website" value="\${value}" data-holder)
diff --git a/src/views/partials/widgets/hubl-communities-logo.pug b/src/views/partials/widgets/hubl-communities-logo.pug
new file mode 100644
index 0000000000000000000000000000000000000000..c1735f688db9b026d3818fa0ef37afc17065c12a
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-logo.pug
@@ -0,0 +1,3 @@
+if componentSet.has('communities') && getRoute('communities')
+  solid-widget(name='hubl-communities-logo')
+    template ${value != "" ? `<div \style="background-image:url(${value});" />` : `<div></div>`}
diff --git a/src/views/partials/widgets/hubl-communities-map-fix-url-name.pug b/src/views/partials/widgets/hubl-communities-map-fix-url-name.pug
new file mode 100644
index 0000000000000000000000000000000000000000..f46b938c88d4c44ad0d2d332e1a364543e55061a
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-map-fix-url-name.pug
@@ -0,0 +1,15 @@
+if componentSet.has('communities')
+  solid-widget(name='hubl-communities-name')
+    template
+      solid-link(
+        data-src="${value}"
+        next=`${getRoute(`communities`, true)}-profile`
+      ) ${await value.name}
+
+  solid-widget(name='hubl-communities-map-fix-url-name')
+    template
+      solid-display(
+        data-src="${src}"
+        fields="community"
+        widget-community='hubl-communities-name'
+      )
\ No newline at end of file
diff --git a/src/views/partials/widgets/hubl-communities-profile-email.pug b/src/views/partials/widgets/hubl-communities-profile-email.pug
new file mode 100644
index 0000000000000000000000000000000000000000..f5b762a74ce3f28b34f416cfc79d74c8e655b150
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-profile-email.pug
@@ -0,0 +1,3 @@
+if componentSet.has('communities') && getRoute('communities')
+  solid-widget(name='hubl-communities-profile-email')
+    template ${value != "" ? `<a class="link margin-bottom-xsmall icon mdi-email-outline icon-third icon-large icon-margin-right-xsmall" style="text-decoration:none;" href="mailto:\${value}">${value}</a>` : ""}
diff --git a/src/views/partials/widgets/hubl-communities-profile-facebook.pug b/src/views/partials/widgets/hubl-communities-profile-facebook.pug
new file mode 100644
index 0000000000000000000000000000000000000000..917fbc976bfdb9625e782016f8185d5e3a231032
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-profile-facebook.pug
@@ -0,0 +1,3 @@
+if componentSet.has('communities') && getRoute('communities')
+  solid-widget(name='hubl-communities-profile-facebook')
+    template ${value != "" ? `<a class="segment children-link-rounded children-icon-social-facebook children-link-reversed color-secondary bordered margin-right-medium" href="${value}" target="_blank"><span></span></a>` : ""}
diff --git a/src/views/partials/widgets/hubl-communities-profile-instagram.pug b/src/views/partials/widgets/hubl-communities-profile-instagram.pug
new file mode 100644
index 0000000000000000000000000000000000000000..5bf7b152d7a01cbe9fa7cf14d7ded94f64268a60
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-profile-instagram.pug
@@ -0,0 +1,3 @@
+if componentSet.has('communities') && getRoute('communities')
+  solid-widget(name='hubl-communities-profile-instagram')
+    template ${value != "" ? `<a class="segment children-link-rounded children-icon-social-instagram children-link-reversed color-secondary bordered" href="${value}" target="_blank"><span></span></a>` : ""}
diff --git a/src/views/partials/widgets/hubl-communities-profile-linkedin.pug b/src/views/partials/widgets/hubl-communities-profile-linkedin.pug
new file mode 100644
index 0000000000000000000000000000000000000000..64a2b7b25b4f7179ec6e8f85a63b5bc0c17a8c14
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-profile-linkedin.pug
@@ -0,0 +1,3 @@
+if componentSet.has('communities') && getRoute('communities')
+  solid-widget(name='hubl-communities-profile-linkedin')
+    template ${value != "" ? `<a class="segment children-link-rounded children-icon-social-linkedin children-link-reversed color-secondary bordered margin-right-medium" href="${value}" target="_blank"><span></span></a>` : ""}
diff --git a/src/views/partials/widgets/hubl-communities-profile-logo.pug b/src/views/partials/widgets/hubl-communities-profile-logo.pug
new file mode 100644
index 0000000000000000000000000000000000000000..82313168320475281707b0f55fe82815fff13b1e
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-profile-logo.pug
@@ -0,0 +1,3 @@
+if componentSet.has('communities') && getRoute('communities')
+  solid-widget(name='hubl-communities-profile-logo')
+    template ${value != "" ? `<div \style="background-image:url(${value});" />` : ""}
\ No newline at end of file
diff --git a/src/views/partials/widgets/hubl-communities-profile-members-counter.pug b/src/views/partials/widgets/hubl-communities-profile-members-counter.pug
new file mode 100644
index 0000000000000000000000000000000000000000..7bf2e5ef7111b2d74659f4009c54f63f0be7221e
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-profile-members-counter.pug
@@ -0,0 +1,11 @@
+if componentSet.has('communities') && getRoute('communities')
+  solid-widget(name='hubl-communities-profile-members-counter')
+    template
+      span
+        span.icon.icon-people.icon-third.icon-large.margin-right-xsmall
+        solid-display.text-medium(
+          data-src="${src || value}"
+          fields=''
+          counter-template="\\\${counter}"
+        )
+        span.text-medium(data-trans="communities.profile.members")
\ No newline at end of file
diff --git a/src/views/partials/widgets/hubl-communities-profile-phone.pug b/src/views/partials/widgets/hubl-communities-profile-phone.pug
new file mode 100644
index 0000000000000000000000000000000000000000..67b5dedb920dc5506429723aedea493d27724826
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-profile-phone.pug
@@ -0,0 +1,3 @@
+if componentSet.has('communities') && getRoute('communities')
+  solid-widget(name='hubl-communities-profile-phone')
+    template ${value != "" ? `<a class="link margin-bottom-xsmall icon mdi-cellphone-iphone icon-third icon-large icon-margin-right-xsmall" style="text-decoration:none;" href="tel:\${value}">${value}</a>` : ""}
diff --git a/src/views/partials/widgets/hubl-communities-profile-picture.pug b/src/views/partials/widgets/hubl-communities-profile-picture.pug
new file mode 100644
index 0000000000000000000000000000000000000000..c470f505bef2b3c15574e459a3ca88c4238991e5
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-profile-picture.pug
@@ -0,0 +1,3 @@
+if componentSet.has('communities') && getRoute('communities')
+  solid-widget(name='hubl-communities-profile-picture')
+    template ${value != "" ? `<div><div \style="background-image:url(${value});"></div></div>` : `<div class="picture-empty"></div>`}
diff --git a/src/views/partials/widgets/hubl-communities-profile-twitter.pug b/src/views/partials/widgets/hubl-communities-profile-twitter.pug
new file mode 100644
index 0000000000000000000000000000000000000000..586174209ef3a00bece19a33a8bb493bb0f73ae3
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-profile-twitter.pug
@@ -0,0 +1,3 @@
+if componentSet.has('communities') && getRoute('communities')
+  solid-widget(name='hubl-communities-profile-twitter')
+    template ${value != "" ? `<a class="segment children-link-rounded children-icon-social-twitter children-link-reversed color-secondary bordered margin-right-medium" href="${value}" target="_blank"><span></span></a>` : ""}
diff --git a/src/views/partials/widgets/hubl-communities-profile-website.pug b/src/views/partials/widgets/hubl-communities-profile-website.pug
new file mode 100644
index 0000000000000000000000000000000000000000..4b481d15f0b84136976a50848232bd6d5e795497
--- /dev/null
+++ b/src/views/partials/widgets/hubl-communities-profile-website.pug
@@ -0,0 +1,3 @@
+if componentSet.has('communities') && getRoute('communities')
+  solid-widget(name='hubl-communities-profile-website')
+    template ${value != "" ? `<a class="link margin-bottom-xsmall icon mdi-link-variant icon-third icon-large icon-margin-right-xsmall" style="text-decoration:none;" href="tel:\${value}" target="_blank">${value}</a>` : ""}