diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 0000000..3f3df4f
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,14 @@
+module.exports = {
+  root: true,
+  env: {
+    node: true
+  },
+  extends: ["plugin:vue/essential", "@vue/prettier"],
+  rules: {
+    "no-console": process.env.NODE_ENV === "production" ? "error" : "off",
+    "no-debugger": process.env.NODE_ENV === "production" ? "error" : "off"
+  },
+  parserOptions: {
+    parser: "babel-eslint"
+  }
+};
diff --git a/.gitignore b/.gitignore
index e83553d..f188498 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,9 @@
 .DS_Store
-node_modules/
-dist/
+node_modules
+/dist
 
-*.log
+/tests/e2e/videos/
+/tests/e2e/screenshots/
 
 # local env files
 .env.local
@@ -20,3 +21,4 @@ yarn-error.log*
 *.ntvs*
 *.njsproj
 *.sln
+*.sw*
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 0000000..30ab299
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1 @@
+link-workspace-packages=true
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index 194f500..0000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# Contributing
-
-Contributions are **welcome** and will be fully **credited**.
-
-We accept contributions via Pull Requests on [Github](https://github.com/znck/keynote).
-
-
-## Pull Requests
-
-- **Keep the same style** - eslint will automatically be ran before committing
-
-- **Tip** to pass lint tests easier use the `npm run lint:fix` command
-
-- **Add tests!** - Your patch won't be accepted if it doesn't have tests.
-
-- **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date.
-
-- **Consider our release cycle** - We try to follow [SemVer v2.0.0](http://semver.org/). Randomly breaking public APIs is not an option.
-
-- **Create feature branches** - Don't ask us to pull from your master branch.
-
-- **One pull request per feature** - If you want to do more than one thing, send multiple pull requests.
-
-- **Send coherent history** - Make sure your commits message means something
-
-
-## Running Tests
-
-Launch visual tests and watch the components at the same time
-
-``` bash
-$ npm run dev
-```
-
-
-**Happy coding**!
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 003c095..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2017 Rahul Kadyan
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/README.md b/README.md
index 56c208f..a46645a 100644
--- a/README.md
+++ b/README.md
@@ -1,41 +1,8 @@
-<div class="text-xs-center" align="center" style="margin: 20px">
-  <img src="https://github.com/znck/keynote/raw/master/docs/.vuepress/public/hero.png" height="300">
-</div>
-
-# Keynote
-
-> Present with Vue
-
-[https://keynote.sh](https://keynote.sh)
-
-## Development
-
-### To run the sample presentation
-
-```bash
-# Build the command-line tool.
-cd packages/@keynote/cli 
-yarn
-
-# Use the command-line tool to serve the sample presentation.
-cd bin
-./keynote.js dev ../../../../example/Simple.vue
-```
-
-Visit http://localhost:8080 in a browser to view the sample presentation.
-
-### To build the site (https://keynote.sh/)
-
-```bash
-# Install VuePress.
-yarn global add vuepress
-
-# Build the site.
-yarn docs:dev
-```
-
-Visit http://localhost:8080 in a browser to view the Keynote web site.
-
-## License
-
-MIT
+# VueSlides
+
+- [ ] Markdown to VueSlides (for simple presentations)
+- [ ] Preview in VS Code
+- [ ] Animations
+- [ ] Editor
+- [ ] Live mode
+- [ ] Preview/ mode
\ No newline at end of file
diff --git a/babel.config.js b/babel.config.js
new file mode 100644
index 0000000..df15158
--- /dev/null
+++ b/babel.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+  presets: ['@vue/app']
+}
diff --git a/cypress.json b/cypress.json
new file mode 100644
index 0000000..470c720
--- /dev/null
+++ b/cypress.json
@@ -0,0 +1,3 @@
+{
+  "pluginsFile": "tests/e2e/plugins/index.js"
+}
diff --git a/deploy.sh b/deploy.sh
deleted file mode 100755
index 398e149..0000000
--- a/deploy.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/env sh
-
-# abort on errors
-set -e
-
-# build
-npm run docs:build
-
-# navigate into the build output directory
-cd docs/.vuepress/dist
-
-git init
-git add -A
-git commit -m 'deploy'
-
-git push -f git@github.com:znck/keynote.git master:gh-pages
-cd -
diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js
deleted file mode 100644
index 6149983..0000000
--- a/docs/.vuepress/config.js
+++ /dev/null
@@ -1,50 +0,0 @@
-module.exports = {
-  title: 'Keynote',
-  description: 'Present with Vue',
-  head: [
-    ['link', { rel: 'icon', href: `/logo.png` }],
-    ['link', { rel: 'manifest', href: '/manifest.json' }],
-    ['meta', { name: 'theme-color', content: '#0188DE' }],
-    ['meta', { name: 'apple-mobile-web-app-capable', content: 'yes' }],
-    [
-      'meta',
-      { name: 'apple-mobile-web-app-status-bar-style', content: 'black' }
-    ],
-    ['link', { rel: 'apple-touch-icon', href: `/icons/icon-152x152.png` }],
-    [
-      'meta',
-      {
-        name: 'msapplication-TileImage',
-        content: '/icons/icon-144x144.png'
-      }
-    ],
-    ['meta', { name: 'msapplication-TileColor', content: '#000000' }]
-  ],
-  serviceWorker: true,
-  themeConfig: {
-    repo: 'znck/keynote',
-    editLinks: true,
-    docsDir: 'docs',
-    locales: {
-      '/': {
-        label: 'English',
-        selectText: 'Languages',
-        editLinkText: 'Edit this page on GitHub',
-        nav: [
-          {
-            text: 'Guide',
-            link: '/guide/'
-          },
-          {
-            text: 'API',
-            link: '/api/'
-          },
-          {
-            text: 'Demo',
-            link: 'https://keynote.surge.sh/'
-          }
-        ]
-      }
-    }
-  }
-}
diff --git a/docs/.vuepress/public/.nojekyll b/docs/.vuepress/public/.nojekyll
deleted file mode 100644
index 8b13789..0000000
--- a/docs/.vuepress/public/.nojekyll
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/docs/.vuepress/public/CNAME b/docs/.vuepress/public/CNAME
deleted file mode 100644
index dd21338..0000000
--- a/docs/.vuepress/public/CNAME
+++ /dev/null
@@ -1 +0,0 @@
-keynote.sh
\ No newline at end of file
diff --git a/docs/.vuepress/public/favicon.ico b/docs/.vuepress/public/favicon.ico
deleted file mode 100644
index 5d7c5a5..0000000
Binary files a/docs/.vuepress/public/favicon.ico and /dev/null differ
diff --git a/docs/.vuepress/public/hero.png b/docs/.vuepress/public/hero.png
deleted file mode 100644
index f5d5f55..0000000
Binary files a/docs/.vuepress/public/hero.png and /dev/null differ
diff --git a/docs/.vuepress/public/icons/icon-128x128.png b/docs/.vuepress/public/icons/icon-128x128.png
deleted file mode 100755
index f0112d8..0000000
Binary files a/docs/.vuepress/public/icons/icon-128x128.png and /dev/null differ
diff --git a/docs/.vuepress/public/icons/icon-144x144.png b/docs/.vuepress/public/icons/icon-144x144.png
deleted file mode 100755
index 02dd871..0000000
Binary files a/docs/.vuepress/public/icons/icon-144x144.png and /dev/null differ
diff --git a/docs/.vuepress/public/icons/icon-152x152.png b/docs/.vuepress/public/icons/icon-152x152.png
deleted file mode 100755
index 2ab6b6d..0000000
Binary files a/docs/.vuepress/public/icons/icon-152x152.png and /dev/null differ
diff --git a/docs/.vuepress/public/icons/icon-192x192.png b/docs/.vuepress/public/icons/icon-192x192.png
deleted file mode 100755
index d4ae0f9..0000000
Binary files a/docs/.vuepress/public/icons/icon-192x192.png and /dev/null differ
diff --git a/docs/.vuepress/public/icons/icon-384x384.png b/docs/.vuepress/public/icons/icon-384x384.png
deleted file mode 100755
index 024ae8e..0000000
Binary files a/docs/.vuepress/public/icons/icon-384x384.png and /dev/null differ
diff --git a/docs/.vuepress/public/icons/icon-512x512.png b/docs/.vuepress/public/icons/icon-512x512.png
deleted file mode 100755
index fd81d56..0000000
Binary files a/docs/.vuepress/public/icons/icon-512x512.png and /dev/null differ
diff --git a/docs/.vuepress/public/icons/icon-72x72.png b/docs/.vuepress/public/icons/icon-72x72.png
deleted file mode 100755
index dd54698..0000000
Binary files a/docs/.vuepress/public/icons/icon-72x72.png and /dev/null differ
diff --git a/docs/.vuepress/public/icons/icon-96x96.png b/docs/.vuepress/public/icons/icon-96x96.png
deleted file mode 100755
index 973b482..0000000
Binary files a/docs/.vuepress/public/icons/icon-96x96.png and /dev/null differ
diff --git a/docs/.vuepress/public/manifest.json b/docs/.vuepress/public/manifest.json
deleted file mode 100755
index e0bcf25..0000000
--- a/docs/.vuepress/public/manifest.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
-  "name": "Keynote",
-  "short_name": "Keynote",
-  "theme_color": "#0188de",
-  "background_color": "#ffffff",
-  "display": "standalone",
-  "Scope": "/",
-  "start_url": "/index.html",
-  "icons": [
-    {
-      "src": "images/icons/icon-72x72.png",
-      "sizes": "72x72",
-      "type": "image/png"
-    },
-    {
-      "src": "images/icons/icon-96x96.png",
-      "sizes": "96x96",
-      "type": "image/png"
-    },
-    {
-      "src": "images/icons/icon-128x128.png",
-      "sizes": "128x128",
-      "type": "image/png"
-    },
-    {
-      "src": "images/icons/icon-144x144.png",
-      "sizes": "144x144",
-      "type": "image/png"
-    },
-    {
-      "src": "images/icons/icon-152x152.png",
-      "sizes": "152x152",
-      "type": "image/png"
-    },
-    {
-      "src": "images/icons/icon-192x192.png",
-      "sizes": "192x192",
-      "type": "image/png"
-    },
-    {
-      "src": "images/icons/icon-384x384.png",
-      "sizes": "384x384",
-      "type": "image/png"
-    },
-    {
-      "src": "images/icons/icon-512x512.png",
-      "sizes": "512x512",
-      "type": "image/png"
-    }
-  ],
-  "splash_pages": null
-}
\ No newline at end of file
diff --git a/docs/README.md b/docs/README.md
deleted file mode 100644
index b49e844..0000000
--- a/docs/README.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-home: true
-heroImage: /hero.png
-actionText: Get Started →
-actionLink: /guide/
-features:
-- title: Simplicity First
-  details: Absolutely no setup; directly runs in browser without any configuration.
-- title: Vue-Powered
-  details: Enjoy the complete dev experience of Vue; write with component, use webpack or CLI plugins.
-- title: Shareable
-  details: Keynote generates a static HTML page, and runs as an SPA once a page is loaded.
-footer: MIT Licensed | Copyright © 2018 Rahul Kadyan
----
-
-### No setup, no installation
-
-```html
-<script src="//unpkg.com/vue"></script>
-<script src="//unpkg.com/vue-keynote"></script>
-...
-<div id="app">
-  <Keynote>
-    ...
-  </Keynote>
-</div>
-<script>
-  new Vue({ el: '#app' })
-</script>
-```
diff --git a/docs/api/README.md b/docs/api/README.md
deleted file mode 100644
index d5343a7..0000000
--- a/docs/api/README.md
+++ /dev/null
@@ -1,174 +0,0 @@
-# Components
-
-[[toc]]
-
-## Keynote
-
-`<Keynote>` is the root component of every presentation. You would add slides as children to this component.
-
-```vue
-<div id="app">
-  <Keynote>
-    <!-- Your slides here! -->
-  </Keynote>
-</div>
-```
-
-## Slide
-
-`<Slide>` create an empty page in the presentation. There are different variants of slide you could use.
-
-```vue
-...
-  <Slide>
-    <h1>Hello World!</h1>
-    <p>This is a basic slide.</p>
-  </Slide>
-...
-```
-
-### AuthorSlide
-
-A slide to introduce the author. Commonly included in talks & conferences.
-
-```vue
-...
-  <Author-Slide name="Author Name" photo="http://example.com/images/me.png">
-    Developer, Foo Company
-  </Author-Slide>
-  <!-- or -->
-  <Author-Slide name="Authore Name"
-               photo="http://example.com/images/me.png"
-               bio="Developer, Foo Company"></Author-Slide>
-...
-```
-
-![An Author Slide](../assets/images/author-slide.png)
-
-**Props:**
-
-| Name  | Type   | Default | Required | Description                                                                                                                 |
-| ----- | ------ | ------- | -------- | --------------------------------------------------------------------------------------------------------------------------- |
-| name  | String | -       | Yes      | Title of the slide. Creates an `<h2>` element.                                                                              |
-| photo | String | -       | Yes      | Title of the slide. Creates an `<img>` element.                                                                             |
-| bio   | String | `null`  | No       | Brief description about the author. Creates a `<p>` element. <br> **Contents provided to default `<slot>` overrides this.** |
-
-### PhotoSlide
-
-A slide with fullscreen photo.
-
-```vue
-...
-  <Photo-Slide photo="http://example.com/images/random.png"></Photo-Slide>
-...
-```
-
-![A Photo Slide](../assets/images/photo-slide.png)
-
-**Props:**
-
-| Name  | Type   | Default | Required | Description                                     |
-| ----- | ------ | ------- | -------- | ----------------------------------------------- |
-| photo | String | -       | Yes      | Title of the slide. Creates an `<img>` element. |
-
-### PhotoTitleSlide
-
-A slide with a photo and title.
-
-```vue
-...
-  <Photo-Title-Slide title="An unsplash photo"
-                     photo="http://example.com/images/random.png">
-    There is a random unsplash photo at top.
-  </Photo-Title-Slide>
-...
-```
-
-![A Photo Title Slide](../assets/images/photo-title-slide.png)
-
-```vue
-...
-  <Photo-Title-Slide title="A vertical photo"
-                     photo="http://example.com/images/random.png"
-                     vertical>
-    There is a random unsplash photo on right.
-  </Photo-Title-Slide>
-...
-```
-
-![A Photo Title Slide](../assets/images/photo-title-slide-right.png)
-
-```vue
-...
-  <Photo-Title-Slide title="A vertical photo"
-                     photo="http://example.com/images/random.png"
-                     vertical left>
-    There is a random unsplash photo on left.
-  </Photo-Title-Slide>
-...
-```
-
-![A Photo Title Slide](../assets/images/photo-title-slide-left.png)
-
-**Props:**
-
-| Name     | Type    | Default | Required | Description                                                                                                                   |
-| -------- | ------- | ------- | -------- | ----------------------------------------------------------------------------------------------------------------------------- |
-| title    | String  | -       | Yes      | Title of the slide. Creates an `<h1>` element.                                                                                |
-| photo    | String  | -       | Yes      | Title of the slide. Creates an `<img>` element.                                                                               |
-| subtitle | String  | `null`  | No       | Subtitle/description for the title. Creates an `<h4>` element. <br> **Contents provided to default `<slot>` overrides this.** |
-| vertical | Boolean | `false` | No       | Use vertical photo layout.                                                                                                    |
-| left     | Boolean | `false` | No       | When used with `vertical`, photo is on left. In other cases, no side-effects.                                                 |
-
-### TitleSlide
-
-A slide with large title text centered vertically.
-
-```vue
-...
-  <Title-Slide title="A Bold Title">
-    A little description about it.
-  </Title-Slide>
-  <!-- or -->
-  <Title-Slide title="A Bold Title"
-               subtitle="A little description about it."></Title-Slide>
-...
-```
-
-![A Title Slide](../assets/images/title-slide.png)
-
-**Props:**
-
-| Name     | Type   | Default | Required | Description                                                                                                                   |
-| -------- | ------ | ------- | -------- | ----------------------------------------------------------------------------------------------------------------------------- |
-| title    | String | -       | Yes      | Title of the slide. Creates an `<h1>` element.                                                                                |
-| subtitle | String | `null`  | No       | Subtitle/description for the title. Creates an `<h4>` element. <br> **Contents provided to default `<slot>` overrides this.** |
-
-## Slide Transitions
-
-Every `<*-Slide>` component supports animations (actually transitions).
-
-**Props:**
-
-In addition to `<*-Slide>` component props documented above, following are also supported:
-
-| Name                | Type   | Default | Required | Description                 |
-| ------------------- | ------ | ------- | -------- | --------------------------- |
-| transition          | String | -       | No       | Slide transition animation. |
-| transition-duration | String | -       | No       | Duration of the animation.  |
-
-**Available Transitions:**
-
-* clothesline
-* dissolve
-* drop
-* fall
-* move-in
-* pivot
-* push
-* reveal
-* revolving-door
-* scale
-* swap
-* switch
-* twirl
diff --git a/docs/assets/images/author-slide.png b/docs/assets/images/author-slide.png
deleted file mode 100644
index 5de3845..0000000
Binary files a/docs/assets/images/author-slide.png and /dev/null differ
diff --git a/docs/assets/images/photo-slide.png b/docs/assets/images/photo-slide.png
deleted file mode 100644
index 507797b..0000000
Binary files a/docs/assets/images/photo-slide.png and /dev/null differ
diff --git a/docs/assets/images/photo-title-slide-left.png b/docs/assets/images/photo-title-slide-left.png
deleted file mode 100644
index 49a56b6..0000000
Binary files a/docs/assets/images/photo-title-slide-left.png and /dev/null differ
diff --git a/docs/assets/images/photo-title-slide-right.png b/docs/assets/images/photo-title-slide-right.png
deleted file mode 100644
index ffb6c10..0000000
Binary files a/docs/assets/images/photo-title-slide-right.png and /dev/null differ
diff --git a/docs/assets/images/photo-title-slide.png b/docs/assets/images/photo-title-slide.png
deleted file mode 100644
index 7c068e9..0000000
Binary files a/docs/assets/images/photo-title-slide.png and /dev/null differ
diff --git a/docs/assets/images/title-slide.png b/docs/assets/images/title-slide.png
deleted file mode 100644
index 34b907c..0000000
Binary files a/docs/assets/images/title-slide.png and /dev/null differ
diff --git a/docs/guide/README.md b/docs/guide/README.md
deleted file mode 100644
index 7e84e02..0000000
--- a/docs/guide/README.md
+++ /dev/null
@@ -1,57 +0,0 @@
-# Getting Started
-
-**Keynote** (`vue-keynote`) is a presentation library which enables you to declaratively create your slides using Vue.
-
-## Using Keynote in browser (no build tool)
-
-* Use script tag to include Keynote and Vue.
-
-  ```html
-  <html>
-    <head>
-      <title>My First Keynote</title>
-      <script src="//unpkg.com/vue"></script>
-      <script src="//unpkg.com/vue-keynote"></script>
-    </head>
-
-    <body>
-      <div id="app">
-        <Keynote>
-          <!-- Declare slides here! -->
-        </Keynote>
-      </div>
-
-      <script>
-        new Vue({ el: '#app' }) // Create a vue app!
-      </script>
-    </body>
-  </html>
-  ```
-
-## With build system
-
-* Create a single file component with following content (say Presentation.vue).
-
-  ```html
-  <template>
-    <Keynote>
-      <!-- Declare slides here! -->
-    </Keynote>
-  </template>
-  ```
-
-* Install dependencies
-
-  ```bash
-  npm add --global vue-keynote
-  ```
-
-* Start development server
-
-  ```bash
-  keynote dev Presentation.vue
-  ```
-
-::: tip
-Read [API docs](/api.md) to know available components.
-:::
diff --git a/example/Presentation.vue b/example/Presentation.vue
deleted file mode 100644
index 1f79064..0000000
--- a/example/Presentation.vue
+++ /dev/null
@@ -1,108 +0,0 @@
-<template>
-  <Keynote>
-    <AuthorSlide 
-      transition="push"
-      photo="https://cdn2.iconfinder.com/data/icons/ios-7-icons/50/user_male2-512.png" name="Author Name">
-      Developer, Foo Company
-    </AuthorSlide>
-
-    <TitleSlide 
-      transition="dissolve"
-      name="slide 2" title="A Bold Title">
-      A little description about it.
-    </TitleSlide>
-
-    <PhotoTitleSlide transition="push" name="slide 3" photo="https://unsplash.it/1200/800?random=1" title="An unsplash photo">
-      There is a random unsplash photo at top.
-    </PhotoTitleSlide>
-
-    <Slide transition="dissolve" name="slide 4">
-      <Fit>
-        <Heading>And some code.</Heading>
-        <CodePreview language="javascript">{{`
-          export default {
-            name: 'Example'
-          }
-        `}}</CodePreview>
-      </Fit>
-    </Slide>
-    
-    <PhotoTitleSlide name="slide 5" photo="https://unsplash.it/1200/800?random=2" title="A vertical photo" vertical>
-      There is a random unsplash photo on right.
-    </PhotoTitleSlide>
-
-    <PhotoTitleSlide name="slide 6" photo="https://unsplash.it/1200/800?random=3" title="A vertical photo" vertical left>
-      There is a random unsplash photo on left.
-    </PhotoTitleSlide>
-
-    <PhotoSlide photo="https://unsplash.it/1200/800?random=4"/>
-
-    <Slide>
-      <Fit position="left">
-        <Title>On click build ups</Title>
-        <Build name="first">
-          <transition name="slide">
-            <Type value="Hello World! The quick brown fox jumped over the lazy dog."/>
-          </transition>
-        </Build>
-
-        <Build name="second" after="first" :delay="1000">
-          <Heading>
-            <transition name="slide">
-              <Type value="This should auto start in 500 miliseconds."/>
-            </transition>
-          </Heading>
-        </Build>
-
-        <Build name="third" with="second">
-          <Heading>
-            <transition name="slide">
-              <Type value="This should auto start with above."/>
-            </transition>
-          </Heading>
-        </Build>
-      </Fit>
-    </Slide>
-
-    <TitleSlide title="Next Clothesline" transition="clothesline" />
-    <TitleSlide title="Next Dissolve" transition="dissolve" />
-    <TitleSlide title="Next Drop" transition="drop" />
-    <TitleSlide title="Next Fall" transition="fall" />
-    <TitleSlide title="Next MoveIn" transition="move-in" />
-    <TitleSlide title="Next Pivot" transition="pivot" />
-    <TitleSlide title="Next Push" transition="push" />
-    <TitleSlide title="Next Reveal" transition="reveal" />
-    <TitleSlide title="Next RevolvingDoor" transition="revolving-door" />
-    <TitleSlide title="Next Scale" transition="scale" />
-    <TitleSlide title="Next Swap" transition="swap" />
-    <TitleSlide title="Next Switch" transition="switch" />
-    <TitleSlide title="Next Twirl" transition="twirl" />
-    <Slide>
-      <Title>Fin.</Title>
-      <a href="https://keynote.sh">Go to keynote.sh</a>
-    </Slide>
-    
-  </Keynote>
-</template>
-
-<style>
-.fade-enter-active,
-.fade-leave-active {
-  transition: opacity 0.5s;
-}
-.fade-enter,
-.fade-leave-to {
-  opacity: 0;
-}
-
-.slide-enter-active {
-  transition: all 2s ease;
-}
-.slide-leave-active {
-  transition: all 2s cubic-bezier(1, 0.5, 0.8, 1);
-}
-.slide-enter,
-.slide-leave-to {
-  transform: translateX(100%);
-}
-</style>
diff --git a/examples/Presentation.vue b/examples/Presentation.vue
new file mode 100644
index 0000000..171e861
--- /dev/null
+++ b/examples/Presentation.vue
@@ -0,0 +1,22 @@
+<template>
+  <VueSlides :plugin-progress="{ $presentation: { title: 'Test Presentation', author: { name: 'Rahul Kadyan'} } }">
+    <TitleSubtitleSlide title="Lorem Ipsum Dolor" subtitle="Lorem Ipsum Dolor" />
+    <TitleSlide title="Lorem Ipsum Dolor" />
+    <TitleBodySlide title="Lorem Ipsum Dolor">
+      <p>Lorem Ipsum Dolor</p>
+    </TitleBodySlide>
+    <TitleBulletsSlide title="Lorem Ipsum Dolor" :bullets="['Lorem', 'Ipsum', 'Dolor']" />
+    <TitleBulletsPhotoSlide title="Lorem Ipsum Dolor" :bullets="['Lorem', 'Ipsum', 'Dolor']" photo="./assets/one.jpg" />
+    <PhotoHorizontalSlide title="Lorem Ipsum Dolor" subtitle="Lorem Ipsum Dolor" photo="./assets/hor.jpg" />
+    <PhotoVerticalSlide title="Lorem Ipsum Dolor" subtitle="Lorem Ipsum Dolor" photo="./assets/hor.jpg" />
+    <PhotoVerticalSlide title="Lorem Ipsum Dolor" subtitle="Lorem Ipsum Dolor" photo="./assets/hor.jpg" alternate />
+    <PhotoCaptionSlide photo="./assets/hor.jpg" caption="Lorem Ipsum Dolor" />
+    <PhotoSlide photo="./assets/hor.jpg" />
+    <Photo2UpSlide left="./assets/hor.jpg" right="./assets/one.jpg" />
+    <Photo3UpSlide first="./assets/one.jpg" second="./assets/two.jpg" third="./assets/three.jpg" />
+    <QuoteSlide quote="Lorem Ipsum Dolor"  author="Jane Doe" />
+    <Slide>
+      <p>Lorem Ipsum Dolor</p>
+    </Slide>
+  </VueSlides>
+</template>
\ No newline at end of file
diff --git a/examples/assets/hor.jpg b/examples/assets/hor.jpg
new file mode 100644
index 0000000..47a825f
Binary files /dev/null and b/examples/assets/hor.jpg differ
diff --git a/examples/assets/one.jpg b/examples/assets/one.jpg
new file mode 100644
index 0000000..4d60e88
Binary files /dev/null and b/examples/assets/one.jpg differ
diff --git a/examples/assets/three.jpg b/examples/assets/three.jpg
new file mode 100644
index 0000000..c92ee5e
Binary files /dev/null and b/examples/assets/three.jpg differ
diff --git a/examples/assets/two.jpg b/examples/assets/two.jpg
new file mode 100644
index 0000000..74510de
Binary files /dev/null and b/examples/assets/two.jpg differ
diff --git a/examples/package.json b/examples/package.json
new file mode 100644
index 0000000..6775791
--- /dev/null
+++ b/examples/package.json
@@ -0,0 +1,18 @@
+{
+  "name": "examples",
+  "version": "1.0.0",
+  "description": "",
+  "main": "index.js",
+  "scripts": {
+    "vue-slides": "vue-slides"
+  },
+  "keywords": [],
+  "author": "",
+  "license": "ISC",
+  "dependencies": {
+    "@vue-slides/cli": "link:../packages/cli",
+    "@vue-slides/theme-black": "link:../packages/theme-black",
+    "@vue-slides/theme-vue": "link:../packages/theme-black",
+    "@vue-slides/theme-white": "link:../packages/theme-white"
+  }
+}
diff --git a/examples/presentation.slides b/examples/presentation.slides
new file mode 100644
index 0000000..dfbac89
--- /dev/null
+++ b/examples/presentation.slides
@@ -0,0 +1,139 @@
+---
+title: Lorem Ipsum
+---
+<!-- slide: Some random stuff -->
+---
+style: 'color: red'
+---
+
+# Lorem Ipsum Dolor
+
+## Lorem Ipsum Dolor
+
+<!-- slide: Some random stuff -->
+---
+layout: default
+style:
+  color: red
+  font-size: 4kem
+---
+
+# Lorem Ipsum Dolor
+
+<!-- slide -->
+
+# Lorem Ipsum Dolor
+
+Lorem Ipsum Dolor
+
+<!-- slide -->
+
+# Lorem Ipsum Dolor
+
+- Lorem
+- Ipsum
+- Dolor
+
+<!-- slide -->
+
+# Lorem Ipsum Dolor
+
+- Lorem
+- Ipsum
+- Dolor
+
+![Some Image](./assets/one.jpg)
+
+<!-- slide -->
+
+![Some Image](./assets/one.jpg)
+
+# Lorem Ipsum Dolor
+
+## Lorem Ipsum Dolor
+
+<!-- slide -->
+
+# Lorem Ipsum Dolor
+
+## Lorem Ipsum Dolor
+
+![Some Image](./assets/one.jpg)
+
+<!-- slide -->
+
+# Lorem Ipsum Dolor
+
+## Lorem Ipsum Dolor
+
+![Some Image](./assets/one.jpg)
+
+<!-- slide -->
+
+![Some Image](./assets/one.jpg)
+
+<!-- slide -->
+
+![](./assets/one.jpg)
+
+<!-- slide -->
+
+![Some Image](./assets/one.jpg)
+![Some Image](./assets/one.jpg)
+
+<!-- slide -->
+
+![Some Image](./assets/one.jpg)
+![Some Image](./assets/one.jpg)
+![Some Image](./assets/one.jpg)
+
+<!-- slide -->
+
+![Some Image](./assets/one.jpg)
+![Some Image](./assets/one.jpg)
+![Some Image](./assets/one.jpg)
+![Some Image](./assets/one.jpg)
+
+<!-- slide -->
+
+> Quote Here
+
+- Author Here
+
+<!-- slide -->
+
+# Do
+
+Anything
+
+- You
+- Want!
+
+<!-- slide -->
+
+# A Title Here
+
+<template #body>
+
+Anything
+
+- You
+- Want!
+
+</template>
+
+<!-- slide -->
+---
+s: foo
+---
+
+<div>
+  <foo-bar>
+  <foo-bar>
+</div>
+
+
+<!-- slide: Example Slide -->
+---
+layout: default
+---
diff --git a/examples/presentation.vue-slides b/examples/presentation.vue-slides
new file mode 100644
index 0000000..565249e
--- /dev/null
+++ b/examples/presentation.vue-slides
@@ -0,0 +1,143 @@
+---
+title: Lorem Ipsum
+---
+<!-- slide: Some random stuff -->
+---
+style: 'color: red'
+---
+
+# Lorem Ipsum Dolor
+
+## Lorem Ipsum Dolor
+
+<!-- slide: Some random stuff -->
+---
+style:
+  color: red
+  font-size: 4kem
+---
+
+# Lorem Ipsum Dolor
+
+<!-- slide -->
+
+# Lorem Ipsum Dolor
+
+Lorem Ipsum Dolor
+
+<!-- slide -->
+
+# Lorem Ipsum Dolor
+
+- Lorem
+- Ipsum
+- Dolor
+
+<!-- slide -->
+
+# Lorem Ipsum Dolor
+
+- Lorem
+- Ipsum
+- Dolor
+
+![Some Image](./assets/one.jpg)
+
+<!-- slide -->
+
+![Some Image](./assets/one.jpg)
+
+# Lorem Ipsum Dolor
+
+## Lorem Ipsum Dolor
+
+<!-- slide -->
+
+# Lorem Ipsum Dolor
+
+## Lorem Ipsum Dolor
+
+![Some Image](./assets/one.jpg)
+
+<!-- slide -->
+
+# Lorem Ipsum Dolor
+
+## Lorem Ipsum Dolor
+
+![Some Image](./assets/one.jpg)
+
+<!-- slide -->
+
+![Some Image](./assets/one.jpg)
+
+<!-- slide -->
+
+![](./assets/one.jpg)
+
+<!-- slide -->
+
+![Some Image](./assets/one.jpg)
+![Some Image](./assets/one.jpg)
+
+<!-- slide -->
+
+![Some Image](./assets/one.jpg)
+![Some Image](./assets/one.jpg)
+![Some Image](./assets/one.jpg)
+
+<!-- slide -->
+
+![Some Image](./assets/one.jpg)
+![Some Image](./assets/one.jpg)
+![Some Image](./assets/one.jpg)
+![Some Image](./assets/one.jpg)
+
+<!-- slide -->
+
+> Quote Here
+
+- Author Here
+
+<!-- slide -->
+
+# Do
+
+Anything
+
+- You
+- Want!
+
+<!-- slide -->
+
+# A Title Here
+
+<template #body>
+
+Anything
+
+- You
+- Want!
+
+</template>
+
+<!-- slide -->
+---
+s: foo
+---
+
+<div>
+  <foo-bar>
+  <foo-bar>
+</div>
+
+
+<!-- slide: Example Slide -->
+---
+layout: default
+---
+
+<!-- slide: title -->
+---
+layout: default
+---
diff --git a/examples/shrinkwrap.yaml b/examples/shrinkwrap.yaml
new file mode 100644
index 0000000..fdc337f
--- /dev/null
+++ b/examples/shrinkwrap.yaml
@@ -0,0 +1,11 @@
+dependencies:
+  '@vue-slides/cli': 'link:../packages/cli'
+  '@vue-slides/theme-black': 'link:../packages/theme-black'
+  '@vue-slides/theme-vue': 'link:../packages/theme-black'
+  '@vue-slides/theme-white': 'link:../packages/theme-white'
+shrinkwrapVersion: 5
+specifiers:
+  '@vue-slides/cli': 'link:../packages/cli'
+  '@vue-slides/theme-black': 'link:../packages/theme-black'
+  '@vue-slides/theme-vue': 'link:../packages/theme-black'
+  '@vue-slides/theme-white': 'link:../packages/theme-white'
diff --git a/jest.config.js b/jest.config.js
new file mode 100644
index 0000000..4d726c1
--- /dev/null
+++ b/jest.config.js
@@ -0,0 +1,17 @@
+module.exports = {
+  moduleFileExtensions: ["js", "jsx", "json", "vue"],
+  transform: {
+    "^.+\\.vue$": "vue-jest",
+    ".+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$":
+      "jest-transform-stub",
+    "^.+\\.jsx?$": "babel-jest"
+  },
+  moduleNameMapper: {
+    "^@/(.*)$": "<rootDir>/src/$1"
+  },
+  snapshotSerializers: ["jest-serializer-vue"],
+  testMatch: [
+    "**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)"
+  ],
+  testURL: "http://localhost/"
+};
diff --git a/lerna.json b/lerna.json
index 2b9eed0..d21e3f6 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,8 +1,7 @@
 {
   "lerna": "2.11.0",
   "packages": [
-    "packages/*",
-    "packages/@keynote/*"
+    "packages/*"
   ],
-  "version": "1.1.4"
+  "version": "2.0.0-alpha.1"
 }
diff --git a/package.json b/package.json
index 0c021a6..d71d3a8 100644
--- a/package.json
+++ b/package.json
@@ -1,17 +1,30 @@
 {
+  "name": "vue-slides",
+  "version": "1.1.3",
   "private": true,
   "scripts": {
-    "docs:dev": "vuepress dev docs",
-    "docs:build": "vuepress build docs",
-    "release": "lerna exec pnpm run build && lerna publish"
+    "lint": "vue-cli-service lint",
+    "test:e2e": "vue-cli-service test:e2e",
+    "test:unit": "vue-cli-service test:unit"
   },
   "prettier": {
     "semi": false,
     "singleQuote": true
   },
   "devDependencies": {
-    "lerna": "^2.11.0",
-    "rollup-plugin-commonjs": "^9.2.0",
-    "rollup-plugin-node-resolve": "^3.4.0"
+    "@cypress/webpack-preprocessor": "^3.0.0",
+    "@vue/eslint-config-prettier": "^4.0.0",
+    "@vue/test-utils": "^1.0.0-beta.20",
+    "babel-core": "7.0.0-bridge.0",
+    "babel-eslint": "^10.0.1",
+    "babel-jest": "^23.6.0",
+    "eslint": "^5.8.0",
+    "eslint-plugin-vue": "^5.0.0-0",
+    "minimist": "^1.2.0"
+  },
+  "dependencies": {
+    "@types/node": "^11.12.0",
+    "standard-version": "^4.4.0",
+    "typescript": "^3.3.4000"
   }
 }
diff --git a/packages/@keynote/cli/bin/.eslintrc b/packages/@keynote/cli/bin/.eslintrc
deleted file mode 100644
index c7e858d..0000000
--- a/packages/@keynote/cli/bin/.eslintrc
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "env": {
-    "node": true
-  }
-}
\ No newline at end of file
diff --git a/packages/@keynote/cli/bin/app/index.html b/packages/@keynote/cli/bin/app/index.html
deleted file mode 100644
index fdefce8..0000000
--- a/packages/@keynote/cli/bin/app/index.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-  <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width,initial-scale=1">
-    <title>Keynote</title>
-  </head>
-  <body>
-    <div id="app"></div>
-  </body>
-</html>
diff --git a/packages/@keynote/cli/bin/dev.js b/packages/@keynote/cli/bin/dev.js
deleted file mode 100644
index 5217cc6..0000000
--- a/packages/@keynote/cli/bin/dev.js
+++ /dev/null
@@ -1,59 +0,0 @@
-const path = require('path')
-const fs = require('fs')
-const chalk = require('chalk')
-const {
-  createWebpackConfig
-} = require('./utils')
-const createConfig = require('./webpack/createConfig')
-
-module.exports = async ({
-  file,
-  host,
-  port,
-  theme = '@keynote/theme-default'
-}) => {
-  const portfinder = require('portfinder')
-  const serve = require('webpack-serve')
-  const webpack = require('webpack')
-  const config = createWebpackConfig({ file, theme, outDir: path.resolve(__dirname, '../non-existent') })
-
-  const compiler = webpack(config.toConfig())
-  const defaultHost = process.platform === 'win32' ? 'localhost' : '0.0.0.0'
-
-  portfinder.basePort = port || 8080
-  host = host || defaultHost
-  port = await portfinder.getPortPromise()
-
-  const displayHost = host === defaultHost && process.platform !== 'win32' ?
-    'localhost' :
-    host
-
-  let isFirst = true
-  compiler.hooks.done.tap('keynote', () => {
-    if (isFirst) {
-      isFirst = false
-      console.log(
-        `\n  Keynote dev server listening at ${
-            chalk.cyan(`http://${displayHost}:${port}`)
-          }\n`
-      )
-    } else {
-      const time = new Date().toTimeString().match(/^[\d:]+/)[0]
-      console.log(`  ${chalk.gray(`[${time}]`)} ${chalk.green('✔')} successfully compiled.`)
-    }
-  })
-
-  await serve({
-    compiler,
-    host,
-    dev: {
-      logLevel: 'warn'
-    },
-    hot: {
-      port: port + 1,
-      logLevel: 'error'
-    },
-    logLevel: 'error',
-    port
-  })
-}
\ No newline at end of file
diff --git a/packages/@keynote/cli/bin/keynote.js b/packages/@keynote/cli/bin/keynote.js
deleted file mode 100755
index 87f211d..0000000
--- a/packages/@keynote/cli/bin/keynote.js
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/env node
-
-const chalk = require('chalk')
-const program = require('commander')
-
-program
-  .version(require('../package.json').version)
-  .usage('<command> [options]')
-
-program
-  .command('dev [targetFile]')
-  .description('start development server')
-  .option('-p, --theme <theme>', 'use specified theme (default: @keynote/theme-default)')
-  .option('-p, --port <port>', 'use specified port (default: 8080)')
-  .option('-h, --host <host>', 'use specified host (default: 0.0.0.0)')
-  .action((file = 'keynote.vue', { host, port, theme }) => {
-    wrapCommand(require('./dev'))({ file, host, port, theme })
-  })
-
-program
-  .command('build [targetFile]')
-  .description('build as static site')
-  .option('-d, --dest <outDir>', 'specify build output dir (default: .keynote/dist)')
-  .option('-p, --theme <theme>', 'use specified theme (default: @keynote/theme-default)')
-  .option('--debug', 'build in development mode for debugging')
-  .action((file = 'keynote.vue', { debug, dest, theme }) => {
-    const outDir = dest ? require('path').resolve(dest) : null
-    wrapCommand(require('./build'))({ file, debug, outDir, theme })
-  })
-
-// output help information on unknown commands
-program
-  .arguments('<command>')
-  .action((cmd) => {
-    program.outputHelp()
-    console.log(`  ` + chalk.red(`Unknown command ${chalk.yellow(cmd)}.`))
-    console.log()
-  })
-
-// add some useful info on help
-program.on('--help', () => {
-  console.log()
-  console.log(`  Run ${chalk.cyan(`keynote <command> --help`)} for detailed usage of given command.`)
-  console.log()
-})
-
-program.commands.forEach(c => c.on('--help', () => console.log()))
-
-// enhance common error messages
-const enhanceErrorMessages = (methodName, log) => {
-  program.Command.prototype[methodName] = function (...args) {
-    if (methodName === 'unknownOption' && this._allowUnknownOption) {
-      return
-    }
-    this.outputHelp()
-    console.log(`  ` + chalk.red(log(...args)))
-    console.log()
-    process.exit(1)
-  }
-}
-
-program.parse(process.argv)
-
-if (!process.argv.slice(2).length) {
-  program.outputHelp()
-}
-
-function wrapCommand (fn) {
-  return (...args) => {
-    return fn(...args).catch(err => {
-      console.error(chalk.red(err.stack))
-    })
-  }
-}
-
-function wrapCommand (fn) {
-  return (...args) => {
-    return fn(...args).catch(err => {
-      console.error(chalk.red(err.stack))
-    })
-  }
-}
diff --git a/packages/@keynote/cli/bin/utils.js b/packages/@keynote/cli/bin/utils.js
deleted file mode 100644
index a335f88..0000000
--- a/packages/@keynote/cli/bin/utils.js
+++ /dev/null
@@ -1,84 +0,0 @@
-const createConfig = require('./webpack/createConfig')
-
-const parseFrontmatter = content => {
-  const matter = require('gray-matter')
-  const toml = require('toml')
-
-  return matter(content, {
-    excerpt_separator: '<!-- more -->',
-    engines: {
-      toml: toml.parse.bind(toml),
-      excerpt: false
-    }
-  })
-}
-
-const createEntryFileContent = ({
-  vue,
-  keynote,
-  theme,
-  filename
-}) => `
-import Vue from '${vue}'
-import Keynote from '${keynote}'
-import Theme from '${theme}'
-
-Vue.use(Keynote)
-Keynote.use(Theme)
-
-import Presentation from '${filename}'
-
-new Vue(Presentation).$mount('#app')
-`
-
-function createWebpackConfig({
-  file,
-  theme,
-  debug,
-  outDir
-}) {
-  const path = require('path')
-  const fs = require('fs')
-  file = path.resolve(file)
-  outDir = outDir || path.resolve(path.dirname(file), 'dist')
-  if (path.resolve() === outDir) throw Error('Cannot use current directory as out dir.')
-  const tmp = require('tmp')
-  const entry = tmp.fileSync({
-    postfix: '.js'
-  })
-  const paths = [
-    __dirname,
-    path.resolve(__dirname, '../node_modules'),
-    path.resolve(__dirname, '../../core'),
-    path.resolve(__dirname, '../../..'),
-    path.dirname(file)
-  ]
-  fs.writeFileSync(entry.fd, createEntryFileContent({
-    filename: file,
-    vue: require.resolve('vue/dist/vue.runtime.esm.js', {
-      paths
-    }),
-    keynote: process.env.KEYNOTE_MODULE_PATH || require.resolve('@keynote/core', {
-      paths
-    }),
-    theme: require.resolve(theme, {
-      paths
-    })
-  }))
-
-  const config = createConfig({
-    debug,
-    outDir
-  })
-  config.entry('keynote').add('~keynote.js').end()
-  config.resolve.alias.set('~keynote.js', entry.name)
-
-  return config
-}
-
-
-module.exports = {
-  parseFrontmatter,
-  createEntryFileContent,
-  createWebpackConfig
-}
\ No newline at end of file
diff --git a/packages/@keynote/cli/bin/webpack/createConfig.js b/packages/@keynote/cli/bin/webpack/createConfig.js
deleted file mode 100644
index 7ca1fec..0000000
--- a/packages/@keynote/cli/bin/webpack/createConfig.js
+++ /dev/null
@@ -1,201 +0,0 @@
-module.exports = function createBaseConfig({
-  outDir,
-  debug
-}) {
-  const path = require('path')
-  const CSSExtractPlugin = require('mini-css-extract-plugin')
-  const {
-    VueLoaderPlugin
-  } = require('vue-loader')
-  const WebpackChain = require('webpack-chain')
-  const isProd = process.env.NODE_ENV === 'production'
-
-  const config = new WebpackChain()
-  const inlineLimit = 1000000
-
-  config
-    .mode(isProd ? 'production' : 'development')
-  config.output
-    .path(outDir)
-    .filename(isProd ? 'assets/js/[name].[chunkhash:8].js' : 'assets/js/[name].js')
-    .publicPath('/')
-
-  if (debug) {
-    config.devtool('source-map')
-  } else if (!isProd) {
-    config.devtool('cheap-module-eval-source-map')
-  }
-
-  config.resolve
-    .set('symlinks', true)
-    .extensions
-    .merge(['.js', '.jsx', '.vue', '.json'])
-    .end()
-    .modules
-    .add(path.resolve(__dirname, '../../node_modules'))
-    .add(path.resolve(__dirname, '../../../'))
-    .add('node_modules')
-
-  config.resolveLoader
-    .set('symlinks', true)
-    .modules
-    .add(path.resolve(__dirname, '../../node_modules'))
-    .add(path.resolve(__dirname, '../../../'))
-    .add('node_modules')
-
-  config.module
-    .noParse(/^(vue)$/)
-
-  const cacheDirectory = path.resolve(__dirname, '../../node_modules/.cache/keynote')
-  const cacheIdentifier = JSON.stringify({
-    keynote: require('../../package.json').version,
-    'cache-loader': require('cache-loader').version,
-    'vue-loader': require('vue-loader').version,
-    env: process.env.NODE_ENV
-  })
-
-  function cached(rule) {
-    rule
-      .use('cache-loader')
-      .loader(require.resolve('cache-loader'))
-      .options({
-        cacheDirectory,
-        cacheIdentifier
-      })
-
-    return rule
-  }
-
-  function vue(rule) {
-    rule
-      .use('vue-loader')
-      .loader('vue-loader')
-      .options({
-        compilerOptions: {
-          preserveWhitespace: false
-        },
-        cacheDirectory,
-        cacheIdentifier
-      })
-    return rule
-  }
-
-  vue(cached(
-    config.module.rule('vue').test(/\.vue$/)
-  ))
-
-  // vue(cached(
-  //   config.module.rule('markdown')
-  //     .test(/\.md$/)
-  // )).use('markdown-loader')
-  //   .loader(require.resolve('./markdownLoader'))
-
-  config.module.rule('images')
-    .test(/\.(png|jpe?g|gif)(\?.*)?$/i)
-    .use('url-loader')
-    .loader('url-loader')
-    .options({
-      limit: inlineLimit,
-      name: 'assets/img/[name].[hash:8].[ext]'
-    })
-
-  config.module.rule('svg')
-    .test(/\.(svg)(\?.*)?$/i)
-    .use('file-loader')
-    .loader('file-loader')
-    .options({
-      name: 'assets/img/[name].[hash:8].[ext]'
-    })
-
-  config.module
-    .rule('media')
-    .test(/\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/)
-    .use('url-loader')
-    .loader('url-loader')
-    .options({
-      limit: inlineLimit,
-      name: `assets/media/[name].[hash:8].[ext]`
-    })
-
-  config.module
-    .rule('fonts')
-    .test(/\.(woff2?|eot|ttf|otf)(\?.*)?$/i)
-    .use('url-loader')
-    .loader('url-loader')
-    .options({
-      limit: inlineLimit,
-      name: `assets/fonts/[name].[hash:8].[ext]`
-    })
-
-  function createCSSRule(lang, test) {
-    const rule = config.module.rule(lang).test(test)
-
-    if (isProd) {
-      rule.use('extract-css-loader').loader(CSSExtractPlugin.loader)
-    } else {
-      rule.use('vue-style-loader').loader('vue-style-loader')
-    }
-
-    rule.use('css-loader')
-      .loader('css-loader')
-      .options({
-        importLoaders: 1,
-        sourceMap: !isProd
-      })
-
-    rule.use('postcss-loader')
-      .loader('postcss-loader')
-      .options({
-        plugins: [require('autoprefixer')],
-        sourceMap: !isProd
-      })
-
-    return rule
-  }
-
-  createCSSRule('css', /\.css$/)
-  createCSSRule('postcss', /\.p(ost)?css$/)
-  createCSSRule('scss', /\.scss$/).use('sass-loader').loader('sass-loader')
-  createCSSRule('sass', /\.sass$/).use('sass-loader').loader('sass-loader').options({
-    indentedSyntax: true
-  })
-  createCSSRule('less', /\.less$/).use('less-loader').loader('less-loader')
-  createCSSRule('stylus', /\.styl(us)?$/).use('stylus-loader').loader('stylus-loader').options({
-    preferPathResolver: 'webpack'
-  })
-
-  config.plugin('vue-loader')
-    .use(VueLoaderPlugin)
-  
-  config.plugin('progress')
-    .use(require('progress-bar-webpack-plugin'), [{ summary: false }])
-
-  config.stats(false)
-
-  if (isProd) {
-    config.plugin('extract-css')
-      .use(CSSExtractPlugin, [{
-        filename: 'assets/css/styles.[chunkhash:8].css'
-      }])
-
-    config.optimization.splitChunks({
-      cacheGroups: {
-        styles: {
-          name: 'styles',
-          // necessary to ensure async chunks are also extracted
-          test: m => /css-extract/.test(m.type),
-          chunks: 'all',
-          enforce: true
-        }
-      }
-    })
-  }
-
-  config
-    .plugin('html')
-    .use(require('html-webpack-plugin'), [{
-      template: path.resolve(__dirname, '../app/index.html')
-    }])
-
-  return config
-}
\ No newline at end of file
diff --git a/packages/@keynote/cli/package.json b/packages/@keynote/cli/package.json
deleted file mode 100644
index 5125221..0000000
--- a/packages/@keynote/cli/package.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
-  "name": "@keynote/cli",
-  "version": "1.1.4",
-  "description": "CLI for creating Keynotes using Vue ",
-  "bin": {
-    "keynote": "bin/keynote.js"
-  },
-  "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1",
-    "build": "echo ''"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/znck/keynote.git"
-  },
-  "keywords": [
-    "keynote",
-    "vue",
-    "presentation",
-    "slides"
-  ],
-  "author": "Rahul Kadyan <hi@znck.me> (https://znck.me)",
-  "license": "MIT",
-  "bugs": {
-    "url": "https://github.com/znck/keynote/issues"
-  },
-  "homepage": "https://keynote.sh",
-  "dependencies": {
-    "@keynote/core": "^1.1.3",
-    "@keynote/theme-default": "^1.0.0",
-    "autoprefixer": "^8.5.1",
-    "cache-loader": "^1.2.2",
-    "chalk": "^2.4.1",
-    "commander": "^2.15.1",
-    "css-loader": "^0.28.11",
-    "file-loader": "^1.1.11",
-    "html-webpack-plugin": "^3.2.0",
-    "mini-css-extract-plugin": "^0.4.0",
-    "portfinder": "^1.0.13",
-    "postcss-loader": "^2.1.5",
-    "progress-bar-webpack-plugin": "^1.11.0",
-    "tmp": "^0.0.33",
-    "url-loader": "^1.0.1",
-    "vue": "^2.5.16",
-    "vue-loader": "^15.2.1",
-    "vue-style-loader": "^4.1.0",
-    "vue-template-compiler": "^2.5.16",
-    "webpack": "^4.8.3",
-    "webpack-chain": "^4.8.0",
-    "webpack-hot-client": "^3.0.0",
-    "webpack-serve": "^1.0.2"
-  }
-}
diff --git a/packages/@keynote/core/package.json b/packages/@keynote/core/package.json
deleted file mode 100644
index 02dc6bf..0000000
--- a/packages/@keynote/core/package.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-  "name": "@keynote/core",
-  "version": "1.1.3",
-  "description": "Keynote base framework",
-  "main": "dist/index.js",
-  "scripts": {
-    "test": "jest",
-    "build": "vuepack src",
-    "prebuild": "rm -rf dist"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/znck/keynote.git"
-  },
-  "keywords": [
-    "keynote",
-    "vue",
-    "presentation",
-    "slides"
-  ],
-  "author": "Rahul Kadyan <hi@znck.me> (https://znck.me)",
-  "license": "MIT",
-  "bugs": {
-    "url": "https://github.com/znck/keynote/issues"
-  },
-  "homepage": "https://github.com/znck/keynote#readme",
-  "dependencies": {
-    "@znck/prop-types": "^0.3.4",
-    "de-indent": "^1.0.2",
-    "hammerjs": "^2.0.8",
-    "prismjs": "^1.14.0",
-    "resize-observer-polyfill": "^1.5.0",
-    "velocity-animate": "^1.5.1"
-  },
-  "peerDependencies": {
-    "vue": "^2.5.16"
-  },
-  "devDependencies": {
-    "vue": "^2.5.16"
-  }
-}
diff --git a/packages/@keynote/core/shrinkwrap.yaml b/packages/@keynote/core/shrinkwrap.yaml
deleted file mode 100644
index db6155d..0000000
--- a/packages/@keynote/core/shrinkwrap.yaml
+++ /dev/null
@@ -1,124 +0,0 @@
-dependencies:
-  '@znck/prop-types': 0.3.4
-  de-indent: 1.0.2
-  hammerjs: 2.0.8
-  prismjs: 1.14.0
-  resize-observer-polyfill: 1.5.0
-  velocity-animate: 1.5.1
-devDependencies:
-  vue: 2.5.16
-packages:
-  /@znck/prop-types/0.3.4:
-    dependencies:
-      lodash-es: 4.17.10
-      nyc: 11.9.0
-    dev: false
-    resolution:
-      integrity: sha512-TAaBr9Th6HF6MzQ3/MDVChEHMJ0EH7jj/4p3bp0GxqOzsn4HQxgceBBZ0DE0vshDUprA9d8USqlwzTKKepcnpg==
-  /clipboard/2.0.1:
-    dependencies:
-      good-listener: 1.2.2
-      select: 1.1.2
-      tiny-emitter: 2.0.2
-    dev: false
-    optional: true
-    resolution:
-      integrity: sha512-7yhQBmtN+uYZmfRjjVjKa0dZdWuabzpSKGtyQZN+9C8xlC788SSJjOHWh7tzurfwTqTD5UDYAhIv5fRJg3sHjQ==
-  /de-indent/1.0.2:
-    dev: false
-    resolution:
-      integrity: sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
-  /delegate/3.2.0:
-    dev: false
-    optional: true
-    resolution:
-      integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
-  /good-listener/1.2.2:
-    dependencies:
-      delegate: 3.2.0
-    dev: false
-    optional: true
-    resolution:
-      integrity: sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=
-  /hammerjs/2.0.8:
-    dev: false
-    engines:
-      node: '>=0.8.0'
-    resolution:
-      integrity: sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=
-  /lodash-es/4.17.10:
-    dev: false
-    resolution:
-      integrity: sha512-iesFYPmxYYGTcmQK0sL8bX3TGHyM6b2qREaB4kamHfQyfPJP0xgoGxp19nsH16nsfquLdiyKyX3mQkfiSGV8Rg==
-  /nyc/11.9.0:
-    bundledDependencies:
-      - archy
-      - arrify
-      - caching-transform
-      - convert-source-map
-      - debug-log
-      - default-require-extensions
-      - find-cache-dir
-      - find-up
-      - foreground-child
-      - glob
-      - istanbul-lib-coverage
-      - istanbul-lib-hook
-      - istanbul-lib-instrument
-      - istanbul-lib-report
-      - istanbul-lib-source-maps
-      - istanbul-reports
-      - md5-hex
-      - merge-source-map
-      - micromatch
-      - mkdirp
-      - resolve-from
-      - rimraf
-      - signal-exit
-      - spawn-wrap
-      - test-exclude
-      - yargs
-      - yargs-parser
-    dev: false
-    hasBin: true
-    resolution:
-      integrity: sha512-w8OdJAhXL5izerzZMdqzYKMj/pgHJyY3qEPYBjLLxrhcVoHEY9pU5ENIiZyCgG9OR7x3VcUMoD40o6PtVpfR4g==
-  /prismjs/1.14.0:
-    dev: false
-    optionalDependencies:
-      clipboard: 2.0.1
-    resolution:
-      integrity: sha512-sa2s4m60bXs+kU3jcuUwx3ZCrUH7o0kuqnOOINbODqlRrDB7KY8SRx+xR/D7nHLlgfDdG7zXbRO8wJ+su5Ls0A==
-  /resize-observer-polyfill/1.5.0:
-    dev: false
-    resolution:
-      integrity: sha512-M2AelyJDVR/oLnToJLtuDJRBBWUGUvvGigj1411hXhAdyFWqMaqHp7TixW3FpiLuVaikIcR1QL+zqoJoZlOgpg==
-  /select/1.1.2:
-    dev: false
-    optional: true
-    resolution:
-      integrity: sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=
-  /tiny-emitter/2.0.2:
-    dev: false
-    optional: true
-    resolution:
-      integrity: sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==
-  /velocity-animate/1.5.1:
-    dev: false
-    resolution:
-      integrity: sha512-VJ3csMz5zP1ifkbBlsNYpxnoWkPHfVRQ8tUongS78W5DxSGHB68pjYHDTgUYBkVM7P/HpYdVukgVUFcxjr1gGg==
-  /vue/2.5.16:
-    dev: true
-    resolution:
-      integrity: sha512-/ffmsiVuPC8PsWcFkZngdpas19ABm5mh2wA7iDqcltyCTwlgZjHGeJYOXkBMo422iPwIcviOtrTCUpSfXmToLQ==
-registry: 'https://registry.npmjs.org/'
-shrinkwrapMinorVersion: 9
-shrinkwrapVersion: 3
-specifiers:
-  '@znck/prop-types': ^0.3.4
-  de-indent: ^1.0.2
-  hammerjs: ^2.0.8
-  prismjs: ^1.14.0
-  resize-observer-polyfill: ^1.5.0
-  velocity-animate: ^1.5.1
-  vue: ^2.5.16
diff --git a/packages/@keynote/core/src/Keynote.vue b/packages/@keynote/core/src/Keynote.vue
deleted file mode 100644
index 74b6960..0000000
--- a/packages/@keynote/core/src/Keynote.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-<div class="keynote" :class="[ aspectRatio && 'a' + aspectRatio ]">
-  <SlideProcessor :raw-slides="$slots.default" />
-
-  <SlideController>
-    <component
-      :is="$store.state.presenter.component" 
-      :slide="$store.state.currentSlide"
-      :slideIndex="$store.state.control.currentSlide"
-      :fullscreen="$store.state.control.isFullscreen"
-    />
-  </SlideController>
-</div>
-</template>
-
-<script>
-import SlideController from './SlideController';
-import SlideProcessor from './SlideProcessor';
-export default {
-  name: 'Keynote',
-  props: {
-    aspectRatio: {
-      type: String
-    }
-  },
-  components: {
-    SlideController: SlideController,
-    SlideProcessor: SlideProcessor
-  }
-};
-</script>
-
-<style>
-html,
-body {
-  padding: 0;
-  margin: 0;
-  min-height: 100%;
-  min-width: 100%;
-  height: 100%;
-}
-
-body {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  background: black;
-}
-
-* {
-  box-sizing: border-box;
-}
-</style>
-
-<style scoped>
-.keynote {
-  width: 100%;
-  height: 100%;
-}
-
-.a16x9 {
-  width: 100vw;
-  height: 56.25vw;
-}
-
-.a4x3 {
-  width: 133.33vh;
-  height: 100vh;
-}
-</style>
diff --git a/packages/@keynote/core/src/SlideController/AutoController.vue b/packages/@keynote/core/src/SlideController/AutoController.vue
deleted file mode 100644
index 1dc0933..0000000
--- a/packages/@keynote/core/src/SlideController/AutoController.vue
+++ /dev/null
@@ -1,25 +0,0 @@
-<template>
-  <component :is="isTouchEnabled ? 'TouchController' : 'MouseController'">
-    <KeyboardController>
-      <slot />
-    </KeyboardController>
-  </component>
-</template>
-
-
-<script>
-import KeyboardController from './KeyboardController.vue'
-import MouseController from './MouseController.vue'
-import TouchController from './TouchController.vue'
-
-export default {
-  data: () => ({
-    isTouchEnabled: 'ontouchstart' in document.documentElement
-  }),
-  components: {
-    KeyboardController,
-    MouseController,
-    TouchController
-  }
-}
-</script>
diff --git a/packages/@keynote/core/src/SlideController/KeyboardController.vue b/packages/@keynote/core/src/SlideController/KeyboardController.vue
deleted file mode 100644
index 7359a9c..0000000
--- a/packages/@keynote/core/src/SlideController/KeyboardController.vue
+++ /dev/null
@@ -1,138 +0,0 @@
-<template>
-  <VirtualElement
-    @keyup.up="dispatch('prev')"
-    @keyup.down="dispatch('next')"
-    @keyup.PageUp="dispatch('step.prev')"
-    @keyup.left="dispatch('step.prev')"
-    @keyup.PageDown="dispatch('step.next')"
-    @keyup.right="dispatch('step.next')"
-    @keyup.space="dispatch('step.next')"
-    @keyup.esc="dispatch('fullscreen')"
-    @keyup.70="dispatch('fullscreen')"
-    @blur.native="isActive = false"
-    @focus.native="isActive = true"
-    @keypress="onKeypress($event, dispatch)"
-    tabindex="0"
-    autofocus
-  >
-    <slot/>
-    <template slot="controls">
-      <slot name="controls"/>
-      <div class="goto" v-if="indexKey > -1" key="keyboard-goto">{{ indexKey }}</div>
-      <div class="status" v-if="!isActive">
-        <span class="icon-no-keyboard" aria-label="No keyboard controls">
-          <svg class="keyboard" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512">
-            <path
-              d="M528 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM128 180v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z"
-            ></path>
-          </svg>
-          <svg class="ban" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
-            <path
-              d="M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z"
-            ></path>
-          </svg>
-        </span>
-      </div>
-    </template>
-  </VirtualElement>
-</template>
-
-<script>
-export default {
-  data: () => ({ indexKey: -1, isActive: false }),
-  mounted() {
-    this.$nextTick(() => this.$el.focus())
-    const handler = event => {
-      if (event.code === 'PageDown') {
-        this.dispatch('step.next')
-      } else if (event.code === 'PageUp') {
-        this.dispatch('step.prev')
-      }
-    }
-
-    window.addEventListener('keydown', handler)
-
-    this.off = () => window.removeEventListener('keydown', handler)
-  },
-  destroyed() {
-    this.off()
-  },
-  methods: {
-    dispatch(name, ...args) {
-      this.$store.dispatch('control:' + name, ...args)
-    },
-    onKeypress(e, dispatch) {
-      if (!/^digit/i.test(e.code)) {
-        this.indexKey = -1
-        clearTimeout(this.timer)
-
-        return true
-      }
-
-      if (this.indexKey < 0) this.indexKey = Number(e.key)
-      else this.indexKey = this.indexKey * 10 + Number(e.key)
-
-      clearTimeout(this.timer)
-      this.timer = setTimeout(() => {
-        dispatch('go', this.indexKey - 1)
-        this.indexKey = -1
-      }, 400)
-    }
-  }
-}
-</script>
-
-<style scoped>
-.status {
-  border-radius: 0.24rem;
-  background: rgba(255, 255, 255, 0.32);
-  padding: 1rem;
-  position: absolute;
-  right: 1rem;
-  bottom: 1rem;
-  font-size: 2rem;
-  line-height: 1;
-  opacity: 0.75;
-}
-
-.icon-no-keyboard {
-  display: inline-block;
-  height: 1em;
-  position: relative;
-  text-align: center;
-  vertical-align: -0.125em;
-  width: 1.25em;
-}
-
-svg {
-  bottom: 0;
-  left: 0;
-  margin: auto;
-  position: absolute;
-  right: 0;
-  top: 0;
-  height: 1em;
-  vertical-align: -0.125em;
-}
-
-svg.ban {
-  fill: rgba(255, 0, 0, 1);
-  transform: scale(1.05);
-}
-
-svg.keyboard {
-  fill: rgba(0, 0, 0, 0.72);
-}
-
-.goto {
-  font-family: monospace;
-  color: rgba(255, 255, 255, 0.72);
-  position: absolute;
-  text-align: center;
-  width: 100%;
-  bottom: 1rem;
-  font-weight: 800;
-  font-size: 3.375rem;
-  text-shadow: 0 0 0 rgba(0, 0, 0, 0.32);
-}
-</style>
diff --git a/packages/@keynote/core/src/SlideController/MouseController.vue b/packages/@keynote/core/src/SlideController/MouseController.vue
deleted file mode 100644
index e50eb1e..0000000
--- a/packages/@keynote/core/src/SlideController/MouseController.vue
+++ /dev/null
@@ -1,20 +0,0 @@
-<template>
-  <VirtualElement
-    @click.left="isActive && $store.dispatch('control:step.next')"
-    @blur.native="isActive = false"
-    @focus.native="isActive = true"
-  >
-    <slot />
-    <template slot="controls">
-      <slot name="controls" />
-    </template>
-  </VirtualElement>
-</template>
-
-<script>
-export default {
-  data() {
-    return { isActive: false }
-  }
-}
-</script>
diff --git a/packages/@keynote/core/src/SlideController/Touch.vue b/packages/@keynote/core/src/SlideController/Touch.vue
deleted file mode 100644
index 420ab55..0000000
--- a/packages/@keynote/core/src/SlideController/Touch.vue
+++ /dev/null
@@ -1,19 +0,0 @@
-<template>
-  <VirtualElement>
-    <slot />
-  </VirtualElement>
-</template>
-
-<script>
-import Hammer from 'hammerjs'
-
-export default {
-  mounted() {
-    if (!('ontouchstart' in document.documentElement)) return
-    console.log('Enable touch on', this.$el)
-    const hammer = new Hammer(this.$el)
-    Object.entries(this.$listeners).forEach(([name, fn]) => hammer.on(name, fn))
-    this.$on('hook:beforeDestroy', () => hammer.destroy())
-  }
-}
-</script>
diff --git a/packages/@keynote/core/src/SlideController/TouchController.vue b/packages/@keynote/core/src/SlideController/TouchController.vue
deleted file mode 100644
index 7565682..0000000
--- a/packages/@keynote/core/src/SlideController/TouchController.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-<template>
-  <Touch
-    @swipeleft="$store.dispatch('control:next')"
-    @swiperight="$store.dispatch('control:prev')"
-    @tap="$store.dispatch('control:step.next')"
-    @press="$store.dispatch('control:step.prev')"
-    @doubletap="$store.dispatch('control:fullscreen')"
-  >
-    <slot />
-    <template slot="controls">
-      <slot name="controls" />
-    </template>
-  </Touch>
-</template>
-
-<script>
-import Touch from './Touch.vue'
-
-export default {
-  components: { Touch }
-}
-</script>
diff --git a/packages/@keynote/core/src/SlideController/index.js b/packages/@keynote/core/src/SlideController/index.js
deleted file mode 100644
index 12eda01..0000000
--- a/packages/@keynote/core/src/SlideController/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import Controller from './AutoController.vue'
-
-export default Controller
diff --git a/packages/@keynote/core/src/SlideProcessor/SlideProcessor.vue b/packages/@keynote/core/src/SlideProcessor/SlideProcessor.vue
deleted file mode 100644
index b465b90..0000000
--- a/packages/@keynote/core/src/SlideProcessor/SlideProcessor.vue
+++ /dev/null
@@ -1,21 +0,0 @@
-<script>
-import { prepareSlides } from './helpers'
-
-export default {
-  props: { rawSlides: { type: Array } },
-  render() {
-    return null
-  },
-  watch: {
-    rawSlides: {
-      immediate: true,
-      handler(rawSlides) {
-        this.$store.dispatch(
-          'slides',
-          prepareSlides(this._self._c || this.$createElement, rawSlides || [])
-        )
-      }
-    }
-  }
-}
-</script>
diff --git a/packages/@keynote/core/src/SlideProcessor/helpers.js b/packages/@keynote/core/src/SlideProcessor/helpers.js
deleted file mode 100644
index b97541f..0000000
--- a/packages/@keynote/core/src/SlideProcessor/helpers.js
+++ /dev/null
@@ -1,209 +0,0 @@
-function typeofvnode(type) {
-  return vnode => {
-    try {
-      try {
-        if (type.test(vnode.componentOptions.Ctor.extendOptions.keynote)) {
-          console.log()
-          return true
-        }
-      } catch (e) {
-        // - Ignore and test tag.
-      }
-
-      return type.test(vnode.componentOptions.tag)
-    } catch (e) {
-      return false
-    }
-  }
-}
-
-export const isSlide = typeofvnode(/^slide$/i)
-export const isTransition = typeofvnode(/^transition$/i)
-export const isBuild = typeofvnode(/^build$/i)
-export const isTruthy = it => !!it
-export const isComponent = any => any && !!any.tag
-
-export function copyVnode(cloned, vnode) {
-  cloned.tag = vnode.tag
-  cloned.data = { ...vnode.data }
-  cloned.children = vnode.children ? vnode.children.slice() : []
-  cloned.text = vnode.text
-  cloned.elm = vnode.elm
-  cloned.context = vnode.context
-  cloned.componentOptions = vnode.componentOptions
-  cloned.asyncFactory = vnode.asyncFactory
-  cloned.isComment = vnode.isComment
-  cloned.ns = vnode.ns
-  cloned.isStatic = vnode.isStatic
-  cloned.key = vnode.key
-  cloned.isComment = vnode.isComment
-  cloned.fnContext = vnode.fnContext
-  cloned.fnOptions = vnode.fnOptions
-  cloned.fnScopeId = vnode.fnScopeId
-  cloned.isCloned = true
-  cloned._hasChildren = vnode._hasChildren
-
-  if (cloned.componentOptions) {
-    cloned.componentOptions.children = vnode.componentOptions.children
-      ? vnode.componentOptions.children.slice()
-      : []
-  }
-
-  return cloned
-}
-
-export class Graph {
-  constructor() {
-    this.vertices = []
-    this.edges = {}
-  }
-
-  addVertex(vertex) {
-    if (this.vertices.indexOf(vertex) < 0) this.vertices.push(vertex)
-    if (!this.edges[vertex]) this.edges[vertex] = new Set()
-  }
-
-  addEdge(a, b) {
-    this.addVertex(a)
-    this.edges[a].add(b)
-  }
-
-  topologicalSortedVertices() {
-    const visited = new Set()
-    const vertices = []
-    const util = vertex => {
-      visited.add(vertex)
-
-      if (this.edges[vertex]) {
-        this.edges[vertex].forEach(other => {
-          if (!visited.has(other)) util(other)
-        })
-      }
-
-      vertices.push(vertex)
-    }
-
-    this.vertices.forEach(vertex => visited.has(vertex) || util(vertex))
-
-    return vertices
-  }
-}
-
-export function isAsyncPlaceholder(node) {
-  return node.isComment && node.asyncFactory
-}
-
-export function findBuildVnodes(vnode) {
-  const result = []
-
-  if (!vnode || !vnode.componentOptions) return []
-
-  if (vnode.componentOptions.children) {
-    vnode.componentOptions.children.map(it =>
-      result.push(...findBuildVnodes(it))
-    )
-  }
-
-  if (isBuild(vnode)) result.push(vnode)
-
-  return result
-}
-
-export function getFirstComponentChild(children) {
-  if (Array.isArray(children)) {
-    for (let i = 0; i < children.length; i++) {
-      const c = children[i]
-      if (c && (c.componentOptions || isAsyncPlaceholder(c))) {
-        return c
-      }
-    }
-  }
-}
-
-export function getRealChild(vnode) {
-  if (vnode && vnode._vnode) vnode = vnode._vnode
-  const compOptions = vnode && vnode.componentOptions
-  if (compOptions && compOptions.Ctor.options.abstract) {
-    return getRealChild(getFirstComponentChild(compOptions.children))
-  } else {
-    return vnode
-  }
-}
-
-export function prepareSlides(h, vnodes) {
-  let index = 0
-  const slides = vnodes.map((it, itIndex) => {
-    if (isComponent(it)) {
-      it = copyVnode(h(null), it)
-      it.key = `wrapper:${itIndex}`
-
-      const attrs = (it.data && it.data.attrs) || {}
-      const builds = findBuildVnodes(it)
-      const graph = new Graph()
-      const buildsByName = {}
-
-      builds.forEach((build, index) => {
-        const instance = build.componentOptions.propsData || {}
-        const name = instance.name || `build-${index}`
-        if (instance.name) {
-          instance.name = name
-        }
-
-        instance.context = 'slide:' + itIndex
-        graph.addVertex(name)
-        buildsByName[name] = build
-
-        build.componentOptions.propsData = instance
-      })
-
-      builds.forEach(build => {
-        const instance = build.componentOptions.propsData
-        if (instance.with) graph.addEdge(instance.name, instance.with)
-        if (instance.after) graph.addEdge(instance.name, instance.after)
-      })
-
-      let id = 0
-      const buildIds = {}
-
-      graph.topologicalSortedVertices().forEach(name => {
-        const build = buildsByName[name]
-        if (!build) return
-
-        const instance = build.componentOptions.propsData
-
-        if (instance.with) {
-          instance.step = buildIds[instance.with]
-        } else if (instance.after) {
-          instance.step = buildIds[instance.after]
-        } else {
-          instance.step = buildIds[instance.name] = id++
-        }
-      })
-
-      const transition = { component: 'transition-noop' }
-
-      if (attrs.transition) {
-        transition.component = 'transition-' + attrs.transition
-      }
-
-      Object.keys(attrs)
-        .filter(key => key.startsWith('transition'))
-        .forEach(key => {
-          const localKey = key.replace(/^transition-?/i, '')
-
-          if (localKey) transition[localKey] = attrs[key]
-
-          delete attrs[key]
-        })
-
-      return {
-        index: index++,
-        vnode: it,
-        steps: id,
-        transition: Object.freeze(transition)
-      }
-    }
-  })
-
-  return slides.filter(isTruthy)
-}
diff --git a/packages/@keynote/core/src/SlideProcessor/index.js b/packages/@keynote/core/src/SlideProcessor/index.js
deleted file mode 100644
index 8953f64..0000000
--- a/packages/@keynote/core/src/SlideProcessor/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import SlideProcessor from './SlideProcessor.vue'
-export * from './helpers'
-
-export default SlideProcessor
diff --git a/packages/@keynote/core/src/components/Abstract.vue b/packages/@keynote/core/src/components/Abstract.vue
deleted file mode 100644
index 2505c9d..0000000
--- a/packages/@keynote/core/src/components/Abstract.vue
+++ /dev/null
@@ -1,9 +0,0 @@
-<script>
-export default {
-  abstract: true,
-  functional: true,
-  render(_, { slots }) {
-    return slots().default
-  }
-}
-</script>
diff --git a/packages/@keynote/core/src/components/Build.vue b/packages/@keynote/core/src/components/Build.vue
deleted file mode 100644
index 6c92049..0000000
--- a/packages/@keynote/core/src/components/Build.vue
+++ /dev/null
@@ -1,90 +0,0 @@
-<template>
-  <Vnode
-    v-if="(isVisible && !isWaiting)"
-    :vnode="$slots.default[0]"
-    @done="onTransitionComplete"
-    @after-enter="onTransitionComplete"
-    @after-leave="onTransitionComplete"
-  />
-</template>
-
-
-<script>
-import Vue from 'vue'
-
-const events = new Vue({})
-let id = 0
-
-export default {
-  name: 'Build',
-  keynote: 'build',
-  props: {
-    name: String,
-    with: String,
-    after: String,
-    delay: {
-      type: Number,
-      default: 0
-    },
-    step: {
-      type: Number, // This is runtime injected property.
-      default: 0
-    },
-    context: {
-      type: String,
-      default: 'default'
-    }
-  },
-  data: () => ({ isWaiting: true }),
-  created() {
-    this.theEventHandler = context => {
-      if (context === this.context) this.onTransitionStart()
-    }
-    if (this.after) {
-      events.$on('completed:' + this.after, this.theEventHandler)
-    } else if (this.with) {
-      events.$on('started:' + this.with, this.theEventHandler)
-    }
-  },
-  beforeDestroy() {
-    events.$off('completed:' + this.after, this.theEventHandler)
-    events.$off('started:' + this.with, this.theEventHandler)
-  },
-  computed: {
-    build() {
-      return this.$store.state.control.currentStep
-    },
-    isVisible() {
-      return this.step < this.build
-    }
-  },
-  methods: {
-    onTransitionStart() {
-      if (this.preloading) {
-        this.isWaiting = false
-      }
-      clearTimeout(this._start)
-      this._start = setTimeout(() => {
-        this.isWaiting = false
-        events.$emit('started:' + this.name, this.context)
-      }, this.delay)
-    },
-    onTransitionComplete() {
-      if (this.preloading) return
-      this.isWaiting = false
-      events.$emit('completed:' + this.name, this.context)
-    }
-  },
-  watch: {
-    build: {
-      handler() {
-        if (this.with || this.after) return
-        if (this.step < this.build) {
-          this.onTransitionStart()
-        }
-      },
-      immediate: true
-    }
-  }
-}
-</script>
diff --git a/packages/@keynote/core/src/components/CodePreview.vue b/packages/@keynote/core/src/components/CodePreview.vue
deleted file mode 100644
index 302b994..0000000
--- a/packages/@keynote/core/src/components/CodePreview.vue
+++ /dev/null
@@ -1,50 +0,0 @@
-<script>
-import Prism from "prismjs";
-//other languages depend on these
-import "prismjs/components/prism-typescript";
-import deIndent from 'de-indent'
-
-const aliases = {
-  vue: 'markup',
-  js: 'javascript',
-  ts: 'typescript'
-}
-
-export default {
-  functional: true,
-  props: {
-    code: {
-      type: String
-    },
-    language: {
-      type: String,
-      default: 'markup'
-    }
-  },
-  render(h, ctx) {
-    const code = deIndent(ctx.props.code || ctx.children[0].text).trim()
-    const language = ctx.props.language
-    const prismLanguage = Prism.languages[aliases[language] || language]
-    const className = `language-${language}`
-
-    return h(
-      'pre',
-      Object.assign({}, ctx.data, {
-        class: [ctx.data.class, className]
-      }),
-      [
-        h('code', {
-          class: className,
-          domProps: {
-            innerHTML: prismLanguage
-              ? Prism.highlight(code, prismLanguage)
-              : code
-          }
-        })
-      ]
-    )
-  }
-}
-</script>
-
-<style src="prismjs/themes/prism.css"></style>
diff --git a/packages/@keynote/core/src/components/ErrorBoundry.vue b/packages/@keynote/core/src/components/ErrorBoundry.vue
deleted file mode 100644
index f1c7377..0000000
--- a/packages/@keynote/core/src/components/ErrorBoundry.vue
+++ /dev/null
@@ -1,21 +0,0 @@
-<script>
-export default {
-  name: 'ErrorBoundry',
-
-  functional: true,
-
-  errorCaptured() {
-    return true
-  },
-
-  render(_, { slots }) {
-    return slots().default
-  },
-
-  renderError(h, err) {
-    console.log(err)
-
-    return h('pre', { style: { color: 'red' } }, err.stack)
-  }
-}
-</script>
diff --git a/packages/@keynote/core/src/components/Fit.vue b/packages/@keynote/core/src/components/Fit.vue
deleted file mode 100644
index c0f69c5..0000000
--- a/packages/@keynote/core/src/components/Fit.vue
+++ /dev/null
@@ -1,86 +0,0 @@
-<template>
-  <div class="fit text" ref="container" :style="{ justifyContent: this.position }">
-    <div class="content" ref="text" :style="{ transform: `scale(${scale}) translateX(${translateX}%)` }">
-      <slot />
-    </div>
-  </div>
-</template>
-
-<script>
-import ResizeObserver from 'resize-observer-polyfill'
-import PropTypes from '@znck/prop-types'
-
-export default {
-  name: 'Fit',
-
-  props: {
-    max: PropTypes.number.validate(it => it <= 8).value(8),
-    position: PropTypes.oneOf('left', 'center', 'right').value('center')
-  },
-
-  data: () => ({
-    scale: 1
-  }),
-
-  computed: {
-    translateX () {
-      if (this.position === 'center') return 0
-
-      const delta = ((this.scale - 1) / this.scale) * 50
-
-      return this.position === 'left' ? delta : -delta
-    }
-  },
-
-  methods: {
-    resize() {
-      const { container, text } = this.$refs
-
-      if (!container || !text) return
-
-      const effectiveWidth = container.clientWidth
-      const effectiveHeight = container.clientHeight
-
-      const parent = container.parentElement
-      const style = getComputedStyle(parent)
-      const effectiveParentHeight =
-        parent.clientHeight -
-        parseFloat(style.paddingTop) -
-        parseFloat(style.paddingBottom)
-
-      const scale = Math.min(
-        effectiveWidth / text.offsetWidth,
-        Math.max(effectiveHeight, effectiveParentHeight) / text.offsetHeight,
-        this.max
-      ).toFixed(2)
-
-      if (!Number.isNaN(scale) && scale >= 1 && Math.abs(this.scale - scale) > 0.0099) {
-        this.scale = scale 
-      }
-    }
-  },
-
-  mounted() {
-    const observer = new ResizeObserver(this.resize)
-
-    observer.observe(this.$refs.text)
-    observer.observe(document.body)
-
-    this.$on('hook:beforeDestory', () => observer.disconnect())
-  }
-}
-</script>
-
-<style>
-.fit {
-  height: 100%;
-  width: 100%;
-  display: flex;
-  white-space: nowrap;
-  align-items: center;
-}
-
-.fit > .content {
-  display: inline-block;
-}
-</style>
diff --git a/packages/@keynote/core/src/components/Function.vue b/packages/@keynote/core/src/components/Function.vue
deleted file mode 100644
index 6c8fd4c..0000000
--- a/packages/@keynote/core/src/components/Function.vue
+++ /dev/null
@@ -1,51 +0,0 @@
-<script>
-export default {
-  name: 'FunctionRenderer',
-  functional: true,
-  props: {
-    fn: { type: Function, required: true }
-  },
-  render: (h, { data, listeners, props }) => {
-    const vnode = props.fn(h)
-
-    vnode.data = vnode.data || {}
-    if (vnode) {
-      let target
-      if (vnode.componentOptions) {
-        target = vnode.componentOptions.listeners =
-          vnode.componentOptions.listeners || {}
-      } else {
-        target = vnode.data.on = vnode.data.on || {}
-      }
-
-      Object.keys(listeners).forEach(name => {
-        const listener = listeners[name]
-
-        if (name in target) {
-          if (Array.isArray(target[name])) target[name].push(listener)
-          else target[name] = [target[name], listener]
-        } else {
-          target[name] = listener
-        }
-      })
-
-      if (data.attrs) {
-        if (vnode.componentOptions) {
-          vnode.componentOptions.propsData = {
-            ...data.attrs,
-            ...vnode.componentOptions.propsData
-          }
-        } else {
-          vnode.data.attrs = {
-            ...data.attrs,
-            ...vnode.data.attrs
-          }
-        }
-      }
-    }
-    vnode.key = data.key || vnode.key
-
-    return vnode
-  }
-}
-</script>
diff --git a/packages/@keynote/core/src/components/Heading.vue b/packages/@keynote/core/src/components/Heading.vue
deleted file mode 100644
index 8a46e81..0000000
--- a/packages/@keynote/core/src/components/Heading.vue
+++ /dev/null
@@ -1,37 +0,0 @@
-<template>
-  <component 
-    class="heading"
-    :is="tag"
-    :class="{
-      caps: caps
-    }"
-  >
-    <slot />
-  </component>
-</template>
-
-<script>
-import PropTypes from '@znck/prop-types'
-
-export default {
-  name: 'Title',
-  props: {
-    caps: PropTypes.bool.value(false),
-    level: PropTypes.oneOf(1, 2, 3, 4, 5).value(1)
-  },
-  computed: {
-    tag() {
-      return 'h' + this.level
-    }
-  }
-}
-</script>
-
-<style>
-.heading {
-  color: inherit;
-}
-.caps {
-  text-transform: uppercase;
-}
-</style>
diff --git a/packages/@keynote/core/src/components/Photo.vue b/packages/@keynote/core/src/components/Photo.vue
deleted file mode 100644
index 9757564..0000000
--- a/packages/@keynote/core/src/components/Photo.vue
+++ /dev/null
@@ -1,16 +0,0 @@
-<script>
-export default {
-  name: 'Photo',
-  props: {
-    src: {
-      type: String,
-      required: true
-    }
-  },
-  render(h) {
-    new Image().src = this.src
-
-    return h('img', { attrs: { src: this.src } })
-  }
-}
-</script>
diff --git a/packages/@keynote/core/src/components/SlidePresenter.vue b/packages/@keynote/core/src/components/SlidePresenter.vue
deleted file mode 100644
index b8eafb3..0000000
--- a/packages/@keynote/core/src/components/SlidePresenter.vue
+++ /dev/null
@@ -1,107 +0,0 @@
-<template>
-  <div class="slideshow">
-    <component
-      v-if="slide && transition.component"
-      :is="transition.component"
-      key="transition"
-      v-bind="transition"
-      :skip-transition="skipTransition"
-      @after-enter="afterSlideEnter"
-    >
-      <Vnode :vnode="slide.vnode" :key="slideIndex"/>
-    </component>
-    <div class="promote" v-if="!slide">
-      <p>
-        <small style="text-transform: uppercase; font-size: 1rem">built with</small>
-        <br>
-        <strong>Keynote.sh</strong>
-      </p>
-    </div>
-    <slot/>
-    <slot name="controls"/>
-  </div>
-</template>
-
-<script>
-const NoopTransition = { component: 'transition-noop' }
-
-export default {
-  props: ['slide', 'slideIndex'],
-
-  data() {
-    const transition = this.slide
-      ? this.slide.transition
-      : NoopTransition
-
-    return {
-      transition,
-      skipTransition: false,
-      nextTransition: transition
-    }
-  },
-  methods: {
-    afterSlideEnter() {
-      this.skipTransition = true
-      this.$nextTick(() => {
-        this.transition = this.nextTransition
-        this.$nextTick(() => {
-          this.skipTransition = false
-        })
-      })
-    }
-  },
-  watch: {
-    'slide'(slide) {
-      this.nextTransition = slide ? slide.transition : NoopTransition
-    }
-  }
-}
-</script>
-
-<style scoped>
-.slideshow {
-  width: 100%;
-  height: 100%;
-  position: relative;
-  perspective: 400vw;
-  background-color: black;
-}
-
-.slideshow:focus,
-.slideshow:focus-visible {
-  outline: none;
-}
-
-.slideshow > .slide {
-  position: absolute;
-
-  top: 0;
-  left: 0;
-
-  height: 100%;
-  width: 100%;
-
-  box-shadow: 0 0 0.625rem 0 rgba(0, 0, 0, 0.4);
-}
-
-.promote {
-  font-size: 3rem;
-
-  position: absolute;
-
-  top: 0;
-  left: 0;
-
-  height: 100%;
-  width: 100%;
-
-  display: flex;
-  justify-content: center;
-  align-items: center;
-}
-
-.promote * {
-  color: white;
-  text-align: center;
-}
-</style>
diff --git a/packages/@keynote/core/src/components/StoreConsumer.vue b/packages/@keynote/core/src/components/StoreConsumer.vue
deleted file mode 100644
index 6e4ad6b..0000000
--- a/packages/@keynote/core/src/components/StoreConsumer.vue
+++ /dev/null
@@ -1,29 +0,0 @@
-<template>
-  <VirtualElement>
-    <slot v-bind="{ state, dispatch }" />
-  </VirtualElement>
-</template>
-
-
-<script>
-import store from '../store'
-
-export default {
-  props: {
-    module: { type: String }
-  },
-  computed: {
-    module$() {
-      return this.module ? this.module + '$' : this.module
-    },
-    state() {
-      return this.module ? store[this.module$] || store[this.module] : store
-    }
-  },
-  methods: {
-    dispatch(name, ...args) {
-      store.$emit(this.module ? this.module + ':' + name : name, ...args)
-    }
-  }
-}
-</script>
diff --git a/packages/@keynote/core/src/components/Subtitle.vue b/packages/@keynote/core/src/components/Subtitle.vue
deleted file mode 100644
index 5099914..0000000
--- a/packages/@keynote/core/src/components/Subtitle.vue
+++ /dev/null
@@ -1,16 +0,0 @@
-<template>
-  <Heading :level="3" v-bind="$attrs" v-on="$listeners">
-    <slot />
-  </Heading>
-</template>
-
-<script>
-import Heading from './Heading.vue'
-
-Heading.abstract = true
-
-export default {
-  name: 'Subtitle',
-  components: { Heading }
-}
-</script>
diff --git a/packages/@keynote/core/src/components/Title.vue b/packages/@keynote/core/src/components/Title.vue
deleted file mode 100644
index 43dfdad..0000000
--- a/packages/@keynote/core/src/components/Title.vue
+++ /dev/null
@@ -1,14 +0,0 @@
-<template>
-  <Heading :level="1" v-bind="$attrs" v-on="$listeners">
-    <slot />
-  </Heading>
-</template>
-
-<script>
-import Heading from './Heading.vue'
-
-export default {
-  name: 'Title',
-  components: { Heading }
-}
-</script>
diff --git a/packages/@keynote/core/src/components/Type.vue b/packages/@keynote/core/src/components/Type.vue
deleted file mode 100644
index c8a47e2..0000000
--- a/packages/@keynote/core/src/components/Type.vue
+++ /dev/null
@@ -1,53 +0,0 @@
-<template>
-  <span>{{ text }}</span>
-</template>
-
-<script>
-export default {
-  name: 'Type',
-  props: {
-    value: {
-      type: String,
-      required: true
-    },
-    duration: {
-      type: Number,
-      default() {
-        if (typeof this.duration === 'number') return this.duration
-
-        const chars = this.value.length
-
-        return Math.max(1, Math.min(3, chars * 0.04))
-      }
-    }
-  },
-  data: () => ({ len: 0 }),
-  computed: {
-    delay() {
-      if (this.value.length === 0) return this.duration * 1000
-
-      return this.duration * 1000 / this.value.length
-    },
-    text() {
-      return this.value.substr(0, this.len)
-    }
-  },
-  methods: {
-    typeChar() {
-      this.len += 1
-      if (this.len < this.value.length) {
-        setTimeout(this.typeChar, this.delay)
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(this.typeChar)
-  },
-  watch: {
-    value() {
-      this.len = 0
-      this.$nextTick(this.typeChar)
-    }
-  }
-}
-</script>
diff --git a/packages/@keynote/core/src/components/VirtualElement.vue b/packages/@keynote/core/src/components/VirtualElement.vue
deleted file mode 100644
index 9174c51..0000000
--- a/packages/@keynote/core/src/components/VirtualElement.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<script>
-import { copyVnode } from '../SlideProcessor/helpers.js'
-
-export default {
-  functional: true,
-  render(h, ctx) {
-    const { data, listeners } = ctx
-    const slots = ctx.slots()
-    if (!slots.default) return
-
-    if (slots.default.length < 1)
-      throw Error('VirtualComponent should have exactly on child node.')
-
-    const node = copyVnode(ctx._e(), slots.default.find(node => !!node.tag))
-    node.data = ctx._g(node.data, listeners)
-    node.data = ctx._g(node.data, data.nativeOn)
-    node.data = ctx._b(node.data, node.tag, data.attrs, false, false)
-    node.data = ctx._b(
-      node.data,
-      node.tag,
-      { class: data.class || {}, style: data.style || {} },
-      false,
-      false
-    )
-    delete slots.default
-
-    const children = ctx.children.filter(
-      child => child.data && !!child.data.slot
-    )
-
-    if (node.componentOptions && node.componentOptions.children) {
-      if (!node.componentOptions._children)
-        node.componentOptions._children = node.componentOptions.children
-      node.componentOptions.children = []
-        .concat(
-          node.componentOptions._children || node.componentOptions.children
-        )
-        .concat(
-          children.reduce((acc, child) => {
-            if (child.tag === 'template') {
-              child.children.forEach(item => {
-                if (item.data) item.data.slot = child.slot
-                else item.data = { slot: child.slot }
-
-                acc.push(item)
-              })
-            } else acc.push(child)
-
-            return acc
-          }, [])
-        )
-    } else {
-      node.children = [].concat(node.children).concat(children)
-    }
-
-    return node
-  }
-}
-</script>
diff --git a/packages/@keynote/core/src/components/Vnode.vue b/packages/@keynote/core/src/components/Vnode.vue
deleted file mode 100644
index 7fefedc..0000000
--- a/packages/@keynote/core/src/components/Vnode.vue
+++ /dev/null
@@ -1,12 +0,0 @@
-<template functional>
-  <Function :fn="() => props.vnode" v-bind="attrs" v-on="listeners" :key="data.key"/>
-</template>
-
-<script>
-export default {
-  name: 'VnodeRenderer',
-  props: {
-    vnode: { required: true }
-  }
-}
-</script>
diff --git a/packages/@keynote/core/src/components/index.js b/packages/@keynote/core/src/components/index.js
deleted file mode 100644
index 91a8920..0000000
--- a/packages/@keynote/core/src/components/index.js
+++ /dev/null
@@ -1,15 +0,0 @@
-export { default as Abstract } from './Abstract.vue'
-export { default as Build } from './Build.vue'
-export { default as CodePreview } from './CodePreview.vue'
-export { default as ErrorBoundry } from './ErrorBoundry.vue'
-export { default as Fit } from './Fit.vue'
-export { default as Function } from './Function.vue'
-export { default as Heading } from './Heading.vue'
-export { default as Photo } from './Photo.vue'
-export { default as Subtitle } from './Subtitle.vue'
-export { default as Title } from './Title.vue'
-export { default as Type } from './Type.vue'
-export { default as Vnode } from './Vnode.vue'
-export { default as SlidePresenter } from './SlidePresenter.vue'
-export { default as StoreConsumer } from './StoreConsumer.vue'
-export { default as VirtualElement } from './VirtualElement.vue'
diff --git a/packages/@keynote/core/src/index.js b/packages/@keynote/core/src/index.js
deleted file mode 100644
index dfd1c02..0000000
--- a/packages/@keynote/core/src/index.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import * as components from './components'
-import * as transitions from './transitions'
-import store from './store'
-import KeynoteComponent from './Keynote.vue'
-
-let Vue
-const themes = {}
-const Keynote = {
-  install(context) {
-    Vue = context
-
-    Vue.mixin({
-      beforeCreate() {
-        this.$theme = this.$parent ? this.$parent.$theme : themes.default
-        this.$store = store
-
-        Object.keys(this.$theme.components).forEach(name => {
-          this.$options.components[name] = this.$theme.components[name]
-        })
-      }
-    })
-
-    Vue.component('Keynote', KeynoteComponent)
-    ;[]
-      .concat(Object.entries(components))
-      .concat(Object.entries(transitions))
-      .forEach(([name, component]) => {
-        Vue.component(name, component)
-      })
-  },
-
-  use(installer) {
-    if (!Vue) throw Error('Install Keynote first.')
-
-    const name = (installer.name || 'default').toLowerCase()
-    themes[name] = {}
-    installer({
-      slides(components) {
-        themes[name].components = components
-      }
-    })
-  }
-}
-
-export default Keynote
diff --git a/packages/@keynote/core/src/store.js b/packages/@keynote/core/src/store.js
deleted file mode 100644
index 8963149..0000000
--- a/packages/@keynote/core/src/store.js
+++ /dev/null
@@ -1,77 +0,0 @@
-import Vue from 'vue'
-
-export const vm = new Vue({
-  data: {
-    slides: [],
-    presenter: {
-      component: 'SlidePresenter'
-    },
-    control$: {
-      current: 0,
-      currentStep: 0,
-      isFullscreen: false
-    }
-  },
-  computed: {
-    currentMaxStep() {
-      return this.currentSlide ? this.currentSlide.steps : 0
-    },
-    currentSlide() {
-      return this.slides[this.control$.current]
-    },
-    prevSlide() {
-      return this.slides[this.control$.current - 1]
-    },
-    nextSlide() {
-      return this.slides[this.control$.current + 1]
-    },
-    control() {
-      return {
-        ...this.control$,
-        currentMaxStep: this.currentMaxStep
-      }
-    }
-  },
-  created() {
-    this.$on('control:go', (slide) => {
-      this.control$.current = Math.min(Math.max(0, slide), this.slides.length)
-      this.control$.currentStep = 0
-    })
-    this.$on('control:prev', () => {
-      this.control$.current = Math.max(this.control.current - 1, 0)
-      this.control$.currentStep = 0
-    })
-    this.$on('control:next', () => {
-      this.control$.current = Math.min(
-        this.control.current + 1,
-        this.slides.length
-      )
-      this.control$.currentStep = 0
-    })
-    this.$on('control:step.prev', () => {
-      if (this.control.currentStep <= 0) {
-        this.$emit('control:prev')
-      } else {
-        this.control$.currentStep = this.control.currentStep - 1
-      }
-    })
-    this.$on('control:step.next', () => {
-      if (this.control.currentStep + 1 > this.currentMaxStep) {
-        this.$emit('control:next')
-      } else {
-        this.control$.currentStep = this.control.currentStep + 1
-      }
-    })
-    this.$on('control:fullscreen', () => {
-      this.control$.isFullscreen = !this.control.isFullscreen
-    })
-    this.$on('slides', slides => {
-      this.slides = slides
-    })
-  }
-})
-
-export default {
-  state: vm,
-  dispatch: (name, ...args) => vm.$emit(name, ...args)
-}
\ No newline at end of file
diff --git a/packages/@keynote/core/src/transitions/TransitionNoop.vue b/packages/@keynote/core/src/transitions/TransitionNoop.vue
deleted file mode 100644
index 0f80d38..0000000
--- a/packages/@keynote/core/src/transitions/TransitionNoop.vue
+++ /dev/null
@@ -1,35 +0,0 @@
-<template>
-  <transition :css="false" v-bind="$attrs" v-on="$listeners"
-    @before-enter="beforeEnter"
-    @enter="enter"
-    @after-enter="afterEnter"
-    @enter-cancelled="enterCancelled"
-    @before-leave="beforeLeave"
-    @leave="leave"
-    @after-leave="afterLeave"
-    @leave-cancelled="leaveCancelled"
-  >
-    <slot />
-  </transition>
-</template>
-
-<script>
-import Velocity from 'velocity-animate'
-
-export default {
-  abstract: true,
-  props: {
-    skipTransition: { type: Boolean, default: false }
-  },
-  methods: {
-    beforeEnter() {},
-    enter: (_, done) => done(),
-    afterEnter() {},
-    enterCancelled: el => Velocity(el, 'finish'),
-    beforeLeave() {},
-    leave: (_, done) => done(),
-    afterLeave() {},
-    leaveCancelled: el => Velocity(el, 'finish')
-  }
-}
-</script>
diff --git a/packages/@keynote/core/src/transitions/index.js b/packages/@keynote/core/src/transitions/index.js
deleted file mode 100644
index 1eb67c6..0000000
--- a/packages/@keynote/core/src/transitions/index.js
+++ /dev/null
@@ -1,692 +0,0 @@
-import Velocity from 'velocity-animate'
-import PropTypes from '@znck/prop-types'
-import Transition from './TransitionNoop.vue'
-
-// Transitions:
-export const TransitionClothesline = {
-  extends: Transition,
-  props: {
-    direction: PropTypes.oneOf('left-to-right', 'right-to-left').value(
-      'right-to-left'
-    ),
-    duration: PropTypes.number.value(500)
-  },
-  computed: {
-    inverse() {
-      return this.direction !== 'right-to-left'
-    }
-  },
-  methods: {
-    beforeEnter(el) {
-      if (this.skipTransition) return
-      Velocity(
-        el,
-        {
-          translateX: this.inverse ? '-130%' : '130%',
-          rotateZ: this.inverse ? '35deg' : '-35deg'
-        },
-        { duration: 0 }
-      )
-    },
-    enter(el, done) {
-      if (this.skipTransition) return done()
-      Velocity(el, { translateZ: 0 }, { duration: this.duration * 0.2 })
-      Velocity(
-        el,
-        {
-          translateZ: 0,
-          translateX: ['0%', [250, 30]],
-          rotateZ: ['0deg', [500, 60]]
-        },
-        { duration: this.duration * 0.8, complete: done }
-      )
-    },
-    leave(el, done) {
-      if (this.skipTransition) return done()
-      Velocity(
-        el,
-        {
-          translateZ: 0,
-          translateX: this.inverse ? '120%' : '-120%',
-          rotateZ: this.inverse ? '35deg' : '-35deg'
-        },
-        { duration: this.duration, complete: done }
-      )
-    }
-  }
-}
-
-export const TransitionDissolve = {
-  extends: Transition,
-  props: {
-    duration: PropTypes.number.value(1000)
-  },
-  methods: {
-    enter(el, done) {
-      if (this.skipTransition) return done()
-      Velocity(
-        el,
-        { opacity: [1, 'easeInSine', 0] },
-        { duration: this.duration, complete: done }
-      )
-    },
-    leave(el, done) {
-      if (this.skipTransition) return done()
-      Velocity(
-        el,
-        { opacity: [0, 'easeInSine', 1] },
-        { duration: this.duration, complete: done }
-      )
-    }
-  }
-}
-
-Velocity.Easings.drop = t => {
-  if (t < .4) {
-    return 1 - 6.25 * t * t
-  }
-  else if (t < .8) {
-    return 0.25 - 6.25 * (t - .6) * (t - .6)
-  }
-  else {
-    return 0.125 - 6.25 * (t - .9) * (t - .9)
-  }
-}
-export const TransitionDrop = {
-  extends: Transition,
-  props: {
-    duration: PropTypes.number.value(1000)
-  },
-  methods: {
-    enter(el, done) {
-      if (this.skipTransition) return done()
-      Velocity(
-        el,
-        { translateY: ['-100%', 'drop', '0%'], translateZ: [0, 0] },
-        { duration: this.duration, complete: done }
-      )
-    }
-  }
-}
-
-export const TransitionFall = {
-  extends: Transition,
-  props: {
-    duration: PropTypes.number.value(5000)
-  },
-  methods: {
-    leave(el, done) {
-      if (this.skipTransition) return done()
-      el.style.zIndex = 1
-      el.style.transformStyle = 'preserve-3d'
-      el.style.transformOrigin = 'bottom center'
-      Velocity(
-        el,
-        { rotateX: ['-90deg', 'easeInSine', '0deg'] },
-        { duration: this.duration, complete: done }
-      )
-    }
-  }
-}
-
-export const TransitionMoveIn = {
-  extends: Transition,
-  props: {
-    bounce: PropTypes.bool.value(true),
-    direction: PropTypes.oneOf(
-      'left-to-right',
-      'right-to-left',
-      'top-to-bottom',
-      'bottom-to-top'
-    ).value('left-to-right'),
-    duration: PropTypes.number.value(3500)
-  },
-  computed: {
-    startX() {
-      switch (this.direction) {
-        case 'top-to-bottom':
-          return -180
-        case 'bottom-to-top':
-          return 180
-        default:
-          return 0
-      }
-    },
-    endX() {
-      return 0
-    },
-    startY() {
-      switch (this.direction) {
-        case 'left-to-right':
-          return -180
-        case 'right-to-left':
-          return 180
-        default:
-          return 0
-      }
-    },
-    endY() {
-      return 0
-    },
-    spring() {
-      return this.bounce ? [0.67, -0.87, 0.29, 1.6] : [250, 25]
-    }
-  },
-  methods: {
-    enter(el, done) {
-      if (this.skipTransition) return done()
-      Velocity(
-        el,
-        {
-          rotateX: [this.endX + 'deg', this.spring, this.startX + 'deg'],
-          rotateY: [this.endY + 'deg', this.spring, this.startY + 'deg']
-        },
-        {
-          duration: this.duration,
-          complete: () => {
-            this.$emit('entered', this)
-            done()
-          }
-        }
-      )
-    },
-    leave(el, done) {
-      if (this.skipTransition) return done()
-      Velocity(
-        el,
-        {
-          rotateX: [-this.startX + 'deg', this.spring, this.endX + 'deg'],
-          rotateY: [-this.startY + 'deg', this.spring, this.endY + 'deg']
-        },
-        {
-          duration: this.duration,
-          complete: () => {
-            this.$emit('exited', this)
-            done()
-          }
-        }
-      )
-    }
-  }
-}
-
-export const TransitionNoop = Transition
-
-export const TransitionPivot = {
-  extends: Transition,
-  props: {
-    direction: PropTypes.oneOf(
-      'from-top-left',
-      'from-top-right',
-      'from-bottom-left',
-      'from-bottom-right'
-    ).value('from-top-left'),
-    duration: PropTypes.number.value(1000)
-  },
-  computed: {
-    pivot() {
-      return this.direction.replace(/from-/, '').replace('-', ' ')
-    },
-    from() {
-      switch (this.direction) {
-        case 'from-top-left':
-        case 'from-bottom-right':
-          return -90
-        case 'from-top-right':
-        case 'from-bottom-left':
-          return 90
-      }
-    }
-  },
-  methods: {
-    leave(el, done) {
-      if (this.skipTransition) return done()
-      Velocity(
-        el,
-        { translateZ: 0 },
-        { duration: this.duration, complete: done }
-      )
-    },
-    enter(el, done) {
-      if (this.skipTransition) return done()
-      el.style.transformOrigin = this.pivot
-      Velocity(
-        el,
-        { rotateZ: ['0deg', 'easeOutSine', this.from + 'deg'] },
-        { duration: this.duration, complete: done }
-      )
-    }
-  }
-}
-
-export const TransitionPush = {
-  extends: Transition,
-  props: {
-    direction: PropTypes.oneOf(
-      'left-to-right',
-      'right-to-left',
-      'top-to-bottom',
-      'bottom-to-top'
-    ).value('right-to-left'),
-    duration: PropTypes.number.value(500)
-  },
-  computed: {
-    startX() {
-      switch (this.direction) {
-        case 'left-to-right':
-          return -100
-        case 'right-to-left':
-          return 100
-        default:
-          return 0
-      }
-    },
-    startY() {
-      switch (this.direction) {
-        case 'top-to-bottom':
-          return -100
-        case 'bottom-to-top':
-          return 100
-        default:
-          return 0
-      }
-    },
-    endX() {
-      return 0
-    },
-    endY() {
-      return 0
-    }
-  },
-  methods: {
-    enter(el, done) {
-      if (this.skipTransition) return done()
-      Velocity(
-        el,
-        {
-          translateZ: 0,
-          translateX: [this.endX + '%', 'easeInSine', this.startX + '%'],
-          translateY: [this.endY + '%', 'easeInSine', this.startY + '%']
-        },
-        { duration: this.duration, complete: done }
-      )
-    },
-    leave(el, done) {
-      if (this.skipTransition) return done()
-      Velocity(
-        el,
-        {
-          translateZ: 0,
-          translateX: [-this.startX + '%', 'easeInSine', this.endX + '%'],
-          translateY: [-this.startY + '%', 'easeInSine', this.endY + '%']
-        },
-        { duration: this.duration, complete: done }
-      )
-    }
-  }
-}
-
-export const TransitionReveal = {
-  extends: Transition,
-  props: {
-    direction: PropTypes.oneOf(
-      'left-to-right',
-      'right-to-left',
-      'top-to-bottom',
-      'bottom-to-top',
-      'top-left-to-bottom-right',
-      'top-right-to-bottom-left',
-      'bottom-left-to-top-right',
-      'bottom-right-to-top-left'
-    ).value('left-to-right'),
-    duration: PropTypes.number.value(500)
-  },
-  computed: {
-    startX() {
-      switch (this.direction) {
-        case 'left-to-right':
-        case 'top-left-to-bottom-right':
-        case 'bottom-left-to-top-right':
-          return -100
-        case 'right-to-left':
-        case 'top-right-to-bottom-left':
-        case 'bottom-right-to-top-left':
-          return 100
-        default:
-          return 0
-      }
-    },
-    startY() {
-      switch (this.direction) {
-        case 'top-to-bottom':
-        case 'top-right-to-bottom-left':
-        case 'top-left-to-bottom-right':
-          return -100
-        case 'bottom-to-top':
-        case 'bottom-left-to-top-right':
-        case 'bottom-right-to-top-left':
-          return 100
-        default:
-          return 0
-      }
-    },
-    endX() {
-      return 0
-    },
-    endY() {
-      return 0
-    }
-  },
-  methods: {
-    leave(el, done) {
-      if (this.skipTransition) return done()
-      el.style.zIndex = 1
-      Velocity(
-        el,
-        {
-          translateZ: 0,
-          translateX: [-this.startX + '%', 'easeInSine', this.endX + '%'],
-          translateY: [-this.startY + '%', 'easeInSine', this.endY + '%']
-        },
-        { duration: this.duration, complete: done }
-      )
-    }
-  }
-}
-
-export const TransitionRevolvingDoor = {
-  extends: Transition,
-  props: {
-    bounce: PropTypes.bool.value(true),
-    direction: PropTypes.oneOf('left-to-right', 'right-to-left').value(
-      'right-to-left'
-    ),
-    duration: PropTypes.number.value(1000)
-  },
-  computed: {
-    origin() {
-      return this.direction === 'left-to-right' ? 'center right' : 'center left'
-    },
-    easing() {
-      return this.bounce ? [0.38, -0.99, 0.58, -0.15] : 'easeOutSine'
-    },
-    from() {
-      return this.direction === 'left-to-right' ? -90 : 90
-    }
-  },
-  methods: {
-    enter(el, done) {
-      if (this.skipTransition) return done()
-      const transformOrigin = el.style.transformOrigin
-      el.style.transformOrigin = this.origin
-      Velocity(
-        el,
-        { rotateY: ['0deg', this.easing, this.from + 'deg'] },
-        {
-          duration: this.duration,
-          complete: () => {
-            el.style.transformOrigin = transformOrigin
-            done()
-          }
-        }
-      )
-    },
-    leave(el, done) {
-      if (this.skipTransition) return done()
-      el.style.transformOrigin = this.origin
-      el.style.zIndex = 1
-      Velocity(
-        el,
-        { rotateY: [-this.from + 'deg', this.easing, '0deg'] },
-        { duration: this.duration, complete: done }
-      )
-    }
-  }
-}
-
-export const TransitionScale = {
-  extends: Transition,
-  props: {
-    bounce: PropTypes.bool.value(true),
-    direction: PropTypes.oneOf('up', 'down', 'in', 'out').value('up'),
-    duration: PropTypes.number.value(1500)
-  },
-  computed: {
-    easing() {
-      return this.bounce ? [0.28, -0.39, 0.58, -0.15] : 'easeOutSine'
-    }
-  },
-  methods: {
-    enter(el, done) {
-      if (this.skipTransition) return done()
-      if (this.direction === 'up' || this.direction === 'in') {
-        Velocity(
-          el,
-          { opacity: [1, 0] },
-          { duration: this.duration * 0.5, queue: false }
-        )
-        Velocity(
-          el,
-          {
-            scale: [
-              1,
-              [0.42, 0.56, 0.58, 1.43],
-              this.direction === 'up' ? 0.25 : 2
-            ]
-          },
-          { duration: this.duration, complete: done }
-        )
-      }
-    },
-    leave(el, done) {
-      if (this.skipTransition) return done()
-      if (this.direction === 'up' || this.direction === 'in') {
-        el.style.zIndex = 1
-        Velocity(
-          el,
-          { opacity: [0, 1] },
-          { duration: this.duration * 0.5, complete: done }
-        )
-      } else {
-        el.style.zIndex = 1
-        Velocity(
-          el,
-          { scale: [this.direction === 'down' ? 0 : 2, this.easing, 1] },
-          { duration: this.duration, queue: false }
-        )
-        Velocity(
-          el,
-          { opacity: [0, 1] },
-          {
-            delay: 0.5 * this.duration,
-            duration: 0.5 * this.duration,
-            complete: done
-          }
-        )
-      }
-    }
-  }
-}
-
-export const TransitionSwap = {
-  extends: Transition,
-  props: {
-    direction: PropTypes.oneOf('from-left', 'from-right').value('from-right'),
-    duration: PropTypes.number.value(1000)
-  },
-  computed: {
-    unit() {
-      return this.direction === 'from-right' ? 80 : -80
-    }
-  },
-  methods: {
-    enter(el, done) {
-      if (this.skipTransition) return done()
-      Velocity(
-        el,
-        {
-          translateZ: [0, 'easeOutSine', '-400vw'],
-          scale: [1, 'easeInSine', 0.25]
-        },
-        { duration: this.duration, queue: false }
-      )
-      Velocity(
-        el,
-        { translateX: [this.unit + '%', 'easeOutSine', '0%'] },
-        { duration: this.duration * 0.5 }
-      )
-      Velocity(
-        el,
-        { translateX: ['0%', 'easeOutSine', this.unit + '%'] },
-        { duration: this.duration * 0.5, complete: done }
-      )
-    },
-    leave(el, done) {
-      if (this.skipTransition) return done()
-      el.style.zIndex = 1
-      Velocity(
-        el,
-        {
-          translateZ: ['-400vw', 'easeOutSine', 0],
-          scale: [0.25, 'easeInSine', 1]
-        },
-        { duration: this.duration, queue: false }
-      )
-      Velocity(
-        el,
-        { translateX: [-this.unit + '%', 'easeOutSine', '0%'] },
-        {
-          duration: this.duration * 0.5,
-          complete: () => {
-            el.style.zIndex = 0
-          }
-        }
-      )
-      Velocity(
-        el,
-        { translateX: ['0%', 'easeOutSine', -this.unit + '%'] },
-        { duration: this.duration * 0.5, complete: done }
-      )
-    }
-  }
-}
-
-export const TransitionSwitch = {
-  extends: Transition,
-  props: {
-    direction: PropTypes.oneOf('left', 'right').value('left'),
-    duration: PropTypes.number.value(1000)
-  },
-  methods: {
-    enter(el, done) {
-      if (this.skipTransition) return done()
-      el.style.transformOrigin =
-        this.direction === 'left' ? 'center left' : 'center right'
-      Velocity(
-        el,
-        {
-          rotateZ: ['45deg', 'easeInSine', '0deg'],
-          translateY: ['50%', 'easeInSine', '0%'],
-          translateX: ['10%', 'easeInSine', '0%']
-        },
-        {
-          duration: this.duration / 2,
-          complete() {
-            el.style.zIndex = 1
-          }
-        }
-      )
-      Velocity(
-        el,
-        {
-          rotateZ: ['0deg', 'easeInSine', '45deg'],
-          translateY: ['0%', 'easeInSine', '50%'],
-          translateX: ['0%', 'easeInSine', '10%']
-        },
-        {
-          duration: this.duration / 2,
-          complete: done
-        }
-      )
-    },
-    leave(el, done) {
-      if (this.skipTransition) return done()
-      el.style.transformOrigin =
-        this.direction === 'left' ? 'center left' : 'center right'
-      el.style.zIndex = 1
-      Velocity(
-        el,
-        {
-          rotateZ: ['-45deg', 'easeInSine', '0deg'],
-          translateY: ['-50%', 'easeInSine', '0%'],
-          translateX: ['10%', 'easeInSine', '0%']
-        },
-        {
-          duration: this.duration / 2,
-          complete() {
-            el.style.zIndex = 0
-          }
-        }
-      )
-      Velocity(
-        el,
-        {
-          rotateZ: ['0deg', 'easeInSine', '-45deg'],
-          translateY: ['0%', 'easeInSine', '-50%'],
-          translateX: ['0%', 'easeInSine', '10%']
-        },
-        {
-          duration: this.duration / 2,
-          complete: done
-        }
-      )
-    }
-  }
-}
-
-export const TransitionTwirl = {
-  extends: Transition,
-  props: {
-    direction: PropTypes.oneOf('clockwise', 'counterclockwise').value(
-      'clockwise'
-    ),
-    duration: PropTypes.number.value(1000)
-  },
-  computed: {
-    unit() {
-      return (
-        (this.direction === 'clockwise' ? 360 : -360) * (this.duration / 1000)
-      )
-    }
-  },
-  methods: {
-    enter(el, done) {
-      if (this.skipTransition) return done()
-      Velocity(el, { scale: 0 }, { duration: 0 })
-      Velocity(
-        el,
-        {
-          scale: [1, 'easeOutSine', 0.1],
-          rotateZ: [this.unit + 'deg', 'easeOutSine', '0deg']
-        },
-        {
-          duration: this.duration / 2,
-          delay: this.duration / 2,
-          complete: done
-        }
-      )
-    },
-    leave(el, done) {
-      if (this.skipTransition) return done()
-      el.style.zIndex = 1
-      Velocity(
-        el,
-        {
-          scale: [0.1, 'easeOutSine', 1],
-          rotateZ: ['0deg', 'easeInSine', -this.unit + 'deg']
-        },
-        { duration: this.duration / 2, complete: done }
-      )
-    }
-  }
-}
diff --git a/packages/@keynote/core/src/utils.js b/packages/@keynote/core/src/utils.js
deleted file mode 100644
index 9ca635b..0000000
--- a/packages/@keynote/core/src/utils.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// Allow trailing.
-export const throttle = (fn, threshhold = 250, scope) => {
-  let last = null
-  let deferTimer
-  return function (...args) {
-    const context = scope || this
-
-    const now = Date.now()
-
-    if (!last) {
-      last = now
-      fn.apply(context, args)
-    } else if (now < last + threshhold) {
-      // hold on to it
-      clearTimeout(deferTimer)
-      deferTimer = setTimeout(() => {
-        last = null
-        fn.apply(context, args)
-      }, threshhold)
-    } else {
-      last = null
-      fn.apply(context, args)
-    }
-  }
-}
\ No newline at end of file
diff --git a/packages/@keynote/theme-default/package.json b/packages/@keynote/theme-default/package.json
deleted file mode 100644
index 7148bbc..0000000
--- a/packages/@keynote/theme-default/package.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "name": "@keynote/theme-default",
-  "version": "1.0.2",
-  "description": "Default theme for keynote",
-  "main": "dist/index.js",
-  "scripts": {
-    "test": "jest",
-    "build": "vuec src",
-    "prebuild": "rm -rf dist"
-  },
-  "author": "Rahul Kadyan <hi@znck.me> (https://znck.me)",
-  "license": "MIT"
-}
diff --git a/packages/@keynote/theme-default/src/AuthorSlide.vue b/packages/@keynote/theme-default/src/AuthorSlide.vue
deleted file mode 100644
index 7fa5d0c..0000000
--- a/packages/@keynote/theme-default/src/AuthorSlide.vue
+++ /dev/null
@@ -1,51 +0,0 @@
-<template>
-<Slide class="slide-author">
-  <Photo class="photo" :src="photo" />
-  <Heading :level="2"><span class="name">{{ name }}</span></Heading>
-  <p class="bio"><slot>{{ bio }}</slot></p>
-</Slide>
-</template>
-
-<script>
-export default {
-  name: 'AuthorSlide',
-  keynote: 'slide',
-  props: {
-    photo: {
-      type: String,
-      required: true
-    },
-    name: {
-      type: String,
-      default: null
-    },
-    bio: {
-      type: String
-    }
-  }
-}
-</script>
-
-<style lang="scss">
-@import './variables.scss';
-
-.slide.slide-author {
-  align-items: center;
-  justify-content: center;
-  text-align: center;
-  .photo {
-    margin: 1rem;
-    width: 128px;
-    height: 128px;
-    border-radius: 50%;
-    object-fit: cover;
-    overflow: hidden;
-  }
-  .name {
-    color: $primary-color;
-  }
-  .bio {
-    color: $gray-darker;
-  }
-}
-</style>
diff --git a/packages/@keynote/theme-default/src/PhotoSlide.vue b/packages/@keynote/theme-default/src/PhotoSlide.vue
deleted file mode 100644
index 1d270b6..0000000
--- a/packages/@keynote/theme-default/src/PhotoSlide.vue
+++ /dev/null
@@ -1,37 +0,0 @@
-<template>
-  <Slide class="slide-photo">
-    <Photo class="photo" :src="photo" />
-  </Slide>
-</template>
-
-<script>
-export default {
-  name: 'PhotoSlide',
-  keynote: 'slide',
-  props: {
-    photo: {
-      type: String,
-      required: true
-    }
-  }
-}
-</script>
-
-
-<style lang="scss">
-@import './variables';
-.slide.slide-photo {
-  align-items: center;
-  justify-content: center;
-  text-align: center;
-  padding: 0;
-  .photo {
-    flex-grow: 1;
-    flex-shrink: 1;
-    width: 100%;
-    height: 100%;
-    object-fit: cover;
-    overflow: hidden;
-  }
-}
-</style>
diff --git a/packages/@keynote/theme-default/src/PhotoTitleSlide.vue b/packages/@keynote/theme-default/src/PhotoTitleSlide.vue
deleted file mode 100644
index bc16be9..0000000
--- a/packages/@keynote/theme-default/src/PhotoTitleSlide.vue
+++ /dev/null
@@ -1,91 +0,0 @@
-<template>
-<Slide class="slide-photo-title" :class="{ vertical, left }">
-  <Photo class="photo" :src="photo" />
-  <div class="body">
-    <Fit>
-      <Title class="title">{{ title }}</Title>
-      <Subtitle>
-        <slot>{{ subtitle }}</slot>
-      </Subtitle>
-    </Fit>
-  </div>
-</Slide>
-</template>
-
-<script>
-export default {
-  name: 'PhotoTitleSlide',
-  keynote: 'slide',
-  props: {
-    vertical: {
-      type: Boolean,
-      default: false
-    },
-    left: {
-      type: Boolean,
-      default: false
-    },
-    photo: {
-      type: String,
-      required: true
-    },
-    title: {
-      type: String,
-      required: true
-    },
-    subtitle: {
-      type: String,
-      default: null
-    }
-  }
-}
-</script>
-
-
-<style lang="scss">
-@import './variables';
-.slide.slide-photo-title {
-  align-items: center;
-  justify-content: center;
-  text-align: center;
-  padding: 0;
-  .photo {
-    flex-grow: 1;
-    flex-shrink: 1;
-    width: 100%;
-    height: 50%;
-    object-fit: cover;
-    overflow: hidden;
-    object-fit: cover;
-  }
-  .title {
-    color: $primary-color;
-  }
-  .subtitle {
-    color: $secondary-color;
-  }
-  .body {
-    flex-grow: 1;
-    flex-shrink: 1;
-    width: 100%;
-    height: 50%;
-  }
-  &.vertical {
-    flex-direction: row;
-    .body {
-      padding: 1rem;
-      height: 100%;
-    }
-    .photo {
-      order: 2;
-      margin: 0;
-      height: 100%;
-    }
-    &.left {
-      .photo {
-        order: initial;
-      }
-    }
-  }
-}
-</style>
diff --git a/packages/@keynote/theme-default/src/Slide.vue b/packages/@keynote/theme-default/src/Slide.vue
deleted file mode 100644
index a53f0d5..0000000
--- a/packages/@keynote/theme-default/src/Slide.vue
+++ /dev/null
@@ -1,17 +0,0 @@
-<template>
-  <div class="slide">
-    <slot />
-  </div>
-</template>
-
-<style>
-.slide {
-  font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
-  display: flex;
-  flex-direction: column;
-  padding: 0 2rem;
-  background-color: white;
-
-  backface-visibility: hidden;
-}
-</style>
diff --git a/packages/@keynote/theme-default/src/TitleSlide.vue b/packages/@keynote/theme-default/src/TitleSlide.vue
deleted file mode 100644
index 3056733..0000000
--- a/packages/@keynote/theme-default/src/TitleSlide.vue
+++ /dev/null
@@ -1,48 +0,0 @@
-<template>
-<Slide class="slide-title">
-  <Fit>
-    <Title class="title">{{ title }}</Title>
-
-    <slot>
-      <Subtitle class="subtitle" v-if="subtitle">
-        {{ subtitle }}
-      </Subtitle>
-    </slot>
-  </Fit>
-</Slide>
-</template>
-
-<script>
-export default {
-  name: 'TitleSlide',
-  keynote: 'slide',
-  props: {
-    title: {
-      type: String,
-      required: true
-    },
-    subtitle: {
-      type: String,
-      default: null
-    }
-  }
-}
-</script>
-
-
-<style lang="scss">
-@import './variables';
-.slide.slide-title {
-  align-items: center;
-  justify-content: center;
-  text-align: center;
-  .title {
-    color: $primary-color;
-    margin-bottom: 0;
-  }
-  .subtitle {
-    color: $secondary-color;
-    margin-top: 0;
-  }
-}
-</style>
diff --git a/packages/@keynote/theme-default/src/index.js b/packages/@keynote/theme-default/src/index.js
deleted file mode 100644
index a04870f..0000000
--- a/packages/@keynote/theme-default/src/index.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import Slide from './Slide.vue'
-import AuthorSlide from './AuthorSlide.vue'
-import PhotoSlide from './PhotoSlide.vue'
-import PhotoTitleSlide from './PhotoTitleSlide.vue'
-import TitleSlide from './TitleSlide.vue'
-
-export default function Default(Keynote) {
-  Keynote.slides({
-    Slide,
-    AuthorSlide,
-    PhotoSlide,
-    PhotoTitleSlide,
-    TitleSlide
-  })
-}
diff --git a/packages/@keynote/theme-default/src/variables.scss b/packages/@keynote/theme-default/src/variables.scss
deleted file mode 100644
index 5c2c2d2..0000000
--- a/packages/@keynote/theme-default/src/variables.scss
+++ /dev/null
@@ -1,15 +0,0 @@
-:root {
-  --font-size: 18px;
-  --primary-color: #41b883;
-  --secondary-color: #35495e;
-  --gray-darker: #333;
-  --gray-light: #ccc;
-}
-
-$font-size-base: var(--font-size);
-
-$primary-color: var(--primary-color);
-$secondary-color: var(--secondary-color);
-
-$gray-darker: var(--gray-darker);
-$gray-light: var(--gray-light);
\ No newline at end of file
diff --git a/packages/cli/.npmignore b/packages/cli/.npmignore
new file mode 100644
index 0000000..22923f4
--- /dev/null
+++ b/packages/cli/.npmignore
@@ -0,0 +1 @@
+*.unit.js
diff --git a/packages/cli/README.md b/packages/cli/README.md
new file mode 100644
index 0000000..5e8cbd5
--- /dev/null
+++ b/packages/cli/README.md
@@ -0,0 +1 @@
+# @vue-slides/cli
\ No newline at end of file
diff --git a/packages/@keynote/cli/bin/build.js b/packages/cli/bin/build.js
similarity index 53%
rename from packages/@keynote/cli/bin/build.js
rename to packages/cli/bin/build.js
index de14f2e..2cb2d89 100644
--- a/packages/@keynote/cli/bin/build.js
+++ b/packages/cli/bin/build.js
@@ -1,18 +1,21 @@
-const {
-  createWebpackConfig
-} = require('./utils')
+const { createWebpackConfig } = require('./utils')
 
 module.exports = async ({
   file,
   outDir,
   debug,
-  theme = '@keynote/theme-default'
+  theme = '@vue-slides/theme-vue'
 }) => {
   process.env.NODE_ENV = 'production'
   const webpack = require('webpack')
   const config = createWebpackConfig({ file, theme, debug, outDir })
 
-  webpack(config.toConfig()).run(((error, stats) => {
+  webpack(config.toConfig()).run(error => {
+    if (error) {
+      console.error(error)
+
+      return
+    }
     console.log('Done.')
-  }))
-}
\ No newline at end of file
+  })
+}
diff --git a/packages/cli/bin/serve.js b/packages/cli/bin/serve.js
new file mode 100644
index 0000000..f691382
--- /dev/null
+++ b/packages/cli/bin/serve.js
@@ -0,0 +1,67 @@
+const path = require('path')
+const chalk = require('chalk')
+const { createWebpackConfig } = require('./utils')
+
+module.exports = async ({ file, host, port, theme = '@vue-slides/theme-vue' }) => {
+  const portFinder = require('portfinder')
+  const webpack = require('webpack')
+  const serve = require('webpack-serve')
+  const config = createWebpackConfig({
+    file,
+    theme,
+    outDir: path.resolve(process.cwd(), 'dist')
+  })
+
+  const defaultHost = process.platform === 'win32' ? 'localhost' : '0.0.0.0'
+
+  config.mode('development').devtool('inline-source-map')
+  config.devServer.hot(true)
+  
+  portFinder.basePort = port || 8080
+  host = host || defaultHost
+  port = await portFinder.getPortPromise()
+
+  const displayHost =
+    host === defaultHost && process.platform !== 'win32' ? 'localhost' : host
+
+  const webpackConfig = config.toConfig()
+  const compiler = webpack(webpackConfig)
+
+  let count = 0
+  compiler.hooks.done.tap('vue-slides', error => {
+    const time = new Date().toTimeString().match(/^[\d:]+/)[0]
+    if (count === 0) {
+        console.log(
+        `\n  VueSlides dev server listening at ${chalk.cyan(
+          `http://${displayHost}:${port}`
+        )}\n`
+      )
+    }
+    console.log(
+      `  ${chalk.gray(`[${time}]`)} ${chalk.green('✔')} successfully compiled (${++count})`
+    )
+  })
+  compiler.hooks.failed.tap('vue-slides', error => {
+    const time = new Date().toTimeString().match(/^[\d:]+/)[0]
+    console.log(
+      `  ${chalk.gray(`[${time}]`)} ${chalk.red('❌')} compilation failed.`
+    )
+    console.error(error)
+  })
+
+  const nonExistentDir = path.resolve(__dirname, 'non-existent')
+  await serve({
+    // avoid project cwd from being served. Otherwise if the user has index.html
+    // in cwd it would break the server
+    content: [nonExistentDir],
+    compiler,
+    host,
+    dev: { logLevel: 'warn' },
+    hot: {
+      port: port + 1,
+      logLevel: 'error'
+    },
+    logLevel: 'error',
+    port
+  })
+}
diff --git a/packages/cli/bin/template/index.html b/packages/cli/bin/template/index.html
new file mode 100644
index 0000000..e06bc9e
--- /dev/null
+++ b/packages/cli/bin/template/index.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <meta http-equiv="X-UA-Compatible" content="ie=edge">
+  <title>VueSlides</title>
+</head>
+<body>
+  <div id="app"></div>
+</body>
+</html>
diff --git a/packages/cli/bin/template/main.js b/packages/cli/bin/template/main.js
new file mode 100644
index 0000000..69b6fba
--- /dev/null
+++ b/packages/cli/bin/template/main.js
@@ -0,0 +1,68 @@
+/* eslint-disable */
+import Vue from 'vue'
+import createKeynote from '@vue-slides/core'
+import Presentation from '@vue-slides-presentation'
+import upperFirst from 'lodash/upperFirst'
+import camelCase from 'lodash/camelCase'
+
+if (__KEYNOTE_LOAD_COMPONENTS__) {
+  const requireComponent = require.context(
+    `${__CWD__}/components`,
+    false,
+    /[\w-]+\.vue$/
+  )
+
+  requireComponent.keys().forEach(fileName => {
+    // Get the component config
+    const componentConfig = requireComponent(fileName)
+    // Get the PascalCase version of the component name
+    const componentName = upperFirst(
+      camelCase(
+        fileName
+          // Remove the "./" from the beginning
+          .replace(/^\.\//, '')
+          // Remove the file extension from the end
+          .replace(/\.\w+$/, '')
+      )
+    )
+    console.log(componentName)
+    // Globally register the component
+    Vue.component(componentName, componentConfig.default || componentConfig)
+  })
+}
+
+const slides = {}
+
+if (__KEYNOTE_LOAD_SLIDES__) {
+  const requireComponent = require.context(
+    `${__CWD__}/slides`,
+    false,
+    /[\w-]+\.vue$/
+  )
+
+  requireComponent.keys().forEach(fileName => {
+    // Get the component config
+    const componentConfig = requireComponent(fileName)
+    // Get the PascalCase version of the component name
+    const componentName = upperFirst(
+      camelCase(
+        fileName
+          // Remove the "./" from the beginning
+          .replace(/^\.\//, '')
+          // Remove the file extension from the end
+          .replace(/\.\w+$/, '')
+      )
+    )
+    // register locally
+    slides[componentName] = componentConfig.default || componentConfig
+  })
+}
+
+const vue-slides = createKeynote(Presentation, {
+  theme: require(__THEME__).default,
+  slides
+})
+
+if (__ENV__ !== 'production') {
+  window.vue-slides = vue-slides
+}
diff --git a/packages/cli/bin/utils.js b/packages/cli/bin/utils.js
new file mode 100644
index 0000000..09f9dab
--- /dev/null
+++ b/packages/cli/bin/utils.js
@@ -0,0 +1,29 @@
+const createConfig = require('./webpack/createConfig')
+
+function createWebpackConfig({ file, theme, debug, outDir }) {
+  const path = require('path')
+
+  file = path.resolve(file)
+  outDir = outDir || path.resolve(path.dirname(file), 'dist')
+
+  if (path.resolve() === outDir)
+    throw Error('Cannot use current directory as out dir.')
+
+  const config = createConfig({ debug, outDir, theme })
+
+  if (/\.(vue|slides)$/.test(file)) {
+    config.entry('vue-slides').add(
+      path.relative(process.cwd(), path.resolve(__dirname, './template/main.js'))
+    )
+
+    config.resolve.alias.set('@vue-slides-presentation', file)
+  } else {
+    config.entry('vue-slides').add(path.relative(process.cwd(), file))
+  }
+
+  return config
+}
+
+module.exports = {
+  createWebpackConfig
+}
diff --git a/packages/cli/bin/vue-slides.js b/packages/cli/bin/vue-slides.js
new file mode 100755
index 0000000..4a3950e
--- /dev/null
+++ b/packages/cli/bin/vue-slides.js
@@ -0,0 +1,70 @@
+#!/usr/bin/env node
+
+const chalk = require('chalk')
+const program = require('commander')
+
+program.version(require('../package.json').version).usage('<command> [options]')
+
+program
+  .command('serve [targetFile]')
+  .description('start development server')
+  .option(
+    '-t, --theme <theme>',
+    'use specified theme (default: @vue-slides/theme-vue)'
+  )
+  .option('-p, --port <port>', 'use specified port (default: 8080)')
+  .option('-h, --host <host>', 'use specified host (default: 0.0.0.0)')
+  .action((file = 'presentation.vue', { host, port, theme }) => {
+    wrapCommand(require('./serve'))({ file, host, port, theme })
+  })
+
+program
+  .command('build [targetFile]')
+  .description('build as static site')
+  .option(
+    '-d, --dest <outDir>',
+    'specify build output dir (default: .vue-slides/dist)'
+  )
+  .option(
+    '-t, --theme <theme>',
+    'use specified theme (default: @vue-slides/theme-default)'
+  )
+  .option('--debug', 'build in development mode for debugging')
+  .action((file = 'presentation.vue', { debug, dest, theme }) => {
+    const outDir = dest ? require('path').resolve(dest) : null
+    wrapCommand(require('./build'))({ file, debug, outDir, theme })
+  })
+
+// output help information on unknown commands
+program.arguments('<command>').action(cmd => {
+  program.outputHelp()
+  console.log(`  ` + chalk.red(`Unknown command ${chalk.yellow(cmd)}.`))
+  console.log()
+})
+
+// add some useful info on help
+program.on('--help', () => {
+  console.log()
+  console.log(
+    `  Run ${chalk.cyan(
+      `vue-slides <command> --help`
+    )} for detailed usage of given command.`
+  )
+  console.log()
+})
+
+program.commands.forEach(c => c.on('--help', () => console.log()))
+
+program.parse(process.argv)
+
+if (!process.argv.slice(2).length) {
+  program.outputHelp()
+}
+
+function wrapCommand(fn) {
+  return (...args) => {
+    return fn(...args).catch(err => {
+      console.error(chalk.red(err.stack))
+    })
+  }
+}
diff --git a/packages/cli/bin/webpack/createConfig.js b/packages/cli/bin/webpack/createConfig.js
new file mode 100644
index 0000000..79a4291
--- /dev/null
+++ b/packages/cli/bin/webpack/createConfig.js
@@ -0,0 +1,284 @@
+const path = require('path')
+const fs = require('fs')
+
+function getModulePaths() {
+  return [path.resolve(process.cwd(), 'node_modules')]
+    .concat(module.paths)
+    .concat('node_modules')
+}
+
+function resolveFirst(packages, paths) {
+  for (const pkg of packages) {
+    try {
+      return require.resolve(pkg, { paths })
+    } catch (e) {
+      // --
+    }
+  }
+
+  return packages.shift()
+}
+
+module.exports = function createBaseConfig({ outDir, debug, theme }) {
+  const CSSExtractPlugin = require('mini-css-extract-plugin')
+  const { VueLoaderPlugin } = require('vue-loader')
+  const WebpackChain = require('webpack-chain')
+  const { DefinePlugin } = require('webpack')
+  const isProd = process.env.NODE_ENV === 'production'
+
+  const config = new WebpackChain()
+  const inlineLimit = 1000000
+  const modulePaths = getModulePaths()
+
+  if (!theme.startsWith('@vue-slides/theme') && !theme.startsWith('vue-slides-theme-')) {
+    theme = resolveFirst([theme, `@vue-slides/theme-${theme}`, `vue-slides-theme-${theme}`], modulePaths)
+  }
+
+  config.mode(isProd ? 'production' : 'development')
+  config.output
+    .path(outDir)
+    .filename(
+      isProd ? 'assets/js/[name].[chunkhash:8].js' : 'assets/js/[name].js'
+    )
+    .publicPath('/')
+
+  config.context(process.cwd())
+
+  if (debug) {
+    config.devtool('source-map')
+  } else if (!isProd) {
+    config.devtool('cheap-module-eval-source-map')
+  }
+
+  config.resolve.extensions.merge(['.js', '.vue', '.json'])
+  config.resolve.modules.merge(modulePaths)
+  config.resolveLoader.modules.merge(modulePaths)
+  config.module.noParse(/^(vue)$/)
+
+  const cacheDirectory = path.resolve(
+    process.cwd(),
+    'node_modules/.cache/vue-slides'
+  )
+  const cacheIdentifier = JSON.stringify({
+    vue-slides: require('../../package.json').version,
+    'cache-loader': require('cache-loader').version,
+    'vue-loader': require('vue-loader').version,
+    env: process.env.NODE_ENV
+  })
+
+  function cached(rule) {
+    rule
+      .use('cache-loader')
+      .loader('cache-loader')
+      .options({
+        cacheDirectory,
+        cacheIdentifier
+      })
+
+    return rule
+  }
+
+  function vue(rule) {
+    rule
+      .use('vue-loader')
+        .loader('vue-loader')
+        .options({
+          compilerOptions: {
+            preserveWhitespace: false
+          },
+          cacheDirectory,
+          cacheIdentifier,
+          transformAssetUrls: {
+            TitleBulletsPhotoSlide: ['photo'],
+            PhotoHorizontalSlide: ['photo'],
+            PhotoVerticalSlide: ['photo'],
+            PhotoCaptionSlide: ['photo'],
+            Photo2UpSlide: ['left', 'right'],
+            Photo3UpSlide: ['first', 'second', 'third'],
+            PhotoSlide: ['photo'],
+            Photo: ['src']
+          }
+        })
+    return rule
+  }
+
+  vue(cached(config.module.rule('vue').test(/\.vue$/)))
+  vue(cached(config.module.rule('md').test(/\.(md|slides)$/))).use('markdown-loader').loader(require.resolve('./loaders/markdown/index.js'))
+
+  config.module
+    .rule('images')
+    .test(/\.(png|jpe?g|gif)(\?.*)?$/i)
+    .use('preload-image-loader')
+      .loader('preload-image-loader')
+      .end()
+    .use('url-loader')
+      .loader('url-loader')
+      .options({
+        limit: inlineLimit,
+        name: 'assets/img/[name].[hash:8].[ext]'
+      })
+
+  config.module
+    .rule('svg')
+    .test(/\.(svg)(\?.*)?$/i)
+    .use('file-loader')
+    .loader('file-loader')
+    .options({
+      name: 'assets/img/[name].[hash:8].[ext]'
+    })
+
+  config.module
+    .rule('media')
+    .test(/\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/)
+    .use('url-loader')
+    .loader('url-loader')
+    .options({
+      limit: inlineLimit,
+      name: `assets/media/[name].[hash:8].[ext]`
+    })
+
+  config.module
+    .rule('fonts')
+    .test(/\.(woff2?|eot|ttf|otf)(\?.*)?$/i)
+    .use('url-loader')
+    .loader('url-loader')
+    .options({
+      limit: inlineLimit,
+      name: `assets/fonts/[name].[hash:8].[ext]`
+    })
+
+  function createCSSRule(lang, test) {
+    const rule = config.module.rule(lang).test(test)
+
+    // prettier-ignore
+    rule
+      .oneOf('module')
+        .resourceQuery(/module/)
+        .use('vue-style-loader')
+          .loader('vue-style-loader')
+          .end()
+        .use('css-loader')
+          .loader('css-loader')
+          .options({
+            importLoaders: 1,
+            sourceMap: !isProd,
+            modules: true,
+            localIdentName: '[local]_[hash:base64:8]'
+          })
+          .end()
+        .use('postcss-loader')
+          .loader('postcss-loader')
+          .options({
+            plugins: [
+              require('autoprefixer'),
+              require('@vue-slides/postcss-kem-unit')
+            ],
+            sourceMap: !isProd
+          })
+          .end()
+        .end()
+      .oneOf('default')
+        .use('vue-style-loader')
+          .loader('vue-style-loader')
+          .end()
+        .use('css-loader')
+          .loader('css-loader')
+          .options({
+            importLoaders: 1,
+            sourceMap: !isProd
+          })
+          .end()
+        .use('postcss-loader')
+          .loader('postcss-loader')
+          .options({
+            plugins: [
+              require('autoprefixer'),
+              require('@vue-slides/postcss-kem-unit')
+            ],
+            sourceMap: !isProd
+          })
+          .end()
+        .end()
+
+    return rule
+  }
+
+  createCSSRule('css', /\.css$/)
+  createCSSRule('postcss', /\.p(ost)?css$/)
+  createCSSRule('scss', /\.scss$/)
+    .use('sass-loader')
+    .loader('sass-loader')
+  createCSSRule('sass', /\.sass$/)
+    .use('sass-loader')
+    .loader('sass-loader')
+    .options({
+      indentedSyntax: true
+    })
+  createCSSRule('less', /\.less$/)
+    .use('less-loader')
+    .loader('less-loader')
+  createCSSRule('stylus', /\.styl(us)?$/)
+    .use('stylus-loader')
+    .loader('stylus-loader')
+    .options({
+      preferPathResolver: 'webpack'
+    })
+
+  config.plugin('vue-loader').use(VueLoaderPlugin)
+
+  config
+    .plugin('progress')
+    .use(require('progress-bar-webpack-plugin'), [{ summary: false }])
+
+  config.stats(false)
+
+  if (isProd) {
+    config.plugin('extract-css').use(CSSExtractPlugin, [
+      {
+        filename: 'assets/css/styles.[chunkhash:8].css'
+      }
+    ])
+
+    config.optimization.splitChunks({
+      cacheGroups: {
+        styles: {
+          name: 'styles',
+          // necessary to ensure async chunks are also extracted
+          test: m => /css-extract/.test(m.type),
+          chunks: 'all',
+          enforce: true
+        }
+      }
+    })
+  }
+
+  config.plugin('html').use(require('html-webpack-plugin'), [
+    {
+      template: path.resolve(__dirname, '../template/index.html')
+    }
+  ])
+
+  function checkExists(name) {
+    return fs.existsSync(path.resolve(process.cwd(), name))
+  }
+
+  config.plugin('define').use(DefinePlugin, [
+    {
+      __ENV__: isProd ? '"production"' : '"development"',
+      __CWD__: JSON.stringify(process.cwd()),
+      __THEME__: JSON.stringify(theme),
+      __KEYNOTE_LOAD_COMPONENTS__: JSON.stringify(checkExists('components')),
+      __KEYNOTE_LOAD_SLIDES__: JSON.stringify(checkExists('slides'))
+    }
+  ])
+
+  if (checkExists('vue-slides.config.js')) {
+    const userConfig = require(path.resolve(process.cwd(), 'vue-slides.config.js'))
+
+    if (userConfig.webpackChain) {
+      return userConfig.webpackChain(config) || config
+    }
+  }
+
+  return config
+}
diff --git a/packages/cli/bin/webpack/loaders/markdown/index.js b/packages/cli/bin/webpack/loaders/markdown/index.js
new file mode 100644
index 0000000..0b6c45f
--- /dev/null
+++ b/packages/cli/bin/webpack/loaders/markdown/index.js
@@ -0,0 +1,46 @@
+const path = require('path')
+const parseFrontMatter = require('front-matter')
+const createMD = require('./markdown')
+
+
+/** @type {import('markdown-it')} */
+let md = null
+module.exports = function MarkdownLoader(source) {
+  md = md || createMD()
+  const loader = Object.create(this)
+  const file = this.resourcePath
+  const relPath = path.dirname(file)
+  const { body: content, attributes } = parse(source)
+  const template = `<template>\n<VueSlides>${
+    content.split(/<!-- slide(?:.*?)? -->/).map(parse).map(
+      ({ body, attributes }) => {
+        const { layout = 'Slide', ...props } = attributes
+        
+        return `<${layout} ${propsToString(props)}>${md.render(body, { loader, relPath, data: attributes })}</${layout}>`
+      }
+    ).join('\n')
+  }</VueSlides>\n</template><script>export default { name: '${attributes.name || 'Presentation'}', data: () => (${JSON.stringify(attributes)}) }</script>`
+
+  return template
+}
+
+function parse(content) {
+  return parseFrontMatter(content.trim())
+}
+
+function propsToString(props) {
+  let code = ''
+
+  for (const key in props) {
+    const value = props[key]
+    const type = typeof value
+
+    if (type === 'string') {
+      code += ` ${key}=${JSON.stringify(value)}`
+    } else {
+      code += ` :${key}=${JSON.stringify(value)}`
+    }
+  }
+
+  return code.trim()
+}
diff --git a/packages/cli/bin/webpack/loaders/markdown/markdown.js b/packages/cli/bin/webpack/loaders/markdown/markdown.js
new file mode 100644
index 0000000..1d8a297
--- /dev/null
+++ b/packages/cli/bin/webpack/loaders/markdown/markdown.js
@@ -0,0 +1,19 @@
+const componentPlugin = require('./plugins/component')
+const Config = require('markdown-it-chain')
+
+/**
+ * @returns {import('markdown-it')}
+ */
+module.exports = () => {
+  const config = new Config()
+
+  config
+    .options
+      .html(true)
+      .end()
+    .plugin('component')
+      .use(componentPlugin)
+      .end()
+  
+  return config.toMd(require('markdown-it'))
+}
diff --git a/packages/cli/bin/webpack/loaders/markdown/plugins/component.js b/packages/cli/bin/webpack/loaders/markdown/plugins/component.js
new file mode 100644
index 0000000..67efe70
--- /dev/null
+++ b/packages/cli/bin/webpack/loaders/markdown/plugins/component.js
@@ -0,0 +1,81 @@
+// Replacing the default htmlBlock rule to allow using custom components at
+// root level
+
+const blockNames = require('markdown-it/lib/common/html_blocks')
+const HTML_OPEN_CLOSE_TAG_RE = require('markdown-it/lib/common/html_re').HTML_OPEN_CLOSE_TAG_RE
+
+// An array of opening and corresponding closing sequences for html tags,
+// last argument defines whether it can terminate a paragraph or not
+const HTML_SEQUENCES = [
+  [/^<(script|pre|style)(?=(\s|>|$))/i, /<\/(script|pre|style)>/i, true],
+  [/^<!--/, /-->/, true],
+  [/^<\?/, /\?>/, true],
+  [/^<![A-Z]/, />/, true],
+  [/^<!\[CDATA\[/, /\]\]>/, true],
+  // PascalCase Components
+  [/^<[A-Z]/, />/, true],
+  // custom elements with hyphens
+  [/^<template/, />/, true],
+  [/^<\w+\-/, />/, true],
+  [new RegExp('^</?(' + blockNames.join('|') + ')(?=(\\s|/?>|$))', 'i'), /^$/, true],
+  [new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\s*$'), /^$/, false]
+]
+
+module.exports = md => {
+  md.block.ruler.at('html_block', htmlBlock)
+}
+
+function htmlBlock (state, startLine, endLine, silent) {
+  let i, nextLine, lineText
+  let pos = state.bMarks[startLine] + state.tShift[startLine]
+  let max = state.eMarks[startLine]
+
+  // if it's indented more than 3 spaces, it should be a code block
+  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }
+
+  if (!state.md.options.html) { return false }
+
+  if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false }
+
+  lineText = state.src.slice(pos, max)
+
+  for (i = 0; i < HTML_SEQUENCES.length; i++) {
+    if (HTML_SEQUENCES[i][0].test(lineText)) { break }
+  }
+
+  if (i === HTML_SEQUENCES.length) {
+    return false
+  }
+
+  if (silent) {
+    // true if this sequence can be a terminator, false otherwise
+    return HTML_SEQUENCES[i][2]
+  }
+
+  nextLine = startLine + 1
+
+  // If we are here - we detected HTML block.
+  // Let's roll down till block end.
+  if (!HTML_SEQUENCES[i][1].test(lineText)) {
+    for (; nextLine < endLine; nextLine++) {
+      if (state.sCount[nextLine] < state.blkIndent) { break }
+
+      pos = state.bMarks[nextLine] + state.tShift[nextLine]
+      max = state.eMarks[nextLine]
+      lineText = state.src.slice(pos, max)
+
+      if (HTML_SEQUENCES[i][1].test(lineText)) {
+        if (lineText.length !== 0) { nextLine++ }
+        break
+      }
+    }
+  }
+
+  state.line = nextLine
+
+  const token = state.push('html_block', '', 0)
+  token.map = [startLine, nextLine]
+  token.content = state.getLines(startLine, nextLine, state.blkIndent, true)
+
+  return true
+}
diff --git a/packages/cli/package.json b/packages/cli/package.json
new file mode 100644
index 0000000..1533937
--- /dev/null
+++ b/packages/cli/package.json
@@ -0,0 +1,62 @@
+{
+  "name": "@vue-slides/cli",
+  "version": "2.0.0-alpha.1",
+  "description": "@vue-slides/cli",
+  "bin": {
+    "vue-slides": "bin/vue-slides.js"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/vue-slides/vue-slides.git"
+  },
+  "keywords": [
+    "vue-slides",
+    "vue"
+  ],
+  "author": "Rahul Kadyan",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/vue-slides/vue-slides/issues"
+  },
+  "homepage": "https://github.com/vue-slides/vue-slides/tree/dev/packages/cli#readme",
+  "dependencies": {
+    "@babel/core": "^7.1.5",
+    "@vue-slides/core": "^2.0.0-alpha.1",
+    "@vue-slides/postcss-kem-unit": "^2.0.0-alpha.0",
+    "@vue-slides/theme-vue": "^2.0.0-alpha.1",
+    "@vuepress/markdown": "^1.0.0-alpha.42",
+    "autoprefixer": "^8.5.1",
+    "babel-loader": "^8.0.4",
+    "cache-loader": "^1.2.2",
+    "chalk": "^2.4.1",
+    "commander": "^2.15.1",
+    "css-loader": "^0.28.11",
+    "file-loader": "^1.1.11",
+    "front-matter": "^3.0.1",
+    "html-webpack-plugin": "^3.2.0",
+    "loader-utils": "^1.2.3",
+    "lodash": "^4.17.11",
+    "markdown-it": "^8.4.2",
+    "markdown-it-chain": "^1.3.0",
+    "mini-css-extract-plugin": "^0.4.0",
+    "portfinder": "^1.0.13",
+    "postcss-loader": "^2.1.5",
+    "preload-image-loader": "^1.0.0",
+    "progress-bar-webpack-plugin": "^1.11.0",
+    "tmp": "^0.0.33",
+    "url-loader": "^1.0.1",
+    "virtual-module-webpack-plugin": "^0.4.0",
+    "vue": "^2.5.16",
+    "vue-loader": "^15.2.1",
+    "vue-style-loader": "^4.1.0",
+    "vue-template-compiler": "^2.5.16",
+    "webpack": "^4.8.3",
+    "webpack-chain": "^4.8.0",
+    "webpack-dev-server": "^3.1.10",
+    "webpack-hot-client": "^3.0.0",
+    "webpack-serve": "^1.0.4"
+  },
+  "publishConfig": {
+    "access": "public"
+  }
+}
diff --git a/packages/@keynote/cli/shrinkwrap.yaml b/packages/cli/shrinkwrap.yaml
similarity index 57%
rename from packages/@keynote/cli/shrinkwrap.yaml
rename to packages/cli/shrinkwrap.yaml
index 3ef466b..27ccc6d 100644
--- a/packages/@keynote/cli/shrinkwrap.yaml
+++ b/packages/cli/shrinkwrap.yaml
@@ -1,49 +1,169 @@
 dependencies:
-  '@keynote/core': 1.1.3
-  '@keynote/theme-default': 1.0.2
-  autoprefixer: 8.5.2
-  cache-loader: 1.2.2
-  chalk: 2.4.1
-  commander: 2.15.1
+  '@babel/core': 7.3.4
+  '@vue-slides/core': 'link:../core'
+  '@vue-slides/postcss-kem-unit': 'link:../postcss-kem-unit'
+  '@vue-slides/theme-vue': 'link:../theme-vue'
+  '@vuepress/markdown': 1.0.0-alpha.42
+  autoprefixer: 8.6.5
+  babel-loader: 8.0.5
+  cache-loader: 1.2.5
+  chalk: 2.4.2
+  commander: 2.19.0
   css-loader: 0.28.11
   file-loader: 1.1.11
+  front-matter: 3.0.1
   html-webpack-plugin: 3.2.0
-  mini-css-extract-plugin: 0.4.0
-  portfinder: 1.0.13
-  postcss-loader: 2.1.5
-  progress-bar-webpack-plugin: 1.11.0
+  loader-utils: 1.2.3
+  lodash: 4.17.11
+  markdown-it: 8.4.2
+  markdown-it-chain: 1.3.0
+  mini-css-extract-plugin: 0.4.5
+  portfinder: 1.0.20
+  postcss-loader: 2.1.6
+  preload-image-loader: 1.0.0
+  progress-bar-webpack-plugin: 1.12.1
   tmp: 0.0.33
-  url-loader: 1.0.1
-  vue: 2.5.16
-  vue-loader: 15.2.2
-  vue-style-loader: 4.1.0
-  vue-template-compiler: 2.5.16
-  webpack: 4.10.2
-  webpack-chain: 4.8.0
+  url-loader: 1.1.2
+  virtual-module-webpack-plugin: 0.4.1
+  vue: 2.6.8
+  vue-loader: 15.7.0
+  vue-style-loader: 4.1.2
+  vue-template-compiler: 2.6.8
+  webpack: 4.29.6
+  webpack-chain: 4.12.1
+  webpack-dev-server: 3.2.1
   webpack-hot-client: 3.0.0
-  webpack-serve: 1.0.2
+  webpack-serve: 1.0.4
 packages:
-  /@keynote/core/1.1.3:
+  /@babel/code-frame/7.0.0:
+    dependencies:
+      '@babel/highlight': 7.0.0
+    dev: false
+    resolution:
+      integrity: sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==
+  /@babel/core/7.3.4:
+    dependencies:
+      '@babel/code-frame': 7.0.0
+      '@babel/generator': 7.3.4
+      '@babel/helpers': 7.3.1
+      '@babel/parser': 7.3.4
+      '@babel/template': 7.2.2
+      '@babel/traverse': 7.3.4
+      '@babel/types': 7.3.4
+      convert-source-map: 1.6.0
+      debug: 4.1.1
+      json5: 2.1.0
+      lodash: 4.17.11
+      resolve: 1.10.0
+      semver: 5.6.0
+      source-map: 0.5.7
+    dev: false
+    engines:
+      node: '>=6.9.0'
+    resolution:
+      integrity: sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA==
+  /@babel/generator/7.3.4:
     dependencies:
-      '@znck/prop-types': 0.3.4
-      de-indent: 1.0.2
-      hammerjs: 2.0.8
-      prismjs: 1.15.0
-      resize-observer-polyfill: 1.5.0
-      velocity-animate: 1.5.2
+      '@babel/types': 7.3.4
+      jsesc: 2.5.2
+      lodash: 4.17.11
+      source-map: 0.5.7
+      trim-right: 1.0.1
     dev: false
-    peerDependencies:
-      vue: ^2.5.16
     resolution:
-      integrity: sha512-YeKG5TR1xPVHjxD92KKVf6/1rKUkQDp8UJDIKk9tifyCHSaME0nAR5Gk3BmTr+TOGQP6r0JKOE0xEz3CWrXMqw==
-  /@keynote/theme-default/1.0.2:
+      integrity: sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==
+  /@babel/helper-function-name/7.1.0:
+    dependencies:
+      '@babel/helper-get-function-arity': 7.0.0
+      '@babel/template': 7.2.2
+      '@babel/types': 7.3.4
+    dev: false
+    resolution:
+      integrity: sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==
+  /@babel/helper-get-function-arity/7.0.0:
+    dependencies:
+      '@babel/types': 7.3.4
+    dev: false
+    resolution:
+      integrity: sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==
+  /@babel/helper-split-export-declaration/7.0.0:
+    dependencies:
+      '@babel/types': 7.3.4
+    dev: false
+    resolution:
+      integrity: sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==
+  /@babel/helpers/7.3.1:
+    dependencies:
+      '@babel/template': 7.2.2
+      '@babel/traverse': 7.3.4
+      '@babel/types': 7.3.4
+    dev: false
+    resolution:
+      integrity: sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==
+  /@babel/highlight/7.0.0:
+    dependencies:
+      chalk: 2.4.2
+      esutils: 2.0.2
+      js-tokens: 4.0.0
+    dev: false
+    resolution:
+      integrity: sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==
+  /@babel/parser/7.3.4:
+    dev: false
+    engines:
+      node: '>=6.0.0'
+    hasBin: true
+    resolution:
+      integrity: sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==
+  /@babel/template/7.2.2:
+    dependencies:
+      '@babel/code-frame': 7.0.0
+      '@babel/parser': 7.3.4
+      '@babel/types': 7.3.4
+    dev: false
+    resolution:
+      integrity: sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==
+  /@babel/traverse/7.3.4:
+    dependencies:
+      '@babel/code-frame': 7.0.0
+      '@babel/generator': 7.3.4
+      '@babel/helper-function-name': 7.1.0
+      '@babel/helper-split-export-declaration': 7.0.0
+      '@babel/parser': 7.3.4
+      '@babel/types': 7.3.4
+      debug: 4.1.1
+      globals: 11.11.0
+      lodash: 4.17.11
+    dev: false
+    resolution:
+      integrity: sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==
+  /@babel/types/7.3.4:
+    dependencies:
+      esutils: 2.0.2
+      lodash: 4.17.11
+      to-fast-properties: 2.0.0
+    dev: false
+    resolution:
+      integrity: sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==
+  /@mrmlnc/readdir-enhanced/2.2.1:
+    dependencies:
+      call-me-maybe: 1.0.1
+      glob-to-regexp: 0.3.0
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==
+  /@nodelib/fs.stat/1.1.3:
     dev: false
+    engines:
+      node: '>= 6'
     resolution:
-      integrity: sha512-4pEorFmMJyKdkziITVSy6DozeO09i7ozVPyPuQ5ZFfaT+QcN5g6X1MpvX9MDv/ip5dZyS8k/BZ4aoO01tHeTQg==
+      integrity: sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
   /@shellscape/koa-send/4.1.3:
     dependencies:
       debug: 2.6.9
-      http-errors: 1.6.3
+      http-errors: 1.7.2
       mz: 2.7.0
       resolve-path: 1.4.0
     dev: false
@@ -60,156 +180,184 @@ packages:
       node: '>= 6'
     resolution:
       integrity: sha512-0T2g2NtaO2zhbqR8EBACIGtBy+haodKb8PuJ17RGDXAJwhjkgghUKLrLEnm05zuiwupfYm2APIax6D2TwLoflA==
-  /@vue/component-compiler-utils/1.3.1:
+  /@vue/component-compiler-utils/2.6.0:
     dependencies:
       consolidate: 0.15.1
       hash-sum: 1.0.2
-      lru-cache: 4.1.3
+      lru-cache: 4.1.5
       merge-source-map: 1.1.0
-      postcss: 6.0.22
-      postcss-selector-parser: 3.1.1
-      prettier: 1.13.3
-      source-map: 0.5.7
-      vue-template-es2015-compiler: 1.6.0
+      postcss: 7.0.14
+      postcss-selector-parser: 5.0.0
+      prettier: 1.16.3
+      source-map: 0.6.1
+      vue-template-es2015-compiler: 1.9.1
     dev: false
     resolution:
-      integrity: sha512-IyjJW6ToMitgAhp3xh22QiEW8JvHfLyzlyY/J+GjJ71miod9tNsy6xT2ckm/VirlhPMfeM43kgYZe34jhmmzpw==
-  /@webassemblyjs/ast/1.5.9:
+      integrity: sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw==
+  /@vuepress/markdown/1.0.0-alpha.42:
     dependencies:
-      '@webassemblyjs/helper-module-context': 1.5.9
-      '@webassemblyjs/helper-wasm-bytecode': 1.5.9
-      '@webassemblyjs/wast-parser': 1.5.9
-      debug: 3.1.0
-      mamacro: 0.0.3
+      '@vuepress/shared-utils': 1.0.0-alpha.42
+      lru-cache: 5.1.1
+      markdown-it: 8.4.2
+      markdown-it-anchor: 5.0.2_markdown-it@8.4.2
+      markdown-it-chain: 1.3.0_markdown-it@8.4.2
+      markdown-it-emoji: 1.4.0
+      prismjs: 1.15.0
+    dev: false
+    resolution:
+      integrity: sha512-XiU7GvO/QpD8PRtOf6canwb0L+LylroN6kRuFvz0ULAM+R4r7P6O+b/tbzkuUjbRKiJCSz0JYpJGxibGIqm1DA==
+  /@vuepress/shared-utils/1.0.0-alpha.42:
+    dependencies:
+      chalk: 2.4.2
+      diacritics: 1.3.0
+      escape-html: 1.0.3
+      fs-extra: 5.0.0
+      globby: 8.0.2
+      gray-matter: 4.0.2
+      hash-sum: 1.0.2
+      semver: 5.6.0
+      upath: 1.1.0
     dev: false
     resolution:
-      integrity: sha512-xL3hC0TOc4ic1UNG8ZZNeaiPf1klozt6rqajcy7hfO/qqfkEhLff1AFt5g2LJkTjhw+QSEYVMt7qOaaApu7JzA==
-  /@webassemblyjs/floating-point-hex-parser/1.5.9:
+      integrity: sha512-Z2qsBddnc5LZ4d0TKLoEkLoJd2haKUeEv99eroZRKc1iIO7CcuzVJpE0dqZncC3jB4oiNxFJ4Ja7+Uw3fPMxoA==
+  /@webassemblyjs/ast/1.8.5:
+    dependencies:
+      '@webassemblyjs/helper-module-context': 1.8.5
+      '@webassemblyjs/helper-wasm-bytecode': 1.8.5
+      '@webassemblyjs/wast-parser': 1.8.5
     dev: false
     resolution:
-      integrity: sha512-naMJjuBqDqx4dPSzwpI9pkjdLds4tDTzvsOEzwxPDp655IfgLLP/QEvK/9PQp4p5DExqrR87rk8DWByoqWWlGA==
-  /@webassemblyjs/helper-api-error/1.5.9:
+      integrity: sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==
+  /@webassemblyjs/floating-point-hex-parser/1.8.5:
     dev: false
     resolution:
-      integrity: sha512-tzGdqBo7Xf3McJcXbwbwzwElRzF/nELJN+G4MGGfm0DGRQB6UTmMe44jFIOQYT1Za89Aiz5DMQJotdnnLheixw==
-  /@webassemblyjs/helper-buffer/1.5.9:
-    dependencies:
-      debug: 3.1.0
+      integrity: sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==
+  /@webassemblyjs/helper-api-error/1.8.5:
     dev: false
     resolution:
-      integrity: sha512-WYkys6y33viEY23tHJ+KkSd9yHZBd54Sy6gcSgwLGPP1or9pLqWBrjWWATHuDuIkpvSJSt/+3qjAV6zHd1nS0g==
-  /@webassemblyjs/helper-code-frame/1.5.9:
+      integrity: sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==
+  /@webassemblyjs/helper-buffer/1.8.5:
+    dev: false
+    resolution:
+      integrity: sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==
+  /@webassemblyjs/helper-code-frame/1.8.5:
     dependencies:
-      '@webassemblyjs/wast-printer': 1.5.9
+      '@webassemblyjs/wast-printer': 1.8.5
     dev: false
     resolution:
-      integrity: sha512-SYjNAlqcRH+YynslbIhFYOnGvE3WBl82/XlcFXiNkqnWsvHWnNkJbtxAtzrT/dcf69O/2pt8j1Q0+qc/rtacVw==
-  /@webassemblyjs/helper-fsm/1.5.9:
+      integrity: sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==
+  /@webassemblyjs/helper-fsm/1.8.5:
     dev: false
     resolution:
-      integrity: sha512-8D+VVIJTRbsn31zt3eyidYyUkhH1jk2/58mrIPiMarflRsisItJa5WZVu/gw0l+ubFOJf9PivTJB6Kw/Kgxx3g==
-  /@webassemblyjs/helper-module-context/1.5.9:
+      integrity: sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==
+  /@webassemblyjs/helper-module-context/1.8.5:
+    dependencies:
+      '@webassemblyjs/ast': 1.8.5
+      mamacro: 0.0.3
     dev: false
     resolution:
-      integrity: sha512-DbeLbFOhioEeY7yAff12+n5sf7WP7Fmi0lnhCSzfW4xBsgwXKmRjAx7nVmsUf3z+BDnwHHVKIXBUM+ucccNUsw==
-  /@webassemblyjs/helper-wasm-bytecode/1.5.9:
+      integrity: sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==
+  /@webassemblyjs/helper-wasm-bytecode/1.8.5:
     dev: false
     resolution:
-      integrity: sha512-zHQuTMMd2nTyEa3fbmGfzlJW305py1sgf1gHNCO/LVN8nWlKysB/+6J68sP1Cd+9USnT1VS2vyD1z+YJPS6GqQ==
-  /@webassemblyjs/helper-wasm-section/1.5.9:
+      integrity: sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==
+  /@webassemblyjs/helper-wasm-section/1.8.5:
     dependencies:
-      '@webassemblyjs/ast': 1.5.9
-      '@webassemblyjs/helper-buffer': 1.5.9
-      '@webassemblyjs/helper-wasm-bytecode': 1.5.9
-      '@webassemblyjs/wasm-gen': 1.5.9
-      debug: 3.1.0
+      '@webassemblyjs/ast': 1.8.5
+      '@webassemblyjs/helper-buffer': 1.8.5
+      '@webassemblyjs/helper-wasm-bytecode': 1.8.5
+      '@webassemblyjs/wasm-gen': 1.8.5
     dev: false
     resolution:
-      integrity: sha512-+ff+8Ju6sLCMFNygcDdLRNRsmuD0PHwq77d2mbfWj5YzUvFaKN2q2kRppJSEAixOnM2xLADuG5y/blpMo5G90A==
-  /@webassemblyjs/ieee754/1.5.9:
+      integrity: sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==
+  /@webassemblyjs/ieee754/1.8.5:
     dependencies:
-      ieee754: 1.1.11
+      '@xtuc/ieee754': 1.2.0
     dev: false
     resolution:
-      integrity: sha512-mhetZBDnpV3VYqZb5Aail9X01VyIqDDZrNYdYj8bfx/PsVPG2znX90wRyVNTeqC5ylqHCgGkJ63bPaPEyINfsw==
-  /@webassemblyjs/leb128/1.5.9:
+      integrity: sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==
+  /@webassemblyjs/leb128/1.8.5:
     dependencies:
-      leb: 0.3.0
+      '@xtuc/long': 4.2.2
+    dev: false
+    resolution:
+      integrity: sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==
+  /@webassemblyjs/utf8/1.8.5:
     dev: false
     resolution:
-      integrity: sha512-oZ3eUB9EViUtiuMwW/xeYamXgfFS2cmXl6aUIYBfpXJQ5v5aOC8ZuPpz2/LqlgNlT8ThpyFd6kfgkYVwKwkGvQ==
-  /@webassemblyjs/wasm-edit/1.5.9:
+      integrity: sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==
+  /@webassemblyjs/wasm-edit/1.8.5:
     dependencies:
-      '@webassemblyjs/ast': 1.5.9
-      '@webassemblyjs/helper-buffer': 1.5.9
-      '@webassemblyjs/helper-wasm-bytecode': 1.5.9
-      '@webassemblyjs/helper-wasm-section': 1.5.9
-      '@webassemblyjs/wasm-gen': 1.5.9
-      '@webassemblyjs/wasm-opt': 1.5.9
-      '@webassemblyjs/wasm-parser': 1.5.9
-      '@webassemblyjs/wast-printer': 1.5.9
-      debug: 3.1.0
+      '@webassemblyjs/ast': 1.8.5
+      '@webassemblyjs/helper-buffer': 1.8.5
+      '@webassemblyjs/helper-wasm-bytecode': 1.8.5
+      '@webassemblyjs/helper-wasm-section': 1.8.5
+      '@webassemblyjs/wasm-gen': 1.8.5
+      '@webassemblyjs/wasm-opt': 1.8.5
+      '@webassemblyjs/wasm-parser': 1.8.5
+      '@webassemblyjs/wast-printer': 1.8.5
     dev: false
     resolution:
-      integrity: sha512-pMWe3HomnWAMZytJ5sSNBS6qTbSoULUHkvDrtcarmLBTclmupZe25INy1jxbWGKsuFxw6w0xQ+eLRPlC8HPjhg==
-  /@webassemblyjs/wasm-gen/1.5.9:
+      integrity: sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==
+  /@webassemblyjs/wasm-gen/1.8.5:
     dependencies:
-      '@webassemblyjs/ast': 1.5.9
-      '@webassemblyjs/helper-wasm-bytecode': 1.5.9
-      '@webassemblyjs/ieee754': 1.5.9
-      '@webassemblyjs/leb128': 1.5.9
+      '@webassemblyjs/ast': 1.8.5
+      '@webassemblyjs/helper-wasm-bytecode': 1.8.5
+      '@webassemblyjs/ieee754': 1.8.5
+      '@webassemblyjs/leb128': 1.8.5
+      '@webassemblyjs/utf8': 1.8.5
     dev: false
     resolution:
-      integrity: sha512-UEhymlxupBUJuwnD2N860MqkpE7LHt0tNKqAgT4YAVjbx+88P6MBBk+q+9wr2FJCXxMgsPTxMWifqC4wd2FzVg==
-  /@webassemblyjs/wasm-opt/1.5.9:
+      integrity: sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==
+  /@webassemblyjs/wasm-opt/1.8.5:
     dependencies:
-      '@webassemblyjs/ast': 1.5.9
-      '@webassemblyjs/helper-buffer': 1.5.9
-      '@webassemblyjs/wasm-gen': 1.5.9
-      '@webassemblyjs/wasm-parser': 1.5.9
-      debug: 3.1.0
+      '@webassemblyjs/ast': 1.8.5
+      '@webassemblyjs/helper-buffer': 1.8.5
+      '@webassemblyjs/wasm-gen': 1.8.5
+      '@webassemblyjs/wasm-parser': 1.8.5
     dev: false
     resolution:
-      integrity: sha512-oQm84US3e36dPq5bOeybVKA2ZyzeWR4fereg9kJa0Y9XLKxHwlsBa2kFyNXwZNrhMP33iyXAW+ym7om1zPZeAg==
-  /@webassemblyjs/wasm-parser/1.5.9:
+      integrity: sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==
+  /@webassemblyjs/wasm-parser/1.8.5:
     dependencies:
-      '@webassemblyjs/ast': 1.5.9
-      '@webassemblyjs/helper-api-error': 1.5.9
-      '@webassemblyjs/helper-wasm-bytecode': 1.5.9
-      '@webassemblyjs/ieee754': 1.5.9
-      '@webassemblyjs/leb128': 1.5.9
+      '@webassemblyjs/ast': 1.8.5
+      '@webassemblyjs/helper-api-error': 1.8.5
+      '@webassemblyjs/helper-wasm-bytecode': 1.8.5
+      '@webassemblyjs/ieee754': 1.8.5
+      '@webassemblyjs/leb128': 1.8.5
+      '@webassemblyjs/utf8': 1.8.5
     dev: false
     resolution:
-      integrity: sha512-jBKBTKE4M/WYCSqLjRvK+/QD55E/HNcQjswbksof3GEXfkq0iMqYxoPfqR7uLAD9/jVf9HpBNW2FJOyfTTlYfw==
-  /@webassemblyjs/wast-parser/1.5.9:
+      integrity: sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==
+  /@webassemblyjs/wast-parser/1.8.5:
     dependencies:
-      '@webassemblyjs/ast': 1.5.9
-      '@webassemblyjs/floating-point-hex-parser': 1.5.9
-      '@webassemblyjs/helper-api-error': 1.5.9
-      '@webassemblyjs/helper-code-frame': 1.5.9
-      '@webassemblyjs/helper-fsm': 1.5.9
-      long: 3.2.0
-      mamacro: 0.0.3
+      '@webassemblyjs/ast': 1.8.5
+      '@webassemblyjs/floating-point-hex-parser': 1.8.5
+      '@webassemblyjs/helper-api-error': 1.8.5
+      '@webassemblyjs/helper-code-frame': 1.8.5
+      '@webassemblyjs/helper-fsm': 1.8.5
+      '@xtuc/long': 4.2.2
     dev: false
     resolution:
-      integrity: sha512-bDuYH/NR5D+MmwVZdGW2rUvu4UcKGpodiHBSueajon3oNPu+PAKG+7br3BVFKxDUtDoVtuHLUQvkqp1lTrqPCA==
-  /@webassemblyjs/wast-printer/1.5.9:
+      integrity: sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==
+  /@webassemblyjs/wast-printer/1.8.5:
     dependencies:
-      '@webassemblyjs/ast': 1.5.9
-      '@webassemblyjs/wast-parser': 1.5.9
-      long: 3.2.0
+      '@webassemblyjs/ast': 1.8.5
+      '@webassemblyjs/wast-parser': 1.8.5
+      '@xtuc/long': 4.2.2
     dev: false
     resolution:
-      integrity: sha512-04iV32TO69kZChP3DN6W8i6GCa5UtEn1Lnzb4sQGe5YNjIFz2k8+KZLxbovWIZgj9pk06k3Egq/wyD98lSKaLw==
-  /@webpack-contrib/config-loader/1.1.3:
+      integrity: sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==
+  /@webpack-contrib/config-loader/1.2.1:
     dependencies:
       '@webpack-contrib/schema-utils': 1.0.0-beta.0
-      chalk: 2.4.1
-      cosmiconfig: 5.0.5
+      chalk: 2.4.2
+      cosmiconfig: 5.1.0
+      is-plain-obj: 1.1.0
       loud-rejection: 1.6.0
       merge-options: 1.0.1
       minimist: 1.2.0
-      resolve: 1.7.1
+      resolve: 1.10.0
       webpack-log: 1.2.0
     dev: false
     engines:
@@ -217,12 +365,12 @@ packages:
     peerDependencies:
       webpack: ^4.3.0
     resolution:
-      integrity: sha512-lOliuisjrh24MfhOYE5ljqyFlKfzyWGFrn3bbR0KlXQHY90j3pXWfFtEl4gNvqz69tJsM+1s7PUGJrK9CF46ng==
+      integrity: sha512-C7XsS6bXft0aRlyt7YCLg+fm97Mb3tWd+i5fVVlEl0NW5HKy8LoXVKj3mB7ECcEHNEEdHhgzg8gxP+Or8cMj8Q==
   /@webpack-contrib/schema-utils/1.0.0-beta.0:
     dependencies:
-      ajv: 6.5.0
-      ajv-keywords: /ajv-keywords/3.2.0/ajv@6.5.0
-      chalk: 2.4.1
+      ajv: 6.10.0
+      ajv-keywords: 3.4.0_ajv@6.10.0
+      chalk: 2.4.2
       strip-ansi: 4.0.0
       text-table: 0.2.0
       webpack-log: 1.2.0
@@ -233,53 +381,63 @@ packages:
       webpack: ^3.0.0 || ^4.0.0
     resolution:
       integrity: sha512-LonryJP+FxQQHsjGBi6W786TQB1Oym+agTpY0c+Kj8alnIw+DLUJb6SI8Y1GHGhLCH1yPRrucjObUmxNICQ1pg==
-  /@znck/prop-types/0.3.4:
-    dependencies:
-      lodash-es: 4.17.11
-      nyc: 11.9.0
+  /@xtuc/ieee754/1.2.0:
     dev: false
     resolution:
-      integrity: sha512-TAaBr9Th6HF6MzQ3/MDVChEHMJ0EH7jj/4p3bp0GxqOzsn4HQxgceBBZ0DE0vshDUprA9d8USqlwzTKKepcnpg==
+      integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+  /@xtuc/long/4.2.2:
+    dev: false
+    resolution:
+      integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
   /accepts/1.3.5:
     dependencies:
-      mime-types: 2.1.18
+      mime-types: 2.1.22
       negotiator: 0.6.1
     dev: false
     engines:
       node: '>= 0.6'
     resolution:
       integrity: sha1-63d99gEXI6OxTopywIBcjoZ0a9I=
-  /acorn-dynamic-import/3.0.0:
+  /acorn-dynamic-import/4.0.0_acorn@6.1.1:
     dependencies:
-      acorn: 5.6.0
+      acorn: 6.1.1
     dev: false
+    peerDependencies:
+      acorn: ^6.0.0
     resolution:
-      integrity: sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==
-  /acorn/5.6.0:
+      integrity: sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==
+  /acorn/6.1.1:
     dev: false
     engines:
       node: '>=0.4.0'
     hasBin: true
     resolution:
-      integrity: sha512-QatFQ4C0n+PLqemyC6zXEv04tSqRR0hRqe+uGKPEVgKe2G8kl8wJvHzRYWwz6vqqEqt6idPVMFojZ4P1zlyAzQ==
-  /ajv-keywords/3.2.0/ajv@6.5.0:
+      integrity: sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==
+  /ajv-errors/1.0.1_ajv@6.10.0:
+    dependencies:
+      ajv: 6.10.0
+    dev: false
+    peerDependencies:
+      ajv: '>=5.0.0'
+    resolution:
+      integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+  /ajv-keywords/3.4.0_ajv@6.10.0:
     dependencies:
-      ajv: 6.5.0
+      ajv: 6.10.0
     dev: false
-    id: registry.npmjs.org/ajv-keywords/3.2.0
     peerDependencies:
-      ajv: ^6.0.0
+      ajv: ^6.9.1
     resolution:
-      integrity: sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=
-  /ajv/6.5.0:
+      integrity: sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==
+  /ajv/6.10.0:
     dependencies:
       fast-deep-equal: 2.0.1
       fast-json-stable-stringify: 2.0.0
-      json-schema-traverse: 0.3.1
+      json-schema-traverse: 0.4.1
       uri-js: 4.2.2
     dev: false
     resolution:
-      integrity: sha512-VDUX1oSajablmiyFyED9L1DFndg0P9h7p1F+NO8FkIzei6EPrR6Zu1n18rd5P8PqaSRd/FrWv3G1TVBqpM83gA==
+      integrity: sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==
   /alphanum-sort/1.0.2:
     dev: false
     resolution:
@@ -290,6 +448,19 @@ packages:
     dev: false
     resolution:
       integrity: sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=
+  /ansi-colors/3.2.4:
+    dev: false
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
+  /ansi-html/0.0.7:
+    dev: false
+    engines:
+      '0': node >= 0.8.0
+    hasBin: true
+    resolution:
+      integrity: sha1-gTWEAhliqenm/QOflA0S9WynhZ4=
   /ansi-regex/2.1.1:
     dev: false
     engines:
@@ -310,7 +481,7 @@ packages:
       integrity: sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
   /ansi-styles/3.2.1:
     dependencies:
-      color-convert: 1.9.1
+      color-convert: 1.9.3
     dev: false
     engines:
       node: '>=4'
@@ -327,20 +498,20 @@ packages:
     dev: false
     resolution:
       integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
-  /app-root-path/2.0.1:
+  /app-root-path/2.1.0:
     dev: false
     engines:
       node: '>= 4.0.0'
     resolution:
-      integrity: sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=
+      integrity: sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=
   /aproba/1.2.0:
     dev: false
     resolution:
       integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
-  /arch/2.1.0:
+  /arch/2.1.1:
     dev: false
     resolution:
-      integrity: sha1-NhOqRhSQZLPB8GB5Gb8dR4boKIk=
+      integrity: sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==
   /argparse/1.0.10:
     dependencies:
       sprintf-js: 1.0.3
@@ -371,6 +542,28 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+  /array-flatten/1.1.1:
+    dev: false
+    resolution:
+      integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
+  /array-flatten/2.1.2:
+    dev: false
+    resolution:
+      integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
+  /array-union/1.0.2:
+    dependencies:
+      array-uniq: 1.0.3
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
+  /array-uniq/1.0.3:
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
   /array-unique/0.3.2:
     dev: false
     engines:
@@ -415,36 +608,36 @@ packages:
     dev: false
     resolution:
       integrity: sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
-  /atob/2.1.1:
+  /atob/2.1.2:
     dev: false
     engines:
       node: '>= 4.5.0'
     hasBin: true
     resolution:
-      integrity: sha1-ri1acpR38onWDdf5amMUoi3Wwio=
+      integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
   /autoprefixer/6.7.7:
     dependencies:
       browserslist: 1.7.7
-      caniuse-db: 1.0.30000847
+      caniuse-db: 1.0.30000941
       normalize-range: 0.1.2
       num2fraction: 1.2.2
       postcss: 5.2.18
-      postcss-value-parser: 3.3.0
+      postcss-value-parser: 3.3.1
     dev: false
     resolution:
       integrity: sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=
-  /autoprefixer/8.5.2:
+  /autoprefixer/8.6.5:
     dependencies:
       browserslist: 3.2.8
-      caniuse-lite: 1.0.30000847
+      caniuse-lite: 1.0.30000941
       normalize-range: 0.1.2
       num2fraction: 1.2.2
-      postcss: 6.0.22
-      postcss-value-parser: 3.3.0
+      postcss: 6.0.23
+      postcss-value-parser: 3.3.1
     dev: false
     hasBin: true
     resolution:
-      integrity: sha512-X3BmI+0YBTGaqw0cR9FCPTyTAAPRpijzIUPkysRumGmJC6r8vhix1RjzLNjX01Kbb/iSezjZ9OR3G92pa31+WQ==
+      integrity: sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==
   /babel-code-frame/6.26.0:
     dependencies:
       chalk: 1.1.3
@@ -453,6 +646,20 @@ packages:
     dev: false
     resolution:
       integrity: sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
+  /babel-loader/8.0.5:
+    dependencies:
+      find-cache-dir: 2.0.0
+      loader-utils: 1.2.3
+      mkdirp: 0.5.1
+      util.promisify: 1.0.0
+    dev: false
+    engines:
+      node: '>= 6.9'
+    peerDependencies:
+      '@babel/core': ^7.0.0
+      webpack: '>=2'
+    resolution:
+      integrity: sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==
   /balanced-match/0.4.2:
     dev: false
     resolution:
@@ -479,24 +686,60 @@ packages:
     dev: false
     resolution:
       integrity: sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==
+  /batch/0.6.1:
+    dev: false
+    resolution:
+      integrity: sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
   /big.js/3.2.0:
     dev: false
     resolution:
       integrity: sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==
-  /binary-extensions/1.11.0:
+  /big.js/5.2.2:
+    dev: false
+    resolution:
+      integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+  /binary-extensions/1.13.0:
     dev: false
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=
-  /bluebird/3.5.1:
+      integrity: sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==
+  /bluebird/3.5.3:
     dev: false
     resolution:
-      integrity: sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==
+      integrity: sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==
   /bn.js/4.11.8:
     dev: false
     resolution:
       integrity: sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
+  /body-parser/1.18.3:
+    dependencies:
+      bytes: 3.0.0
+      content-type: 1.0.4
+      debug: 2.6.9
+      depd: 1.1.2
+      http-errors: 1.6.3
+      iconv-lite: 0.4.23
+      on-finished: 2.3.0
+      qs: 6.5.2
+      raw-body: 2.3.3
+      type-is: 1.6.16
+    dev: false
+    engines:
+      node: '>= 0.8'
+    resolution:
+      integrity: sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=
+  /bonjour/3.5.0:
+    dependencies:
+      array-flatten: 2.1.2
+      deep-equal: 1.0.1
+      dns-equal: 1.0.0
+      dns-txt: 2.0.2
+      multicast-dns: 6.2.3
+      multicast-dns-service-types: 1.1.0
+    dev: false
+    resolution:
+      integrity: sha1-jokKGD2O6aI5OzhExpGkK897yfU=
   /boolbase/1.0.0:
     dev: false
     resolution:
@@ -505,11 +748,11 @@ packages:
     dependencies:
       ansi-align: 2.0.0
       camelcase: 4.1.0
-      chalk: 2.4.1
+      chalk: 2.4.2
       cli-boxes: 1.0.0
       string-width: 2.1.1
       term-size: 1.2.0
-      widest-line: 2.0.0
+      widest-line: 2.0.1
     dev: false
     engines:
       node: '>=4'
@@ -529,7 +772,7 @@ packages:
       extend-shallow: 2.0.1
       fill-range: 4.0.0
       isobject: 3.0.1
-      repeat-element: 1.1.2
+      repeat-element: 1.1.3
       snapdragon: 0.8.2
       snapdragon-node: 2.1.1
       split-string: 3.1.0
@@ -557,23 +800,24 @@ packages:
   /browserify-cipher/1.0.1:
     dependencies:
       browserify-aes: 1.2.0
-      browserify-des: 1.0.1
+      browserify-des: 1.0.2
       evp_bytestokey: 1.0.3
     dev: false
     resolution:
       integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
-  /browserify-des/1.0.1:
+  /browserify-des/1.0.2:
     dependencies:
       cipher-base: 1.0.4
       des.js: 1.0.0
       inherits: 2.0.3
+      safe-buffer: 5.1.2
     dev: false
     resolution:
-      integrity: sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==
+      integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
   /browserify-rsa/4.0.1:
     dependencies:
       bn.js: 4.11.8
-      randombytes: 2.0.6
+      randombytes: 2.1.0
     dev: false
     resolution:
       integrity: sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
@@ -583,38 +827,43 @@ packages:
       browserify-rsa: 4.0.1
       create-hash: 1.2.0
       create-hmac: 1.1.7
-      elliptic: 6.4.0
+      elliptic: 6.4.1
       inherits: 2.0.3
-      parse-asn1: 5.1.1
+      parse-asn1: 5.1.4
     dev: false
     resolution:
       integrity: sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
   /browserify-zlib/0.2.0:
     dependencies:
-      pako: 1.0.6
+      pako: 1.0.10
     dev: false
     resolution:
       integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
   /browserslist/1.7.7:
     dependencies:
-      caniuse-db: 1.0.30000847
-      electron-to-chromium: 1.3.48
+      caniuse-db: 1.0.30000941
+      electron-to-chromium: 1.3.113
+    deprecated: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
     dev: false
     hasBin: true
     resolution:
       integrity: sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=
   /browserslist/3.2.8:
     dependencies:
-      caniuse-lite: 1.0.30000847
-      electron-to-chromium: 1.3.48
+      caniuse-lite: 1.0.30000941
+      electron-to-chromium: 1.3.113
     dev: false
     hasBin: true
     resolution:
       integrity: sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==
-  /buffer-from/1.1.0:
+  /buffer-from/1.1.1:
+    dev: false
+    resolution:
+      integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+  /buffer-indexof/1.1.1:
     dev: false
     resolution:
-      integrity: sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==
+      integrity: sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
   /buffer-xor/1.0.3:
     dev: false
     resolution:
@@ -622,39 +871,40 @@ packages:
   /buffer/4.9.1:
     dependencies:
       base64-js: 1.3.0
-      ieee754: 1.1.11
+      ieee754: 1.1.12
       isarray: 1.0.0
     dev: false
     resolution:
       integrity: sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
-  /builtin-modules/1.1.1:
-    dev: false
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
   /builtin-status-codes/3.0.0:
     dev: false
     resolution:
       integrity: sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
-  /cacache/10.0.4:
-    dependencies:
-      bluebird: 3.5.1
-      chownr: 1.0.1
-      glob: 7.1.2
-      graceful-fs: 4.1.11
-      lru-cache: 4.1.3
-      mississippi: 2.0.0
+  /bytes/3.0.0:
+    dev: false
+    engines:
+      node: '>= 0.8'
+    resolution:
+      integrity: sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
+  /cacache/11.3.2:
+    dependencies:
+      bluebird: 3.5.3
+      chownr: 1.1.1
+      figgy-pudding: 3.5.1
+      glob: 7.1.3
+      graceful-fs: 4.1.15
+      lru-cache: 5.1.1
+      mississippi: 3.0.0
       mkdirp: 0.5.1
       move-concurrently: 1.0.1
       promise-inflight: 1.0.1
-      rimraf: 2.6.2
-      ssri: 5.3.0
-      unique-filename: 1.1.0
+      rimraf: 2.6.3
+      ssri: 6.0.1
+      unique-filename: 1.1.1
       y18n: 4.0.0
     dev: false
     resolution:
-      integrity: sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==
+      integrity: sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==
   /cache-base/1.0.1:
     dependencies:
       collection-visit: 1.0.0
@@ -671,19 +921,54 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
-  /cache-loader/1.2.2:
+  /cache-content-type/1.0.1:
+    dependencies:
+      mime-types: 2.1.22
+      ylru: 1.2.1
+    dev: false
+    engines:
+      node: '>= 6.0.0'
+    resolution:
+      integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==
+  /cache-loader/1.2.5:
     dependencies:
-      loader-utils: 1.1.0
+      loader-utils: 1.2.3
       mkdirp: 0.5.1
-      neo-async: 2.5.1
-      schema-utils: 0.4.5
+      neo-async: 2.6.0
+      schema-utils: 0.4.7
     dev: false
     engines:
       node: '>= 4.8 < 5.0.0 || >= 5.10'
     peerDependencies:
       webpack: ^2.0.0 || ^3.0.0 || ^4.0.0
     resolution:
-      integrity: sha512-rsGh4SIYyB9glU+d0OcHwiXHXBoUgDhHZaQ1KAbiXqfz1CDPxtTboh1gPbJ0q2qdO8a9lfcjgC5CJ2Ms32y5bw==
+      integrity: sha512-enWKEQ4kO3YreDFd7AtVRjtJBmNiqh/X9hVDReu0C4qm8gsGmySkwuWtdc+N5O+vq5FzxL1mIZc30NyXCB7o/Q==
+  /call-me-maybe/1.0.1:
+    dev: false
+    resolution:
+      integrity: sha1-JtII6onje1y95gJQoV8DHBak1ms=
+  /caller-callsite/2.0.0:
+    dependencies:
+      callsites: 2.0.0
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+  /caller-path/2.0.0:
+    dependencies:
+      caller-callsite: 2.0.0
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+  /callsites/2.0.0:
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
   /camel-case/3.0.0:
     dependencies:
       no-case: 2.3.2
@@ -710,26 +995,26 @@ packages:
   /caniuse-api/1.6.1:
     dependencies:
       browserslist: 1.7.7
-      caniuse-db: 1.0.30000847
+      caniuse-db: 1.0.30000941
       lodash.memoize: 4.1.2
       lodash.uniq: 4.5.0
     dev: false
     resolution:
       integrity: sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=
-  /caniuse-db/1.0.30000847:
+  /caniuse-db/1.0.30000941:
     dev: false
     resolution:
-      integrity: sha1-/0BypUaICf7ArprDtANe+JHlsUQ=
-  /caniuse-lite/1.0.30000847:
+      integrity: sha512-xgDlJ1rEg4Zb1wqyiDw1Lwd2lIrG5El9vhHwURihFw8+Gk2PcyVh1RWaymOwFx6q49rMgVFqQAvLJmEU9RUUJg==
+  /caniuse-lite/1.0.30000941:
     dev: false
     resolution:
-      integrity: sha512-Weo+tRtVWcN2da782Ebx/27hFNEb+KP+uP6tdqAa+2S5bp1zOJhVH9tEpDygagrfvU4QjeuPwi/5VGsgT4SLaA==
-  /capture-stack-trace/1.0.0:
+      integrity: sha512-4vzGb2MfZcO20VMPj1j6nRAixhmtlhkypM4fL4zhgzEucQIYiRzSqPcWIu1OF8i0FETD93FMIPWfUJCAcFvrqA==
+  /capture-stack-trace/1.0.1:
     dev: false
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=
+      integrity: sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==
   /chalk/1.1.3:
     dependencies:
       ansi-styles: 2.2.1
@@ -742,17 +1027,17 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
-  /chalk/2.4.1:
+  /chalk/2.4.2:
     dependencies:
       ansi-styles: 3.2.1
       escape-string-regexp: 1.0.5
-      supports-color: 5.4.0
+      supports-color: 5.5.0
     dev: false
     engines:
       node: '>=4'
     resolution:
-      integrity: sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==
-  /chokidar/2.0.3:
+      integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+  /chokidar/2.1.2:
     dependencies:
       anymatch: 2.0.0
       async-each: 1.0.1
@@ -761,29 +1046,31 @@ packages:
       inherits: 2.0.3
       is-binary-path: 1.0.1
       is-glob: 4.0.0
-      normalize-path: 2.1.1
+      normalize-path: 3.0.0
       path-is-absolute: 1.0.1
-      readdirp: 2.1.0
+      readdirp: 2.2.1
       upath: 1.1.0
     dev: false
     optionalDependencies:
-      fsevents: 1.2.4
+      fsevents: 1.2.7
     resolution:
-      integrity: sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==
-  /chownr/1.0.1:
+      integrity: sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==
+  /chownr/1.1.1:
     dev: false
     resolution:
-      integrity: sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=
-  /chrome-trace-event/0.1.3:
+      integrity: sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
+  /chrome-trace-event/1.0.0:
+    dependencies:
+      tslib: 1.9.3
     dev: false
     engines:
       node: '>=6.0'
     resolution:
-      integrity: sha512-sjndyZHrrWiu4RY7AkHgjn80GfAM2ZSzUkZLV/Js59Ldmh6JDThf0SUmOHU53rFu2rVxxfCzJ30Ukcfch3Gb/A==
-  /ci-info/1.1.3:
+      integrity: sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==
+  /ci-info/1.6.0:
     dev: false
     resolution:
-      integrity: sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==
+      integrity: sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==
   /cipher-base/1.0.4:
     dependencies:
       inherits: 2.0.3
@@ -810,14 +1097,14 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
-  /clean-css/4.1.11:
+  /clean-css/4.2.1:
     dependencies:
-      source-map: 0.5.7
+      source-map: 0.6.1
     dev: false
     engines:
       node: '>= 4.0'
     resolution:
-      integrity: sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=
+      integrity: sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==
   /cli-boxes/1.0.0:
     dev: false
     engines:
@@ -828,20 +1115,28 @@ packages:
     dependencies:
       good-listener: 1.2.2
       select: 1.1.2
-      tiny-emitter: 2.0.2
+      tiny-emitter: 2.1.0
     dev: false
     optional: true
     resolution:
       integrity: sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==
   /clipboardy/1.2.3:
     dependencies:
-      arch: 2.1.0
+      arch: 2.1.1
       execa: 0.8.0
     dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==
+  /cliui/4.1.0:
+    dependencies:
+      string-width: 2.1.1
+      strip-ansi: 4.0.0
+      wrap-ansi: 2.1.0
+    dev: false
+    resolution:
+      integrity: sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==
   /clone/1.0.4:
     dev: false
     engines:
@@ -863,6 +1158,12 @@ packages:
       node: '>= 0.8.0'
     resolution:
       integrity: sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=
+  /code-point-at/1.1.0:
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
   /collection-visit/1.0.0:
     dependencies:
       map-visit: 1.0.0
@@ -872,26 +1173,30 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
-  /color-convert/1.9.1:
+  /color-convert/1.9.3:
     dependencies:
       color-name: 1.1.3
     dev: false
     resolution:
-      integrity: sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==
+      integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
   /color-name/1.1.3:
     dev: false
     resolution:
       integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+  /color-name/1.1.4:
+    dev: false
+    resolution:
+      integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
   /color-string/0.3.0:
     dependencies:
-      color-name: 1.1.3
+      color-name: 1.1.4
     dev: false
     resolution:
       integrity: sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=
   /color/0.11.4:
     dependencies:
       clone: 1.0.4
-      color-convert: 1.9.1
+      color-convert: 1.9.3
       color-string: 0.3.0
     dev: false
     resolution:
@@ -900,7 +1205,7 @@ packages:
     dependencies:
       color: 0.11.4
       css-color-names: 0.0.4
-      has: 1.0.1
+      has: 1.0.3
     dev: false
     resolution:
       integrity: sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=
@@ -910,14 +1215,14 @@ packages:
       node: '>=0.1.90'
     resolution:
       integrity: sha1-FopHAXVran9RoSzgyXv6KMCE7WM=
-  /commander/2.13.0:
+  /commander/2.17.1:
     dev: false
     resolution:
-      integrity: sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==
-  /commander/2.15.1:
+      integrity: sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
+  /commander/2.19.0:
     dev: false
     resolution:
-      integrity: sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==
+      integrity: sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
   /commondir/1.0.1:
     dev: false
     resolution:
@@ -926,13 +1231,35 @@ packages:
     dev: false
     resolution:
       integrity: sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
+  /compressible/2.0.16:
+    dependencies:
+      mime-db: 1.38.0
+    dev: false
+    engines:
+      node: '>= 0.6'
+    resolution:
+      integrity: sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==
+  /compression/1.7.3:
+    dependencies:
+      accepts: 1.3.5
+      bytes: 3.0.0
+      compressible: 2.0.16
+      debug: 2.6.9
+      on-headers: 1.0.2
+      safe-buffer: 5.1.2
+      vary: 1.1.2
+    dev: false
+    engines:
+      node: '>= 0.8.0'
+    resolution:
+      integrity: sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==
   /concat-map/0.0.1:
     dev: false
     resolution:
       integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
   /concat-stream/1.6.2:
     dependencies:
-      buffer-from: 1.1.0
+      buffer-from: 1.1.1
       inherits: 2.0.3
       readable-stream: 2.3.6
       typedarray: 0.0.6
@@ -944,16 +1271,22 @@ packages:
   /configstore/3.1.2:
     dependencies:
       dot-prop: 4.2.0
-      graceful-fs: 4.1.11
+      graceful-fs: 4.1.15
       make-dir: 1.3.0
       unique-string: 1.0.0
-      write-file-atomic: 2.3.0
+      write-file-atomic: 2.4.2
       xdg-basedir: 3.0.0
     dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==
+  /connect-history-api-fallback/1.6.0:
+    dev: false
+    engines:
+      node: '>=0.8'
+    resolution:
+      integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
   /console-browserify/1.1.0:
     dependencies:
       date-now: 0.1.4
@@ -962,7 +1295,7 @@ packages:
       integrity: sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
   /consolidate/0.15.1:
     dependencies:
-      bluebird: 3.5.1
+      bluebird: 3.5.3
     dev: false
     engines:
       node: '>= 0.10.0'
@@ -978,28 +1311,52 @@ packages:
       node: '>= 0.6'
     resolution:
       integrity: sha1-DPaLud318r55YcOoUXjLhdunjLQ=
+  /content-disposition/0.5.3:
+    dependencies:
+      safe-buffer: 5.1.2
+    dev: false
+    engines:
+      node: '>= 0.6'
+    resolution:
+      integrity: sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
   /content-type/1.0.4:
     dev: false
     engines:
       node: '>= 0.6'
     resolution:
       integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
-  /cookies/0.7.1:
+  /convert-source-map/1.6.0:
+    dependencies:
+      safe-buffer: 5.1.2
+    dev: false
+    resolution:
+      integrity: sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==
+  /cookie-signature/1.0.6:
+    dev: false
+    resolution:
+      integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
+  /cookie/0.3.1:
+    dev: false
+    engines:
+      node: '>= 0.6'
+    resolution:
+      integrity: sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
+  /cookies/0.7.3:
     dependencies:
       depd: 1.1.2
-      keygrip: 1.0.2
+      keygrip: 1.0.3
     dev: false
     engines:
       node: '>= 0.8'
     resolution:
-      integrity: sha1-fIphX1SBxhq58WyDNzG8uPZjuZs=
+      integrity: sha512-+gixgxYSgQLTaTIilDHAdlNPZDENDQernEMiIcZpYYP14zgHsCt4Ce1FEjFtcp6GefhozebB6orvhAAWx/IS0A==
   /copy-concurrently/1.0.5:
     dependencies:
       aproba: 1.2.0
       fs-write-stream-atomic: 1.0.10
       iferr: 0.1.5
       mkdirp: 0.5.1
-      rimraf: 2.6.2
+      rimraf: 2.6.3
       run-queue: 1.0.3
     dev: false
     resolution:
@@ -1014,40 +1371,39 @@ packages:
     dev: false
     resolution:
       integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-  /cosmiconfig/2.2.2:
+  /cosmiconfig/4.0.0:
     dependencies:
       is-directory: 0.3.1
-      js-yaml: 3.11.0
-      minimist: 1.2.0
-      object-assign: 4.1.1
-      os-homedir: 1.0.2
-      parse-json: 2.2.0
-      require-from-string: 1.2.1
+      js-yaml: 3.12.2
+      parse-json: 4.0.0
+      require-from-string: 2.0.2
     dev: false
     engines:
-      node: '>=0.12'
+      node: '>=4'
     resolution:
-      integrity: sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==
-  /cosmiconfig/5.0.5:
+      integrity: sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==
+  /cosmiconfig/5.1.0:
     dependencies:
+      import-fresh: 2.0.0
       is-directory: 0.3.1
-      js-yaml: 3.11.0
+      js-yaml: 3.12.2
+      lodash.get: 4.4.2
       parse-json: 4.0.0
     dev: false
     engines:
       node: '>=4'
     resolution:
-      integrity: sha512-94j37OtvxS5w7qr7Ta6dt67tWdnOxigBVN4VnSxNXFez9o18PGQ0D33SchKP17r9LAcWVTYV72G6vDayAUBFIg==
+      integrity: sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q==
   /create-ecdh/4.0.3:
     dependencies:
       bn.js: 4.11.8
-      elliptic: 6.4.0
+      elliptic: 6.4.1
     dev: false
     resolution:
       integrity: sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
   /create-error-class/3.0.2:
     dependencies:
-      capture-stack-trace: 1.0.0
+      capture-stack-trace: 1.0.1
     dev: false
     engines:
       node: '>=0.10.0'
@@ -1057,7 +1413,7 @@ packages:
     dependencies:
       cipher-base: 1.0.4
       inherits: 2.0.3
-      md5.js: 1.3.4
+      md5.js: 1.3.5
       ripemd160: 2.0.2
       sha.js: 2.4.11
     dev: false
@@ -1076,12 +1432,24 @@ packages:
       integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
   /cross-spawn/5.1.0:
     dependencies:
-      lru-cache: 4.1.3
+      lru-cache: 4.1.5
       shebang-command: 1.2.0
       which: 1.3.1
     dev: false
     resolution:
       integrity: sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
+  /cross-spawn/6.0.5:
+    dependencies:
+      nice-try: 1.0.5
+      path-key: 2.0.1
+      semver: 5.6.0
+      shebang-command: 1.2.0
+      which: 1.3.1
+    dev: false
+    engines:
+      node: '>=4.8'
+    resolution:
+      integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
   /crypto-browserify/3.12.0:
     dependencies:
       browserify-cipher: 1.0.1
@@ -1091,9 +1459,9 @@ packages:
       create-hmac: 1.1.7
       diffie-hellman: 5.0.3
       inherits: 2.0.3
-      pbkdf2: 3.0.16
-      public-encrypt: 4.0.2
-      randombytes: 2.0.6
+      pbkdf2: 3.0.17
+      public-encrypt: 4.0.3
+      randombytes: 2.1.0
       randomfill: 1.0.4
     dev: false
     resolution:
@@ -1111,19 +1479,19 @@ packages:
   /css-loader/0.28.11:
     dependencies:
       babel-code-frame: 6.26.0
-      css-selector-tokenizer: 0.7.0
+      css-selector-tokenizer: 0.7.1
       cssnano: 3.10.0
       icss-utils: 2.1.0
-      loader-utils: 1.1.0
+      loader-utils: 1.2.3
       lodash.camelcase: 4.3.0
       object-assign: 4.1.1
       postcss: 5.2.18
-      postcss-modules-extract-imports: 1.2.0
+      postcss-modules-extract-imports: 1.2.1
       postcss-modules-local-by-default: 1.2.0
       postcss-modules-scope: 1.1.0
       postcss-modules-values: 1.3.0
-      postcss-value-parser: 3.3.0
-      source-list-map: 2.0.0
+      postcss-value-parser: 3.3.1
+      source-list-map: 2.0.1
     dev: false
     engines:
       node: '>=0.12.0 || >= 4.3.0 < 5.0.0 || >=5.10'
@@ -1132,35 +1500,42 @@ packages:
   /css-select/1.2.0:
     dependencies:
       boolbase: 1.0.0
-      css-what: 2.1.0
+      css-what: 2.1.3
       domutils: 1.5.1
-      nth-check: 1.0.1
+      nth-check: 1.0.2
     dev: false
     resolution:
       integrity: sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
-  /css-selector-tokenizer/0.7.0:
+  /css-selector-tokenizer/0.7.1:
     dependencies:
       cssesc: 0.1.0
-      fastparse: 1.1.1
+      fastparse: 1.1.2
       regexpu-core: 1.0.0
     dev: false
     resolution:
-      integrity: sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=
-  /css-what/2.1.0:
+      integrity: sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==
+  /css-what/2.1.3:
     dev: false
     resolution:
-      integrity: sha1-lGfQMsOM+u+58teVASUwYvh/ob0=
+      integrity: sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
   /cssesc/0.1.0:
     dev: false
     hasBin: true
     resolution:
       integrity: sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=
+  /cssesc/2.0.0:
+    dev: false
+    engines:
+      node: '>=4'
+    hasBin: true
+    resolution:
+      integrity: sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==
   /cssnano/3.10.0:
     dependencies:
       autoprefixer: 6.7.7
       decamelize: 1.2.0
       defined: 1.0.0
-      has: 1.0.1
+      has: 1.0.3
       object-assign: 4.1.1
       postcss: 5.2.18
       postcss-calc: 5.3.1
@@ -1187,7 +1562,7 @@ packages:
       postcss-reduce-transforms: 1.0.4
       postcss-svgo: 2.1.6
       postcss-unique-selectors: 2.0.2
-      postcss-value-parser: 3.3.0
+      postcss-value-parser: 3.3.1
       postcss-zindex: 2.2.0
     dev: false
     resolution:
@@ -1216,7 +1591,7 @@ packages:
       integrity: sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=
   /d/1.0.0:
     dependencies:
-      es5-ext: 0.10.44
+      es5-ext: 0.10.48
     dev: false
     resolution:
       integrity: sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=
@@ -1240,6 +1615,18 @@ packages:
     dev: false
     resolution:
       integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
+  /debug/3.2.6:
+    dependencies:
+      ms: 2.1.1
+    dev: false
+    resolution:
+      integrity: sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+  /debug/4.1.1:
+    dependencies:
+      ms: 2.1.1
+    dev: false
+    resolution:
+      integrity: sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
   /decamelize-keys/1.1.0:
     dependencies:
       decamelize: 1.2.0
@@ -1255,6 +1642,14 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+  /decamelize/2.0.0:
+    dependencies:
+      xregexp: 4.0.0
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==
   /decode-uri-component/0.2.0:
     dev: false
     engines:
@@ -1277,15 +1672,23 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==
-  /define-properties/1.1.2:
+  /default-gateway/4.1.2:
+    dependencies:
+      execa: 1.0.0
+      ip-regex: 2.1.0
+    dev: false
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-xhJUAp3u02JsBGovj0V6B6uYhKCUOmiNc8xGmReUwGu77NmvcpxPVB0pCielxMFumO7CmXBG02XjM8HB97k8Hw==
+  /define-properties/1.1.3:
     dependencies:
-      foreach: 2.0.5
-      object-keys: 1.0.11
+      object-keys: 1.1.0
     dev: false
     engines:
       node: '>= 0.4'
     resolution:
-      integrity: sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=
+      integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
   /define-property/0.2.5:
     dependencies:
       is-descriptor: 0.1.6
@@ -1315,6 +1718,19 @@ packages:
     dev: false
     resolution:
       integrity: sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
+  /del/3.0.0:
+    dependencies:
+      globby: 6.1.0
+      is-path-cwd: 1.0.0
+      is-path-in-cwd: 1.0.1
+      p-map: 1.2.0
+      pify: 3.0.0
+      rimraf: 2.6.3
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=
   /delegate/3.2.0:
     dev: false
     optional: true
@@ -1341,27 +1757,61 @@ packages:
     dev: false
     resolution:
       integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
+  /detect-node/2.0.4:
+    dev: false
+    resolution:
+      integrity: sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==
+  /diacritics/1.3.0:
+    dev: false
+    resolution:
+      integrity: sha1-PvqHMj67hj5mls67AILUj/PW96E=
   /diffie-hellman/5.0.3:
     dependencies:
       bn.js: 4.11.8
       miller-rabin: 4.0.1
-      randombytes: 2.0.6
+      randombytes: 2.1.0
     dev: false
     resolution:
       integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
-  /dom-converter/0.1.4:
+  /dir-glob/2.0.0:
     dependencies:
-      utila: 0.3.3
+      arrify: 1.0.1
+      path-type: 3.0.0
     dev: false
+    engines:
+      node: '>=4'
     resolution:
-      integrity: sha1-pF71cnuJDJv/5tfIduexnLDhfzs=
-  /dom-serializer/0.1.0:
+      integrity: sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==
+  /dns-equal/1.0.0:
+    dev: false
+    resolution:
+      integrity: sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
+  /dns-packet/1.3.1:
+    dependencies:
+      ip: 1.1.5
+      safe-buffer: 5.1.2
+    dev: false
+    resolution:
+      integrity: sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==
+  /dns-txt/2.0.2:
+    dependencies:
+      buffer-indexof: 1.1.1
+    dev: false
+    resolution:
+      integrity: sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=
+  /dom-converter/0.2.0:
+    dependencies:
+      utila: 0.4.0
+    dev: false
+    resolution:
+      integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
+  /dom-serializer/0.1.1:
     dependencies:
-      domelementtype: 1.1.3
-      entities: 1.1.1
+      domelementtype: 1.3.1
+      entities: 1.1.2
     dev: false
     resolution:
-      integrity: sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=
+      integrity: sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==
   /domain-browser/1.2.0:
     dev: false
     engines:
@@ -1369,33 +1819,30 @@ packages:
       npm: '>=1.2'
     resolution:
       integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
-  /domelementtype/1.1.3:
-    dev: false
-    resolution:
-      integrity: sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=
-  /domelementtype/1.3.0:
+  /domelementtype/1.3.1:
     dev: false
     resolution:
-      integrity: sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=
-  /domhandler/2.1.0:
+      integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
+  /domhandler/2.4.2:
     dependencies:
-      domelementtype: 1.3.0
+      domelementtype: 1.3.1
     dev: false
     resolution:
-      integrity: sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=
-  /domutils/1.1.6:
+      integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
+  /domutils/1.5.1:
     dependencies:
-      domelementtype: 1.3.0
+      dom-serializer: 0.1.1
+      domelementtype: 1.3.1
     dev: false
     resolution:
-      integrity: sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=
-  /domutils/1.5.1:
+      integrity: sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
+  /domutils/1.7.0:
     dependencies:
-      dom-serializer: 0.1.0
-      domelementtype: 1.3.0
+      dom-serializer: 0.1.1
+      domelementtype: 1.3.1
     dev: false
     resolution:
-      integrity: sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
+      integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
   /dot-prop/4.2.0:
     dependencies:
       is-obj: 1.0.1
@@ -1408,7 +1855,7 @@ packages:
     dev: false
     resolution:
       integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
-  /duplexify/3.6.0:
+  /duplexify/3.7.1:
     dependencies:
       end-of-stream: 1.4.1
       inherits: 2.0.3
@@ -1416,53 +1863,59 @@ packages:
       stream-shift: 1.0.0
     dev: false
     resolution:
-      integrity: sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==
+      integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
   /ee-first/1.1.1:
     dev: false
     resolution:
       integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
-  /electron-to-chromium/1.3.48:
+  /electron-to-chromium/1.3.113:
     dev: false
     resolution:
-      integrity: sha1-07DYWTgUBE4JLs4hCPw6ya6kuQA=
-  /elliptic/6.4.0:
+      integrity: sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==
+  /elliptic/6.4.1:
     dependencies:
       bn.js: 4.11.8
       brorand: 1.1.0
-      hash.js: 1.1.3
+      hash.js: 1.1.7
       hmac-drbg: 1.0.1
       inherits: 2.0.3
       minimalistic-assert: 1.0.1
       minimalistic-crypto-utils: 1.0.1
     dev: false
     resolution:
-      integrity: sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=
+      integrity: sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==
   /emojis-list/2.1.0:
     dev: false
     engines:
       node: '>= 0.10'
     resolution:
       integrity: sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+  /encodeurl/1.0.2:
+    dev: false
+    engines:
+      node: '>= 0.8'
+    resolution:
+      integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
   /end-of-stream/1.4.1:
     dependencies:
       once: 1.4.0
     dev: false
     resolution:
       integrity: sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
-  /enhanced-resolve/4.0.0:
+  /enhanced-resolve/4.1.0:
     dependencies:
-      graceful-fs: 4.1.11
+      graceful-fs: 4.1.15
       memory-fs: 0.4.1
-      tapable: 1.0.0
+      tapable: 1.1.1
     dev: false
     engines:
-      node: '>=6.11.5'
+      node: '>=6.9.0'
     resolution:
-      integrity: sha512-jox/62b2GofV1qTUQTMPEJSDIGycS43evqYzD/KVtEb9OCoki9cnacUPxCrZa7JfPzZSYOCZhu9O9luaMxAX8g==
-  /entities/1.1.1:
+      integrity: sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==
+  /entities/1.1.2:
     dev: false
     resolution:
-      integrity: sha1-blwtClYhtdra7O+AuQ7ftc13cvA=
+      integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
   /errno/0.1.7:
     dependencies:
       prr: 1.0.1
@@ -1470,50 +1923,51 @@ packages:
     hasBin: true
     resolution:
       integrity: sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
-  /error-ex/1.3.1:
+  /error-ex/1.3.2:
     dependencies:
       is-arrayish: 0.2.1
     dev: false
     resolution:
-      integrity: sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=
+      integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
   /error-inject/1.0.0:
     dev: false
     resolution:
       integrity: sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc=
-  /es-abstract/1.12.0:
+  /es-abstract/1.13.0:
     dependencies:
-      es-to-primitive: 1.1.1
+      es-to-primitive: 1.2.0
       function-bind: 1.1.1
-      has: 1.0.1
-      is-callable: 1.1.3
+      has: 1.0.3
+      is-callable: 1.1.4
       is-regex: 1.0.4
+      object-keys: 1.1.0
     dev: false
     engines:
       node: '>= 0.4'
     resolution:
-      integrity: sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==
-  /es-to-primitive/1.1.1:
+      integrity: sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
+  /es-to-primitive/1.2.0:
     dependencies:
-      is-callable: 1.1.3
+      is-callable: 1.1.4
       is-date-object: 1.0.1
-      is-symbol: 1.0.1
+      is-symbol: 1.0.2
     dev: false
     engines:
       node: '>= 0.4'
     resolution:
-      integrity: sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=
-  /es5-ext/0.10.44:
+      integrity: sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
+  /es5-ext/0.10.48:
     dependencies:
       es6-iterator: 2.0.3
       es6-symbol: 3.1.1
       next-tick: 1.0.0
     dev: false
     resolution:
-      integrity: sha512-TO4Vt9IhW3FzDKLDOpoA8VS9BCV4b9WTf6BqvMOgfoa8wX73F3Kh3y2J7yTstTaXlQ0k1vq4DH2vw6RSs42z+g==
+      integrity: sha512-CdRvPlX/24Mj5L4NVxTs4804sxiS2CjVprgCmrgoDkdmjdY4D+ySHa7K3jJf8R40dFg0tIm3z/dk326LrnuSGw==
   /es6-iterator/2.0.3:
     dependencies:
       d: 1.0.0
-      es5-ext: 0.10.44
+      es5-ext: 0.10.48
       es6-symbol: 3.1.1
     dev: false
     resolution:
@@ -1521,7 +1975,7 @@ packages:
   /es6-symbol/3.1.1:
     dependencies:
       d: 1.0.0
-      es5-ext: 0.10.44
+      es5-ext: 0.10.48
     dev: false
     resolution:
       integrity: sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=
@@ -1535,7 +1989,7 @@ packages:
       node: '>=0.8.0'
     resolution:
       integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-  /eslint-scope/3.7.1:
+  /eslint-scope/4.0.2:
     dependencies:
       esrecurse: 4.2.1
       estraverse: 4.2.0
@@ -1543,7 +1997,7 @@ packages:
     engines:
       node: '>=4.0.0'
     resolution:
-      integrity: sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=
+      integrity: sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==
   /esprima/2.7.3:
     dev: false
     engines:
@@ -1551,13 +2005,13 @@ packages:
     hasBin: true
     resolution:
       integrity: sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=
-  /esprima/4.0.0:
+  /esprima/4.0.1:
     dev: false
     engines:
       node: '>=4'
     hasBin: true
     resolution:
-      integrity: sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==
+      integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
   /esrecurse/4.2.1:
     dependencies:
       estraverse: 4.2.0
@@ -1578,15 +2032,33 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
-  /events/1.1.1:
+  /etag/1.8.1:
     dev: false
     engines:
-      node: '>=0.4.x'
+      node: '>= 0.6'
+    resolution:
+      integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
+  /eventemitter3/3.1.0:
+    dev: false
     resolution:
-      integrity: sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=
+      integrity: sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==
+  /events/3.0.0:
+    dev: false
+    engines:
+      node: '>=0.8.x'
+    resolution:
+      integrity: sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==
+  /eventsource/1.0.7:
+    dependencies:
+      original: 1.0.2
+    dev: false
+    engines:
+      node: '>=0.12.0'
+    resolution:
+      integrity: sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==
   /evp_bytestokey/1.0.3:
     dependencies:
-      md5.js: 1.3.4
+      md5.js: 1.3.5
       safe-buffer: 5.1.2
     dev: false
     resolution:
@@ -1619,6 +2091,20 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=
+  /execa/1.0.0:
+    dependencies:
+      cross-spawn: 6.0.5
+      get-stream: 4.1.0
+      is-stream: 1.1.0
+      npm-run-path: 2.0.2
+      p-finally: 1.0.0
+      signal-exit: 3.0.2
+      strip-eof: 1.0.0
+    dev: false
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
   /expand-brackets/2.1.4:
     dependencies:
       debug: 2.6.9
@@ -1633,6 +2119,43 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+  /express/4.16.4:
+    dependencies:
+      accepts: 1.3.5
+      array-flatten: 1.1.1
+      body-parser: 1.18.3
+      content-disposition: 0.5.2
+      content-type: 1.0.4
+      cookie: 0.3.1
+      cookie-signature: 1.0.6
+      debug: 2.6.9
+      depd: 1.1.2
+      encodeurl: 1.0.2
+      escape-html: 1.0.3
+      etag: 1.8.1
+      finalhandler: 1.1.1
+      fresh: 0.5.2
+      merge-descriptors: 1.0.1
+      methods: 1.1.2
+      on-finished: 2.3.0
+      parseurl: 1.3.2
+      path-to-regexp: 0.1.7
+      proxy-addr: 2.0.4
+      qs: 6.5.2
+      range-parser: 1.2.0
+      safe-buffer: 5.1.2
+      send: 0.16.2
+      serve-static: 1.13.2
+      setprototypeof: 1.1.0
+      statuses: 1.4.0
+      type-is: 1.6.16
+      utils-merge: 1.0.1
+      vary: 1.1.2
+    dev: false
+    engines:
+      node: '>= 0.10.0'
+    resolution:
+      integrity: sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==
   /extend-shallow/2.0.1:
     dependencies:
       is-extendable: 0.1.1
@@ -1669,18 +2192,51 @@ packages:
     dev: false
     resolution:
       integrity: sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
+  /fast-glob/2.2.6:
+    dependencies:
+      '@mrmlnc/readdir-enhanced': 2.2.1
+      '@nodelib/fs.stat': 1.1.3
+      glob-parent: 3.1.0
+      is-glob: 4.0.0
+      merge2: 1.2.3
+      micromatch: 3.1.10
+    dev: false
+    engines:
+      node: '>=4.0.0'
+    resolution:
+      integrity: sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==
   /fast-json-stable-stringify/2.0.0:
     dev: false
     resolution:
       integrity: sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
-  /fastparse/1.1.1:
+  /fastparse/1.1.2:
+    dev: false
+    resolution:
+      integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==
+  /faye-websocket/0.10.0:
+    dependencies:
+      websocket-driver: 0.7.0
     dev: false
+    engines:
+      node: '>=0.4.0'
     resolution:
-      integrity: sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=
+      integrity: sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=
+  /faye-websocket/0.11.1:
+    dependencies:
+      websocket-driver: 0.7.0
+    dev: false
+    engines:
+      node: '>=0.8.0'
+    resolution:
+      integrity: sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=
+  /figgy-pudding/3.5.1:
+    dev: false
+    resolution:
+      integrity: sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==
   /file-loader/1.1.11:
     dependencies:
-      loader-utils: 1.1.0
-      schema-utils: 0.4.5
+      loader-utils: 1.2.3
+      schema-utils: 0.4.7
     dev: false
     engines:
       node: '>= 4.3 < 5.0.0 || >= 5.10'
@@ -1699,16 +2255,30 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
-  /find-cache-dir/1.0.0:
+  /finalhandler/1.1.1:
+    dependencies:
+      debug: 2.6.9
+      encodeurl: 1.0.2
+      escape-html: 1.0.3
+      on-finished: 2.3.0
+      parseurl: 1.3.2
+      statuses: 1.4.0
+      unpipe: 1.0.0
+    dev: false
+    engines:
+      node: '>= 0.8'
+    resolution:
+      integrity: sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==
+  /find-cache-dir/2.0.0:
     dependencies:
       commondir: 1.0.1
       make-dir: 1.3.0
-      pkg-dir: 2.0.0
+      pkg-dir: 3.0.0
     dev: false
     engines:
-      node: '>=4'
+      node: '>=6'
     resolution:
-      integrity: sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=
+      integrity: sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==
   /find-up/2.1.0:
     dependencies:
       locate-path: 2.0.0
@@ -1717,27 +2287,45 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+  /find-up/3.0.0:
+    dependencies:
+      locate-path: 3.0.0
+    dev: false
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
   /flatten/1.0.2:
     dev: false
     resolution:
       integrity: sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=
-  /flush-write-stream/1.0.3:
+  /flush-write-stream/1.1.1:
     dependencies:
       inherits: 2.0.3
       readable-stream: 2.3.6
     dev: false
     resolution:
-      integrity: sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==
+      integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
+  /follow-redirects/1.7.0:
+    dependencies:
+      debug: 3.2.6
+    dev: false
+    engines:
+      node: '>=4.0'
+    resolution:
+      integrity: sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==
   /for-in/1.0.2:
     dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
-  /foreach/2.0.5:
+  /forwarded/0.1.2:
     dev: false
+    engines:
+      node: '>= 0.6'
     resolution:
-      integrity: sha1-C+4AUBiusmDQo6865ljdATbsG5k=
+      integrity: sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
   /fragment-cache/0.2.1:
     dependencies:
       map-cache: 0.2.2
@@ -1759,9 +2347,23 @@ packages:
     dev: false
     resolution:
       integrity: sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
+  /front-matter/3.0.1:
+    dependencies:
+      js-yaml: 3.12.2
+    dev: false
+    resolution:
+      integrity: sha512-iCHZ7RZGE36uG58iIWp8zrhDi9BZjlDiRj7aRcGm45EIqrbK+u4KTAmRKLG3FOaVkFhZI5/29SUo7sMLzlQkcA==
+  /fs-extra/5.0.0:
+    dependencies:
+      graceful-fs: 4.1.15
+      jsonfile: 4.0.0
+      universalify: 0.1.2
+    dev: false
+    resolution:
+      integrity: sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==
   /fs-write-stream-atomic/1.0.10:
     dependencies:
-      graceful-fs: 4.1.11
+      graceful-fs: 4.1.15
       iferr: 0.1.5
       imurmurhash: 0.1.4
       readable-stream: 2.3.6
@@ -1772,24 +2374,26 @@ packages:
     dev: false
     resolution:
       integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-  /fsevents/1.2.4:
+  /fsevents/1.2.7:
     bundledDependencies:
       - node-pre-gyp
     dependencies:
-      nan: 2.10.0
+      nan: 2.12.1
     dev: false
     engines:
-      node: '>=0.8.0'
+      node: '>=4.0'
     optional: true
-    os:
-      - darwin
     requiresBuild: true
     resolution:
-      integrity: sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==
+      integrity: sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==
   /function-bind/1.1.1:
     dev: false
     resolution:
       integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+  /get-caller-file/1.0.3:
+    dev: false
+    resolution:
+      integrity: sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
   /get-port/3.2.0:
     dev: false
     engines:
@@ -1802,6 +2406,14 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+  /get-stream/4.1.0:
+    dependencies:
+      pump: 3.0.0
+    dev: false
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
   /get-value/2.0.6:
     dev: false
     engines:
@@ -1815,7 +2427,11 @@ packages:
     dev: false
     resolution:
       integrity: sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
-  /glob/7.1.2:
+  /glob-to-regexp/0.3.0:
+    dev: false
+    resolution:
+      integrity: sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
+  /glob/7.1.3:
     dependencies:
       fs.realpath: 1.0.0
       inflight: 1.0.6
@@ -1825,7 +2441,7 @@ packages:
       path-is-absolute: 1.0.1
     dev: false
     resolution:
-      integrity: sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
+      integrity: sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
   /global-dirs/0.1.1:
     dependencies:
       ini: 1.3.5
@@ -1834,6 +2450,38 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=
+  /globals/11.11.0:
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==
+  /globby/6.1.0:
+    dependencies:
+      array-union: 1.0.2
+      glob: 7.1.3
+      object-assign: 4.1.1
+      pify: 2.3.0
+      pinkie-promise: 2.0.1
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
+  /globby/8.0.2:
+    dependencies:
+      array-union: 1.0.2
+      dir-glob: 2.0.0
+      fast-glob: 2.2.6
+      glob: 7.1.3
+      ignore: 3.3.10
+      pify: 3.0.0
+      slash: 1.0.0
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==
   /good-listener/1.2.2:
     dependencies:
       delegate: 3.2.0
@@ -1859,18 +2507,25 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=
-  /graceful-fs/4.1.11:
+  /graceful-fs/4.1.15:
     dev: false
-    engines:
-      node: '>=0.4.0'
     resolution:
-      integrity: sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
-  /hammerjs/2.0.8:
+      integrity: sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
+  /gray-matter/4.0.2:
+    dependencies:
+      js-yaml: 3.12.2
+      kind-of: 6.0.2
+      section-matter: 1.0.0
+      strip-bom-string: 1.0.0
     dev: false
     engines:
-      node: '>=0.8.0'
+      node: '>=6.0'
+    resolution:
+      integrity: sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw==
+  /handle-thing/2.0.0:
+    dev: false
     resolution:
-      integrity: sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=
+      integrity: sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==
   /has-ansi/2.0.0:
     dependencies:
       ansi-regex: 2.1.1
@@ -1932,14 +2587,14 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
-  /has/1.0.1:
+  /has/1.0.3:
     dependencies:
       function-bind: 1.1.1
     dev: false
     engines:
-      node: '>= 0.8.0'
+      node: '>= 0.4.0'
     resolution:
-      integrity: sha1-hGFzP1OLCDfJNh45qauelwTcLyg=
+      integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
   /hash-base/3.0.4:
     dependencies:
       inherits: 2.0.3
@@ -1953,58 +2608,71 @@ packages:
     dev: false
     resolution:
       integrity: sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=
-  /hash.js/1.1.3:
+  /hash.js/1.1.7:
     dependencies:
       inherits: 2.0.3
       minimalistic-assert: 1.0.1
     dev: false
     resolution:
-      integrity: sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==
-  /he/1.1.1:
+      integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+  /he/1.2.0:
     dev: false
     hasBin: true
     resolution:
-      integrity: sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
+      integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
   /hmac-drbg/1.0.1:
     dependencies:
-      hash.js: 1.1.3
+      hash.js: 1.1.7
       minimalistic-assert: 1.0.1
       minimalistic-crypto-utils: 1.0.1
     dev: false
     resolution:
       integrity: sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
-  /hosted-git-info/2.6.0:
+  /hosted-git-info/2.7.1:
+    dev: false
+    resolution:
+      integrity: sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==
+  /hpack.js/2.1.6:
+    dependencies:
+      inherits: 2.0.3
+      obuf: 1.1.2
+      readable-stream: 2.3.6
+      wbuf: 1.7.3
     dev: false
-    engines:
-      node: '>=4'
     resolution:
-      integrity: sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==
-  /html-comment-regex/1.1.1:
+      integrity: sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=
+  /html-comment-regex/1.1.2:
     dev: false
     resolution:
-      integrity: sha1-ZouTd26q5V696POtRkswekljYl4=
-  /html-minifier/3.5.16:
+      integrity: sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==
+  /html-entities/1.2.1:
+    dev: false
+    engines:
+      '0': node >= 0.4.0
+    resolution:
+      integrity: sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=
+  /html-minifier/3.5.21:
     dependencies:
       camel-case: 3.0.0
-      clean-css: 4.1.11
-      commander: 2.15.1
-      he: 1.1.1
+      clean-css: 4.2.1
+      commander: 2.17.1
+      he: 1.2.0
       param-case: 2.1.1
       relateurl: 0.2.7
-      uglify-js: 3.3.28
+      uglify-js: 3.4.9
     dev: false
     engines:
       node: '>=4'
     hasBin: true
     resolution:
-      integrity: sha512-zP5EfLSpiLRp0aAgud4CQXPQZm9kXwWjR/cF0PfdOj+jjWnOaCgeZcll4kYXSvIBPeUMmyaSc7mM4IDtA+kboA==
+      integrity: sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==
   /html-webpack-plugin/3.2.0:
     dependencies:
-      html-minifier: 3.5.16
+      html-minifier: 3.5.21
       loader-utils: 0.2.17
-      lodash: 4.17.10
+      lodash: 4.17.11
       pretty-error: 2.1.1
-      tapable: 1.0.0
+      tapable: 1.1.1
       toposort: 1.0.7
       util.promisify: 1.0.0
     dev: false
@@ -2014,24 +2682,30 @@ packages:
       webpack: ^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0
     resolution:
       integrity: sha1-sBq71yOsqqeze2r0SS69oD2d03s=
-  /htmlparser2/3.3.0:
+  /htmlparser2/3.10.1:
     dependencies:
-      domelementtype: 1.3.0
-      domhandler: 2.1.0
-      domutils: 1.1.6
-      readable-stream: 1.0.34
+      domelementtype: 1.3.1
+      domhandler: 2.4.2
+      domutils: 1.7.0
+      entities: 1.1.2
+      inherits: 2.0.3
+      readable-stream: 3.2.0
     dev: false
     resolution:
-      integrity: sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=
-  /http-assert/1.3.0:
+      integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==
+  /http-assert/1.4.0:
     dependencies:
       deep-equal: 1.0.1
-      http-errors: 1.6.3
+      http-errors: 1.7.2
     dev: false
     engines:
       node: '>= 0.8'
     resolution:
-      integrity: sha1-oxpc+IyHPsu1eWkH1NbxMujAHko=
+      integrity: sha512-tPVv62a6l3BbQoM/N5qo969l0OFxqpnQzNUPeYfTP6Spo4zkgWeDBD1D5thI7sDLg7jCCihXTLB0X8UtdyAy8A==
+  /http-deceiver/1.2.7:
+    dev: false
+    resolution:
+      integrity: sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=
   /http-errors/1.6.3:
     dependencies:
       depd: 1.1.2
@@ -2043,28 +2717,102 @@ packages:
       node: '>= 0.6'
     resolution:
       integrity: sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
+  /http-errors/1.7.2:
+    dependencies:
+      depd: 1.1.2
+      inherits: 2.0.3
+      setprototypeof: 1.1.1
+      statuses: 1.5.0
+      toidentifier: 1.0.0
+    dev: false
+    engines:
+      node: '>= 0.6'
+    resolution:
+      integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
+  /http-parser-js/0.5.0:
+    dev: false
+    resolution:
+      integrity: sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==
+  /http-proxy-middleware/0.19.1:
+    dependencies:
+      http-proxy: 1.17.0
+      is-glob: 4.0.0
+      lodash: 4.17.11
+      micromatch: 3.1.10
+    dev: false
+    engines:
+      node: '>=4.0.0'
+    resolution:
+      integrity: sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==
+  /http-proxy/1.17.0:
+    dependencies:
+      eventemitter3: 3.1.0
+      follow-redirects: 1.7.0
+      requires-port: 1.0.0
+    dev: false
+    engines:
+      node: '>=4.0.0'
+    resolution:
+      integrity: sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==
   /https-browserify/1.0.0:
     dev: false
     resolution:
       integrity: sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+  /iconv-lite/0.4.23:
+    dependencies:
+      safer-buffer: 2.1.2
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==
   /icss-replace-symbols/1.1.0:
     dev: false
     resolution:
       integrity: sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
   /icss-utils/2.1.0:
     dependencies:
-      postcss: 6.0.22
+      postcss: 6.0.23
     dev: false
     resolution:
       integrity: sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=
-  /ieee754/1.1.11:
+  /ieee754/1.1.12:
     dev: false
     resolution:
-      integrity: sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==
+      integrity: sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==
   /iferr/0.1.5:
     dev: false
     resolution:
       integrity: sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+  /ignore/3.3.10:
+    dev: false
+    resolution:
+      integrity: sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
+  /import-cwd/2.1.0:
+    dependencies:
+      import-from: 2.1.0
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=
+  /import-fresh/2.0.0:
+    dependencies:
+      caller-path: 2.0.0
+      resolve-from: 3.0.0
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
+  /import-from/2.1.0:
+    dependencies:
+      resolve-from: 3.0.0
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-M1238qev/VOqpHHUuAId7ja387E=
   /import-lazy/2.1.0:
     dev: false
     engines:
@@ -2081,6 +2829,16 @@ packages:
     hasBin: true
     resolution:
       integrity: sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==
+  /import-local/2.0.0:
+    dependencies:
+      pkg-dir: 3.0.0
+      resolve-cwd: 2.0.0
+    dev: false
+    engines:
+      node: '>=6'
+    hasBin: true
+    resolution:
+      integrity: sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
   /imurmurhash/0.1.4:
     dev: false
     engines:
@@ -2120,6 +2878,43 @@ packages:
     dev: false
     resolution:
       integrity: sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+  /internal-ip/4.2.0:
+    dependencies:
+      default-gateway: 4.1.2
+      ipaddr.js: 1.9.0
+    dev: false
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-ZY8Rk+hlvFeuMmG5uH1MXhhdeMntmIaxaInvAmzMq/SHV8rv4Kh+6GiQNNDQd0wZFrcO+FiTBo8lui/osKOyJw==
+  /invert-kv/2.0.0:
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
+  /ip-regex/2.1.0:
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
+  /ip/1.1.5:
+    dev: false
+    resolution:
+      integrity: sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
+  /ipaddr.js/1.8.0:
+    dev: false
+    engines:
+      node: '>= 0.10'
+    resolution:
+      integrity: sha1-6qM9bd16zo9/b+DJygRA5wZzix4=
+  /ipaddr.js/1.9.0:
+    dev: false
+    engines:
+      node: '>= 0.10'
+    resolution:
+      integrity: sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==
   /is-absolute-url/2.1.0:
     dev: false
     engines:
@@ -2148,7 +2943,7 @@ packages:
       integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
   /is-binary-path/1.0.1:
     dependencies:
-      binary-extensions: 1.11.0
+      binary-extensions: 1.13.0
     dev: false
     engines:
       node: '>=0.10.0'
@@ -2158,27 +2953,19 @@ packages:
     dev: false
     resolution:
       integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-  /is-builtin-module/1.0.0:
-    dependencies:
-      builtin-modules: 1.1.1
-    dev: false
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
-  /is-callable/1.1.3:
+  /is-callable/1.1.4:
     dev: false
     engines:
       node: '>= 0.4'
     resolution:
-      integrity: sha1-hut1OSgF3cM69xySoO7fdO52BLI=
-  /is-ci/1.1.0:
+      integrity: sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
+  /is-ci/1.2.1:
     dependencies:
-      ci-info: 1.1.3
+      ci-info: 1.6.0
     dev: false
     hasBin: true
     resolution:
-      integrity: sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==
+      integrity: sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==
   /is-data-descriptor/0.1.4:
     dependencies:
       kind-of: 3.2.2
@@ -2247,6 +3034,14 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+  /is-fullwidth-code-point/1.0.0:
+    dependencies:
+      number-is-nan: 1.0.1
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
   /is-fullwidth-code-point/2.0.0:
     dev: false
     engines:
@@ -2298,26 +3093,26 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
-  /is-number/4.0.0:
+  /is-obj/1.0.1:
     dev: false
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
-  /is-obj/1.0.1:
+      integrity: sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+  /is-path-cwd/1.0.0:
     dev: false
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
-  /is-odd/2.0.0:
+      integrity: sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
+  /is-path-in-cwd/1.0.1:
     dependencies:
-      is-number: 4.0.0
+      is-path-inside: 1.0.1
     dev: false
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==
+      integrity: sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==
   /is-path-inside/1.0.1:
     dependencies:
       path-is-inside: 1.0.2
@@ -2348,7 +3143,7 @@ packages:
       integrity: sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=
   /is-regex/1.0.4:
     dependencies:
-      has: 1.0.1
+      has: 1.0.3
     dev: false
     engines:
       node: '>= 0.4'
@@ -2368,18 +3163,20 @@ packages:
       integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
   /is-svg/2.1.0:
     dependencies:
-      html-comment-regex: 1.1.1
+      html-comment-regex: 1.1.2
     dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=
-  /is-symbol/1.0.1:
+  /is-symbol/1.0.2:
+    dependencies:
+      has-symbols: 1.0.0
     dev: false
     engines:
       node: '>= 0.4'
     resolution:
-      integrity: sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=
+      integrity: sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
   /is-windows/1.0.2:
     dev: false
     engines:
@@ -2392,10 +3189,6 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
-  /isarray/0.0.1:
-    dev: false
-    resolution:
-      integrity: sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
   /isarray/1.0.0:
     dev: false
     resolution:
@@ -2422,22 +3215,26 @@ packages:
     dev: false
     resolution:
       integrity: sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=
-  /js-base64/2.4.5:
+  /js-base64/2.5.1:
     dev: false
     resolution:
-      integrity: sha512-aUnNwqMOXw3yvErjMPSQu6qIIzUmT1e5KcU1OZxRDU1g/am6mzBvcrmLAYwzmB59BHPrh5/tKaiF4OPhqRWESQ==
+      integrity: sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==
   /js-tokens/3.0.2:
     dev: false
     resolution:
       integrity: sha1-mGbfOVECEw449/mWvOtlRDIJwls=
-  /js-yaml/3.11.0:
+  /js-tokens/4.0.0:
+    dev: false
+    resolution:
+      integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+  /js-yaml/3.12.2:
     dependencies:
       argparse: 1.0.10
-      esprima: 4.0.0
+      esprima: 4.0.1
     dev: false
     hasBin: true
     resolution:
-      integrity: sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==
+      integrity: sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==
   /js-yaml/3.7.0:
     dependencies:
       argparse: 1.0.10
@@ -2451,33 +3248,66 @@ packages:
     hasBin: true
     resolution:
       integrity: sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+  /jsesc/2.5.2:
+    dev: false
+    engines:
+      node: '>=4'
+    hasBin: true
+    resolution:
+      integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
   /json-parse-better-errors/1.0.2:
     dev: false
     resolution:
       integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
-  /json-schema-traverse/0.3.1:
+  /json-schema-traverse/0.4.1:
     dev: false
     resolution:
-      integrity: sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=
+      integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
   /json-stringify-safe/5.0.1:
     dev: false
     resolution:
       integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+  /json3/3.3.2:
+    dev: false
+    resolution:
+      integrity: sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=
   /json5/0.5.1:
     dev: false
     hasBin: true
     resolution:
       integrity: sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
-  /keygrip/1.0.2:
+  /json5/1.0.1:
+    dependencies:
+      minimist: 1.2.0
+    dev: false
+    hasBin: true
+    resolution:
+      integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+  /json5/2.1.0:
+    dependencies:
+      minimist: 1.2.0
+    dev: false
+    engines:
+      node: '>=6'
+    hasBin: true
+    resolution:
+      integrity: sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==
+  /jsonfile/4.0.0:
+    dev: false
+    optionalDependencies:
+      graceful-fs: 4.1.15
+    resolution:
+      integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+  /keygrip/1.0.3:
     dev: false
     engines:
       node: '>= 0.6'
     resolution:
-      integrity: sha1-rTKXxVcGneqLz+ek+kkbdcXd65E=
-  /killable/1.0.0:
+      integrity: sha512-/PpesirAIfaklxUzp4Yb7xBper9MwP6hNRA6BGGUFCgbJ+BM5CKBtsoxinNXkLHAr+GXS1/lSlF2rP7cv5Fl+g==
+  /killable/1.0.1:
     dev: false
     resolution:
-      integrity: sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=
+      integrity: sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==
   /kind-of/3.2.2:
     dependencies:
       is-buffer: 1.1.6
@@ -2531,9 +3361,9 @@ packages:
       integrity: sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=
   /koa-webpack/4.0.0:
     dependencies:
-      app-root-path: 2.0.1
+      app-root-path: 2.1.0
       merge-options: 1.0.1
-      webpack-dev-middleware: 3.1.3
+      webpack-dev-middleware: 3.6.0
       webpack-hot-client: 3.0.0
       webpack-log: 1.2.0
     dev: false
@@ -2543,12 +3373,13 @@ packages:
       webpack: ^4.0.0
     resolution:
       integrity: sha512-P+j2TzeZAqFwscd/dlLykk/sxwr6wQ5Tp3FYDhqv1+y9aRIffTPnu2zK+1BhfM+Kyh8bepU1jFR420maE+Vajw==
-  /koa/2.5.1:
+  /koa/2.7.0:
     dependencies:
       accepts: 1.3.5
-      content-disposition: 0.5.2
+      cache-content-type: 1.0.1
+      content-disposition: 0.5.3
       content-type: 1.0.4
-      cookies: 0.7.1
+      cookies: 0.7.3
       debug: 3.1.0
       delegates: 1.0.0
       depd: 1.1.2
@@ -2556,13 +3387,12 @@ packages:
       error-inject: 1.0.0
       escape-html: 1.0.3
       fresh: 0.5.2
-      http-assert: 1.3.0
-      http-errors: 1.6.3
+      http-assert: 1.4.0
+      http-errors: 1.7.2
       is-generator-function: 1.0.7
       koa-compose: 4.1.0
       koa-convert: 1.2.0
       koa-is-json: 1.0.0
-      mime-types: 2.1.18
       on-finished: 2.3.0
       only: 0.0.2
       parseurl: 1.3.2
@@ -2573,7 +3403,7 @@ packages:
     engines:
       node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4
     resolution:
-      integrity: sha512-cchwbMeG2dv3E2xTAmheDAuvR53tPgJZN/Hf1h7bTzJLSPcFZp8/t5+bNKJ6GaQZoydhZQ+1GNruhKdj3lIrug==
+      integrity: sha512-7ojD05s2Q+hFudF8tDLZ1CpCdVZw8JQELWSkcfG9bdtoTDzMmkRF6BQBU7JzIzCCOY3xd3tftiy/loHBUYaY2Q==
   /latest-version/3.1.0:
     dependencies:
       package-json: 4.0.1
@@ -2582,13 +3412,23 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=
-  /leb/0.3.0:
+  /lcid/2.0.0:
+    dependencies:
+      invert-kv: 2.0.0
+    dev: false
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==
+  /linkify-it/2.1.0:
+    dependencies:
+      uc.micro: 1.0.6
     dev: false
     resolution:
-      integrity: sha1-Mr7p+tFoMo1q6oUi2DP0GA7tHaM=
+      integrity: sha512-4REs8/062kV2DSHxNfq5183zrqXMl7WP0WzABH9IeJI+NLm429FgE1PDecltYfnOoFDFlZGh2T8PfZn0r+GTRg==
   /load-json-file/4.0.0:
     dependencies:
-      graceful-fs: 4.1.11
+      graceful-fs: 4.1.15
       parse-json: 4.0.0
       pify: 3.0.0
       strip-bom: 3.0.0
@@ -2597,12 +3437,12 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
-  /loader-runner/2.3.0:
+  /loader-runner/2.4.0:
     dev: false
     engines:
       node: '>=4.3.0 <5.0.0 || >=5.10'
     resolution:
-      integrity: sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=
+      integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
   /loader-utils/0.2.17:
     dependencies:
       big.js: 3.2.0
@@ -2612,16 +3452,16 @@ packages:
     dev: false
     resolution:
       integrity: sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=
-  /loader-utils/1.1.0:
+  /loader-utils/1.2.3:
     dependencies:
-      big.js: 3.2.0
+      big.js: 5.2.2
       emojis-list: 2.1.0
-      json5: 0.5.1
+      json5: 1.0.1
     dev: false
     engines:
       node: '>=4.0.0'
     resolution:
-      integrity: sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=
+      integrity: sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
   /locate-path/2.0.0:
     dependencies:
       p-locate: 2.0.0
@@ -2631,14 +3471,23 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
-  /lodash-es/4.17.11:
+  /locate-path/3.0.0:
+    dependencies:
+      p-locate: 3.0.0
+      path-exists: 3.0.0
     dev: false
+    engines:
+      node: '>=6'
     resolution:
-      integrity: sha512-DHb1ub+rMjjrxqlB3H56/6MXtm1lSksDp2rA2cNWjG8mlDUYFhUj3Di2Zn5IwSU87xLv8tNIQ7sSwE/YOX/D/Q==
+      integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
   /lodash.camelcase/4.3.0:
     dev: false
     resolution:
       integrity: sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
+  /lodash.get/4.4.2:
+    dev: false
+    resolution:
+      integrity: sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
   /lodash.memoize/4.1.2:
     dev: false
     resolution:
@@ -2647,18 +3496,24 @@ packages:
     dev: false
     resolution:
       integrity: sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
-  /lodash/4.17.10:
+  /lodash/4.17.11:
     dev: false
     resolution:
-      integrity: sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==
+      integrity: sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
   /log-symbols/2.2.0:
     dependencies:
-      chalk: 2.4.1
+      chalk: 2.4.2
     dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
+  /loglevel/1.6.1:
+    dev: false
+    engines:
+      node: '>= 0.6.0'
+    resolution:
+      integrity: sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=
   /loglevelnext/1.0.5:
     dependencies:
       es6-symbol: 3.1.1
@@ -2668,12 +3523,6 @@ packages:
       node: '>= 6'
     resolution:
       integrity: sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==
-  /long/3.2.0:
-    dev: false
-    engines:
-      node: '>=0.6'
-    resolution:
-      integrity: sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=
   /loud-rejection/1.6.0:
     dependencies:
       currently-unhandled: 0.4.1
@@ -2693,13 +3542,19 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
-  /lru-cache/4.1.3:
+  /lru-cache/4.1.5:
     dependencies:
       pseudomap: 1.0.2
       yallist: 2.1.2
     dev: false
     resolution:
-      integrity: sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==
+      integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+  /lru-cache/5.1.1:
+    dependencies:
+      yallist: 3.0.3
+    dev: false
+    resolution:
+      integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
   /make-dir/1.3.0:
     dependencies:
       pify: 3.0.0
@@ -2712,6 +3567,14 @@ packages:
     dev: false
     resolution:
       integrity: sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==
+  /map-age-cleaner/0.1.3:
+    dependencies:
+      p-defer: 1.0.0
+    dev: false
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==
   /map-cache/0.2.2:
     dev: false
     engines:
@@ -2738,23 +3601,82 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+  /markdown-it-anchor/5.0.2_markdown-it@8.4.2:
+    dependencies:
+      markdown-it: 8.4.2
+    dev: false
+    peerDependencies:
+      markdown-it: ^8.4.1
+    resolution:
+      integrity: sha512-AFM/woBI8QDJMS/9+MmsBMT5/AR+ImfOsunQZTZhzcTmna3rIzAzbOh5E0l6mlFM/i9666BpUtkqQ9bS7WApCg==
+  /markdown-it-chain/1.3.0:
+    dependencies:
+      webpack-chain: 4.12.1
+    dev: false
+    engines:
+      node: '>=6.9'
+    peerDependencies:
+      markdown-it: '>=5.0.0'
+    resolution:
+      integrity: sha512-XClV8I1TKy8L2qsT9iX3qiV+50ZtcInGXI80CA+DP62sMs7hXlyV/RM3hfwy5O3Ad0sJm9xIwQELgANfESo8mQ==
+  /markdown-it-chain/1.3.0_markdown-it@8.4.2:
+    dependencies:
+      markdown-it: 8.4.2
+      webpack-chain: 4.12.1
+    dev: false
+    engines:
+      node: '>=6.9'
+    peerDependencies:
+      markdown-it: '>=5.0.0'
+    resolution:
+      integrity: sha512-XClV8I1TKy8L2qsT9iX3qiV+50ZtcInGXI80CA+DP62sMs7hXlyV/RM3hfwy5O3Ad0sJm9xIwQELgANfESo8mQ==
+  /markdown-it-emoji/1.4.0:
+    dev: false
+    resolution:
+      integrity: sha1-m+4OmpkKljupbfaYDE/dsF37Tcw=
+  /markdown-it/8.4.2:
+    dependencies:
+      argparse: 1.0.10
+      entities: 1.1.2
+      linkify-it: 2.1.0
+      mdurl: 1.0.1
+      uc.micro: 1.0.6
+    dev: false
+    hasBin: true
+    resolution:
+      integrity: sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==
   /math-expression-evaluator/1.2.17:
     dev: false
     resolution:
       integrity: sha1-3oGf282E3M2PrlnGrreWFbnSZqw=
-  /md5.js/1.3.4:
+  /md5.js/1.3.5:
     dependencies:
       hash-base: 3.0.4
       inherits: 2.0.3
+      safe-buffer: 5.1.2
+    dev: false
+    resolution:
+      integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+  /mdurl/1.0.1:
     dev: false
     resolution:
-      integrity: sha1-6b296UogpawYsENA/Fdk1bCdkB0=
+      integrity: sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
   /media-typer/0.3.0:
     dev: false
     engines:
       node: '>= 0.6'
     resolution:
       integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+  /mem/4.1.0:
+    dependencies:
+      map-age-cleaner: 0.1.3
+      mimic-fn: 1.2.0
+      p-is-promise: 2.0.0
+    dev: false
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==
   /memory-fs/0.4.1:
     dependencies:
       errno: 0.1.7
@@ -2768,16 +3690,20 @@ packages:
       decamelize-keys: 1.1.0
       loud-rejection: 1.6.0
       minimist-options: 3.0.2
-      normalize-package-data: 2.4.0
+      normalize-package-data: 2.5.0
       read-pkg-up: 3.0.0
       redent: 2.0.0
       trim-newlines: 2.0.0
-      yargs-parser: 10.0.0
+      yargs-parser: 10.1.0
     dev: false
     engines:
       node: '>=6'
     resolution:
       integrity: sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==
+  /merge-descriptors/1.0.1:
+    dev: false
+    resolution:
+      integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
   /merge-options/1.0.1:
     dependencies:
       is-plain-obj: 1.1.0
@@ -2792,6 +3718,18 @@ packages:
     dev: false
     resolution:
       integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==
+  /merge2/1.2.3:
+    dev: false
+    engines:
+      node: '>= 4.5.0'
+    resolution:
+      integrity: sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==
+  /methods/1.1.2:
+    dev: false
+    engines:
+      node: '>= 0.6'
+    resolution:
+      integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
   /micromatch/3.1.10:
     dependencies:
       arr-diff: 4.0.0
@@ -2802,7 +3740,7 @@ packages:
       extglob: 2.0.4
       fragment-cache: 0.2.1
       kind-of: 6.0.2
-      nanomatch: 1.2.9
+      nanomatch: 1.2.13
       object.pick: 1.3.0
       regex-not: 1.0.2
       snapdragon: 0.8.2
@@ -2820,38 +3758,50 @@ packages:
     hasBin: true
     resolution:
       integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
-  /mime-db/1.33.0:
+  /mime-db/1.38.0:
     dev: false
     engines:
       node: '>= 0.6'
     resolution:
-      integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==
-  /mime-types/2.1.18:
+      integrity: sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==
+  /mime-types/2.1.22:
     dependencies:
-      mime-db: 1.33.0
+      mime-db: 1.38.0
     dev: false
     engines:
       node: '>= 0.6'
     resolution:
-      integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==
-  /mime/2.3.1:
+      integrity: sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==
+  /mime/1.4.1:
+    dev: false
+    hasBin: true
+    resolution:
+      integrity: sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==
+  /mime/2.4.0:
     dev: false
     engines:
       node: '>=4.0.0'
     hasBin: true
     resolution:
-      integrity: sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==
-  /mini-css-extract-plugin/0.4.0:
+      integrity: sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==
+  /mimic-fn/1.2.0:
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+  /mini-css-extract-plugin/0.4.5:
     dependencies:
-      loader-utils: 1.1.0
-      webpack-sources: 1.1.0
+      loader-utils: 1.2.3
+      schema-utils: 1.0.0
+      webpack-sources: 1.3.0
     dev: false
     engines:
-      node: '>= 6.11.5'
+      node: '>= 6.9.0 <7.0.0 || >= 8.9.0'
     peerDependencies:
       webpack: ^4.4.0
     resolution:
-      integrity: sha512-2Zik6PhUZ/MbiboG6SDS9UTPL4XXy4qnyGjSdCIWRrr8xb6PwLtHE+AYOjkXJWdF0OG8vo/yrJ8CgS5WbMpzIg==
+      integrity: sha512-dqBanNfktnp2hwL2YguV9Jh91PFX7gu7nRLs4TGsbAfAG6WOtlynFRYzwDwmmeSb5uIwHo9nx1ta0f7vAZVp2w==
   /minimalistic-assert/1.0.1:
     dev: false
     resolution:
@@ -2883,23 +3833,23 @@ packages:
     dev: false
     resolution:
       integrity: sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
-  /mississippi/2.0.0:
+  /mississippi/3.0.0:
     dependencies:
       concat-stream: 1.6.2
-      duplexify: 3.6.0
+      duplexify: 3.7.1
       end-of-stream: 1.4.1
-      flush-write-stream: 1.0.3
+      flush-write-stream: 1.1.1
       from2: 2.3.0
       parallel-transform: 1.1.0
-      pump: 2.0.1
+      pump: 3.0.0
       pumpify: 1.5.1
-      stream-each: 1.2.2
-      through2: 2.0.3
+      stream-each: 1.2.3
+      through2: 2.0.5
     dev: false
     engines:
       node: '>=4.0.0'
     resolution:
-      integrity: sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==
+      integrity: sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
   /mixin-deep/1.3.1:
     dependencies:
       for-in: 1.0.2
@@ -2922,7 +3872,7 @@ packages:
       copy-concurrently: 1.0.5
       fs-write-stream-atomic: 1.0.10
       mkdirp: 0.5.1
-      rimraf: 2.6.2
+      rimraf: 2.6.3
       run-queue: 1.0.3
     dev: false
     resolution:
@@ -2931,6 +3881,22 @@ packages:
     dev: false
     resolution:
       integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+  /ms/2.1.1:
+    dev: false
+    resolution:
+      integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+  /multicast-dns-service-types/1.1.0:
+    dev: false
+    resolution:
+      integrity: sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=
+  /multicast-dns/6.2.3:
+    dependencies:
+      dns-packet: 1.3.1
+      thunky: 1.0.3
+    dev: false
+    hasBin: true
+    resolution:
+      integrity: sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==
   /mz/2.7.0:
     dependencies:
       any-promise: 1.3.0
@@ -2939,30 +3905,30 @@ packages:
     dev: false
     resolution:
       integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
-  /nan/2.10.0:
+  /nan/2.12.1:
     dev: false
     optional: true
     resolution:
-      integrity: sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==
+      integrity: sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==
   /nanoassert/1.1.0:
     dev: false
     resolution:
       integrity: sha1-TzFS4JVA/eKMdvRLGbvNHVpCR40=
-  /nanobus/4.3.3:
+  /nanobus/4.4.0:
     dependencies:
+      nanoassert: 1.1.0
       nanotiming: 7.3.1
-      remove-array-items: 1.0.0
+      remove-array-items: 1.1.1
     dev: false
     resolution:
-      integrity: sha512-4/uzl+LkMGoVv/9eMzH2QFvefmlJErT0KR7EmuYbmht2QvxSEqTjhFFOZ/KHE6chH58fKL3njrOcEwbYV0h9Yw==
-  /nanomatch/1.2.9:
+      integrity: sha512-Hv9USGyH8EsPy0o8pPWE7x3YRIfuZDgMBirzjU6XLebhiSK2g53JlfqgolD0c39ne6wXAfaBNcIAvYe22Bav+Q==
+  /nanomatch/1.2.13:
     dependencies:
       arr-diff: 4.0.0
       array-unique: 0.3.2
       define-property: 2.0.2
       extend-shallow: 3.0.2
       fragment-cache: 0.2.1
-      is-odd: 2.0.0
       is-windows: 1.0.2
       kind-of: 6.0.2
       object.pick: 1.3.0
@@ -2973,7 +3939,7 @@ packages:
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==
+      integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
   /nanoscheduler/1.0.3:
     dependencies:
       nanoassert: 1.1.0
@@ -2993,21 +3959,29 @@ packages:
       node: '>= 0.6'
     resolution:
       integrity: sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=
-  /neo-async/2.5.1:
+  /neo-async/2.6.0:
     dev: false
     resolution:
-      integrity: sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==
+      integrity: sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==
   /next-tick/1.0.0:
     dev: false
     resolution:
       integrity: sha1-yobR/ogoFpsBICCOPchCS524NCw=
+  /nice-try/1.0.5:
+    dev: false
+    resolution:
+      integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
   /no-case/2.3.2:
     dependencies:
       lower-case: 1.1.4
     dev: false
     resolution:
       integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==
-  /node-libs-browser/2.1.0:
+  /node-forge/0.7.5:
+    dev: false
+    resolution:
+      integrity: sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==
+  /node-libs-browser/2.2.0:
     dependencies:
       assert: 1.4.1
       browserify-zlib: 0.2.0
@@ -3016,7 +3990,7 @@ packages:
       constants-browserify: 1.0.0
       crypto-browserify: 3.12.0
       domain-browser: 1.2.0
-      events: 1.1.1
+      events: 3.0.0
       https-browserify: 1.0.0
       os-browserify: 0.3.0
       path-browserify: 0.0.0
@@ -3024,26 +3998,26 @@ packages:
       punycode: 1.4.1
       querystring-es3: 0.2.1
       readable-stream: 2.3.6
-      stream-browserify: 2.0.1
-      stream-http: 2.8.2
-      string_decoder: 1.1.1
+      stream-browserify: 2.0.2
+      stream-http: 2.8.3
+      string_decoder: 1.2.0
       timers-browserify: 2.0.10
       tty-browserify: 0.0.0
       url: 0.11.0
-      util: 0.10.3
+      util: 0.11.1
       vm-browserify: 0.0.4
     dev: false
     resolution:
-      integrity: sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==
-  /normalize-package-data/2.4.0:
+      integrity: sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==
+  /normalize-package-data/2.5.0:
     dependencies:
-      hosted-git-info: 2.6.0
-      is-builtin-module: 1.0.0
-      semver: 5.5.0
-      validate-npm-package-license: 3.0.3
+      hosted-git-info: 2.7.1
+      resolve: 1.10.0
+      semver: 5.6.0
+      validate-npm-package-license: 3.0.4
     dev: false
     resolution:
-      integrity: sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==
+      integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
   /normalize-path/2.1.1:
     dependencies:
       remove-trailing-separator: 1.1.0
@@ -3052,6 +4026,12 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+  /normalize-path/3.0.0:
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
   /normalize-range/0.1.2:
     dev: false
     engines:
@@ -3077,49 +4057,22 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
-  /nth-check/1.0.1:
+  /nth-check/1.0.2:
     dependencies:
       boolbase: 1.0.0
     dev: false
     resolution:
-      integrity: sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=
+      integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
   /num2fraction/1.2.2:
     dev: false
     resolution:
       integrity: sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
-  /nyc/11.9.0:
-    bundledDependencies:
-      - archy
-      - arrify
-      - caching-transform
-      - convert-source-map
-      - debug-log
-      - default-require-extensions
-      - find-cache-dir
-      - find-up
-      - foreground-child
-      - glob
-      - istanbul-lib-coverage
-      - istanbul-lib-hook
-      - istanbul-lib-instrument
-      - istanbul-lib-report
-      - istanbul-lib-source-maps
-      - istanbul-reports
-      - md5-hex
-      - merge-source-map
-      - micromatch
-      - mkdirp
-      - resolve-from
-      - rimraf
-      - signal-exit
-      - spawn-wrap
-      - test-exclude
-      - yargs
-      - yargs-parser
+  /number-is-nan/1.0.1:
     dev: false
-    hasBin: true
+    engines:
+      node: '>=0.10.0'
     resolution:
-      integrity: sha512-w8OdJAhXL5izerzZMdqzYKMj/pgHJyY3qEPYBjLLxrhcVoHEY9pU5ENIiZyCgG9OR7x3VcUMoD40o6PtVpfR4g==
+      integrity: sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
   /object-assign/4.1.1:
     dev: false
     engines:
@@ -3136,12 +4089,12 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
-  /object-keys/1.0.11:
+  /object-keys/1.1.0:
     dev: false
     engines:
       node: '>= 0.4'
     resolution:
-      integrity: sha1-xUYBd4rVYPEULODgG8yotW0TQm0=
+      integrity: sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==
   /object-visit/1.0.1:
     dependencies:
       isobject: 3.0.1
@@ -3152,10 +4105,10 @@ packages:
       integrity: sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
   /object.assign/4.1.0:
     dependencies:
-      define-properties: 1.1.2
+      define-properties: 1.1.3
       function-bind: 1.1.1
       has-symbols: 1.0.0
-      object-keys: 1.0.11
+      object-keys: 1.1.0
     dev: false
     engines:
       node: '>= 0.4'
@@ -3163,8 +4116,8 @@ packages:
       integrity: sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
   /object.getownpropertydescriptors/2.0.3:
     dependencies:
-      define-properties: 1.1.2
-      es-abstract: 1.12.0
+      define-properties: 1.1.3
+      es-abstract: 1.13.0
     dev: false
     engines:
       node: '>= 0.8'
@@ -3178,6 +4131,10 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+  /obuf/1.1.2:
+    dev: false
+    resolution:
+      integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
   /on-finished/2.3.0:
     dependencies:
       ee-first: 1.1.1
@@ -3186,6 +4143,12 @@ packages:
       node: '>= 0.8'
     resolution:
       integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
+  /on-headers/1.0.2:
+    dev: false
+    engines:
+      node: '>= 0.8'
+    resolution:
+      integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
   /once/1.4.0:
     dependencies:
       wrappy: 1.0.2
@@ -3196,73 +4159,123 @@ packages:
     dev: false
     resolution:
       integrity: sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=
-  /opn/5.3.0:
+  /opn/5.4.0:
     dependencies:
       is-wsl: 1.1.0
     dev: false
     engines:
       node: '>=4'
     resolution:
-      integrity: sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==
+      integrity: sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==
+  /original/1.0.2:
+    dependencies:
+      url-parse: 1.4.4
+    dev: false
+    resolution:
+      integrity: sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==
   /os-browserify/0.3.0:
     dev: false
     resolution:
       integrity: sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
-  /os-homedir/1.0.2:
+  /os-locale/3.1.0:
+    dependencies:
+      execa: 1.0.0
+      lcid: 2.0.0
+      mem: 4.1.0
     dev: false
     engines:
-      node: '>=0.10.0'
+      node: '>=6'
     resolution:
-      integrity: sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+      integrity: sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
   /os-tmpdir/1.0.2:
     dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+  /p-defer/1.0.0:
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
   /p-finally/1.0.0:
     dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
-  /p-limit/1.2.0:
+  /p-is-promise/2.0.0:
+    dev: false
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==
+  /p-limit/1.3.0:
     dependencies:
       p-try: 1.0.0
     dev: false
     engines:
       node: '>=4'
     resolution:
-      integrity: sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==
+      integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+  /p-limit/2.2.0:
+    dependencies:
+      p-try: 2.0.0
+    dev: false
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==
   /p-locate/2.0.0:
     dependencies:
-      p-limit: 1.2.0
+      p-limit: 1.3.0
     dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+  /p-locate/3.0.0:
+    dependencies:
+      p-limit: 2.2.0
+    dev: false
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+  /p-map/1.2.0:
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==
   /p-try/1.0.0:
     dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+  /p-try/2.0.0:
+    dev: false
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==
   /package-json/4.0.1:
     dependencies:
       got: 6.7.1
       registry-auth-token: 3.3.2
       registry-url: 3.1.0
-      semver: 5.5.0
+      semver: 5.6.0
     dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=
-  /pako/1.0.6:
+  /pako/1.0.10:
     dev: false
     resolution:
-      integrity: sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==
+      integrity: sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==
   /parallel-transform/1.1.0:
     dependencies:
       cyclist: 0.2.2
@@ -3277,27 +4290,20 @@ packages:
     dev: false
     resolution:
       integrity: sha1-35T9jPZTHs915r75oIWPvHK+Ikc=
-  /parse-asn1/5.1.1:
+  /parse-asn1/5.1.4:
     dependencies:
       asn1.js: 4.10.1
       browserify-aes: 1.2.0
       create-hash: 1.2.0
       evp_bytestokey: 1.0.3
-      pbkdf2: 3.0.16
-    dev: false
-    resolution:
-      integrity: sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==
-  /parse-json/2.2.0:
-    dependencies:
-      error-ex: 1.3.1
+      pbkdf2: 3.0.17
+      safe-buffer: 5.1.2
     dev: false
-    engines:
-      node: '>=0.10.0'
     resolution:
-      integrity: sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+      integrity: sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==
   /parse-json/4.0.0:
     dependencies:
-      error-ex: 1.3.1
+      error-ex: 1.3.2
       json-parse-better-errors: 1.0.2
     dev: false
     engines:
@@ -3346,10 +4352,14 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
-  /path-parse/1.0.5:
+  /path-parse/1.0.6:
     dev: false
     resolution:
-      integrity: sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=
+      integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+  /path-to-regexp/0.1.7:
+    dev: false
+    resolution:
+      integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
   /path-type/3.0.0:
     dependencies:
       pify: 3.0.0
@@ -3358,7 +4368,7 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
-  /pbkdf2/3.0.16:
+  /pbkdf2/3.0.17:
     dependencies:
       create-hash: 1.2.0
       create-hmac: 1.1.7
@@ -3369,13 +4379,33 @@ packages:
     engines:
       node: '>=0.12'
     resolution:
-      integrity: sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==
+      integrity: sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
+  /pify/2.3.0:
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
   /pify/3.0.0:
     dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+  /pinkie-promise/2.0.1:
+    dependencies:
+      pinkie: 2.0.4
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+  /pinkie/2.0.4:
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
   /pkg-dir/2.0.0:
     dependencies:
       find-up: 2.1.0
@@ -3384,7 +4414,15 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
-  /portfinder/1.0.13:
+  /pkg-dir/3.0.0:
+    dependencies:
+      find-up: 3.0.0
+    dev: false
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+  /portfinder/1.0.20:
     dependencies:
       async: 1.5.2
       debug: 2.6.9
@@ -3393,7 +4431,7 @@ packages:
     engines:
       node: '>= 0.12.0'
     resolution:
-      integrity: sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=
+      integrity: sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==
   /posix-character-classes/0.1.1:
     dev: false
     engines:
@@ -3412,14 +4450,14 @@ packages:
     dependencies:
       colormin: 1.1.2
       postcss: 5.2.18
-      postcss-value-parser: 3.3.0
+      postcss-value-parser: 3.3.1
     dev: false
     resolution:
       integrity: sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=
   /postcss-convert-values/2.6.1:
     dependencies:
       postcss: 5.2.18
-      postcss-value-parser: 3.3.0
+      postcss-value-parser: 3.3.1
     dev: false
     resolution:
       integrity: sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=
@@ -3460,51 +4498,31 @@ packages:
     dev: false
     resolution:
       integrity: sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==
-  /postcss-load-config/1.2.0:
+  /postcss-load-config/2.0.0:
     dependencies:
-      cosmiconfig: 2.2.2
-      object-assign: 4.1.1
-      postcss-load-options: 1.2.0
-      postcss-load-plugins: 2.3.0
-    dev: false
-    engines:
-      node: '>=0.12'
-    resolution:
-      integrity: sha1-U56a/J3chiASHr+djDZz4M5Q0oo=
-  /postcss-load-options/1.2.0:
-    dependencies:
-      cosmiconfig: 2.2.2
-      object-assign: 4.1.1
+      cosmiconfig: 4.0.0
+      import-cwd: 2.1.0
     dev: false
     engines:
-      node: '>=0.12'
-    resolution:
-      integrity: sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=
-  /postcss-load-plugins/2.3.0:
-    dependencies:
-      cosmiconfig: 2.2.2
-      object-assign: 4.1.1
-    dev: false
-    engines:
-      node: '>=0.12'
+      node: '>= 4'
     resolution:
-      integrity: sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=
-  /postcss-loader/2.1.5:
+      integrity: sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==
+  /postcss-loader/2.1.6:
     dependencies:
-      loader-utils: 1.1.0
-      postcss: 6.0.22
-      postcss-load-config: 1.2.0
-      schema-utils: 0.4.5
+      loader-utils: 1.2.3
+      postcss: 6.0.23
+      postcss-load-config: 2.0.0
+      schema-utils: 0.4.7
     dev: false
     engines:
       node: '>= 4'
     resolution:
-      integrity: sha512-pV7kB5neJ0/1tZ8L1uGOBNTVBCSCXQoIsZMsrwvO8V2rKGa2tBl/f80GGVxow2jJnRJ2w1ocx693EKhZAb9Isg==
+      integrity: sha512-hgiWSc13xVQAq25cVw80CH0l49ZKlAnU1hKPOdRrNj89bokRr/bZF2nT+hebPPF9c9xs8c3gw3Fr2nxtmXYnNg==
   /postcss-merge-idents/2.1.7:
     dependencies:
-      has: 1.0.1
+      has: 1.0.3
       postcss: 5.2.18
-      postcss-value-parser: 3.3.0
+      postcss-value-parser: 3.3.1
     dev: false
     resolution:
       integrity: sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=
@@ -3532,14 +4550,14 @@ packages:
     dependencies:
       object-assign: 4.1.1
       postcss: 5.2.18
-      postcss-value-parser: 3.3.0
+      postcss-value-parser: 3.3.1
     dev: false
     resolution:
       integrity: sha1-S1jttWZB66fIR0qzUmyv17vey2k=
   /postcss-minify-gradients/1.0.5:
     dependencies:
       postcss: 5.2.18
-      postcss-value-parser: 3.3.0
+      postcss-value-parser: 3.3.1
     dev: false
     resolution:
       integrity: sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=
@@ -3547,7 +4565,7 @@ packages:
     dependencies:
       alphanum-sort: 1.0.2
       postcss: 5.2.18
-      postcss-value-parser: 3.3.0
+      postcss-value-parser: 3.3.1
       uniqs: 2.0.0
     dev: false
     resolution:
@@ -3555,36 +4573,36 @@ packages:
   /postcss-minify-selectors/2.1.1:
     dependencies:
       alphanum-sort: 1.0.2
-      has: 1.0.1
+      has: 1.0.3
       postcss: 5.2.18
       postcss-selector-parser: 2.2.3
     dev: false
     resolution:
       integrity: sha1-ssapjAByz5G5MtGkllCBFDEXNb8=
-  /postcss-modules-extract-imports/1.2.0:
+  /postcss-modules-extract-imports/1.2.1:
     dependencies:
-      postcss: 6.0.22
+      postcss: 6.0.23
     dev: false
     resolution:
-      integrity: sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=
+      integrity: sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==
   /postcss-modules-local-by-default/1.2.0:
     dependencies:
-      css-selector-tokenizer: 0.7.0
-      postcss: 6.0.22
+      css-selector-tokenizer: 0.7.1
+      postcss: 6.0.23
     dev: false
     resolution:
       integrity: sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=
   /postcss-modules-scope/1.1.0:
     dependencies:
-      css-selector-tokenizer: 0.7.0
-      postcss: 6.0.22
+      css-selector-tokenizer: 0.7.1
+      postcss: 6.0.23
     dev: false
     resolution:
       integrity: sha1-1upkmUx5+XtipytCb75gVqGUu5A=
   /postcss-modules-values/1.3.0:
     dependencies:
       icss-replace-symbols: 1.1.0
-      postcss: 6.0.22
+      postcss: 6.0.23
     dev: false
     resolution:
       integrity: sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=
@@ -3599,21 +4617,21 @@ packages:
       is-absolute-url: 2.1.0
       normalize-url: 1.9.1
       postcss: 5.2.18
-      postcss-value-parser: 3.3.0
+      postcss-value-parser: 3.3.1
     dev: false
     resolution:
       integrity: sha1-EI90s/L82viRov+j6kWSJ5/HgiI=
   /postcss-ordered-values/2.2.3:
     dependencies:
       postcss: 5.2.18
-      postcss-value-parser: 3.3.0
+      postcss-value-parser: 3.3.1
     dev: false
     resolution:
       integrity: sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=
   /postcss-reduce-idents/2.4.0:
     dependencies:
       postcss: 5.2.18
-      postcss-value-parser: 3.3.0
+      postcss-value-parser: 3.3.1
     dev: false
     resolution:
       integrity: sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=
@@ -3625,9 +4643,9 @@ packages:
       integrity: sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=
   /postcss-reduce-transforms/1.0.4:
     dependencies:
-      has: 1.0.1
+      has: 1.0.3
       postcss: 5.2.18
-      postcss-value-parser: 3.3.0
+      postcss-value-parser: 3.3.1
     dev: false
     resolution:
       integrity: sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=
@@ -3639,21 +4657,21 @@ packages:
     dev: false
     resolution:
       integrity: sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=
-  /postcss-selector-parser/3.1.1:
+  /postcss-selector-parser/5.0.0:
     dependencies:
-      dot-prop: 4.2.0
+      cssesc: 2.0.0
       indexes-of: 1.0.1
       uniq: 1.0.1
     dev: false
     engines:
       node: '>=4'
     resolution:
-      integrity: sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=
+      integrity: sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==
   /postcss-svgo/2.1.6:
     dependencies:
       is-svg: 2.1.0
       postcss: 5.2.18
-      postcss-value-parser: 3.3.0
+      postcss-value-parser: 3.3.1
       svgo: 0.7.2
     dev: false
     resolution:
@@ -3666,13 +4684,13 @@ packages:
     dev: false
     resolution:
       integrity: sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=
-  /postcss-value-parser/3.3.0:
+  /postcss-value-parser/3.3.1:
     dev: false
     resolution:
-      integrity: sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=
+      integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
   /postcss-zindex/2.2.0:
     dependencies:
-      has: 1.0.1
+      has: 1.0.3
       postcss: 5.2.18
       uniqs: 2.0.0
     dev: false
@@ -3681,7 +4699,7 @@ packages:
   /postcss/5.2.18:
     dependencies:
       chalk: 1.1.3
-      js-base64: 2.4.5
+      js-base64: 2.5.1
       source-map: 0.5.7
       supports-color: 3.2.3
     dev: false
@@ -3689,32 +4707,46 @@ packages:
       node: '>=0.12'
     resolution:
       integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==
-  /postcss/6.0.22:
+  /postcss/6.0.23:
     dependencies:
-      chalk: 2.4.1
+      chalk: 2.4.2
       source-map: 0.6.1
-      supports-color: 5.4.0
+      supports-color: 5.5.0
     dev: false
     engines:
       node: '>=4.0.0'
     resolution:
-      integrity: sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==
+      integrity: sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
+  /postcss/7.0.14:
+    dependencies:
+      chalk: 2.4.2
+      source-map: 0.6.1
+      supports-color: 6.1.0
+    dev: false
+    engines:
+      node: '>=6.0.0'
+    resolution:
+      integrity: sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==
+  /preload-image-loader/1.0.0:
+    dev: false
+    resolution:
+      integrity: sha1-TmMME3CxU/5qofiO0KiBdP5Mqgs=
   /prepend-http/1.0.4:
     dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
-  /prettier/1.13.3:
+  /prettier/1.16.3:
     dev: false
     engines:
       node: '>=4'
     hasBin: true
     resolution:
-      integrity: sha512-CIWJNU+cFFdeA0GJSzzFkxiq2WuMvWZMlz6cV/EXhPlRnI3esSFMh+lNmyZ8z/X8O8C1U60Sc8puXALj4/WmZw==
+      integrity: sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==
   /pretty-error/2.1.1:
     dependencies:
-      renderkid: 2.0.1
+      renderkid: 2.0.3
       utila: 0.4.0
     dev: false
     resolution:
@@ -3735,7 +4767,7 @@ packages:
       node: '>= 0.6.0'
     resolution:
       integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
-  /progress-bar-webpack-plugin/1.11.0:
+  /progress-bar-webpack-plugin/1.12.1:
     dependencies:
       chalk: 1.1.3
       object.assign: 4.1.0
@@ -3744,7 +4776,7 @@ packages:
     peerDependencies:
       webpack: ^1.3.0 || ^2 || ^3 || ^4
     resolution:
-      integrity: sha512-XT6r8strD6toU0ZVip25baJINo7uE4BD4H8d4vhOV4GIK5PvNNky8GYJ2wMmVoYP8eo/sSmtNWn0Vw7zWDDE3A==
+      integrity: sha512-tVbPB5xBbqNwdH3mwcxzjL1r1Vrm/xGu93OsqVSAbCaXGoKFvfWIh0gpMDpn2kYsPVRSAIK0pBkP9Vfs+JJibQ==
   /progress/1.1.8:
     dev: false
     engines:
@@ -3755,6 +4787,15 @@ packages:
     dev: false
     resolution:
       integrity: sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+  /proxy-addr/2.0.4:
+    dependencies:
+      forwarded: 0.1.2
+      ipaddr.js: 1.8.0
+    dev: false
+    engines:
+      node: '>= 0.10'
+    resolution:
+      integrity: sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==
   /prr/1.0.1:
     dev: false
     resolution:
@@ -3763,16 +4804,17 @@ packages:
     dev: false
     resolution:
       integrity: sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
-  /public-encrypt/4.0.2:
+  /public-encrypt/4.0.3:
     dependencies:
       bn.js: 4.11.8
       browserify-rsa: 4.0.1
       create-hash: 1.2.0
-      parse-asn1: 5.1.1
-      randombytes: 2.0.6
+      parse-asn1: 5.1.4
+      randombytes: 2.1.0
+      safe-buffer: 5.1.2
     dev: false
     resolution:
-      integrity: sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==
+      integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
   /pump/2.0.1:
     dependencies:
       end-of-stream: 1.4.1
@@ -3780,9 +4822,16 @@ packages:
     dev: false
     resolution:
       integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+  /pump/3.0.0:
+    dependencies:
+      end-of-stream: 1.4.1
+      once: 1.4.0
+    dev: false
+    resolution:
+      integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
   /pumpify/1.5.1:
     dependencies:
-      duplexify: 3.6.0
+      duplexify: 3.7.1
       inherits: 2.0.3
       pump: 2.0.1
     dev: false
@@ -3809,6 +4858,12 @@ packages:
       teleport: '>=0.2.0'
     resolution:
       integrity: sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+  /qs/6.5.2:
+    dev: false
+    engines:
+      node: '>=0.6'
+    resolution:
+      integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
   /query-string/4.3.4:
     dependencies:
       object-assign: 4.1.1
@@ -3830,21 +4885,25 @@ packages:
       node: '>=0.4.x'
     resolution:
       integrity: sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+  /querystringify/2.1.0:
+    dev: false
+    resolution:
+      integrity: sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==
   /quick-lru/1.1.0:
     dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=
-  /randombytes/2.0.6:
+  /randombytes/2.1.0:
     dependencies:
       safe-buffer: 5.1.2
     dev: false
     resolution:
-      integrity: sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==
+      integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
   /randomfill/1.0.4:
     dependencies:
-      randombytes: 2.0.6
+      randombytes: 2.1.0
       safe-buffer: 5.1.2
     dev: false
     resolution:
@@ -3852,9 +4911,20 @@ packages:
   /range-parser/1.2.0:
     dev: false
     engines:
-      node: '>= 0.6'
+      node: '>= 0.6'
+    resolution:
+      integrity: sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=
+  /raw-body/2.3.3:
+    dependencies:
+      bytes: 3.0.0
+      http-errors: 1.6.3
+      iconv-lite: 0.4.23
+      unpipe: 1.0.0
+    dev: false
+    engines:
+      node: '>= 0.8'
     resolution:
-      integrity: sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=
+      integrity: sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==
   /rc/1.2.8:
     dependencies:
       deep-extend: 0.6.0
@@ -3877,22 +4947,13 @@ packages:
   /read-pkg/3.0.0:
     dependencies:
       load-json-file: 4.0.0
-      normalize-package-data: 2.4.0
+      normalize-package-data: 2.5.0
       path-type: 3.0.0
     dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
-  /readable-stream/1.0.34:
-    dependencies:
-      core-util-is: 1.0.2
-      inherits: 2.0.3
-      isarray: 0.0.1
-      string_decoder: 0.10.31
-    dev: false
-    resolution:
-      integrity: sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
   /readable-stream/2.3.6:
     dependencies:
       core-util-is: 1.0.2
@@ -3905,17 +4966,26 @@ packages:
     dev: false
     resolution:
       integrity: sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
-  /readdirp/2.1.0:
+  /readable-stream/3.2.0:
     dependencies:
-      graceful-fs: 4.1.11
-      minimatch: 3.0.4
+      inherits: 2.0.3
+      string_decoder: 1.2.0
+      util-deprecate: 1.0.2
+    dev: false
+    engines:
+      node: '>= 6'
+    resolution:
+      integrity: sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==
+  /readdirp/2.2.1:
+    dependencies:
+      graceful-fs: 4.1.15
+      micromatch: 3.1.10
       readable-stream: 2.3.6
-      set-immediate-shim: 1.0.1
     dev: false
     engines:
-      node: '>=0.6'
+      node: '>=0.10'
     resolution:
-      integrity: sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=
+      integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
   /redent/2.0.0:
     dependencies:
       indent-string: 3.2.0
@@ -3992,46 +5062,56 @@ packages:
       node: '>= 0.10'
     resolution:
       integrity: sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
-  /remove-array-items/1.0.0:
+  /remove-array-items/1.1.1:
     dev: false
     resolution:
-      integrity: sha1-B79CyzMvTPboXq2DteToltIyayE=
+      integrity: sha512-MXW/jtHyl5F1PZI7NbpS8SOtympdLuF20aoWJT5lELR1p/HJDd5nqW8Eu9uLh/hCRY3FgvrIT5AwDCgBODklcA==
   /remove-trailing-separator/1.1.0:
     dev: false
     resolution:
       integrity: sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
-  /renderkid/2.0.1:
+  /renderkid/2.0.3:
     dependencies:
       css-select: 1.2.0
-      dom-converter: 0.1.4
-      htmlparser2: 3.3.0
+      dom-converter: 0.2.0
+      htmlparser2: 3.10.1
       strip-ansi: 3.0.1
-      utila: 0.3.3
+      utila: 0.4.0
     dev: false
     resolution:
-      integrity: sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=
-  /repeat-element/1.1.2:
+      integrity: sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==
+  /repeat-element/1.1.3:
     dev: false
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=
+      integrity: sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
   /repeat-string/1.6.1:
     dev: false
     engines:
       node: '>=0.10'
     resolution:
       integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc=
-  /require-from-string/1.2.1:
+  /require-directory/2.1.1:
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+  /require-from-string/2.0.2:
     dev: false
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=
-  /resize-observer-polyfill/1.5.0:
+      integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+  /require-main-filename/1.0.1:
+    dev: false
+    resolution:
+      integrity: sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
+  /requires-port/1.0.0:
     dev: false
     resolution:
-      integrity: sha512-M2AelyJDVR/oLnToJLtuDJRBBWUGUvvGigj1411hXhAdyFWqMaqHp7TixW3FpiLuVaikIcR1QL+zqoJoZlOgpg==
+      integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
   /resolve-cwd/2.0.0:
     dependencies:
       resolve-from: 3.0.0
@@ -4059,25 +5139,25 @@ packages:
     dev: false
     resolution:
       integrity: sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
-  /resolve/1.7.1:
+  /resolve/1.10.0:
     dependencies:
-      path-parse: 1.0.5
+      path-parse: 1.0.6
     dev: false
     resolution:
-      integrity: sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==
+      integrity: sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==
   /ret/0.1.15:
     dev: false
     engines:
       node: '>=0.12'
     resolution:
       integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
-  /rimraf/2.6.2:
+  /rimraf/2.6.3:
     dependencies:
-      glob: 7.1.2
+      glob: 7.1.3
     dev: false
     hasBin: true
     resolution:
-      integrity: sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==
+      integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
   /ripemd160/2.0.2:
     dependencies:
       hash-base: 3.0.4
@@ -4101,49 +5181,123 @@ packages:
     dev: false
     resolution:
       integrity: sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+  /safer-buffer/2.1.2:
+    dev: false
+    resolution:
+      integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
   /sax/1.2.4:
     dev: false
     resolution:
       integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-  /schema-utils/0.4.5:
+  /schema-utils/0.4.7:
     dependencies:
-      ajv: 6.5.0
-      ajv-keywords: /ajv-keywords/3.2.0/ajv@6.5.0
+      ajv: 6.10.0
+      ajv-keywords: 3.4.0_ajv@6.10.0
     dev: false
     engines:
-      node: '>= 4.8.0 || >= 6.9.0 || >= 8.9.0'
-    peerDependencies:
-      webpack: ^2.0.0 || ^3.0.0 || ^4.0.0
+      node: '>= 4'
     resolution:
-      integrity: sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==
+      integrity: sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==
+  /schema-utils/1.0.0:
+    dependencies:
+      ajv: 6.10.0
+      ajv-errors: 1.0.1_ajv@6.10.0
+      ajv-keywords: 3.4.0_ajv@6.10.0
+    dev: false
+    engines:
+      node: '>= 4'
+    resolution:
+      integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+  /section-matter/1.0.0:
+    dependencies:
+      extend-shallow: 2.0.1
+      kind-of: 6.0.2
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==
+  /select-hose/2.0.0:
+    dev: false
+    resolution:
+      integrity: sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
   /select/1.1.2:
     dev: false
     optional: true
     resolution:
       integrity: sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=
+  /selfsigned/1.10.4:
+    dependencies:
+      node-forge: 0.7.5
+    dev: false
+    resolution:
+      integrity: sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==
   /semver-diff/2.1.0:
     dependencies:
-      semver: 5.5.0
+      semver: 5.6.0
     dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=
-  /semver/5.5.0:
+  /semver/5.6.0:
     dev: false
     hasBin: true
     resolution:
-      integrity: sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
-  /serialize-javascript/1.5.0:
+      integrity: sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
+  /send/0.16.2:
+    dependencies:
+      debug: 2.6.9
+      depd: 1.1.2
+      destroy: 1.0.4
+      encodeurl: 1.0.2
+      escape-html: 1.0.3
+      etag: 1.8.1
+      fresh: 0.5.2
+      http-errors: 1.6.3
+      mime: 1.4.1
+      ms: 2.0.0
+      on-finished: 2.3.0
+      range-parser: 1.2.0
+      statuses: 1.4.0
+    dev: false
+    engines:
+      node: '>= 0.8.0'
+    resolution:
+      integrity: sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==
+  /serialize-javascript/1.6.1:
+    dev: false
+    resolution:
+      integrity: sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==
+  /serve-index/1.9.1:
+    dependencies:
+      accepts: 1.3.5
+      batch: 0.6.1
+      debug: 2.6.9
+      escape-html: 1.0.3
+      http-errors: 1.6.3
+      mime-types: 2.1.22
+      parseurl: 1.3.2
     dev: false
+    engines:
+      node: '>= 0.8.0'
     resolution:
-      integrity: sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==
-  /set-immediate-shim/1.0.1:
+      integrity: sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=
+  /serve-static/1.13.2:
+    dependencies:
+      encodeurl: 1.0.2
+      escape-html: 1.0.3
+      parseurl: 1.3.2
+      send: 0.16.2
     dev: false
     engines:
-      node: '>=0.10.0'
+      node: '>= 0.8.0'
+    resolution:
+      integrity: sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==
+  /set-blocking/2.0.0:
+    dev: false
     resolution:
-      integrity: sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
+      integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
   /set-value/0.4.3:
     dependencies:
       extend-shallow: 2.0.1
@@ -4174,6 +5328,10 @@ packages:
     dev: false
     resolution:
       integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
+  /setprototypeof/1.1.1:
+    dev: false
+    resolution:
+      integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
   /sha.js/2.4.11:
     dependencies:
       inherits: 2.0.3
@@ -4200,6 +5358,12 @@ packages:
     dev: false
     resolution:
       integrity: sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+  /slash/1.0.0:
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
   /snapdragon-node/2.1.1:
     dependencies:
       define-property: 1.0.0
@@ -4227,12 +5391,30 @@ packages:
       map-cache: 0.2.2
       source-map: 0.5.7
       source-map-resolve: 0.5.2
-      use: 3.1.0
+      use: 3.1.1
     dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+  /sockjs-client/1.3.0:
+    dependencies:
+      debug: 3.2.6
+      eventsource: 1.0.7
+      faye-websocket: 0.11.1
+      inherits: 2.0.3
+      json3: 3.3.2
+      url-parse: 1.4.4
+    dev: false
+    resolution:
+      integrity: sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==
+  /sockjs/0.3.19:
+    dependencies:
+      faye-websocket: 0.10.0
+      uuid: 3.3.2
+    dev: false
+    resolution:
+      integrity: sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==
   /sort-keys/1.1.2:
     dependencies:
       is-plain-obj: 1.1.0
@@ -4241,13 +5423,13 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-RBttTTRnmPG05J6JIK37oOVD+a0=
-  /source-list-map/2.0.0:
+  /source-list-map/2.0.1:
     dev: false
     resolution:
-      integrity: sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==
+      integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
   /source-map-resolve/0.5.2:
     dependencies:
-      atob: 2.1.1
+      atob: 2.1.2
       decode-uri-component: 0.2.0
       resolve-url: 0.2.1
       source-map-url: 0.4.0
@@ -4255,6 +5437,13 @@ packages:
     dev: false
     resolution:
       integrity: sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
+  /source-map-support/0.5.10:
+    dependencies:
+      buffer-from: 1.1.1
+      source-map: 0.6.1
+    dev: false
+    resolution:
+      integrity: sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==
   /source-map-url/0.4.0:
     dev: false
     resolution:
@@ -4271,28 +5460,52 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-  /spdx-correct/3.0.0:
+  /spdx-correct/3.1.0:
     dependencies:
       spdx-expression-parse: 3.0.0
-      spdx-license-ids: 3.0.0
+      spdx-license-ids: 3.0.3
     dev: false
     resolution:
-      integrity: sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==
-  /spdx-exceptions/2.1.0:
+      integrity: sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
+  /spdx-exceptions/2.2.0:
     dev: false
     resolution:
-      integrity: sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==
+      integrity: sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
   /spdx-expression-parse/3.0.0:
     dependencies:
-      spdx-exceptions: 2.1.0
-      spdx-license-ids: 3.0.0
+      spdx-exceptions: 2.2.0
+      spdx-license-ids: 3.0.3
     dev: false
     resolution:
       integrity: sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
-  /spdx-license-ids/3.0.0:
+  /spdx-license-ids/3.0.3:
+    dev: false
+    resolution:
+      integrity: sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==
+  /spdy-transport/3.0.0:
+    dependencies:
+      debug: 4.1.1
+      detect-node: 2.0.4
+      hpack.js: 2.1.6
+      obuf: 1.1.2
+      readable-stream: 3.2.0
+      wbuf: 1.7.3
     dev: false
     resolution:
-      integrity: sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==
+      integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==
+  /spdy/4.0.0:
+    dependencies:
+      debug: 4.1.1
+      handle-thing: 2.0.0
+      http-deceiver: 1.2.7
+      select-hose: 2.0.0
+      spdy-transport: 3.0.0
+    dev: false
+    engines:
+      node: '>=6.0.0'
+      npm: '>=6.0.0'
+    resolution:
+      integrity: sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==
   /split-string/3.1.0:
     dependencies:
       extend-shallow: 3.0.2
@@ -4305,12 +5518,12 @@ packages:
     dev: false
     resolution:
       integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
-  /ssri/5.3.0:
+  /ssri/6.0.1:
     dependencies:
-      safe-buffer: 5.1.2
+      figgy-pudding: 3.5.1
     dev: false
     resolution:
-      integrity: sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==
+      integrity: sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
   /static-extend/0.1.2:
     dependencies:
       define-property: 0.2.5
@@ -4320,27 +5533,33 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+  /statuses/1.4.0:
+    dev: false
+    engines:
+      node: '>= 0.6'
+    resolution:
+      integrity: sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==
   /statuses/1.5.0:
     dev: false
     engines:
       node: '>= 0.6'
     resolution:
       integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
-  /stream-browserify/2.0.1:
+  /stream-browserify/2.0.2:
     dependencies:
       inherits: 2.0.3
       readable-stream: 2.3.6
     dev: false
     resolution:
-      integrity: sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=
-  /stream-each/1.2.2:
+      integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+  /stream-each/1.2.3:
     dependencies:
       end-of-stream: 1.4.1
       stream-shift: 1.0.0
     dev: false
     resolution:
-      integrity: sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==
-  /stream-http/2.8.2:
+      integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+  /stream-http/2.8.3:
     dependencies:
       builtin-status-codes: 3.0.0
       inherits: 2.0.3
@@ -4349,7 +5568,7 @@ packages:
       xtend: 4.0.1
     dev: false
     resolution:
-      integrity: sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==
+      integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
   /stream-shift/1.0.0:
     dev: false
     resolution:
@@ -4360,6 +5579,16 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
+  /string-width/1.0.2:
+    dependencies:
+      code-point-at: 1.1.0
+      is-fullwidth-code-point: 1.0.0
+      strip-ansi: 3.0.1
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
   /string-width/2.1.1:
     dependencies:
       is-fullwidth-code-point: 2.0.0
@@ -4369,16 +5598,18 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
-  /string_decoder/0.10.31:
-    dev: false
-    resolution:
-      integrity: sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
   /string_decoder/1.1.1:
     dependencies:
       safe-buffer: 5.1.2
     dev: false
     resolution:
       integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+  /string_decoder/1.2.0:
+    dependencies:
+      safe-buffer: 5.1.2
+    dev: false
+    resolution:
+      integrity: sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==
   /strip-ansi/3.0.1:
     dependencies:
       ansi-regex: 2.1.1
@@ -4395,6 +5626,12 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+  /strip-bom-string/1.0.0:
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=
   /strip-bom/3.0.0:
     dev: false
     engines:
@@ -4433,14 +5670,22 @@ packages:
       node: '>=0.8.0'
     resolution:
       integrity: sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=
-  /supports-color/5.4.0:
+  /supports-color/5.5.0:
     dependencies:
       has-flag: 3.0.0
     dev: false
     engines:
       node: '>=4'
     resolution:
-      integrity: sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==
+      integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+  /supports-color/6.1.0:
+    dependencies:
+      has-flag: 3.0.0
+    dev: false
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
   /svgo/0.7.2:
     dependencies:
       coa: 1.0.4
@@ -4456,12 +5701,12 @@ packages:
     hasBin: true
     resolution:
       integrity: sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=
-  /tapable/1.0.0:
+  /tapable/1.1.1:
     dev: false
     engines:
       node: '>=6'
     resolution:
-      integrity: sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==
+      integrity: sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==
   /term-size/1.2.0:
     dependencies:
       execa: 0.7.0
@@ -4470,6 +5715,34 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=
+  /terser-webpack-plugin/1.2.3:
+    dependencies:
+      cacache: 11.3.2
+      find-cache-dir: 2.0.0
+      schema-utils: 1.0.0
+      serialize-javascript: 1.6.1
+      source-map: 0.6.1
+      terser: 3.16.1
+      webpack-sources: 1.3.0
+      worker-farm: 1.6.0
+    dev: false
+    engines:
+      node: '>= 6.9.0'
+    peerDependencies:
+      webpack: ^4.0.0
+    resolution:
+      integrity: sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==
+  /terser/3.16.1:
+    dependencies:
+      commander: 2.17.1
+      source-map: 0.6.1
+      source-map-support: 0.5.10
+    dev: false
+    engines:
+      node: '>=6.0.0'
+    hasBin: true
+    resolution:
+      integrity: sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==
   /text-table/0.2.0:
     dev: false
     resolution:
@@ -4488,19 +5761,23 @@ packages:
     dev: false
     resolution:
       integrity: sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=
-  /through2/2.0.3:
+  /through2/2.0.5:
     dependencies:
       readable-stream: 2.3.6
       xtend: 4.0.1
     dev: false
     resolution:
-      integrity: sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=
-  /time-fix-plugin/2.0.3:
+      integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+  /thunky/1.0.3:
+    dev: false
+    resolution:
+      integrity: sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==
+  /time-fix-plugin/2.0.5:
     dev: false
     peerDependencies:
       webpack: '>=4.0.0'
     resolution:
-      integrity: sha512-5StGdiXCiBsq2+RdBQ0NrunFeKqVX0f2Myn8s1YqOxRS+kmuiHcdpPm27ucbM6FYawBKGTOOYxPnqxIBZyiqEg==
+      integrity: sha512-veHRiEsQ50KSrfdhkZiFvZIjRoyfyfxpgskD+P7uVQAcNe6rIMLZ8vhjFRE2XrPqQdy+4CF+jXsWAlgVy9Bfcg==
   /timed-out/4.0.1:
     dev: false
     engines:
@@ -4515,11 +5792,11 @@ packages:
       node: '>=0.6.0'
     resolution:
       integrity: sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==
-  /tiny-emitter/2.0.2:
+  /tiny-emitter/2.1.0:
     dev: false
     optional: true
     resolution:
-      integrity: sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==
+      integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
   /tmp/0.0.33:
     dependencies:
       os-tmpdir: 1.0.2
@@ -4532,6 +5809,12 @@ packages:
     dev: false
     resolution:
       integrity: sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+  /to-fast-properties/2.0.0:
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
   /to-object-path/0.3.0:
     dependencies:
       kind-of: 3.2.2
@@ -4560,6 +5843,12 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+  /toidentifier/1.0.0:
+    dev: false
+    engines:
+      node: '>=0.6'
+    resolution:
+      integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
   /toposort/1.0.7:
     dev: false
     resolution:
@@ -4570,6 +5859,16 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=
+  /trim-right/1.0.1:
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
+  /tslib/1.9.3:
+    dev: false
+    resolution:
+      integrity: sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
   /tty-browserify/0.0.0:
     dev: false
     resolution:
@@ -4577,7 +5876,7 @@ packages:
   /type-is/1.6.16:
     dependencies:
       media-typer: 0.3.0
-      mime-types: 2.1.18
+      mime-types: 2.1.22
     dev: false
     engines:
       node: '>= 0.6'
@@ -4587,43 +5886,20 @@ packages:
     dev: false
     resolution:
       integrity: sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-  /uglify-es/3.3.9:
-    dependencies:
-      commander: 2.13.0
-      source-map: 0.6.1
+  /uc.micro/1.0.6:
     dev: false
-    engines:
-      node: '>=0.8.0'
-    hasBin: true
     resolution:
-      integrity: sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==
-  /uglify-js/3.3.28:
+      integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
+  /uglify-js/3.4.9:
     dependencies:
-      commander: 2.15.1
+      commander: 2.17.1
       source-map: 0.6.1
     dev: false
     engines:
       node: '>=0.8.0'
     hasBin: true
     resolution:
-      integrity: sha512-68Rc/aA6cswiaQ5SrE979UJcXX+ADA1z33/ZsPd+fbAiVdjZ16OXdbtGO+rJUUBgK6qdf3SOPhQf3K/ybF5Miw==
-  /uglifyjs-webpack-plugin/1.2.5:
-    dependencies:
-      cacache: 10.0.4
-      find-cache-dir: 1.0.0
-      schema-utils: 0.4.5
-      serialize-javascript: 1.5.0
-      source-map: 0.6.1
-      uglify-es: 3.3.9
-      webpack-sources: 1.1.0
-      worker-farm: 1.6.0
-    dev: false
-    engines:
-      node: '>= 4.8 < 5.0.0 || >= 5.10'
-    peerDependencies:
-      webpack: ^2.0.0 || ^3.0.0 || ^4.0.0
-    resolution:
-      integrity: sha512-hIQJ1yxAPhEA2yW/i7Fr+SXZVMp+VEI3d42RTHBgQd2yhp/1UdBcR3QEWPV5ahBxlqQDMEMTuTEvDHSFINfwSw==
+      integrity: sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==
   /union-value/1.0.0:
     dependencies:
       arr-union: 3.1.0
@@ -4643,18 +5919,18 @@ packages:
     dev: false
     resolution:
       integrity: sha1-/+3ks2slKQaW5uFl1KWe25mOawI=
-  /unique-filename/1.1.0:
+  /unique-filename/1.1.1:
     dependencies:
-      unique-slug: 2.0.0
+      unique-slug: 2.0.1
     dev: false
     resolution:
-      integrity: sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=
-  /unique-slug/2.0.0:
+      integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+  /unique-slug/2.0.1:
     dependencies:
       imurmurhash: 0.1.4
     dev: false
     resolution:
-      integrity: sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=
+      integrity: sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==
   /unique-string/1.0.0:
     dependencies:
       crypto-random-string: 1.0.0
@@ -4663,6 +5939,18 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=
+  /universalify/0.1.2:
+    dev: false
+    engines:
+      node: '>= 4.0.0'
+    resolution:
+      integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+  /unpipe/1.0.0:
+    dev: false
+    engines:
+      node: '>= 0.8'
+    resolution:
+      integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
   /unset-value/1.0.0:
     dependencies:
       has-value: 0.3.1
@@ -4687,10 +5975,10 @@ packages:
   /update-notifier/2.5.0:
     dependencies:
       boxen: 1.3.0
-      chalk: 2.4.1
+      chalk: 2.4.2
       configstore: 3.1.2
       import-lazy: 2.1.0
-      is-ci: 1.1.0
+      is-ci: 1.2.1
       is-installed-globally: 0.1.0
       is-npm: 1.0.0
       latest-version: 3.1.0
@@ -4719,22 +6007,18 @@ packages:
     dev: false
     resolution:
       integrity: sha1-JugROs4ZXqMND8OBhuRUAPnOpnI=
-  /url-join/4.0.0:
-    dev: false
-    resolution:
-      integrity: sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=
-  /url-loader/1.0.1:
+  /url-loader/1.1.2:
     dependencies:
-      loader-utils: 1.1.0
-      mime: 2.3.1
-      schema-utils: 0.4.5
+      loader-utils: 1.2.3
+      mime: 2.4.0
+      schema-utils: 1.0.0
     dev: false
     engines:
-      node: '>= 6.9.0 || >= 8.9.0'
+      node: '>= 6.9.0'
     peerDependencies:
       webpack: ^3.0.0 || ^4.0.0
     resolution:
-      integrity: sha512-rAonpHy7231fmweBKUFe0bYnlGDty77E+fm53NZdij7j/YOpyGzc7ttqG1nAXl3aRs0k41o0PC3TvGXQiw2Zvw==
+      integrity: sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==
   /url-parse-lax/1.0.0:
     dependencies:
       prepend-http: 1.0.4
@@ -4743,6 +6027,13 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=
+  /url-parse/1.4.4:
+    dependencies:
+      querystringify: 2.1.0
+      requires-port: 1.0.0
+    dev: false
+    resolution:
+      integrity: sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==
   /url/0.11.0:
     dependencies:
       punycode: 1.3.2
@@ -4750,21 +6041,19 @@ packages:
     dev: false
     resolution:
       integrity: sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
-  /use/3.1.0:
-    dependencies:
-      kind-of: 6.0.2
+  /use/3.1.1:
     dev: false
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==
+      integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
   /util-deprecate/1.0.2:
     dev: false
     resolution:
       integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
   /util.promisify/1.0.0:
     dependencies:
-      define-properties: 1.1.2
+      define-properties: 1.1.3
       object.getownpropertydescriptors: 2.0.3
     dev: false
     resolution:
@@ -4775,126 +6064,179 @@ packages:
     dev: false
     resolution:
       integrity: sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
-  /utila/0.3.3:
+  /util/0.11.1:
+    dependencies:
+      inherits: 2.0.3
     dev: false
     resolution:
-      integrity: sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=
+      integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
   /utila/0.4.0:
     dev: false
     resolution:
       integrity: sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=
-  /uuid/3.2.1:
+  /utils-merge/1.0.1:
+    dev: false
+    engines:
+      node: '>= 0.4.0'
+    resolution:
+      integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
+  /uuid/3.3.2:
     dev: false
     hasBin: true
     resolution:
-      integrity: sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==
-  /v8-compile-cache/2.0.0:
+      integrity: sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
+  /v8-compile-cache/2.0.2:
     dev: false
     resolution:
-      integrity: sha512-qNdTUMaCjPs4eEnM3W9H94R3sU70YCuT+/ST7nUf+id1bVOrdjrpUaeZLqPBPRph3hsgn4a4BvwpxhHZx+oSDg==
-  /validate-npm-package-license/3.0.3:
+      integrity: sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==
+  /validate-npm-package-license/3.0.4:
     dependencies:
-      spdx-correct: 3.0.0
+      spdx-correct: 3.1.0
       spdx-expression-parse: 3.0.0
     dev: false
     resolution:
-      integrity: sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==
+      integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
   /vary/1.1.2:
     dev: false
     engines:
       node: '>= 0.8'
     resolution:
       integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
-  /velocity-animate/1.5.2:
-    dev: false
-    resolution:
-      integrity: sha512-m6EXlCAMetKztO1ppBhGU1/1MR3IiEevO6ESq6rcrSQ3Q77xYSW13jkfXW88o4xMrkXJhy/U7j4wFR/twMB0Eg==
   /vendors/1.0.2:
     dev: false
     resolution:
       integrity: sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==
+  /virtual-module-webpack-plugin/0.4.1:
+    dev: false
+    engines:
+      node: '>= 4.0.0'
+    resolution:
+      integrity: sha512-QamllQcGJpkv9xTOW/PO6evUM+oK3Tcu81n0KUKmCjp13SOt5wIZeLSLipj/PRowDKrkdqpTZTcrrEEcp5IIMA==
   /vm-browserify/0.0.4:
     dependencies:
       indexof: 0.0.1
     dev: false
     resolution:
       integrity: sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=
-  /vue-hot-reload-api/2.3.0:
+  /vue-hot-reload-api/2.3.3:
     dev: false
     resolution:
-      integrity: sha512-2j/t+wIbyVMP5NvctQoSUvLkYKoWAAk2QlQiilrM2a6/ulzFgdcLUJfTvs4XQ/3eZhHiBmmEojbjmM4AzZj8JA==
-  /vue-loader/15.2.2:
+      integrity: sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g==
+  /vue-loader/15.7.0:
     dependencies:
-      '@vue/component-compiler-utils': 1.3.1
+      '@vue/component-compiler-utils': 2.6.0
       hash-sum: 1.0.2
-      loader-utils: 1.1.0
-      vue-hot-reload-api: 2.3.0
-      vue-style-loader: 4.1.0
+      loader-utils: 1.2.3
+      vue-hot-reload-api: 2.3.3
+      vue-style-loader: 4.1.2
     dev: false
     peerDependencies:
       css-loader: '*'
-      vue-template-compiler: ^2.0.0
+      webpack: ^4.1.0 || ^5.0.0-0
     resolution:
-      integrity: sha512-fcHa6IeMKyybWvvICRILEF6P2RvJDcdxas6daKerLyVQq70DKhk9a1c0lt0izNwkIhpqvfSBwzJw3BHwNzx6+w==
-  /vue-style-loader/4.1.0:
+      integrity: sha512-x+NZ4RIthQOxcFclEcs8sXGEWqnZHodL2J9Vq+hUz+TDZzBaDIh1j3d9M2IUlTjtrHTZy4uMuRdTi8BGws7jLA==
+  /vue-style-loader/4.1.2:
     dependencies:
       hash-sum: 1.0.2
-      loader-utils: 1.1.0
+      loader-utils: 1.2.3
     dev: false
     resolution:
-      integrity: sha512-IsSiXDrLW2QIjyBsCqa35e45l5AceMbJ2jO8DxoEQv75xu/UmtXkSC0ybESq/LpbmmIW47MAWDQvErUw+Hrz/A==
-  /vue-template-compiler/2.5.16:
+      integrity: sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==
+  /vue-template-compiler/2.6.8:
     dependencies:
       de-indent: 1.0.2
-      he: 1.1.1
+      he: 1.2.0
     dev: false
     resolution:
-      integrity: sha512-ZbuhCcF/hTYmldoUOVcu2fcbeSAZnfzwDskGduOrnjBiIWHgELAd+R8nAtX80aZkceWDKGQ6N9/0/EUpt+l22A==
-  /vue-template-es2015-compiler/1.6.0:
+      integrity: sha512-SwWKANE5ee+oJg+dEJmsdxsxWYICPsNwk68+1AFjOS8l0O/Yz2845afuJtFqf3UjS/vXG7ECsPeHHEAD65Cjng==
+  /vue-template-es2015-compiler/1.9.1:
     dev: false
     resolution:
-      integrity: sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==
-  /vue/2.5.16:
+      integrity: sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
+  /vue/2.6.8:
     dev: false
     resolution:
-      integrity: sha512-/ffmsiVuPC8PsWcFkZngdpas19ABm5mh2wA7iDqcltyCTwlgZjHGeJYOXkBMo422iPwIcviOtrTCUpSfXmToLQ==
+      integrity: sha512-+vp9lEC2Kt3yom673pzg1J7T1NVGuGzO9j8Wxno+rQN2WYVBX2pyo/RGQ3fXCLh2Pk76Skw/laAPCuBuEQ4diw==
   /watchpack/1.6.0:
     dependencies:
-      chokidar: 2.0.3
-      graceful-fs: 4.1.11
-      neo-async: 2.5.1
+      chokidar: 2.1.2
+      graceful-fs: 4.1.15
+      neo-async: 2.6.0
     dev: false
     resolution:
       integrity: sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==
-  /webpack-chain/4.8.0:
+  /wbuf/1.7.3:
+    dependencies:
+      minimalistic-assert: 1.0.1
+    dev: false
+    resolution:
+      integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==
+  /webpack-chain/4.12.1:
     dependencies:
       deepmerge: 1.5.2
       javascript-stringify: 1.6.0
     dev: false
     resolution:
-      integrity: sha512-aaQCcpt8muEeDLD+su3Xdm+GY/TzbszmTQ1atMT+xe5zXuXBX9UWp7lKVWqDrV1urs32bjECGX2EQ9Qx/NIO7A==
-  /webpack-dev-middleware/3.1.3:
+      integrity: sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ==
+  /webpack-dev-middleware/3.6.0:
     dependencies:
-      loud-rejection: 1.6.0
       memory-fs: 0.4.1
-      mime: 2.3.1
-      path-is-absolute: 1.0.1
+      mime: 2.4.0
       range-parser: 1.2.0
-      url-join: 4.0.0
-      webpack-log: 1.2.0
+      webpack-log: 2.0.0
     dev: false
     engines:
-      node: '>=6'
+      node: '>= 6'
+    peerDependencies:
+      webpack: ^4.0.0
+    resolution:
+      integrity: sha512-oeXA3m+5gbYbDBGo4SvKpAHJJEGMoekUbHgo1RK7CP1sz7/WOSeu/dWJtSTk+rzDCLkPwQhGocgIq6lQqOyOwg==
+  /webpack-dev-server/3.2.1:
+    dependencies:
+      ansi-html: 0.0.7
+      bonjour: 3.5.0
+      chokidar: 2.1.2
+      compression: 1.7.3
+      connect-history-api-fallback: 1.6.0
+      debug: 4.1.1
+      del: 3.0.0
+      express: 4.16.4
+      html-entities: 1.2.1
+      http-proxy-middleware: 0.19.1
+      import-local: 2.0.0
+      internal-ip: 4.2.0
+      ip: 1.1.5
+      killable: 1.0.1
+      loglevel: 1.6.1
+      opn: 5.4.0
+      portfinder: 1.0.20
+      schema-utils: 1.0.0
+      selfsigned: 1.10.4
+      semver: 5.6.0
+      serve-index: 1.9.1
+      sockjs: 0.3.19
+      sockjs-client: 1.3.0
+      spdy: 4.0.0
+      strip-ansi: 3.0.1
+      supports-color: 6.1.0
+      url: 0.11.0
+      webpack-dev-middleware: 3.6.0
+      webpack-log: 2.0.0
+      yargs: 12.0.2
+    dev: false
+    engines:
+      node: '>= 6.11.5'
+    hasBin: true
     peerDependencies:
       webpack: ^4.0.0
     resolution:
-      integrity: sha512-I6Mmy/QjWU/kXwCSFGaiOoL5YEQIVmbb0o45xMoCyQAg/mClqZVTcsX327sPfekDyJWpCxb+04whNyLOIxpJdQ==
+      integrity: sha512-sjuE4mnmx6JOh9kvSbPYw3u/6uxCLHNWfhWaIPwcXWsvWOPN+nc5baq4i9jui3oOBRXGonK9+OI0jVkaz6/rCw==
   /webpack-hot-client/3.0.0:
     dependencies:
       json-stringify-safe: 5.0.1
       loglevelnext: 1.0.5
       strip-ansi: 4.0.0
-      uuid: 3.2.1
+      uuid: 3.3.2
       webpack-log: 1.2.0
       ws: 4.1.0
     dev: false
@@ -4906,39 +6248,48 @@ packages:
       integrity: sha512-6k91015hZ4Okkz8u6OzRgJygEL+3J3ay6HVZhWBF3tT2P0rZJ0mgca39dotJxngggUm3S8707c0vrcynn1IzEQ==
   /webpack-log/1.2.0:
     dependencies:
-      chalk: 2.4.1
+      chalk: 2.4.2
       log-symbols: 2.2.0
       loglevelnext: 1.0.5
-      uuid: 3.2.1
+      uuid: 3.3.2
     dev: false
     engines:
       node: '>=6'
     resolution:
       integrity: sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==
-  /webpack-serve/1.0.2:
+  /webpack-log/2.0.0:
+    dependencies:
+      ansi-colors: 3.2.4
+      uuid: 3.3.2
+    dev: false
+    engines:
+      node: '>= 6'
+    resolution:
+      integrity: sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==
+  /webpack-serve/1.0.4:
     dependencies:
       '@shellscape/koa-static': 4.0.5
-      '@webpack-contrib/config-loader': 1.1.3
-      chalk: 2.4.1
+      '@webpack-contrib/config-loader': 1.2.1
+      chalk: 2.4.2
       clipboardy: 1.2.3
-      cosmiconfig: 5.0.5
-      debug: 3.1.0
+      cosmiconfig: 5.1.0
+      debug: 3.2.6
       find-up: 2.1.0
       get-port: 3.2.0
       import-local: 1.0.0
-      killable: 1.0.0
-      koa: 2.5.1
+      killable: 1.0.1
+      koa: 2.7.0
       koa-webpack: 4.0.0
-      lodash: 4.17.10
+      lodash: 4.17.11
       loud-rejection: 1.6.0
       meow: 5.0.0
-      nanobus: 4.3.3
-      opn: 5.3.0
-      resolve: 1.7.1
-      time-fix-plugin: 2.0.3
+      nanobus: 4.4.0
+      opn: 5.4.0
+      resolve: 1.10.0
+      time-fix-plugin: 2.0.5
       update-notifier: 2.5.0
       url-join: 3.0.0
-      v8-compile-cache: 2.0.0
+      v8-compile-cache: 2.0.2
       webpack-hot-client: 3.0.0
       webpack-log: 1.2.0
     dev: false
@@ -4948,52 +6299,71 @@ packages:
     peerDependencies:
       webpack: ^4.0.0
     resolution:
-      integrity: sha512-rEymS6lQ+FKv1WWlgxU9ZUMTvNUA6xXSeWEs//CsJjwQ3VnO4NQvZJKn/C72FjdLOJhwlrCKoOJsiml4Jrf/tA==
-  /webpack-sources/1.1.0:
+      integrity: sha512-WhI9PMY2YLFliZhDsQFE5Os/On5Py6DGZpeBJyDM8xl0cspxgvXmWFywACn2YWWDgowqIxRqveyGh2RwdFWTNQ==
+  /webpack-sources/1.3.0:
     dependencies:
-      source-list-map: 2.0.0
+      source-list-map: 2.0.1
       source-map: 0.6.1
     dev: false
     resolution:
-      integrity: sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==
-  /webpack/4.10.2:
-    dependencies:
-      '@webassemblyjs/ast': 1.5.9
-      '@webassemblyjs/wasm-edit': 1.5.9
-      '@webassemblyjs/wasm-opt': 1.5.9
-      '@webassemblyjs/wasm-parser': 1.5.9
-      acorn: 5.6.0
-      acorn-dynamic-import: 3.0.0
-      ajv: 6.5.0
-      ajv-keywords: /ajv-keywords/3.2.0/ajv@6.5.0
-      chrome-trace-event: 0.1.3
-      enhanced-resolve: 4.0.0
-      eslint-scope: 3.7.1
+      integrity: sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==
+  /webpack/4.29.6:
+    dependencies:
+      '@webassemblyjs/ast': 1.8.5
+      '@webassemblyjs/helper-module-context': 1.8.5
+      '@webassemblyjs/wasm-edit': 1.8.5
+      '@webassemblyjs/wasm-parser': 1.8.5
+      acorn: 6.1.1
+      acorn-dynamic-import: 4.0.0_acorn@6.1.1
+      ajv: 6.10.0
+      ajv-keywords: 3.4.0_ajv@6.10.0
+      chrome-trace-event: 1.0.0
+      enhanced-resolve: 4.1.0
+      eslint-scope: 4.0.2
       json-parse-better-errors: 1.0.2
-      loader-runner: 2.3.0
-      loader-utils: 1.1.0
+      loader-runner: 2.4.0
+      loader-utils: 1.2.3
       memory-fs: 0.4.1
       micromatch: 3.1.10
       mkdirp: 0.5.1
-      neo-async: 2.5.1
-      node-libs-browser: 2.1.0
-      schema-utils: 0.4.5
-      tapable: 1.0.0
-      uglifyjs-webpack-plugin: 1.2.5
+      neo-async: 2.6.0
+      node-libs-browser: 2.2.0
+      schema-utils: 1.0.0
+      tapable: 1.1.1
+      terser-webpack-plugin: 1.2.3
       watchpack: 1.6.0
-      webpack-sources: 1.1.0
+      webpack-sources: 1.3.0
     dev: false
     engines:
       node: '>=6.11.5'
     hasBin: true
     resolution:
-      integrity: sha512-S4yIBevM7DFSAOAvWSBgvuH5mtJ3HgjAS6tCGsTxxHtrVdbntdRVaPey2u9sCns6KV859Vwd2DwkvBLTcs6t6g==
+      integrity: sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw==
+  /websocket-driver/0.7.0:
+    dependencies:
+      http-parser-js: 0.5.0
+      websocket-extensions: 0.1.3
+    dev: false
+    engines:
+      node: '>=0.8.0'
+    resolution:
+      integrity: sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=
+  /websocket-extensions/0.1.3:
+    dev: false
+    engines:
+      node: '>=0.8.0'
+    resolution:
+      integrity: sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==
   /whet.extend/0.9.9:
     dev: false
     engines:
       node: '>=0.6.0'
     resolution:
       integrity: sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=
+  /which-module/2.0.0:
+    dev: false
+    resolution:
+      integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
   /which/1.3.1:
     dependencies:
       isexe: 2.0.0
@@ -5001,32 +6371,41 @@ packages:
     hasBin: true
     resolution:
       integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
-  /widest-line/2.0.0:
+  /widest-line/2.0.1:
     dependencies:
       string-width: 2.1.1
     dev: false
     engines:
       node: '>=4'
     resolution:
-      integrity: sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=
+      integrity: sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==
   /worker-farm/1.6.0:
     dependencies:
       errno: 0.1.7
     dev: false
     resolution:
       integrity: sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==
+  /wrap-ansi/2.1.0:
+    dependencies:
+      string-width: 1.0.2
+      strip-ansi: 3.0.1
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
   /wrappy/1.0.2:
     dev: false
     resolution:
       integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-  /write-file-atomic/2.3.0:
+  /write-file-atomic/2.4.2:
     dependencies:
-      graceful-fs: 4.1.11
+      graceful-fs: 4.1.15
       imurmurhash: 0.1.4
       signal-exit: 3.0.2
     dev: false
     resolution:
-      integrity: sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==
+      integrity: sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==
   /ws/4.1.0:
     dependencies:
       async-limiter: 1.0.0
@@ -5040,6 +6419,10 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
+  /xregexp/4.0.0:
+    dev: false
+    resolution:
+      integrity: sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==
   /xtend/4.0.1:
     dev: false
     engines:
@@ -5054,36 +6437,73 @@ packages:
     dev: false
     resolution:
       integrity: sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
-  /yargs-parser/10.0.0:
+  /yallist/3.0.3:
+    dev: false
+    resolution:
+      integrity: sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
+  /yargs-parser/10.1.0:
     dependencies:
       camelcase: 4.1.0
     dev: false
     resolution:
-      integrity: sha512-+DHejWujTVYeMHLff8U96rLc4uE4Emncoftvn5AjhB1Jw1pWxLzgBUT/WYbPrHmy6YPEBTZQx5myHhVcuuu64g==
-registry: 'https://registry.npmjs.org/'
-shrinkwrapMinorVersion: 9
-shrinkwrapVersion: 3
+      integrity: sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==
+  /yargs/12.0.2:
+    dependencies:
+      cliui: 4.1.0
+      decamelize: 2.0.0
+      find-up: 3.0.0
+      get-caller-file: 1.0.3
+      os-locale: 3.1.0
+      require-directory: 2.1.1
+      require-main-filename: 1.0.1
+      set-blocking: 2.0.0
+      string-width: 2.1.1
+      which-module: 2.0.0
+      y18n: 4.0.0
+      yargs-parser: 10.1.0
+    dev: false
+    resolution:
+      integrity: sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==
+  /ylru/1.2.1:
+    dev: false
+    engines:
+      node: '>= 4.0.0'
+    resolution:
+      integrity: sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==
+shrinkwrapVersion: 5
 specifiers:
-  '@keynote/core': ^1.1.3
-  '@keynote/theme-default': ^1.0.0
+  '@babel/core': ^7.1.5
+  '@vue-slides/core': ^2.0.0-alpha.1
+  '@vue-slides/postcss-kem-unit': ^2.0.0-alpha.0
+  '@vue-slides/theme-vue': ^2.0.0-alpha.1
+  '@vuepress/markdown': ^1.0.0-alpha.42
   autoprefixer: ^8.5.1
+  babel-loader: ^8.0.4
   cache-loader: ^1.2.2
   chalk: ^2.4.1
   commander: ^2.15.1
   css-loader: ^0.28.11
   file-loader: ^1.1.11
+  front-matter: ^3.0.1
   html-webpack-plugin: ^3.2.0
+  loader-utils: ^1.2.3
+  lodash: ^4.17.11
+  markdown-it: ^8.4.2
+  markdown-it-chain: ^1.3.0
   mini-css-extract-plugin: ^0.4.0
   portfinder: ^1.0.13
   postcss-loader: ^2.1.5
+  preload-image-loader: ^1.0.0
   progress-bar-webpack-plugin: ^1.11.0
   tmp: ^0.0.33
   url-loader: ^1.0.1
+  virtual-module-webpack-plugin: ^0.4.0
   vue: ^2.5.16
   vue-loader: ^15.2.1
   vue-style-loader: ^4.1.0
   vue-template-compiler: ^2.5.16
   webpack: ^4.8.3
   webpack-chain: ^4.8.0
+  webpack-dev-server: ^3.1.10
   webpack-hot-client: ^3.0.0
-  webpack-serve: ^1.0.2
+  webpack-serve: ^1.0.4
diff --git a/packages/cli/src/index.js b/packages/cli/src/index.js
new file mode 100644
index 0000000..e69de29
diff --git a/packages/core/.npmignore b/packages/core/.npmignore
new file mode 100644
index 0000000..22923f4
--- /dev/null
+++ b/packages/core/.npmignore
@@ -0,0 +1 @@
+*.unit.js
diff --git a/packages/core/README.md b/packages/core/README.md
new file mode 100644
index 0000000..0b34254
--- /dev/null
+++ b/packages/core/README.md
@@ -0,0 +1 @@
+# @vue-slides/core
\ No newline at end of file
diff --git a/packages/core/package.json b/packages/core/package.json
new file mode 100644
index 0000000..f294463
--- /dev/null
+++ b/packages/core/package.json
@@ -0,0 +1,34 @@
+{
+  "name": "@vue-slides/core",
+  "version": "2.0.0-alpha.1",
+  "description": "@vue-slides/core",
+  "main": "src/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/vue-slides/vue-slides.git"
+  },
+  "keywords": [
+    "vue-slides",
+    "vue"
+  ],
+  "author": "Rahul Kadyan",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/vue-slides/vue-slides/issues"
+  },
+  "homepage": "https://github.com/vue-slides/vue-slides/tree/dev/packages/core#readme",
+  "dependencies": {
+    "@vue-slides/plugin-keyboard": "^2.0.0-alpha.1",
+    "@vue-slides/plugin-progress": "^2.0.0-alpha.0",
+    "@vue-slides/plugin-touch": "^2.0.0-alpha.1",
+    "@vue-slides/state": "^2.0.0-alpha.0",
+    "@znck/prop-types": "^0.3.4",
+    "resize-observer-polyfill": "^1.5.0",
+    "vue": "^2.5.17",
+    "vue-router": "^3.0.1",
+    "vuex": "^3.0.1"
+  },
+  "publishConfig": {
+    "access": "public"
+  }
+}
diff --git a/packages/core/shrinkwrap.yaml b/packages/core/shrinkwrap.yaml
new file mode 100644
index 0000000..fb1718c
--- /dev/null
+++ b/packages/core/shrinkwrap.yaml
@@ -0,0 +1,82 @@
+dependencies:
+  '@vue-slides/plugin-keyboard': 'link:../plugin-keyboard'
+  '@vue-slides/plugin-progress': 'link:../plugin-progress'
+  '@vue-slides/plugin-touch': 'link:../plugin-touch'
+  '@vue-slides/state': 'link:../state'
+  '@znck/prop-types': 0.3.4
+  resize-observer-polyfill: 1.5.1
+  vue: 2.6.8
+  vue-router: 3.0.2
+  vuex: 3.1.0
+packages:
+  /@znck/prop-types/0.3.4:
+    dependencies:
+      lodash-es: 4.17.11
+      nyc: 11.9.0
+    dev: false
+    resolution:
+      integrity: sha512-TAaBr9Th6HF6MzQ3/MDVChEHMJ0EH7jj/4p3bp0GxqOzsn4HQxgceBBZ0DE0vshDUprA9d8USqlwzTKKepcnpg==
+  /lodash-es/4.17.11:
+    dev: false
+    resolution:
+      integrity: sha512-DHb1ub+rMjjrxqlB3H56/6MXtm1lSksDp2rA2cNWjG8mlDUYFhUj3Di2Zn5IwSU87xLv8tNIQ7sSwE/YOX/D/Q==
+  /nyc/11.9.0:
+    bundledDependencies:
+      - archy
+      - arrify
+      - caching-transform
+      - convert-source-map
+      - debug-log
+      - default-require-extensions
+      - find-cache-dir
+      - find-up
+      - foreground-child
+      - glob
+      - istanbul-lib-coverage
+      - istanbul-lib-hook
+      - istanbul-lib-instrument
+      - istanbul-lib-report
+      - istanbul-lib-source-maps
+      - istanbul-reports
+      - md5-hex
+      - merge-source-map
+      - micromatch
+      - mkdirp
+      - resolve-from
+      - rimraf
+      - signal-exit
+      - spawn-wrap
+      - test-exclude
+      - yargs
+      - yargs-parser
+    dev: false
+    hasBin: true
+    resolution:
+      integrity: sha512-w8OdJAhXL5izerzZMdqzYKMj/pgHJyY3qEPYBjLLxrhcVoHEY9pU5ENIiZyCgG9OR7x3VcUMoD40o6PtVpfR4g==
+  /resize-observer-polyfill/1.5.1:
+    dev: false
+    resolution:
+      integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
+  /vue-router/3.0.2:
+    dev: false
+    resolution:
+      integrity: sha512-opKtsxjp9eOcFWdp6xLQPLmRGgfM932Tl56U9chYTnoWqKxQ8M20N7AkdEbM5beUh6wICoFGYugAX9vQjyJLFg==
+  /vue/2.6.8:
+    dev: false
+    resolution:
+      integrity: sha512-+vp9lEC2Kt3yom673pzg1J7T1NVGuGzO9j8Wxno+rQN2WYVBX2pyo/RGQ3fXCLh2Pk76Skw/laAPCuBuEQ4diw==
+  /vuex/3.1.0:
+    dev: false
+    resolution:
+      integrity: sha512-mdHeHT/7u4BncpUZMlxNaIdcN/HIt1GsGG5LKByArvYG/v6DvHcOxvDCts+7SRdCoIRGllK8IMZvQtQXLppDYg==
+shrinkwrapVersion: 5
+specifiers:
+  '@vue-slides/plugin-keyboard': ^2.0.0-alpha.1
+  '@vue-slides/plugin-progress': ^2.0.0-alpha.0
+  '@vue-slides/plugin-touch': ^2.0.0-alpha.1
+  '@vue-slides/state': ^2.0.0-alpha.0
+  '@znck/prop-types': ^0.3.4
+  resize-observer-polyfill: ^1.5.0
+  vue: ^2.5.17
+  vue-router: ^3.0.1
+  vuex: ^3.0.1
diff --git a/packages/core/src/api/auto-size.vue b/packages/core/src/api/auto-size.vue
new file mode 100644
index 0000000..6373c9a
--- /dev/null
+++ b/packages/core/src/api/auto-size.vue
@@ -0,0 +1,70 @@
+<script>
+import ResizeObserver from 'resize-observer-polyfill'
+
+export default {
+  props: {
+    x: {
+      type: Number,
+      required: true
+    },
+    y: {
+      type: Number,
+      required: true
+    }
+  },
+  data() {
+    return { width: undefined, height: undefined }
+  },
+  computed: {
+    kem() {
+      if (this.width) return
+
+      return `calc(${this.width} / 100)`
+    }
+  },
+  mounted() {
+    const observer = new ResizeObserver(([element]) => {
+      const { width, height } = element.contentRect
+
+      this.updateSize(width, height)
+    })
+
+    observer.observe(this.$el.parentElement)
+
+    this.$on('hook:beforeDestroy', () => observer.disconnect())
+  },
+  methods: {
+    updateSize(width, height) {
+      const expectedHeight = (width * this.y) / this.x
+      const expectedWidth = (height * this.x) / this.y
+
+      if (expectedHeight < height) {
+        this.height = expectedHeight + 'px'
+        this.width = width + 'px'
+      } else {
+        this.height = height + 'px'
+        this.width = expectedWidth + 'px'
+      }
+    }
+  }
+}
+</script>
+
+<template>
+  <div :class="$style.area" :style="{ width, height, '--kem': `calc(${width} / 100)` }">
+    <slot />
+  </div>
+</template>
+
+<style module>
+.area {
+  background: transparent;
+  width: 100%;
+  height: 100%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  position: relative;
+  overflow: hidden;
+}
+</style>
diff --git a/packages/core/src/api/fit-text.vue b/packages/core/src/api/fit-text.vue
new file mode 100644
index 0000000..7aed7ce
--- /dev/null
+++ b/packages/core/src/api/fit-text.vue
@@ -0,0 +1,93 @@
+<template>
+  <div :class="$style.content" ref="text" :style="{ fontSize: `${scale}em` }">
+    <slot />
+  </div>
+</template>
+
+<script>
+import ResizeObserver from 'resize-observer-polyfill'
+import PropTypes from '@znck/prop-types'
+
+function isSmaller(a, b) {
+  return a.width < b.width || a.height < b.height
+}
+function findSize(entry) {
+  if (!entry) return { width: 0, height: 0 }
+
+  const contentRect = entry.getBoundingClientRect()
+  const style = window.getComputedStyle(entry)
+
+  const padding = {
+    top: parseFloat(style.paddingTop),
+    right: parseFloat(style.paddingRight),
+    bottom: parseFloat(style.paddingBottom),
+    left: parseFloat(style.paddingLeft)
+  }
+
+  return { width: contentRect.width - padding.left - padding.right, height: contentRect.height - padding.top - padding.bottom }
+}
+
+export default {
+  props: {
+    max: PropTypes.number.validate(it => it <= 8).value(8),
+    position: PropTypes.oneOf('left', 'center', 'right').value('center')
+  },
+  data: () => ({
+    scale: 1,
+    low: null,
+    high: null
+  }),
+  computed: {
+    translateX () {
+      if (this.position === 'center') return 0
+      const delta = ((this.scale - 1) / this.scale) * 50
+      return this.position === 'left' ? delta : -delta
+    }
+  },
+  methods: {
+    resize() {
+      if (!this.$refs.text) return
+      if (this.low && this.low > this.high) {
+        this.low = this.high = null
+        return
+      } else if (this.low === null) {
+        this.low = 0
+        this.high = this.max
+      }
+      
+      const text = findSize(this.$refs.text)
+      const container = findSize(this.$refs.text.parentElement)
+
+      let scale = this.scale
+      if (isSmaller(text, container)) {
+        scale = (this.high + scale) / 2
+        this.low = this.scale
+      } else {
+        scale = (scale + this.low) / 2
+        this.high = this.scale
+      }
+
+      if (scale > 0 && Math.abs(this.scale - scale) > 0.0000000001) {
+        this.scale = scale
+        setTimeout(() => this.low = this.high = null, 1000)
+      }
+    }
+  },
+  mounted() {
+    const observer = new ResizeObserver(this.resize)
+    this.$nextTick( () => {
+      if (this.$refs.text) {
+        observer.observe(this.$refs.text)
+        observer.observe(this.$refs.text.parentElement)
+      }
+    })
+    this.$on('hook:beforeDestory', () => observer.disconnect())
+  }
+}
+</script>
+
+<style module>
+.content {
+  display: inline;
+}
+</style>
\ No newline at end of file
diff --git a/packages/core/src/api/index.js b/packages/core/src/api/index.js
new file mode 100644
index 0000000..f4b2933
--- /dev/null
+++ b/packages/core/src/api/index.js
@@ -0,0 +1,8 @@
+export default function install(Vue) {
+  const components = ['auto-size', 'fit-text']
+  
+  components.map(name => Vue.component(
+    name.replace(/^[a-z]|-[a-z]/g, m => m.toUpperCase().replace('-', '')),
+    () => import(/* webpackPrefetch: true */`./${name}.vue`))
+  )
+}
diff --git a/packages/core/src/api/layout.vue b/packages/core/src/api/layout.vue
new file mode 100644
index 0000000..e389721
--- /dev/null
+++ b/packages/core/src/api/layout.vue
@@ -0,0 +1,15 @@
+<script>
+export default {}
+</script>
+
+<template>
+  <div :class="$style.layout">
+    <slot />
+  </div>
+</template>
+
+<style module>
+.layout {
+  display: flex;
+}
+</style>
diff --git a/packages/core/src/components/animation-constants.js b/packages/core/src/components/animation-constants.js
new file mode 100644
index 0000000..a9df76a
--- /dev/null
+++ b/packages/core/src/components/animation-constants.js
@@ -0,0 +1,3 @@
+/** @type {{(id: string, payload: { buildIn?: object, actions: object[], buildOut?: object }, fn: (actionId: string | number) => void): function(): void}} */
+// @ts-ignore
+export const REGISTER = Symbol('register')
diff --git a/packages/core/src/components/animation-engine.vue b/packages/core/src/components/animation-engine.vue
new file mode 100644
index 0000000..2dcebe6
--- /dev/null
+++ b/packages/core/src/components/animation-engine.vue
@@ -0,0 +1,124 @@
+<script>
+import { REGISTER } from './animation-constants'
+
+const DELAY_RE = /^(?<value>\d+)(?<unit>s|ms)$/i
+const SPLITTER_RE = /([>+-][^>+-]+)/
+const PARSER_RE = /^(?<trigger>[>+-])(?<id>[a-z0-9]+)\.(?<step>[a-z0-9]+)(?:\((?<delay>[^)]+)\))?$/i
+
+function toMS(s) {
+  if (!s) return 0
+
+  const result = DELAY_RE.exec(s)
+
+  if (!result) return 0
+
+  const { value, unit } = result.groups
+  const m = { s: 1000, ms: 1 }
+
+  return Math.floor(parseFloat(value) * m[unit])
+}
+
+export default {
+  props: {
+    animate: {
+      type: String,
+      default: ''
+    }
+  },
+  provide() {
+    return {
+      [REGISTER]: this.registerBuildStep
+    }
+  },
+  data() {
+    return {
+      builds: {},
+      index: -1,
+      nextIndex: 0,
+      runningAnimations: 0,
+      autoStartNext: false
+    }
+  },
+  computed: {
+    order() {
+      return this.animate
+    },
+    processOrder() {
+      return this.order
+        .replace(/[\s\n]/g, '') // remove spaces
+        .split(SPLITTER_RE) // split steps
+        .filter(Boolean) // remove empty
+        .map(item => PARSER_RE.exec(item).groups) // parse
+        .map(step => ({ ...step, delay: toMS(step.delay) })) // process
+    }
+  },
+  methods: {
+    registerBuildStep(id, { buildIn, actions = [], buildOut }, fn) {
+      if (id in this.builds) {
+        throw new Error(`Duplicate <Build> name in slide`)
+      }
+
+      const steps = /** @type {string[]} */ ([])
+        .concat(buildIn && `${id}.in`)
+        .concat(actions.map((action, index) => `${id}.${index + 1}`))
+        .concat(buildOut && `${id}.out`)
+        .filter(Boolean)
+
+      this.builds[id] = { steps, fn }
+    },
+    checkAndTrigger() {
+      const queue = []
+      for (let i = this.index + 1; i < this.processOrder.length; ++i) {
+        const { id, trigger, delay, step } = this.processOrder[i]
+        const { fn } = this.builds[id]
+        const scheduled = this.schedule(fn, step, delay)
+
+        if (trigger === '>' && this.autoStartNext) {
+          queue.push(scheduled)
+          this.autoStartNext = false
+        } else if (trigger === '+') {
+          if (!Array.isArray(queue[queue.length - 1])) queue.push([])
+
+          queue[queue.length - 1].push(scheduled)
+        } else if (trigger === '-') {
+          queue.push(scheduled)
+        } else break
+      }
+
+      queue.reduce((chain, fnOrArray) => {
+        if (Array.isArray(fnOrArray))
+          return chain.then(() => Promise.all(fnOrArray.map(fn => fn())))
+
+        return chain.then(fnOrArray)
+      }, Promise.resolve())
+    },
+    async trigger(fn, step) {
+      try {
+        this.runningAnimations++
+        await fn(step)
+      } finally {
+        this.runningAnimations--
+      }
+    },
+    schedule(fn, step, delay) {
+      return async () => fn(step, delay)
+    },
+    next() {
+      if (this.runningAnimations > 0) {
+        this.autoStartNext = true
+        this._autoStartTimer = setTimeout(
+          () => (this.autoStartNext = false),
+          1000
+        )
+      }
+
+      clearTimeout(this._autoStartTimer)
+      this.checkAndTrigger()
+      this.autoStartNext = false
+    }
+  },
+  render() {
+    return this.$slots.default ? this.$slots.default[0] : null
+  }
+}
+</script>
diff --git a/packages/core/src/components/animation.vue b/packages/core/src/components/animation.vue
new file mode 100644
index 0000000..910e66f
--- /dev/null
+++ b/packages/core/src/components/animation.vue
@@ -0,0 +1,42 @@
+<script>
+import { REGISTER } from './animation-constants'
+
+export default {
+  abstract: true,
+  inheritAttrs: false,
+  props: {
+    id: {
+      type: String,
+      required: true
+    },
+    in: {
+      type: [Object, String],
+      default: undefined
+    },
+    out: {
+      type: [Object, String],
+      default: undefined
+    },
+    actions: {
+      type: [Array, Object, String],
+      default: undefined
+    }
+  },
+  inject: {
+    register: REGISTER
+  },
+  created() {
+    this.register(this.id, {
+      buildIn: this.in,
+      actions: this.actions,
+      buildOut: this.out
+    }, this.onAnimate)
+  },
+  methods: {
+    async onAnimate(which, delay) {}
+  },
+  render() {
+    return this.$slots.default ? this.$slots.default[0] : null
+  }
+}
+</script>
diff --git a/packages/core/src/components/index.js b/packages/core/src/components/index.js
new file mode 100644
index 0000000..56571b1
--- /dev/null
+++ b/packages/core/src/components/index.js
@@ -0,0 +1,3 @@
+export { default as AnimationEngine } from './animation-engine.vue'
+export { default as PluginController } from './plugin-controller.vue'
+export { default as SlideRenderer } from './slide-renderer.vue'
diff --git a/packages/core/src/components/plugin-controller.vue b/packages/core/src/components/plugin-controller.vue
new file mode 100644
index 0000000..5202cc1
--- /dev/null
+++ b/packages/core/src/components/plugin-controller.vue
@@ -0,0 +1,22 @@
+<script>
+import PluginRenderer from './plugin-renderer'
+
+export default {
+  functional: true,
+  props: {
+    plugins: {
+      type: Array,
+      required: true
+    },
+    target: {
+      type: String,
+      required: true
+    }
+  },
+  render(h, { props }) {
+    return props.plugins.map(name =>
+      h(PluginRenderer, { props: { name, target: props.target } })
+    )
+  }
+}
+</script>
diff --git a/packages/core/src/components/plugin-renderer.vue b/packages/core/src/components/plugin-renderer.vue
new file mode 100644
index 0000000..ce846bf
--- /dev/null
+++ b/packages/core/src/components/plugin-renderer.vue
@@ -0,0 +1,71 @@
+<script>
+import { pluginsComputed } from '@vue-slides/state'
+
+const plugins = {
+  progress: () => import('@vue-slides/plugin-progress'),
+  keyboard: () => import('@vue-slides/plugin-keyboard'),
+  touch: () => import('@vue-slides/plugin-touch')
+}
+
+async function importPlugin(name) {
+  function normalize(module) {
+    return module.__esModule ? module.default : module
+  }
+
+  return normalize(
+    name in plugins
+      ? await plugins[name]()
+      : await import(/* webpackPrefetch: true */ /* webpackMode: "lazy" */ `vue-slides-plugin-${name}`)
+  )
+}
+
+const RE = /"[^"]+"|'[^']'|url\([^)]\)|(\d*\.?\d+)kem/g
+
+export default {
+  props: {
+    name: {
+      type: String,
+      required: true
+    },
+    target: {
+      type: String,
+      required: true
+    }
+  },
+  data() {
+    return {
+      component: null
+    }
+  },
+  computed: {
+    ...pluginsComputed,
+    options() {
+      return this.findPluginOptions(this.name, this.target)
+    }
+  },
+  async created() {
+    const plugin = await importPlugin(this.name)
+    if (plugin && plugin.entry) this.component = plugin.entry[this.target]
+  },
+  methods: {
+    transform(args) {
+      const position = { ...args }
+      for (const key in position) {
+        if (typeof position[key] === 'string') {
+          position[key] = position[key].replace(RE, (all, kem) => {
+            if (kem !== undefined) return `calc(${kem} * var(--kem))`
+
+            return all
+          })
+        }
+      }
+
+      return position
+    }
+  }
+}
+</script>
+
+<template>
+  <component v-if="component" :is="component" v-bind="options" />
+</template>
diff --git a/packages/core/src/components/slide-renderer.vue b/packages/core/src/components/slide-renderer.vue
new file mode 100644
index 0000000..3c6738e
--- /dev/null
+++ b/packages/core/src/components/slide-renderer.vue
@@ -0,0 +1,5 @@
+<template>
+  <AutoSize v-bind="$attrs">
+    <slot />
+  </AutoSize>
+</template>
diff --git a/packages/core/src/index.js b/packages/core/src/index.js
new file mode 100644
index 0000000..7ae702a
--- /dev/null
+++ b/packages/core/src/index.js
@@ -0,0 +1,39 @@
+import Vue from 'vue'
+
+import router from './router'
+import store from './store'
+import api from './api'
+
+import VueSlides from './vue-slides.vue'
+
+Vue.use(api)
+
+/**
+ * Create a vue-slides presentation application.
+ *
+ * @param {import('vue/types').ComponentOptions} Presentation
+ * @returns {Vue}
+ */
+export default function createKeynote(Presentation, { theme = {}, slides } = {}) {
+  const components = {
+    ...theme.slides,
+    ...slides,
+    VueSlides
+  }
+  
+  for (const name in components) {
+    Vue.component(name, components[name])
+  }
+
+  const presentation = new Vue({
+    name: 'KeynoteApp',
+    el: '#app',
+    render: createElement => createElement(Presentation),
+    store,
+    router
+  })
+
+  if (theme && theme.install) Vue.use(theme, { presentation, router, store })
+
+  return presentation
+}
diff --git a/packages/core/src/registerServiceWorker.js b/packages/core/src/registerServiceWorker.js
new file mode 100644
index 0000000..e69b3e1
--- /dev/null
+++ b/packages/core/src/registerServiceWorker.js
@@ -0,0 +1,28 @@
+/* eslint-disable no-console */
+
+import { register } from "register-service-worker";
+
+if (process.env.NODE_ENV === "production") {
+  register(`${process.env.BASE_URL}service-worker.js`, {
+    ready() {
+      console.log(
+        "App is being served from cache by a service worker.\n" +
+          "For more details, visit https://goo.gl/AFskqB"
+      );
+    },
+    cached() {
+      console.log("Content has been cached for offline use.");
+    },
+    updated() {
+      console.log("New content is available; please refresh.");
+    },
+    offline() {
+      console.log(
+        "No internet connection found. App is running in offline mode."
+      );
+    },
+    error(error) {
+      console.error("Error during service worker registration:", error);
+    }
+  });
+}
diff --git a/packages/core/src/router/index.js b/packages/core/src/router/index.js
new file mode 100644
index 0000000..81376ce
--- /dev/null
+++ b/packages/core/src/router/index.js
@@ -0,0 +1,11 @@
+import Vue from 'vue'
+import Router from 'vue-router'
+
+import routes from './routes'
+
+Vue.use(Router)
+
+export default new Router({
+  mode: 'history',
+  routes
+})
diff --git a/packages/core/src/router/routes.js b/packages/core/src/router/routes.js
new file mode 100644
index 0000000..9fae1ec
--- /dev/null
+++ b/packages/core/src/router/routes.js
@@ -0,0 +1,14 @@
+/** @type {import("vue-router/types/router").RouteConfig[]} */
+export default [
+  {
+    path: '/',
+    name: 'presentation',
+    component: () =>
+      import(/* webpackPrefetch: true */ './views/presentation.vue')
+  },
+  {
+    path: '/presenter',
+    name: 'presenter',
+    component: () => import(/* webpackPrefetch: true */ './views/presenter.vue')
+  }
+]
diff --git a/packages/core/src/router/views/presentation.vue b/packages/core/src/router/views/presentation.vue
new file mode 100644
index 0000000..cd0db7e
--- /dev/null
+++ b/packages/core/src/router/views/presentation.vue
@@ -0,0 +1,49 @@
+<script>
+import {
+  presentationComputed,
+  presentationMethods,
+  pluginsComputed
+} from '@vue-slides/state'
+
+import {
+  AnimationEngine,
+  PluginController,
+  SlideRenderer
+} from '../../components'
+
+export default {
+  components: {
+    AnimationEngine,
+    PluginController,
+    SlideRenderer
+  },
+  computed: {
+    ...presentationComputed,
+    ...pluginsComputed
+  },
+  methods: {
+    ...presentationMethods
+  }
+}
+</script>
+
+<template>
+  <div :class="$style.wrapper">
+    <SlideRenderer :x="16" :y="9" id="vue-slides-presentation">
+      <component v-if="activeSlide" :is="activeSlide.meta.component" />
+
+      <PluginController target="presentation" :plugins="activePlugins" />
+    </SlideRenderer>
+  </div>
+</template>
+
+<style module>
+.wrapper {
+  background: transparent;
+  width: 100%;
+  height: 100%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+</style>
diff --git a/packages/core/src/router/views/presenter.vue b/packages/core/src/router/views/presenter.vue
new file mode 100644
index 0000000..cb0f5b2
--- /dev/null
+++ b/packages/core/src/router/views/presenter.vue
@@ -0,0 +1,63 @@
+<script>
+import {
+  presentationComputed,
+  presentationMethods,
+  pluginsComputed
+} from '@vue-slides/state'
+
+import { AnimationEngine, SlideRenderer } from '../../components'
+
+export default {
+  components: {
+    AnimationEngine,
+    SlideRenderer
+  },
+  computed: {
+    ...presentationComputed,
+    ...pluginsComputed
+  },
+  methods: {
+    ...presentationMethods
+  }
+}
+</script>
+
+<template>
+  <div :class="$style.wrapper" id="vue-slides-presenter">
+    <div :class="$style.current">
+      <SlideRenderer :x="16" :y="9">
+        <component v-if="activeSlide" :is="activeSlide.meta.component" />
+      </SlideRenderer>
+    </div>
+
+    <div :class="$style.next">
+      <SlideRenderer :x="16" :y="9">
+        <component v-if="activeSlide" :is="activeSlide.meta.component" />
+      </SlideRenderer>
+    </div>
+  </div>
+</template>
+
+<style module>
+.wrapper,
+.current,
+.next {
+  background: transparent;
+  width: 100%;
+  height: 100%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  padding: 1rem;
+}
+
+.current {
+  flex: 3;
+  width: 60%;
+}
+
+.next {
+  flex: 1;
+  width: 40%;
+}
+</style>
diff --git a/packages/core/src/store/index.js b/packages/core/src/store/index.js
new file mode 100644
index 0000000..dbb13ba
--- /dev/null
+++ b/packages/core/src/store/index.js
@@ -0,0 +1,20 @@
+import Vue from 'vue'
+import Vuex, { Store } from 'vuex'
+
+import * as modules from './modules'
+
+Vue.use(Vuex)
+
+const store = new Store({
+  modules,
+  strict: process.env.NODE_ENV !== 'production'
+})
+
+for (const name in modules) {
+  const vuexModule = modules[name]
+  if (vuexModule.actions && 'init' in vuexModule.actions) {
+    store.dispatch(`${name}/init`)
+  }
+}
+
+export default store
diff --git a/packages/core/src/store/modules/index.js b/packages/core/src/store/modules/index.js
new file mode 100644
index 0000000..1c08e1e
--- /dev/null
+++ b/packages/core/src/store/modules/index.js
@@ -0,0 +1,4 @@
+import * as plugin from './plugin'
+import * as presentation from './presentation'
+
+export { plugin, presentation }
diff --git a/packages/core/src/store/modules/plugin.js b/packages/core/src/store/modules/plugin.js
new file mode 100644
index 0000000..f47850c
--- /dev/null
+++ b/packages/core/src/store/modules/plugin.js
@@ -0,0 +1,36 @@
+import Vue from 'vue'
+
+import { ACTIVATE_PLUGIN, CONFIGURE_PLUGIN } from '@vue-slides/state'
+
+export const namespaced = true
+
+export const state = () => ({
+  active: [],
+  options: {}
+})
+
+export const mutations = {
+  [ACTIVATE_PLUGIN](state, name) {
+    if (state.active.indexOf(name) < 0) state.active.push(name)
+  },
+  [CONFIGURE_PLUGIN](state, { name, ...options }) {
+    const newOptions = { $default: {} }
+    for (const key in options) {
+      if (key.startsWith('$')) newOptions[key] = options[key]
+      else newOptions.$default[key] = options[key]
+    }
+    Vue.set(state.options, name, newOptions)
+  }
+}
+
+export const getters = {
+  findPluginOptions(state) {
+    return (name, scope) => {
+      const options = state.options[name] || {}
+
+      return { ...options.$default, ...options[`$${scope}`] }
+    }
+  }
+}
+
+export const actions = {}
diff --git a/packages/core/src/store/modules/plugin.unit.js b/packages/core/src/store/modules/plugin.unit.js
new file mode 100644
index 0000000..2b8f48f
--- /dev/null
+++ b/packages/core/src/store/modules/plugin.unit.js
@@ -0,0 +1,7 @@
+import * as pluginModule from './plugin'
+
+describe('@state/modules/plugin', () => {
+  it('exports a valid Vuex module', () => {
+    expect(pluginModule).toBeAVuexModule()
+  })
+})
diff --git a/packages/core/src/store/modules/presentation.js b/packages/core/src/store/modules/presentation.js
new file mode 100644
index 0000000..c5f52a0
--- /dev/null
+++ b/packages/core/src/store/modules/presentation.js
@@ -0,0 +1,162 @@
+export const namespaced = true
+
+export const state = () => ({
+  slides: [],
+  activeSlideIndex: 0,
+  previousSlideIndex: -1
+})
+
+export const getters = {
+  getSlideAtIndex(state) {
+    return index => {
+      if (index >= state.slides.length || index < 0) return null
+      return state.slides[index]
+    }
+  },
+  activeSlide(state, { getSlideAtIndex }) {
+    return getSlideAtIndex(Math.max(0, state.activeSlideIndex))
+  },
+  previousSlide(state, { getSlideAtIndex }) {
+    return getSlideAtIndex(state.previousSlideIndex)
+  },
+  isAfterLastSlide(state, { activeSlide, previousSlide }) {
+    return activeSlide === null && previousSlide !== null
+  },
+  transitionType(state) {
+    if (state.previousSlideIndex + 1 === state.activeSlideIndex) {
+      return 'forward'
+    }
+    if (state.activeSlideIndex + 1 === state.previousSlideIndex) {
+      return 'reverse'
+    }
+    if (state.previousSlideIndex < state.activeSlideIndex) {
+      return 'forward jump'
+    }
+    if (state.previousSlideIndex > state.activeSlideIndex) {
+      return 'backward jump'
+    }
+  },
+  numberOfSlides(state) {
+    return state.slides.length
+  }
+}
+
+const SET_SLIDES = 'setSlides'
+const SET_SLIDE_AT_INDEX = 'setSlideAtIndex'
+const SET_STEPS_FOR_SLIDE_AT_INDEX = 'setStepsForSlideAtIndex'
+const SET_ACTIVE_SLIDE_INDEX = 'setActiveSlideIndex'
+
+export const mutations = {
+  [SET_SLIDES](state, slides) {
+    state.slides = slides
+  },
+  [SET_SLIDE_AT_INDEX](state, { index, slide }) {
+    if (slide === null) {
+      if (index + 1 === state.slides.length) state.slides.pop()
+    }
+
+    if (state.slides.length > index) state.slides.splice(index, 1, slide)
+    else state.slides.push(slide)
+  },
+  [SET_STEPS_FOR_SLIDE_AT_INDEX](state, { index, steps }) {
+    state.slides[index].steps = steps
+  },
+  [SET_ACTIVE_SLIDE_INDEX](state, { index }) {
+    state.previousSlideIndex = state.activeSlideIndex
+    state.activeSlideIndex = index
+  }
+}
+
+export const actions = {
+  prepareSlides({ state, commit }, vnodes) {
+    if (!Array.isArray(vnodes)) return
+
+    if (vnodes.length < state.slides.length) {
+      const n = state.slides.length
+      for (let index = vnodes.length; index < n; index++) {
+        commit(SET_SLIDE_AT_INDEX, { index, slide: null })
+      }
+    }
+
+    return vnodes.map((vnode, index) => {
+      const oldSlide = state.slides[index]
+
+      if (oldSlide) {
+        if (oldSlide.meta.vnode === vnode) return oldSlide
+      }
+
+      const data = vnode.asyncMeta ? vnode.asyncMeta.data : vnode.data
+
+      const { animate, ...attrs } = (data && data.attrs) || {}
+
+      if (data) data.attrs = attrs
+
+      const slide = {
+        steps: 0,
+        meta: Object.freeze({
+          vnode,
+          component: createComponent(vnode, { animate })
+        })
+      }
+
+      commit(SET_SLIDE_AT_INDEX, { index, slide })
+
+      return slide
+    })
+  },
+  updateSteps({ commit, getters }, { index, steps }) {
+    const slide = getters.getSlideAtIndex(index)
+
+    if (!slide || slide.steps === steps) return
+
+    commit(SET_STEPS_FOR_SLIDE_AT_INDEX, { index, steps })
+  },
+  next({ state, getters, commit }) {
+    if (getters.isAfterLastSlide) return
+
+    commit(SET_ACTIVE_SLIDE_INDEX, {
+      index: state.activeSlideIndex + 1
+    })
+
+    return getters.activeSlide
+  },
+  previous({ state, commit }) {
+    if (state.activeSlideIndex === 0) return
+
+    commit(SET_ACTIVE_SLIDE_INDEX, {
+      index: state.activeSlideIndex - 1
+    })
+
+    return getters.activeSlide
+  },
+  goto({ commit, getters }, index) {
+    const slide = getters.getSlideAtIndex(index)
+
+    if (!slide) return
+
+    commit(SET_ACTIVE_SLIDE_INDEX, { index })
+
+    return getters.activeSlide
+  }
+}
+
+/* HELPERS */
+function createComponent(vnode, propsData) {
+  return {
+    functional: true,
+    abstract: true,
+    name: 'SlideWrapper',
+    props: {
+      vnode: {
+        default: () => vnode
+      }
+    },
+    render(h, { data, props }) {
+      return h(
+        'AnimationEngine',
+        { ...data, props: { ...props, ...propsData } },
+        [props.vnode]
+      )
+    }
+  }
+}
diff --git a/packages/core/src/store/modules/presentation.unit.js b/packages/core/src/store/modules/presentation.unit.js
new file mode 100644
index 0000000..d175611
--- /dev/null
+++ b/packages/core/src/store/modules/presentation.unit.js
@@ -0,0 +1,7 @@
+import * as presentationModule from './presentation'
+
+describe('@state/modules/presentation', () => {
+  it('exports a valid Vuex module', () => {
+    expect(presentationModule).toBeAVuexModule()
+  })
+})
diff --git a/packages/core/src/vue-slides.vue b/packages/core/src/vue-slides.vue
new file mode 100644
index 0000000..89ba0a0
--- /dev/null
+++ b/packages/core/src/vue-slides.vue
@@ -0,0 +1,60 @@
+<script>
+import { slidesMethods, pluginsMethods, pluginsComputed } from '@vue-slides/state'
+import { PluginController } from './components'
+
+export default {
+  inheritAttrs: false,
+  provide: ['aspectRatio'],
+  computed: {
+    ...pluginsComputed
+  },
+  methods: {
+    ...slidesMethods,
+    ...pluginsMethods
+  },
+  created() {
+    const keys = ['plugin-keyboard', 'plugin-touch'].concat(
+      Object.keys(this.$attrs)
+    )
+
+    keys.filter(name => name.startsWith('plugin-')).map(name => {
+      const plugin = name.replace(/^plugin-/, '')
+      this.activatePlugin(plugin)
+
+      if (this.$attrs[name]) {
+        this.configurePlugin({ ...this.$attrs[name], name: plugin })
+      }
+    })
+  },
+  mounted() {},
+  render(h) {
+    this.prepareSlides(this.$slots.default)
+
+    return h('div', { staticClass: 'vue-slides', attrs: { id: 'vue-slides' } }, [
+      h('router-view', { key: this.$route.fullPath }),
+      h(PluginController, {
+        props: { target: 'global', plugins: this.activePlugins }
+      })
+    ])
+  }
+}
+</script>
+
+<style>
+html,
+body {
+  margin: 0;
+  width: 100%;
+  height: 100%;
+}
+
+.vue-slides {
+  background: black;
+  width: 100%;
+  height: 100%;
+}
+
+* {
+  box-sizing: border-box;
+}
+</style>
diff --git a/packages/plugin-keyboard/.npmignore b/packages/plugin-keyboard/.npmignore
new file mode 100644
index 0000000..22923f4
--- /dev/null
+++ b/packages/plugin-keyboard/.npmignore
@@ -0,0 +1 @@
+*.unit.js
diff --git a/packages/plugin-keyboard/README.md b/packages/plugin-keyboard/README.md
new file mode 100644
index 0000000..72327f6
--- /dev/null
+++ b/packages/plugin-keyboard/README.md
@@ -0,0 +1 @@
+# @vue-slides/plugin-keyboard
\ No newline at end of file
diff --git a/packages/plugin-keyboard/package.json b/packages/plugin-keyboard/package.json
new file mode 100644
index 0000000..9f277a1
--- /dev/null
+++ b/packages/plugin-keyboard/package.json
@@ -0,0 +1,27 @@
+{
+  "name": "@vue-slides/plugin-keyboard",
+  "version": "2.0.0-alpha.1",
+  "description": "@vue-slides/plugin-keyboard",
+  "main": "src/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/vue-slides/vue-slides.git"
+  },
+  "keywords": [
+    "vue-slides",
+    "vue"
+  ],
+  "author": "Rahul Kadyan",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/vue-slides/vue-slides/issues"
+  },
+  "homepage": "https://github.com/vue-slides/vue-slides/tree/dev/packages/plugin-keyboard#readme",
+  "dependencies": {
+    "@vue-slides/state": "^2.0.0-alpha.0",
+    "screenfull": "^3.3.3"
+  },
+  "publishConfig": {
+    "access": "public"
+  }
+}
diff --git a/packages/plugin-keyboard/shrinkwrap.yaml b/packages/plugin-keyboard/shrinkwrap.yaml
new file mode 100644
index 0000000..8e7af31
--- /dev/null
+++ b/packages/plugin-keyboard/shrinkwrap.yaml
@@ -0,0 +1,14 @@
+dependencies:
+  '@vue-slides/state': 'link:../state'
+  screenfull: 3.3.3
+packages:
+  /screenfull/3.3.3:
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-DzYUuXr+OV2BDvYXaYzlYgJd4WXZZ2CW5NFC7Kw6TUCpzXJAx4MwlVD6CH+Mu6fi8rfAQIQfqdFZ4jtDsEkWig==
+shrinkwrapVersion: 5
+specifiers:
+  '@vue-slides/state': ^2.0.0-alpha.0
+  screenfull: ^3.3.3
diff --git a/packages/plugin-keyboard/src/index.js b/packages/plugin-keyboard/src/index.js
new file mode 100644
index 0000000..04f36f4
--- /dev/null
+++ b/packages/plugin-keyboard/src/index.js
@@ -0,0 +1,9 @@
+export default {
+  id: '@vue-slides/plugin-keyboard',
+  name: 'Keyboard',
+  entry: {
+    global: () => import('./keyboard-controller.vue'),
+    presentation: () => import('./register-presentation.vue'),
+    presenter: () => import('./register-presentation.vue')
+  }
+}
diff --git a/packages/plugin-keyboard/src/keyboard-controller.vue b/packages/plugin-keyboard/src/keyboard-controller.vue
new file mode 100644
index 0000000..c2bfd11
--- /dev/null
+++ b/packages/plugin-keyboard/src/keyboard-controller.vue
@@ -0,0 +1,107 @@
+<script>
+import screenfull from 'screenfull'
+import { init, teardown, on, addScope, removeScope } from './keyboard'
+
+export default {
+  data() {
+    return {
+      show: false,
+      info: []
+    }
+  },
+  mounted() {
+    init({ meta: this.info })
+    on({
+      key: 'shift+?',
+      shortcut: '?',
+      desc: 'Show keyboard controls',
+      scope: 'global',
+      handler: () => {
+        addScope('shortcuts')
+        this.show = true
+      }
+    })
+    on({
+      key: 'Escape',
+      shortcut: 'Esc',
+      desc: 'Hide keyboard controls',
+      scope: 'global',
+      handler: () => {
+        if (this.show) {
+          this.show = false
+          removeScope('shortcuts')
+        }
+      }
+    })
+    on({
+      key: 'f',
+      shortcut: 'F',
+      desc: 'Fullscreen',
+      scope: 'global',
+      handler: () => {
+        if (screenfull.enabled) {
+          screenfull.request()
+        }
+      }
+    })
+  },
+  beforeDestroy() {
+    teardown()
+  }
+}
+</script>
+
+<template>
+  <div v-if="show" :class="$style.wrapper">
+    <div :class="$style.shortcuts">
+      <table>
+        <thead>
+          <tr>
+            <th>Key</th>
+            <th>Action</th>
+          </tr>
+        </thead>
+
+        <tbody>
+          <tr v-for="item in info" :key="item.shortcut">
+            <td>{{ item.shortcut }}</td>
+            <td>{{ item.desc }}</td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+  </div>
+</template>
+
+<style module>
+.wrapper {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.wrapper:before {
+    content: "";
+    position: absolute;
+    height: 100%; width: 100%;
+    background: inherit;
+    background-size: cover;
+    background-color: rgba(0, 0, 0, 0.54);
+    z-index: -1;
+
+    filter: blur(4px);       
+}
+
+
+.shortcuts {
+  background: white;
+  border: 1px solid gray;
+  border-radius: 5px;
+  padding: 32px;
+}
+</style>
diff --git a/packages/plugin-keyboard/src/keyboard.js b/packages/plugin-keyboard/src/keyboard.js
new file mode 100644
index 0000000..8d9ca03
--- /dev/null
+++ b/packages/plugin-keyboard/src/keyboard.js
@@ -0,0 +1,76 @@
+const keys = []
+const config = {
+  repeatDelay: 350,
+  meta: []
+}
+const scope = new Set(['global'])
+const handlers = {}
+const regexHandlers = []
+
+export function addScope(name) {
+  scope.add(name)
+}
+
+export function removeScope(name) {
+  scope.delete(name)
+}
+
+export function init(options = {}) {
+  Object.assign(config, options)
+
+  document.addEventListener('keydown', handleKeydown, { capture: true })
+  document.addEventListener('keypress', handleKeydown, { capture: true })
+  document.addEventListener('keyup', handleKeyup, { capture: true })
+}
+
+export function teardown() {
+  document.removeEventListener('keydown', handleKeydown)
+  document.removeEventListener('keypress', handleKeydown)
+  document.removeEventListener('keyup', handleKeyup)
+}
+
+/**
+ * @param {{ scope: 'global' | 'presentation' | 'shortcuts', key: string | RegExp, shortcut: string, desc: string, handler: (event: KeyboardEvent) => void}} handler
+ */
+export function on({ key, ...meta }) {
+  if (typeof key === 'string') {
+    handlers[key.toLowerCase()] = meta
+  } else {
+    regexHandlers.push({ re: key, ...meta })
+  }
+
+  config.meta.push(meta)
+}
+
+function fire(listener, event) {
+  if (listener && scope.has(listener.scope || 'global')) {
+    listener.handler(event)
+  }
+}
+
+const modifierKeys = ['Meta', 'Alt', 'Shift', 'Control']
+/**
+ * @param {KeyboardEvent} event
+ */
+function handleKeydown(event) {
+  if (!keys.includes(event.key) && !modifierKeys.includes(event.key))
+    keys.push(event.key)
+
+  const modifiers = modifierKeys
+    .filter(key => event.getModifierState(key))
+    .concat(keys)
+
+  const key = modifiers.join('+').toLowerCase()
+
+  fire(handlers[key], event)
+
+  regexHandlers.forEach(listener => {
+    if (listener.re && listener.re.test && listener.re.test(key))
+      fire(listener, event)
+  })
+}
+
+function handleKeyup(event) {
+  const index = keys.indexOf(event.key)
+  if (index > -1) keys.splice(index, 1)
+}
diff --git a/packages/plugin-keyboard/src/register-presentation.vue b/packages/plugin-keyboard/src/register-presentation.vue
new file mode 100644
index 0000000..2193ccc
--- /dev/null
+++ b/packages/plugin-keyboard/src/register-presentation.vue
@@ -0,0 +1,117 @@
+<script>
+import { on, addScope } from './keyboard'
+import { presentationMethods } from '@vue-slides/state'
+export default {
+  methods: {
+    ...presentationMethods,
+    handleMessage({ data }) {
+      if (data === 'next') this.next()
+      else if (data === 'previous') this.previous()
+      else if (typeof data === 'number') this.goto(data)
+    }
+  },
+  mounted() {
+    addScope('presentation')
+    ;['ArrowLeft', 'ArrowUp'].map(key =>
+      on({
+        scope: 'presentation',
+        key,
+        shortcut: key,
+        desc: 'Goto previous slide',
+        handler: event => {
+          if (/input|textarea|a|button|select/i.test(event.target.tagName))
+            return
+
+          if (this.connection) this.connection.send('previous')
+          this.previous()
+        }
+      })
+    )
+    ;['ArrowRight', 'ArrowDown', 'Space'].map(key =>
+      on({
+        scope: 'presentation',
+        key: key === 'Space' ? ' ' : key,
+        shortcut: key,
+        desc: 'Goto next slide',
+        handler: event => {
+          if (/input|textarea|a|button|select/i.test(event.target.tagName))
+            return
+
+          if (this.connection) this.connection.send('next')
+          this.next()
+        }
+      })
+    )
+    on({
+      key: 'p',
+      shortcut: 'P',
+      desc: 'Toggle presenter view',
+      scope: 'presentation',
+      handler: async () => {
+        if (this.$route.name === 'presenter') {
+          this.$router.push({ name: 'presentation' })
+          return
+        }
+
+        this.$router.push({ name: 'presenter' })
+      }
+    })
+    on({
+      key: 'z',
+      shortcut: 'Z',
+      desc: 'Start presentation',
+      scope: 'presentation',
+      handler: async () => {
+        if (this.connection) {
+          this.$router.push({ name: 'presentation' })
+
+          return this.connection.terminate()
+        }
+
+        if (window.PresentationRequest) {
+          const request = (navigator.presentation.defaultRequest = new window.PresentationRequest(
+            ['/', '/presenter']
+          ))
+          // try {
+          //   const availability = await request.getAvailability()
+
+          //   if (!availability.value) alert('Not available')
+          // } catch (e) {
+          //   // --
+          // }
+          const connection = (this.connection = await request.start())
+
+          connection.addEventListener('message', this.handleMessage)
+
+          this.$router.push({ name: 'presenter' })
+        } else {
+          alert(
+            'Your browser does not support screen casting. Please use latest version of Chrome.'
+          )
+        }
+      }
+    })
+
+    if (
+      (((navigator || {}).presentation || {}).receiver || {}).connectionList
+    ) {
+      navigator.presentation.receiver.connectionList.then(list => {
+        list.connections.map(connection => {
+          this.connection = connection
+          connection.addEventListener('message', this.handleMessage)
+        })
+        list.addEventListener('connectionavailable', e => {
+          this.connection = e.connection
+          e.connection.addEventListener('message', this.handleMessage)
+        })
+      })
+    }
+  },
+  beforeDestroy() {
+    if (this.connection) this.connection.terminate()
+  },
+  render() {
+    return null
+  }
+}
+</script>
diff --git a/packages/plugin-progress/.npmignore b/packages/plugin-progress/.npmignore
new file mode 100644
index 0000000..22923f4
--- /dev/null
+++ b/packages/plugin-progress/.npmignore
@@ -0,0 +1 @@
+*.unit.js
diff --git a/packages/plugin-progress/README.md b/packages/plugin-progress/README.md
new file mode 100644
index 0000000..8b44ae0
--- /dev/null
+++ b/packages/plugin-progress/README.md
@@ -0,0 +1 @@
+# @vue-slides/plugin-progress
\ No newline at end of file
diff --git a/packages/plugin-progress/package.json b/packages/plugin-progress/package.json
new file mode 100644
index 0000000..36c71f4
--- /dev/null
+++ b/packages/plugin-progress/package.json
@@ -0,0 +1,26 @@
+{
+  "name": "@vue-slides/plugin-progress",
+  "version": "2.0.0-alpha.0",
+  "description": "@vue-slides/plugin-progress",
+  "main": "src/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/vue-slides/vue-slides.git"
+  },
+  "keywords": [
+    "vue-slides",
+    "vue"
+  ],
+  "author": "Rahul Kadyan",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/vue-slides/vue-slides/issues"
+  },
+  "homepage": "https://github.com/vue-slides/vue-slides/tree/dev/packages/plugin-progress#readme",
+  "dependencies": {
+    "@vue-slides/state": "^2.0.0-alpha.0"
+  },
+  "publishConfig": {
+    "access": "public"
+  }
+}
diff --git a/packages/plugin-progress/shrinkwrap.yaml b/packages/plugin-progress/shrinkwrap.yaml
new file mode 100644
index 0000000..89d6f5e
--- /dev/null
+++ b/packages/plugin-progress/shrinkwrap.yaml
@@ -0,0 +1,5 @@
+dependencies:
+  '@vue-slides/state': 'link:../state'
+shrinkwrapVersion: 5
+specifiers:
+  '@vue-slides/state': ^2.0.0-alpha.0
diff --git a/packages/plugin-progress/src/index.js b/packages/plugin-progress/src/index.js
new file mode 100644
index 0000000..1e809a3
--- /dev/null
+++ b/packages/plugin-progress/src/index.js
@@ -0,0 +1,8 @@
+export default {
+  id: '@vue-slides/plugin-progress',
+  name: 'Progress',
+  entry: {
+    presentation: () => import('./progress-bar.vue'),
+    presenter: () => import('./time-tracker.vue')
+  }
+}
diff --git a/packages/plugin-progress/src/progress-bar.vue b/packages/plugin-progress/src/progress-bar.vue
new file mode 100644
index 0000000..ec372eb
--- /dev/null
+++ b/packages/plugin-progress/src/progress-bar.vue
@@ -0,0 +1,121 @@
+<script>
+import { presentationComputed } from '@vue-slides/state'
+
+export default {
+  props: {
+    position: {
+      type: String,
+      default: 'bottom-right'
+    },
+    title: {
+      type: String,
+      required: true,
+      description: 'Title of the presentation'
+    },
+    event: {
+      type: String,
+      description: 'Name of the event'
+    },
+    author: {
+      type: Object,
+      required: true,
+      description: 'Author Information',
+      shape: {
+        name: {
+          type: String,
+          required: true
+        },
+        website: {
+          type: String,
+          required: true
+        }
+      }
+    }
+  },
+
+  computed: {
+    ...presentationComputed,
+    completed() {
+      return (
+        ((this.activeSlideIndex + 1) / Math.max(1, this.numberOfSlides)) * 100
+      )
+    }
+  }
+}
+</script>
+
+<template>
+  <div v-if="activeSlideIndex < numberOfSlides" :class="[$style['progress-bar'], $style[position] ]">
+    {{ activeSlideIndex + 1 }} / {{ numberOfSlides }} | {{ title }} <template v-if="event">| {{ event }} </template>|
+    <a :href="author.website" target="_blank"> {{ author.name }}</a>
+    <div :class="$style.progress">
+      <div :class="$style.track" :style="{ width: completed + '%' }" />
+    </div>
+  </div>
+</template>
+
+<style>
+#vue-slides-presentation {
+  --progress-widget-offset: 2kem;
+  --progress-widget-offset-x: var(--progress-widget-offset);
+  --progress-widget-offset-y: var(--progress-widget-offset);
+
+  --progress-widget-text-color: var(--text-color-primary);
+  --progress-widget-font-family: var(--text-font-primary);
+  --progress-widget-font-size: 1.25kem;
+
+  --progress-widget-track-size: var(--global-progress-widget-track-size, 0.125kem);
+  --progress-widget-foreground: var(--global-progress-widget-foreground, var(--text-color-primary));
+  --progress-widget-background: var(--global-progress-widget-background, var(--text-color-primary-disabled));
+}
+</style>
+
+<style module>
+.top-left {
+  top: var(--progress-widget-offset-y);
+  left: var(--progress-widget-offset-x);
+}
+.top-right {
+  top: var(--progress-widget-offset-y);
+  right: var(--progress-widget-offset-x);
+}
+.bottom-left {
+  bottom: var(--progress-widget-offset-y);
+  left: var(--progress-widget-offset-x);
+}
+.bottom-right {
+  bottom: var(--progress-widget-offset-y);
+  right: var(--progress-widget-offset-x);
+}
+
+.progress-bar {
+  color: var(--progress-widget-text-color);
+  font-size: var(--progress-widget-font-size);
+  font-family: var(--progress-widget-font-family);
+  line-height: 1.5;
+  padding: 0;
+  position: absolute;
+}
+
+.progress-bar a {
+  color: var(--progress-widget-text-color);
+  text-decoration: none;
+}
+
+.progress {
+  display: block;
+  width: 100%;
+  height: var(--progress-widget-track-size);
+  border-radius: var(--progress-widget-track-size);
+  background: var(--progress-widget-background);
+  position: relative;
+}
+
+.progress .track {
+  display: block;
+  height: var(--progress-widget-track-size);
+  background: var(--progress-widget-foreground);
+  position: absolute;
+  border-radius: var(--progress-widget-track-size);
+}
+</style>
diff --git a/packages/plugin-progress/src/time-tracker.vue b/packages/plugin-progress/src/time-tracker.vue
new file mode 100644
index 0000000..92b25a3
--- /dev/null
+++ b/packages/plugin-progress/src/time-tracker.vue
@@ -0,0 +1,7 @@
+<script>
+export default {}
+</script>
+
+<template>
+  <div />
+</template>
diff --git a/packages/plugin-touch/.npmignore b/packages/plugin-touch/.npmignore
new file mode 100644
index 0000000..22923f4
--- /dev/null
+++ b/packages/plugin-touch/.npmignore
@@ -0,0 +1 @@
+*.unit.js
diff --git a/packages/plugin-touch/README.md b/packages/plugin-touch/README.md
new file mode 100644
index 0000000..92d4e07
--- /dev/null
+++ b/packages/plugin-touch/README.md
@@ -0,0 +1 @@
+# @vue-slides/plugin-touch
\ No newline at end of file
diff --git a/packages/plugin-touch/package.json b/packages/plugin-touch/package.json
new file mode 100644
index 0000000..73dac60
--- /dev/null
+++ b/packages/plugin-touch/package.json
@@ -0,0 +1,28 @@
+{
+  "name": "@vue-slides/plugin-touch",
+  "version": "2.0.0-alpha.1",
+  "description": "@vue-slides/plugin-touch",
+  "main": "src/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/vue-slides/vue-slides.git"
+  },
+  "keywords": [
+    "vue-slides",
+    "vue"
+  ],
+  "author": "Rahul Kadyan",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/vue-slides/vue-slides/issues"
+  },
+  "homepage": "https://github.com/vue-slides/vue-slides/tree/dev/packages/plugin-touch#readme",
+  "dependencies": {
+    "@vue-slides/state": "^2.0.0-alpha.0",
+    "hammerjs": "^2.0.8",
+    "screenfull": "^3.3.3"
+  },
+  "publishConfig": {
+    "access": "public"
+  }
+}
diff --git a/packages/plugin-touch/shrinkwrap.yaml b/packages/plugin-touch/shrinkwrap.yaml
new file mode 100644
index 0000000..b8b5e06
--- /dev/null
+++ b/packages/plugin-touch/shrinkwrap.yaml
@@ -0,0 +1,22 @@
+dependencies:
+  '@vue-slides/state': 'link:../state'
+  hammerjs: 2.0.8
+  screenfull: 3.3.3
+packages:
+  /hammerjs/2.0.8:
+    dev: false
+    engines:
+      node: '>=0.8.0'
+    resolution:
+      integrity: sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=
+  /screenfull/3.3.3:
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-DzYUuXr+OV2BDvYXaYzlYgJd4WXZZ2CW5NFC7Kw6TUCpzXJAx4MwlVD6CH+Mu6fi8rfAQIQfqdFZ4jtDsEkWig==
+shrinkwrapVersion: 5
+specifiers:
+  '@vue-slides/state': ^2.0.0-alpha.0
+  hammerjs: ^2.0.8
+  screenfull: ^3.3.3
diff --git a/packages/plugin-touch/src/index.js b/packages/plugin-touch/src/index.js
new file mode 100644
index 0000000..8398225
--- /dev/null
+++ b/packages/plugin-touch/src/index.js
@@ -0,0 +1,7 @@
+export default {
+  id: '@vue-slides/plugin-touch',
+  name: 'Touch',
+  entry: {
+    presentation: () => import('./touch-controller.vue')
+  }
+}
diff --git a/packages/plugin-touch/src/touch-controller.vue b/packages/plugin-touch/src/touch-controller.vue
new file mode 100644
index 0000000..6c0a5e8
--- /dev/null
+++ b/packages/plugin-touch/src/touch-controller.vue
@@ -0,0 +1,44 @@
+<script>
+import screenfull from 'screenfull'
+import { presentationMethods } from '@vue-slides/state'
+
+export default {
+  mounted() {
+    if ('ontouchstart' in document.documentElement) {
+      this.hammer()
+    }
+
+    window.addEventListener('orientationchange', async () => {
+      if (screenfull.enabled) {
+        screenfull.request()
+      }
+    })
+  },
+
+  methods: {
+    ...presentationMethods,
+    async hammer() {
+      const { default: Hammer } = await import('hammerjs')
+      const el = document.getElementById('vue-slides')
+      const hammer = new Hammer(el)
+
+      hammer.on('tap', event => {
+        if (
+          !/input|select|button|a|checkbox|textarea/.test(event.target.tagType)
+        ) {
+          event.center.x < el.offsetWidth / 2 ? this.previous() : this.next()
+        }
+      })
+
+      hammer.on('swipeleft', () => this.next())
+      hammer.on('swiperight', () => this.previous())
+
+      this.$on('hook:beforeDestroy', () => hammer.destroy())
+    }
+  },
+
+  render() {
+    return null
+  }
+}
+</script>
diff --git a/packages/postcss-kem-unit/.npmignore b/packages/postcss-kem-unit/.npmignore
new file mode 100644
index 0000000..22923f4
--- /dev/null
+++ b/packages/postcss-kem-unit/.npmignore
@@ -0,0 +1 @@
+*.unit.js
diff --git a/packages/postcss-kem-unit/README.md b/packages/postcss-kem-unit/README.md
new file mode 100644
index 0000000..3faaa9f
--- /dev/null
+++ b/packages/postcss-kem-unit/README.md
@@ -0,0 +1 @@
+# @vue-slides/postcss-kem-unit
\ No newline at end of file
diff --git a/packages/postcss-kem-unit/package.json b/packages/postcss-kem-unit/package.json
new file mode 100644
index 0000000..3f22564
--- /dev/null
+++ b/packages/postcss-kem-unit/package.json
@@ -0,0 +1,26 @@
+{
+  "name": "@vue-slides/postcss-kem-unit",
+  "version": "2.0.0-alpha.0",
+  "description": "@vue-slides/postcss-kem-unit",
+  "main": "src/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/vue-slides/vue-slides.git"
+  },
+  "keywords": [
+    "vue-slides",
+    "vue"
+  ],
+  "author": "Rahul Kadyan",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/vue-slides/vue-slides/issues"
+  },
+  "homepage": "https://github.com/vue-slides/vue-slides/tree/dev/packages/postcss-kem-unit#readme",
+  "dependencies": {
+    "postcss": "^7.0.5"
+  },
+  "publishConfig": {
+    "access": "public"
+  }
+}
diff --git a/packages/postcss-kem-unit/shrinkwrap.yaml b/packages/postcss-kem-unit/shrinkwrap.yaml
new file mode 100644
index 0000000..7c3ba84
--- /dev/null
+++ b/packages/postcss-kem-unit/shrinkwrap.yaml
@@ -0,0 +1,78 @@
+dependencies:
+  postcss: 7.0.14
+packages:
+  /ansi-styles/3.2.1:
+    dependencies:
+      color-convert: 1.9.3
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+  /chalk/2.4.2:
+    dependencies:
+      ansi-styles: 3.2.1
+      escape-string-regexp: 1.0.5
+      supports-color: 5.5.0
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+  /color-convert/1.9.3:
+    dependencies:
+      color-name: 1.1.3
+    dev: false
+    resolution:
+      integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+  /color-name/1.1.3:
+    dev: false
+    resolution:
+      integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+  /escape-string-regexp/1.0.5:
+    dev: false
+    engines:
+      node: '>=0.8.0'
+    resolution:
+      integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+  /has-flag/3.0.0:
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+  /postcss/7.0.14:
+    dependencies:
+      chalk: 2.4.2
+      source-map: 0.6.1
+      supports-color: 6.1.0
+    dev: false
+    engines:
+      node: '>=6.0.0'
+    resolution:
+      integrity: sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==
+  /source-map/0.6.1:
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+  /supports-color/5.5.0:
+    dependencies:
+      has-flag: 3.0.0
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+  /supports-color/6.1.0:
+    dependencies:
+      has-flag: 3.0.0
+    dev: false
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+shrinkwrapVersion: 5
+specifiers:
+  postcss: ^7.0.5
diff --git a/packages/postcss-kem-unit/src/index.js b/packages/postcss-kem-unit/src/index.js
new file mode 100644
index 0000000..6e89ecc
--- /dev/null
+++ b/packages/postcss-kem-unit/src/index.js
@@ -0,0 +1,14 @@
+const postcss = require('postcss')
+const RE = /"[^"]+"|'[^']'|url\([^)]\)|(-?\d*\.?\d+)kem/g
+
+module.exports = postcss.plugin('@vue-slides/postcss-kem-unit', () => {
+  return function kem(css) {
+    css.walkDecls(decl => {
+      decl.value = decl.value.replace(RE, (all, kem) => {
+        if (kem !== undefined) return `calc(${kem} * var(--kem))`
+
+        return all
+      })
+    })
+  }
+})
diff --git a/packages/state/.npmignore b/packages/state/.npmignore
new file mode 100644
index 0000000..22923f4
--- /dev/null
+++ b/packages/state/.npmignore
@@ -0,0 +1 @@
+*.unit.js
diff --git a/packages/state/README.md b/packages/state/README.md
new file mode 100644
index 0000000..55f9874
--- /dev/null
+++ b/packages/state/README.md
@@ -0,0 +1 @@
+# @vue-slides/state
\ No newline at end of file
diff --git a/packages/state/package.json b/packages/state/package.json
new file mode 100644
index 0000000..630aa78
--- /dev/null
+++ b/packages/state/package.json
@@ -0,0 +1,24 @@
+{
+  "name": "@vue-slides/state",
+  "version": "2.0.0-alpha.0",
+  "description": "@vue-slides/state",
+  "main": "src/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/vue-slides/vue-slides.git"
+  },
+  "keywords": [
+    "vue-slides",
+    "vue"
+  ],
+  "author": "Rahul Kadyan",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/vue-slides/vue-slides/issues"
+  },
+  "homepage": "https://github.com/vue-slides/vue-slides/tree/dev/packages/state#readme",
+  "dependencies": {
+    "vue": "^2.5.17",
+    "vuex": "^3.0.1"
+  }
+}
diff --git a/packages/state/shrinkwrap.yaml b/packages/state/shrinkwrap.yaml
new file mode 100644
index 0000000..052e771
--- /dev/null
+++ b/packages/state/shrinkwrap.yaml
@@ -0,0 +1,16 @@
+dependencies:
+  vue: 2.6.8
+  vuex: 3.1.0
+packages:
+  /vue/2.6.8:
+    dev: false
+    resolution:
+      integrity: sha512-+vp9lEC2Kt3yom673pzg1J7T1NVGuGzO9j8Wxno+rQN2WYVBX2pyo/RGQ3fXCLh2Pk76Skw/laAPCuBuEQ4diw==
+  /vuex/3.1.0:
+    dev: false
+    resolution:
+      integrity: sha512-mdHeHT/7u4BncpUZMlxNaIdcN/HIt1GsGG5LKByArvYG/v6DvHcOxvDCts+7SRdCoIRGllK8IMZvQtQXLppDYg==
+shrinkwrapVersion: 5
+specifiers:
+  vue: ^2.5.17
+  vuex: ^3.0.1
diff --git a/packages/state/src/index.js b/packages/state/src/index.js
new file mode 100644
index 0000000..e73a218
--- /dev/null
+++ b/packages/state/src/index.js
@@ -0,0 +1,104 @@
+import { mapGetters, mapState, mapActions, mapMutations } from 'vuex'
+
+export const ACTIVATE_PLUGIN = 'ADD'
+export const CONFIGURE_PLUGIN = 'CONF'
+
+// HELPERS ~ COMPUTED
+
+/** @type {ComputedPresentation} */
+// @ts-ignore
+export const presentationComputed = {
+  ...mapGetters('presentation', [
+    'activeSlide',
+    'previousSlide',
+    'numberOfSlides'
+  ]),
+  ...mapState('presentation', ['activeSlideIndex', 'previousSlideIndex'])
+}
+
+/** @type {MethodsPresentation} */
+// @ts-ignore
+export const presentationMethods = mapActions('presentation', [
+  'next',
+  'previous',
+  'goto'
+])
+
+/** @type {ComputedSlides} */
+// @ts-ignore
+export const slidesComputed = mapState('presentation', ['slides'])
+
+/** @type {MethodsSlides} */
+// @ts-ignore
+export const slidesMethods = mapActions('presentation', [
+  'prepareSlides',
+  'updateSteps'
+])
+
+/** @type {ComputedPlugins} */
+// @ts-ignore
+export const pluginsComputed = {
+  ...mapState('plugin', { activePlugins: 'active' }),
+  ...mapGetters('plugin', ['findPluginOptions'])
+}
+
+/** @type {MethodsPlugins} */
+// @ts-ignore
+export const pluginsMethods = mapMutations('plugin', {
+  activatePlugin: ACTIVATE_PLUGIN,
+  configurePlugin: CONFIGURE_PLUGIN
+})
+
+// STATE ~ TYPES
+
+/**
+ * @typedef {object} Slide
+ * @property {number} steps
+ * @property {{ vnode: VNode, component: Component }} meta
+ */
+
+// COMPUTED ~ TYPES
+
+/**
+ * @typedef {object} ComputedPresentation
+ * @property {function(): Slide} activeSlide
+ * @property {function(): Slide} previousSlide
+ * @property {function(): number} activeSlideIndex
+ * @property {function(): number} previousSlideIndex
+ * @property {function(): number} numberOfSlides
+ */
+
+/**
+ * @typedef {object} ComputedSlides
+ * @property {function(): Slide[]} slides
+ */
+
+/**
+ * @typedef {object} ComputedPlugins
+ * @property {function(): string[]} activePlugins
+ * @property {function(name: string): any} findPluginOptions
+ */
+
+// METHODS ~ TYPES
+
+/**
+ * @typedef {object} MethodsPresentation
+ * @property {function(): Promise<Slide>} next
+ * @property {function(): Promise<Slide>} previous
+ * @property {{(index: number): Promise<Slide>}} goto
+ */
+
+/**
+ * @typedef {object} MethodsSlides
+ * @property {{(vnodes: Array<VNode>): Promise<Slide[]>}} prepareSlides
+ * @property {{(payload: { index: number, steps: number }): Promise<void>}} updateSteps
+ */
+
+/**
+ * @typedef {object} MethodsPlugins
+ * @property {{(name: string): Promise<void>}} activatePlugin
+ * @property {{({ name: string }): Promise<void>}} configurePlugin
+ */
+
+/** @typedef {import('vue/types').VNode} VNode */
+/** @typedef {import('vue/types').Component} Component */
diff --git a/packages/theme-base/.npmignore b/packages/theme-base/.npmignore
new file mode 100644
index 0000000..22923f4
--- /dev/null
+++ b/packages/theme-base/.npmignore
@@ -0,0 +1 @@
+*.unit.js
diff --git a/packages/theme-base/README.md b/packages/theme-base/README.md
new file mode 100644
index 0000000..b64e0e8
--- /dev/null
+++ b/packages/theme-base/README.md
@@ -0,0 +1 @@
+# @vue-slides/theme-black
\ No newline at end of file
diff --git a/packages/theme-base/package.json b/packages/theme-base/package.json
new file mode 100644
index 0000000..617c138
--- /dev/null
+++ b/packages/theme-base/package.json
@@ -0,0 +1,20 @@
+{
+  "name": "@vue-slides/theme-base",
+  "version": "2.0.0-alpha.0",
+  "description": "@vue-slides/theme-base",
+  "main": "src/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/vue-slides/vue-slides.git"
+  },
+  "keywords": [
+    "vue-slides",
+    "vue"
+  ],
+  "author": "Rahul Kadyan",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/vue-slides/vue-slides/issues"
+  },
+  "homepage": "https://github.com/vue-slides/vue-slides/tree/dev/packages/theme-base#readme"
+}
diff --git a/packages/theme-base/src/base.css b/packages/theme-base/src/base.css
new file mode 100644
index 0000000..7be356b
--- /dev/null
+++ b/packages/theme-base/src/base.css
@@ -0,0 +1,53 @@
+#vue-slides {
+  /* Tier 0 */
+  --color: #fff;
+  --text-color: rgba(0, 0, 0, .87);
+  --text-color-disabled: rgba(0, 0, 0, .3);
+  
+  --font-family-sans-serif: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
+  Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',
+  'Segoe UI Symbol';
+
+  --color-primary: var(--color);
+
+  --text-color-primary: var(--text-color);
+  --text-color-primary-disabled: var(--text-color-disabled);
+  --text-font-primary: var(--font-family-sans-serif);
+}
+
+#vue-slides-presentation {
+  /* Tier 1 (scope: presentation) */
+}
+
+#vue-slides-presenter {
+  /* Tier 1 (scope: presenter) */
+}
+
+#vue-slides-overview {
+  /* Tier 1 (scope: overview) */
+}
+
+.vue-slides-slide {
+  font-family: var(--text-font-primary);
+  
+  /* Tier 2 */
+  --slide--Background: var(--color-primary);
+
+  --slide--body--Padding: 3.854167kem 6.770834kem; /* 74pt 130pt */
+  
+  --slide--content--Margin: 0;
+  --slide--content--Color: var(--text-color-primary);
+  --slide--content--FontSize: 2kem;
+
+  --slide--title--Color: var(--text-color-primary);
+  --slide--title--FontFamily: var(--text-font-primary);
+  --slide--title--FontSize: 5.833333kem; /* 112pt */
+  --slide--title--FontWeight: 500;
+  --slide--title--TextAlign: center;
+  
+  --slide--subtitle--Color: var(--text-color-primary);
+  --slide--subtitle--FontFamily: var(--text-font-primary);
+  --slide--subtitle--FontSize: 2.8125kem; /* 54pt */
+  --slide--subtitle--FontWeight: 400;
+  --slide--subtitle--TextAlign: center;
+}
diff --git a/packages/theme-base/src/index.js b/packages/theme-base/src/index.js
new file mode 100644
index 0000000..a66e32d
--- /dev/null
+++ b/packages/theme-base/src/index.js
@@ -0,0 +1,20 @@
+import './base.css'
+
+export default {
+  slides: {
+    Slide: () => import('./slides/blank.vue'),
+    BlankSlide: () => import('./slides/blank.vue'),
+    TitleSlide: () => import('./slides/title-center.vue'),
+    TitleBodySlide: () => import('./slides/title-top.vue'),
+    TitleSubtitleSlide: () => import('./slides/title-subtitle.vue'),
+    TitleBulletsSlide: () => import('./slides/title-bullets.vue'),
+    TitleBulletsPhotoSlide: () => import('./slides/title-bullets-photo.vue'),
+    PhotoCaptionSlide: () => import('./slides/photo-caption.vue'),
+    PhotoSlide: () => import('./slides/photo.vue'),
+    Photo2UpSlide: () => import('./slides/photo-2up.vue'),
+    Photo3UpSlide: () => import('./slides/photo-3up.vue'),
+    PhotoHorizontalSlide: () => import('./slides/photo-horizontal.vue'),
+    PhotoVerticalSlide: () => import('./slides/photo-vertical.vue'),
+    QuoteSlide: () => import('./slides/quote.vue')
+  }
+}
diff --git a/packages/theme-base/src/slides/blank.vue b/packages/theme-base/src/slides/blank.vue
new file mode 100644
index 0000000..0d616cc
--- /dev/null
+++ b/packages/theme-base/src/slides/blank.vue
@@ -0,0 +1,31 @@
+<script>
+export default {
+  inheritAttrs: false
+}
+</script>
+
+<template>
+  <div class="vue-slides-slide" :class="$style.wrapper">
+    <div :class="$style.slide" v-bind="$attrs" v-on="$listeners">
+      <slot />
+    </div>
+  </div>
+</template>
+
+<style>
+.vue-slides-slide {
+  --blank-slide--Background: var(--slide--Background);
+}
+</style>
+
+<style module>
+.wrapper {
+  width: 100%;
+  height: 100%;
+  overflow: hidden;
+
+  background: var(--blank-slide--Background);
+}
+.slide {
+}
+</style>
diff --git a/packages/theme-base/src/slides/photo-2up.vue b/packages/theme-base/src/slides/photo-2up.vue
new file mode 100644
index 0000000..7da11bb
--- /dev/null
+++ b/packages/theme-base/src/slides/photo-2up.vue
@@ -0,0 +1,54 @@
+<script>
+export default {
+  props: {
+    left: String,
+    right: String
+  }
+}
+</script>
+
+<template>
+  <BlankSlide :class="$style.body">
+    <div :class="$style.content">
+      <img :src="left" :class="$style.photo" />
+      <img :src="right" :class="$style.photo" />
+    </div>
+  </BlankSlide>
+</template>
+
+<style>
+.vue-slides-slide {
+  /* Tier 3 */
+  --photo-2up-slide--body--Padding: var(--slide--body--Padding);
+  
+  --photo-2up-slide--content--Margin: 2.96875kem 0.46875kem; /* 57pt 9pt */
+
+  --photo-2up-slide--photo--Height: 42.447917kem; /* 815pt */
+  --photo-2up-slide--photo--Width: 41.510417kem; /* 797pt */
+  --photo-2up-slide--photo-gag--MarginLeft: 2.604167kem; /* 50pt */
+}
+</style>
+
+<style module>
+.body {
+  padding: var(--photo-2up-slide--body--Padding);
+}
+
+.content {
+  display: flex;
+  flex-direction: row;
+  margin: var(--photo-2up-slide--content--Margin);
+}
+
+.photo {
+  margin: 0 auto;
+  display: block;
+  object-fit: cover;
+  height: var(--photo-2up-slide--photo--Height);
+  width: var(--photo-2up-slide--photo--Width);
+}
+
+.photo + .photo {
+  margin-left: var(--photo-2up-slide--photo-gag--MarginLeft);
+}
+</style>
diff --git a/packages/theme-base/src/slides/photo-3up.vue b/packages/theme-base/src/slides/photo-3up.vue
new file mode 100644
index 0000000..2e32d9e
--- /dev/null
+++ b/packages/theme-base/src/slides/photo-3up.vue
@@ -0,0 +1,70 @@
+<script>
+export default {
+  props: {
+    first: String,
+    second: String,
+    third: String
+  }
+}
+</script>
+
+<template>
+  <BlankSlide :class="$style.body">
+    <div :class="$style.content">
+      <img :src="first" :class="$style.photo" />
+      <img :src="second" :class="$style.photo" />
+      <img :src="third" :class="$style.photo" />
+    </div>
+  </BlankSlide>
+</template>
+
+<style>
+.vue-slides-slide {
+  /* Tier 3 */
+  --photo-3up-slide--body--Padding: var(--slide--body--Padding);
+  
+  --photo-3up-slide--content--Margin: 2.96875kem 0.46875kem; /* 57pt 9pt */
+  --photo-3up-slide--content--Height: 42.760417kem; /* 821pt */
+
+  --photo-3up-slide--photo--Height: 100%;
+  --photo-3up-slide--photo--Width: 41.510417kem; /* 797pt */
+  --photo-3up-slide--photo-gag--GridGap: 2.604167kem; /* 50pt */
+}
+</style>
+
+<style module>
+.body {
+  padding: var(--photo-3up-slide--body--Padding);
+}
+
+.content {
+  margin: var(--photo-3up-slide--content--Margin);
+  height: var(--photo-3up-slide--content--Height);
+  width: 100%;
+  display: grid;
+  grid-template-columns: 1fr 1fr;
+  grid-template-rows: 1fr 1fr;
+  grid-template-areas: "A B" "A C";
+  grid-gap: var(--photo-3up-slide--photo-gag--GridGap);
+}
+
+.photo {
+  margin: 0 auto;
+  display: block;
+  object-fit: cover;
+  height: var(--photo-3up-slide--photo--Height);
+  width: var(--photo-3up-slide--photo--Width);
+}
+
+.photo:nth-child(1) {
+  grid-area: A;
+}
+
+.photo:nth-child(2) {
+  grid-area: B;
+}
+
+.photo:nth-child(3) {
+  grid-area: C;
+}
+</style>
diff --git a/packages/theme-base/src/slides/photo-caption.vue b/packages/theme-base/src/slides/photo-caption.vue
new file mode 100644
index 0000000..3db38a0
--- /dev/null
+++ b/packages/theme-base/src/slides/photo-caption.vue
@@ -0,0 +1,91 @@
+<script>
+export default {
+  props: {
+    photo: String,
+    caption: String,
+  }
+}
+</script>
+
+<template>
+  <BlankSlide :class="$style.body">
+    <div :class="$style.content">
+      <img :src="photo" :class="$style.photo" />
+      <p :class="$style.caption">
+        <FitText :max=1>
+          <slot name="caption">
+            {{ caption }}
+          </slot>
+        </FitText>
+      </p>
+    </div>
+  </BlankSlide>
+</template>
+
+<style>
+.vue-slides-slide {
+  /* Tier 3 */
+  --photo-caption-slide--body--Padding: var(--slide--body--Padding);
+  
+  --photo-caption-slide--content--Margin: 4.375kem 0.9375kem; /* 84pt 18pt */
+
+  --photo-caption-slide--photo--Height: 32.760417kem; /* 629pt */
+  --photo-caption-slide--photo--Width: 84.583333kem; /* 1624pt */
+  
+  --photo-caption-slide--caption--Margin: 0.520834kem 0 0 0; /* 10pt 0 0 0 */
+  --photo-caption-slide--caption--AlignItems: flex-start;
+  --photo-caption-slide--caption--JustifyContent: flex-end;
+  --photo-caption-slide--caption--Color: var(--slide--title--Color);
+  --photo-caption-slide--caption--FontFamily: var(--slide--title--FontFamily);
+  --photo-caption-slide--caption--FontSize: 1.666667kem; /* 32pt */
+  --photo-caption-slide--caption--FontWeight: var(--slide--title--FontWeight);
+  --photo-caption-slide--caption--TextAlign: left;
+  --photo-caption-slide--caption--Border: none;
+  --photo-caption-slide--caption--Height: initial;
+  --photo-caption-slide--caption--Background: transparent;
+}
+</style>
+
+<style module>
+.body {
+  padding: var(--photo-caption-slide--body--Padding);
+}
+
+.content {
+  margin: var(--photo-caption-slide--content--Margin);
+}
+
+.photo {
+  margin: 0 auto;
+  display: block;
+  object-fit: cover;
+  height: var(--photo-caption-slide--photo--Height);
+  width: var(--photo-caption-slide--photo--Width);
+}
+
+.caption {
+  display: flex;
+  overflow: hidden;
+  flex-direction: column;
+  margin: var(--photo-caption-slide--caption--Margin);
+
+  /* Position */
+  align-items: var(--photo-caption-slide--caption--AlignItems);
+  justify-content: var(--photo-caption-slide--caption--JustifyContent);
+
+  /* Text */
+  color: var(--photo-caption-slide--caption--Color);
+  font-size: var(--photo-caption-slide--caption--FontSize);
+  font-style: italic;
+  font-family:  var(--photo-caption-slide--caption--FontFamily);
+  font-weight:  var(--photo-caption-slide--caption--FontWeight);
+  text-align: var(--photo-caption-slide--caption--TextAlign);
+
+  /* Shape */
+  border: var(--photo-caption-slide--caption--Border);
+  height: var(--photo-caption-slide--caption--Height);
+
+  /* Surface */
+  background: var(--photo-caption-slide--caption--Background);
+}
+</style>
\ No newline at end of file
diff --git a/packages/theme-base/src/slides/photo-horizontal.vue b/packages/theme-base/src/slides/photo-horizontal.vue
new file mode 100644
index 0000000..95a30b8
--- /dev/null
+++ b/packages/theme-base/src/slides/photo-horizontal.vue
@@ -0,0 +1,134 @@
+<script>
+export default {
+  props: {
+    title: String,
+    subtitle: String,
+    photo: String
+  }
+}
+</script>
+
+<template>
+  <BlankSlide :class="$style.body">
+    <div :class="$style.content">
+      <img :src="photo" :class="$style.photo" />
+      <h1 :class="$style.title">
+        <FitText :max=1>
+          <slot name="title">
+            {{ title }}
+          </slot>
+        </FitText>
+      </h1>
+      <h3 :class="$style.subtitle">
+        <FitText :max=1>
+          <slot name="subtitle">
+            {{ subtitle }}
+          </slot>
+        </FitText>
+      </h3>
+    </div>
+  </BlankSlide>
+</template>
+
+<style>
+.vue-slides-slide {
+  /* Tier 3 */
+  --photo-horizontal-slide--body--Padding: var(--slide--body--Padding);
+  
+  --photo-horizontal-slide--content--Margin: 4.375kem 1.510417kem -2.239583kem; /* 84pt 29pt -43pt */
+
+  --photo-horizontal-slide--photo--Height: 28.385417kem; /* 545pt */
+  --photo-horizontal-slide--photo--Width: 74.322917kem; /* 1427pt */
+  
+  --photo-horizontal-slide--title--Margin: 0.520834kem 0 0 0; /* 10pt 0 0 0 */
+  --photo-horizontal-slide--title--AlignItems: center;
+  --photo-horizontal-slide--title--JustifyContent: flex-end;
+  --photo-horizontal-slide--title--Color: var(--slide--title--Color);
+  --photo-horizontal-slide--title--FontFamily: var(--slide--title--FontFamily);
+  --photo-horizontal-slide--title--FontSize: var(--slide--title--FontSize);
+  --photo-horizontal-slide--title--FontWeight: var(--slide--title--FontWeight);
+  --photo-horizontal-slide--title--TextAlign: var(--slide--title--TextAlign);
+  --photo-horizontal-slide--title--Border: none;
+  --photo-horizontal-slide--title--Height: 9.635417kem; /* 185pt */
+  --photo-horizontal-slide--title--Background: transparent;
+  
+  --photo-horizontal-slide--subtitle--Margin: 0;
+  --photo-horizontal-slide--subtitle--AlignItems: center;
+  --photo-horizontal-slide--subtitle--JustifyContent: flex-start;
+  --photo-horizontal-slide--subtitle--Color: var(--slide--subtitle--Color);
+  --photo-horizontal-slide--subtitle--FontFamily: var(--slide--subtitle--FontFamily);
+  --photo-horizontal-slide--subtitle--FontSize: var(--slide--subtitle--FontSize);
+  --photo-horizontal-slide--subtitle--FontWeight: var(--slide--subtitle--FontWeight);
+  --photo-horizontal-slide--subtitle--TextAlign: var(--slide--subtitle--TextAlign);
+  --photo-horizontal-slide--subtitle--Border: none;
+  --photo-horizontal-slide--subtitle--Height: 7.552083kem; /* 145pt */
+  --photo-horizontal-slide--subtitle--Background: transparent;
+}
+</style>
+
+<style module>
+.body {
+  padding: var(--photo-horizontal-slide--body--Padding);
+}
+
+.content {
+  margin: var(--photo-horizontal-slide--content--Margin);
+}
+
+.photo {
+  margin: 0 auto;
+  display: block;
+  object-fit: cover;
+  height: var(--photo-horizontal-slide--photo--Height);
+  width: var(--photo-horizontal-slide--photo--Width);
+}
+
+.title {
+  display: flex;
+  overflow: hidden;
+  flex-direction: column;
+  margin: var(--photo-horizontal-slide--title--Margin);
+
+  /* Position */
+  align-items: var(--photo-horizontal-slide--title--AlignItems);
+  justify-content: var(--photo-horizontal-slide--title--JustifyContent);
+
+  /* Text */
+  color: var(--photo-horizontal-slide--title--Color);
+  font-size: var(--photo-horizontal-slide--title--FontSize);
+  font-family:  var(--photo-horizontal-slide--title--FontFamily);
+  font-weight:  var(--photo-horizontal-slide--title--FontWeight);
+  text-align: var(--photo-horizontal-slide--title--TextAlign);
+
+  /* Shape */
+  border: var(--photo-horizontal-slide--title--Border);
+  height: var(--photo-horizontal-slide--title--Height);
+
+  /* Surface */
+  background: var(--photo-horizontal-slide--title--Background);
+}
+
+.subtitle {
+  display: flex;
+  margin: 0;
+  overflow: hidden;
+  flex-direction: column;
+
+  /* Position */
+  align-items: var(--photo-horizontal-slide--subtitle--AlignItems);
+  justify-content: var(--photo-horizontal-slide--subtitle--JustifyContent);
+
+  /* Text */
+  color: var(--photo-horizontal-slide--subtitle--Color);
+  font-size: var(--photo-horizontal-slide--subtitle--FontSize);
+  font-family:  var(--photo-horizontal-slide--subtitle--FontFamily);
+  font-weight:  var(--photo-horizontal-slide--subtitle--FontWeight);
+
+  /* Shape */
+  border: var(--photo-horizontal-slide--subtitle--Border);
+  height: var(--photo-horizontal-slide--subtitle--Height);
+
+  /* Surface */
+  background: var(--photo-horizontal-slide--subtitle--Background);
+}
+</style>
\ No newline at end of file
diff --git a/packages/theme-base/src/slides/photo-vertical.vue b/packages/theme-base/src/slides/photo-vertical.vue
new file mode 100644
index 0000000..335e57b
--- /dev/null
+++ b/packages/theme-base/src/slides/photo-vertical.vue
@@ -0,0 +1,165 @@
+<script>
+export default {
+  props: {
+    title: String,
+    subtitle: String,
+    photo: String,
+    alternate: Boolean
+  }
+}
+</script>
+
+<template>
+  <BlankSlide :class="$style.body">
+    <div :class="$style.content">
+      <div :class="[$style.container, alternate && $style.alternate ]">
+        <div :class="$style.wrapper">
+          <h1 :class="$style.title">
+            <FitText :max=1>
+              <slot name="title">
+                {{ title }}
+              </slot>
+            </FitText>
+          </h1>
+          <h3 :class="$style.subtitle">
+            <FitText :max=1>
+              <slot name="subtitle">
+                {{ subtitle }}
+              </slot>
+            </FitText>
+          </h3>
+        </div>
+        <img :src="photo" :class="$style.photo" />
+      </div>
+    </div>
+  </BlankSlide>
+</template>
+
+<style>
+.vue-slides-slide {
+  /* Tier 3 */
+  --photo-vertical-slide--body--Padding: var(--slide--body--Padding);
+  
+  --photo-vertical-slide--content--Margin: 0;
+
+  --photo-vertical-slide--photo--Height: 40.520833kem; /* 778pt */
+  --photo-vertical-slide--photo--Width: 42.8125kem; /* 822pt */
+
+  --photo-vertical-slide--container--Padding: 2.083333kem 0.15625kem; /* 40pt 3pt */
+  
+  --photo-vertical-slide--wrapper--Width: 40.520833kem; /* 778pt */
+  --photo-vertical-slide--wrapper--Margin: 0 4.270833kem 0 0; /* 0 82pt 0 0 */
+  --photo-vertical-slide--wrapper-alternate--Margin: 0 0 0 4.270833kem; /* 0 0 0 82pt */
+  
+  --photo-vertical-slide--title--Margin: 0.520834kem 0 0 0; /* 10pt 0 0 0 */
+  --photo-vertical-slide--title--AlignItems: center;
+  --photo-vertical-slide--title--JustifyContent: flex-end;
+  --photo-vertical-slide--title--Color: var(--slide--title--Color);
+  --photo-vertical-slide--title--FontFamily: var(--slide--title--FontFamily);
+  --photo-vertical-slide--title--FontSize: 4.375kem; /* 84kem */
+  --photo-vertical-slide--title--FontWeight: var(--slide--title--FontWeight);
+  --photo-vertical-slide--title--TextAlign: var(--slide--title--TextAlign);
+  --photo-vertical-slide--title--Border: none;
+  --photo-vertical-slide--title--Height: 9.635417kem; /* 185pt */
+  --photo-vertical-slide--title--Background: transparent;
+  
+  --photo-vertical-slide--subtitle--Margin: 0;
+  --photo-vertical-slide--subtitle--AlignItems: center;
+  --photo-vertical-slide--subtitle--JustifyContent: flex-start;
+  --photo-vertical-slide--subtitle--Color: var(--slide--subtitle--Color);
+  --photo-vertical-slide--subtitle--FontFamily: var(--slide--subtitle--FontFamily);
+  --photo-vertical-slide--subtitle--FontSize: var(--slide--subtitle--FontSize);
+  --photo-vertical-slide--subtitle--FontWeight: var(--slide--subtitle--FontWeight);
+  --photo-vertical-slide--subtitle--TextAlign: var(--slide--subtitle--TextAlign);
+  --photo-vertical-slide--subtitle--Border: none;
+  --photo-vertical-slide--subtitle--Height: 7.552083kem; /* 145pt */
+  --photo-vertical-slide--subtitle--Background: transparent;
+}
+</style>
+
+<style module>
+.body {
+  padding: var(--photo-vertical-slide--body--Padding);
+}
+
+.content {
+  margin: var(--photo-vertical-slide--content--Margin);
+}
+
+.container {
+  display: flex;
+  flex-direction: row;
+  padding: var(--photo-vertical-slide--container--Padding);
+}
+
+.photo {
+  margin: 0 auto;
+  display: block;
+  object-fit: cover;
+  height: var(--photo-vertical-slide--photo--Height);
+  width: var(--photo-vertical-slide--photo--Width);
+}
+
+.wrapper {
+  display: flex;
+  flex-direction: column;
+  margin: var(--photo-vertical-slide--wrapper--Margin);
+  width: var(--photo-vertical-slide--wrapper--Width);
+}
+
+.alternate .wrapper {
+  order: 2;
+  margin: var(--photo-vertical-slide--wrapper-alternate--Margin);
+}
+
+.title {
+  flex: 1;
+  display: flex;
+  overflow: hidden;
+  flex-direction: column;
+  margin: var(--photo-vertical-slide--title--Margin);
+
+  /* Position */
+  align-items: var(--photo-vertical-slide--title--AlignItems);
+  justify-content: var(--photo-vertical-slide--title--JustifyContent);
+
+  /* Text */
+  color: var(--photo-vertical-slide--title--Color);
+  font-size: var(--photo-vertical-slide--title--FontSize);
+  font-family:  var(--photo-vertical-slide--title--FontFamily);
+  font-weight:  var(--photo-vertical-slide--title--FontWeight);
+  text-align: var(--photo-vertical-slide--title--TextAlign);
+
+  /* Shape */
+  border: var(--photo-vertical-slide--title--Border);
+  height: var(--photo-vertical-slide--title--Height);
+
+  /* Surface */
+  background: var(--photo-vertical-slide--title--Background);
+}
+
+.subtitle {
+  flex: 1;
+  margin: 0;
+  display: flex;
+  overflow: hidden;
+  flex-direction: column;
+
+  /* Position */
+  align-items: var(--photo-vertical-slide--subtitle--AlignItems);
+  justify-content: var(--photo-vertical-slide--subtitle--JustifyContent);
+
+  /* Text */
+  color: var(--photo-vertical-slide--subtitle--Color);
+  font-size: var(--photo-vertical-slide--subtitle--FontSize);
+  font-family:  var(--photo-vertical-slide--subtitle--FontFamily);
+  font-weight:  var(--photo-vertical-slide--subtitle--FontWeight);
+
+  /* Shape */
+  border: var(--photo-vertical-slide--subtitle--Border);
+  height: var(--photo-vertical-slide--subtitle--Height);
+
+  /* Surface */
+  background: var(--photo-vertical-slide--subtitle--Background);
+}
+</style>
\ No newline at end of file
diff --git a/packages/theme-base/src/slides/photo.vue b/packages/theme-base/src/slides/photo.vue
new file mode 100644
index 0000000..1eaeac6
--- /dev/null
+++ b/packages/theme-base/src/slides/photo.vue
@@ -0,0 +1,37 @@
+<script>
+export default {
+  props: {
+    photo: String
+  }
+}
+</script>
+
+<template>
+  <BlankSlide :class="$style.body">
+    <img :src="photo" :class="$style.photo" />
+  </BlankSlide>
+</template>
+
+<style>
+.vue-slides-slide {
+  /* Tier 3 */
+  --photo-slide--body--Padding: 0;
+  
+  --photo-slide--photo--Height: 56.25kem; /* 1080pt */
+  --photo-slide--photo--Width: 100%;
+}
+</style>
+
+<style module>
+.body {
+  padding: var(--photo-slide--body--Padding);
+}
+
+.photo {
+  margin: 0 auto;
+  display: block;
+  object-fit: cover;
+  height: var(--photo-slide--photo--Height);
+  width: var(--photo-slide--photo--Width);
+}
+</style>
\ No newline at end of file
diff --git a/packages/theme-base/src/slides/quote.vue b/packages/theme-base/src/slides/quote.vue
new file mode 100644
index 0000000..f71d1ff
--- /dev/null
+++ b/packages/theme-base/src/slides/quote.vue
@@ -0,0 +1,144 @@
+<script>
+export default {
+  props: {
+    author: String,
+    quote: String
+  }
+}
+</script>
+
+<template>
+  <BlankSlide :class="$style.body">
+    <div :class="$style.content">
+      <h1 :class="$style.quote">
+        <FitText :max=1>
+          <q>
+            <slot name="quote">
+              {{ quote }}
+            </slot>
+          </q>
+        </FitText>
+      </h1>
+
+      <div :class="$style.author">
+        <FitText :max=1>
+          <span>
+            <slot name="author">
+              {{ author }}
+            </slot>
+          </span>
+        </FitText>
+      </div>
+    </div>
+  </BlankSlide>
+</template>
+
+<style>
+.vue-slides-slide {
+  /* Tier 3 */
+  --quote-slide--body--Padding: var(--slide--body--Padding);
+  
+  --quote-slide--content--Margin: 14.739583kem 0.520834kem; /* 283pt 10pt */
+  
+  --quote-slide--title--Margin: 0;
+  --quote-slide--title--AlignItems: center;
+  --quote-slide--title--JustifyContent: center;
+  --quote-slide--title--Color: var(--slide--title--Color);
+  --quote-slide--title--FontFamily: var(--slide--title--FontFamily);
+  --quote-slide--title--FontSize: 3.020833kem; /* 58pt */
+  --quote-slide--title--FontWeight: var(--slide--title--FontWeight);
+  --quote-slide--title--TextAlign: var(--slide--title--TextAlign);
+  --quote-slide--title--Border: none;
+  --quote-slide--title--Height: 19.0625kem; /* 366pt */
+  --quote-slide--title--Background: transparent;
+
+  --quote-slide--author--Margin: 0;
+  --quote-slide--author--AlignItems: center;
+  --quote-slide--author--JustifyContent: center;
+  --quote-slide--author--Color: var(--slide--title--Color);
+  --quote-slide--author--FontFamily: cursive;
+  --quote-slide--author--FontSize: 2.291666kem; /* 44pt */
+  --quote-slide--author--FontWeight: var(--slide--title--FontWeight);
+  --quote-slide--author--TextAlign: var(--slide--title--TextAlign);
+  --quote-slide--author--Border: none;
+  --quote-slide--author--Height: auto; /* 366pt */
+  --quote-slide--author--Background: transparent;
+}
+</style>
+
+<style module>
+.body {
+  padding: var(--quote-slide--body--Padding);
+}
+
+.content {
+  position: relative;
+  margin: var(--quote-slide--content--Margin);
+}
+
+.quote {
+  display: flex;
+  overflow: hidden;
+  flex-direction: column;
+  margin: var(--quote-slide--title--Margin);
+
+  /* Position */
+  align-items: var(--quote-slide--title--AlignItems);
+  justify-content: var(--quote-slide--title--JustifyContent);
+
+  /* Text */
+  color: var(--quote-slide--title--Color);
+  font-size: var(--quote-slide--title--FontSize);
+  font-family:  var(--quote-slide--title--FontFamily);
+  font-weight:  var(--quote-slide--title--FontWeight);
+  text-align: var(--quote-slide--title--TextAlign);
+
+  /* Shape */
+  border: var(--quote-slide--title--Border);
+  height: var(--quote-slide--title--Height);
+
+  /* Surface */
+  background: var(--quote-slide--title--Background);
+}
+
+.quote q {
+  font-style: italic;
+}
+
+.quote q:before {
+  content: "“"
+}
+.quote q:after {
+  content: "”"
+}
+
+.author {
+  display: flex;
+  flex-direction: column;
+  position: absolute; top: 25kem; left: 0; right: 0;
+  margin: var(--quote-slide--author--Margin);
+
+  /* Position */
+  align-items: var(--quote-slide--author--AlignItems);
+  justify-content: var(--quote-slide--author--JustifyContent);
+
+  /* Text */
+  color: var(--quote-slide--author--Color);
+  font-size: var(--quote-slide--author--FontSize);
+  font-family:  var(--quote-slide--author--FontFamily);
+  font-weight:  var(--quote-slide--author--FontWeight);
+  text-align: var(--quote-slide--author--TextAlign);
+
+  /* Shape */
+  border: var(--quote-slide--author--Border);
+  height: var(--quote-slide--author--Height);
+  width: auto;
+
+  /* Surface */
+  background: var(--quote-slide--author--Background);
+}
+
+.author span:before {
+  content: "—"
+}
+</style>
\ No newline at end of file
diff --git a/packages/theme-base/src/slides/title-bullets-photo.vue b/packages/theme-base/src/slides/title-bullets-photo.vue
new file mode 100644
index 0000000..6d230a2
--- /dev/null
+++ b/packages/theme-base/src/slides/title-bullets-photo.vue
@@ -0,0 +1,117 @@
+<script>
+export default {
+  props: {
+    title: String,
+    bullets: Array,
+    photo: String
+  }
+}
+</script>
+
+<template>
+  <BlankSlide :class="$style.body">
+    <div :class="$style.content">
+      <h1 :class="$style.title">
+        <FitText :max=1>
+          <slot name="title">
+            {{ title }}
+          </slot>
+        </FitText>
+      </h1>
+
+      <div :class="$style.container">
+        <ul :class="$style.bullets">
+          <li v-for="(bullet, index) in bullets" :key="index">
+            <slot v-bind="bullet">{{ bullet }}</slot>
+          </li>
+        </ul>
+        <img :src="photo" :class="$style.photo" />
+      </div>
+    </div>
+  </BlankSlide>
+</template>
+
+<style>
+.vue-slides-slide {
+  /* Tier 3 */
+  --title-bullets-photo-slide--body--Padding: var(--slide--body--Padding);
+  
+  --title-bullets-photo-slide--content--Margin: -2.395833kem 0 0; /* -46pt 0 0 0 */
+  --title-bullets-photo-slide--content--Color: var(--slide--content--Color);
+  --title-bullets-photo-slide--content--FontSize: var(--slide--content--FontSize);
+  
+  --title-bullets-photo-slide--title--Margin: 0;
+  --title-bullets-photo-slide--title--AlignItems: center;
+  --title-bullets-photo-slide--title--JustifyContent: center;
+  --title-bullets-photo-slide--title--Color: var(--slide--title--Color);
+  --title-bullets-photo-slide--title--FontFamily: var(--slide--title--FontFamily);
+  --title-bullets-photo-slide--title--FontSize: var(--slide--title--FontSize);
+  --title-bullets-photo-slide--title--FontWeight: var(--slide--title--FontWeight);
+  --title-bullets-photo-slide--title--TextAlign: var(--slide--title--TextAlign);
+  --title-bullets-photo-slide--title--Border: none;
+  --title-bullets-photo-slide--title--Height: 9.375kem; /* 180pt */
+  --title-bullets-photo-slide--title--Background: transparent;
+  
+  --title-bullets-photo-slide--container--Padding: 2.083333kem 0.15625kem 1.458333kem; /* 40pt 3pt 28pt 3pt */
+  
+  --title-bullets-photo-slide--bullets--Margin: 0 5.15625kem 0 0; /* 0 99pt 0 0 */
+  
+  --title-bullets-photo-slide--photo--Height: 38.125kem; /* 732pt */
+  --title-bullets-photo-slide--photo--Width: 39.0625kem; /* 750pt */
+}
+</style>
+
+<style module>
+.body {
+  padding: var(--title-bullets-photo-slide--body--Padding);
+}
+
+.content {
+  margin: var(--title-bullets-photo-slide--content--Margin);
+  color: var(--title-bullets-photo-slide--content--Color);
+  font-size: var(--title-bullets-photo-slide--content--FontSize);
+}
+
+.title {
+  display: flex;
+  overflow: hidden;
+  flex-direction: column;
+  margin: var(--title-bullets-photo-slide--title--Margin);
+
+  /* Position */
+  align-items: var(--title-bullets-photo-slide--title--AlignItems);
+  justify-content: var(--title-bullets-photo-slide--title--JustifyContent);
+
+  /* Text */
+  color: var(--title-bullets-photo-slide--title--Color);
+  font-size: var(--title-bullets-photo-slide--title--FontSize);
+  font-family:  var(--title-bullets-photo-slide--title--FontFamily);
+  font-weight:  var(--title-bullets-photo-slide--title--FontWeight);
+  text-align: var(--title-bullets-photo-slide--title--TextAlign);
+
+  /* Shape */
+  border: var(--title-bullets-photo-slide--title--Border);
+  height: var(--title-bullets-photo-slide--title--Height);
+
+  /* Surface */
+  background: var(--title-bullets-photo-slide--title--Background);
+}
+
+
+.container {
+  display: flex;
+  flex-direction: row;
+  padding: var(--title-bullets-photo-slide--container--Padding);
+}
+
+.bullets {
+  flex: 1;
+  margin: var(--title-bullets-photo-slide--bullets--Margin);
+}
+
+.photo {
+  object-fit: cover;
+  height: var(--title-bullets-photo-slide--photo--Height);
+  width: var(--title-bullets-photo-slide--photo--Width);
+}
+</style>
\ No newline at end of file
diff --git a/packages/theme-base/src/slides/title-bullets.vue b/packages/theme-base/src/slides/title-bullets.vue
new file mode 100644
index 0000000..126e521
--- /dev/null
+++ b/packages/theme-base/src/slides/title-bullets.vue
@@ -0,0 +1,106 @@
+<script>
+export default {
+  props: {
+    title: String,
+    bullets: Array
+  }
+}
+</script>
+
+<template>
+  <BlankSlide :class="$style.body">
+    <div :class="$style.content">
+      <h1 :class="$style.title">
+        <FitText :max=1>
+          <slot name="title">
+            {{ title }}
+          </slot>
+        </FitText>
+      </h1>
+
+      <div :class="$style.container">
+        <ul :class="$style.bullets">
+          <li v-for="(bullet, index) in bullets" :key="index">
+            <slot v-bind="bullet">{{ bullet }}</slot>
+          </li>
+        </ul>
+      </div>
+    </div>
+  </BlankSlide>
+</template>
+
+<style>
+.vue-slides-slide {
+  /* Tier 3 */
+  --title-bullets-slide--body--Padding: var(--slide--body--Padding);
+  
+  --title-bullets-slide--content--Margin: -2.395833kem 0 0; /* -46pt 0 0 0 */
+  --title-bullets-slide--content--Color: var(--slide--content--Color);
+  --title-bullets-slide--content--FontSize: var(--slide--content--FontSize);
+  
+  --title-bullets-slide--title--Margin: 0;
+  --title-bullets-slide--title--AlignItems: center;
+  --title-bullets-slide--title--JustifyContent: center;
+  --title-bullets-slide--title--Color: var(--slide--title--Color);
+  --title-bullets-slide--title--FontFamily: var(--slide--title--FontFamily);
+  --title-bullets-slide--title--FontSize: var(--slide--title--FontSize);
+  --title-bullets-slide--title--FontWeight: var(--slide--title--FontWeight);
+  --title-bullets-slide--title--TextAlign: var(--slide--title--TextAlign);
+  --title-bullets-slide--title--Border: none;
+  --title-bullets-slide--title--Height: 9.375kem; /* 180pt */
+  --title-bullets-slide--title--Background: transparent;
+  
+  --title-bullets-slide--container--Padding: 2.083333kem 0.15625kem 1.458333kem; /* 40pt 3pt 28pt 3pt */
+  
+  --title-bullets-slide--bullets--Margin: 0;
+}
+</style>
+
+<style module>
+.body {
+  padding: var(--title-bullets-slide--body--Padding);
+}
+
+.content {
+  margin: var(--title-bullets-slide--content--Margin);
+  color: var(--title-bullets-slide--content--Color);
+  font-size: var(--title-bullets-slide--content--FontSize);
+}
+
+.title {
+  display: flex;
+  overflow: hidden;
+  flex-direction: column;
+  margin: var(--title-bullets-slide--title--Margin);
+
+  /* Position */
+  align-items: var(--title-bullets-slide--title--AlignItems);
+  justify-content: var(--title-bullets-slide--title--JustifyContent);
+
+  /* Text */
+  color: var(--title-bullets-slide--title--Color);
+  font-size: var(--title-bullets-slide--title--FontSize);
+  font-family:  var(--title-bullets-slide--title--FontFamily);
+  font-weight:  var(--title-bullets-slide--title--FontWeight);
+  text-align: var(--title-bullets-slide--title--TextAlign);
+
+  /* Shape */
+  border: var(--title-bullets-slide--title--Border);
+  height: var(--title-bullets-slide--title--Height);
+
+  /* Surface */
+  background: var(--title-bullets-slide--title--Background);
+}
+
+
+.container {
+  display: flex;
+  flex-direction: row;
+  padding: var(--title-bullets-slide--container--Padding);
+}
+
+.bullets {
+  flex: 1;
+  margin: var(--title-bullets-slide--bullets--Margin);
+}
+</style>
\ No newline at end of file
diff --git a/packages/theme-base/src/slides/title-center.vue b/packages/theme-base/src/slides/title-center.vue
new file mode 100644
index 0000000..88939a6
--- /dev/null
+++ b/packages/theme-base/src/slides/title-center.vue
@@ -0,0 +1,77 @@
+<script>
+export default {
+  props: {
+    title: String
+  }
+}
+</script>
+
+<template>
+  <BlankSlide :class="$style.body">
+    <div :class="$style.content">
+      <h1 :class="$style.title">
+        <FitText :max=1>
+          <slot name="title">
+            {{ title }}
+          </slot>
+        </FitText>
+      </h1>
+    </div>
+  </BlankSlide>
+</template>
+
+<style>
+.vue-slides-slide {
+  /* Tier 3 */
+  --title-center-slide--body--Padding: var(--slide--body--Padding);
+  
+  --title-center-slide--content--Margin: 14.739583kem 0.520834kem; /* 283pt 10pt */
+  
+  --title-center-slide--title--Margin: 0;
+  --title-center-slide--title--AlignItems: center;
+  --title-center-slide--title--JustifyContent: center;
+  --title-center-slide--title--Color: var(--slide--title--Color);
+  --title-center-slide--title--FontFamily: var(--slide--title--FontFamily);
+  --title-center-slide--title--FontSize: var(--slide--title--FontSize);
+  --title-center-slide--title--FontWeight: var(--slide--title--FontWeight);
+  --title-center-slide--title--TextAlign: var(--slide--title--TextAlign);
+  --title-center-slide--title--Border: none;
+  --title-center-slide--title--Height: 19.0625kem; /* 366pt */
+  --title-center-slide--title--Background: transparent;
+}
+</style>
+
+<style module>
+.body {
+  padding: var(--title-center-slide--body--Padding);
+}
+
+.content {
+  margin: var(--title-center-slide--content--Margin);
+}
+
+.title {
+  display: flex;
+  overflow: hidden;
+  flex-direction: column;
+  margin: var(--title-center-slide--title--Margin);
+
+  /* Position */
+  align-items: var(--title-center-slide--title--AlignItems);
+  justify-content: var(--title-center-slide--title--JustifyContent);
+
+  /* Text */
+  color: var(--title-center-slide--title--Color);
+  font-size: var(--title-center-slide--title--FontSize);
+  font-family:  var(--title-center-slide--title--FontFamily);
+  font-weight:  var(--title-center-slide--title--FontWeight);
+  text-align: var(--title-center-slide--title--TextAlign);
+
+  /* Shape */
+  border: var(--title-center-slide--title--Border);
+  height: var(--title-center-slide--title--Height);
+
+  /* Surface */
+  background: var(--title-center-slide--title--Background);
+}
+</style>
\ No newline at end of file
diff --git a/packages/theme-base/src/slides/title-subtitle.vue b/packages/theme-base/src/slides/title-subtitle.vue
new file mode 100644
index 0000000..c0d5477
--- /dev/null
+++ b/packages/theme-base/src/slides/title-subtitle.vue
@@ -0,0 +1,121 @@
+<script>
+export default {
+  props: {
+    title: String,
+    subtitle: String
+  }
+}
+</script>
+
+<template>
+  <BlankSlide :class="$style.body">
+    <div :class="$style.content">
+      <h1 :class="$style.title">
+        <FitText :max=1>
+          <slot name="title">
+            {{ title }}
+          </slot>
+        </FitText>
+      </h1>
+      <h3 :class="$style.subtitle">
+        <FitText :max=1>
+          <slot name="subtitle">
+            {{ subtitle }}
+          </slot>
+        </FitText>
+      </h3>
+    </div>
+  </BlankSlide>
+</template>
+
+<style>
+.vue-slides-slide {
+  /* Tier 3 */
+  --title-subtitle-slide--body--Padding: var(--slide--body--Padding);
+  
+  --title-subtitle-slide--content--Margin: 5.572917kem 0.520834kem 16.875kem; /* 107pt 10pt 324pt */
+  
+  --title-subtitle-slide--title--Margin: 0 0 0.520834kem; /* 0 0 10pt */
+  --title-subtitle-slide--title--AlignItems: center;
+  --title-subtitle-slide--title--JustifyContent: flex-end;
+  --title-subtitle-slide--title--Color: var(--slide--title--Color);
+  --title-subtitle-slide--title--FontFamily: var(--slide--title--FontFamily);
+  --title-subtitle-slide--title--FontSize: var(--slide--title--FontSize);
+  --title-subtitle-slide--title--FontWeight: var(--slide--title--FontWeight);
+  --title-subtitle-slide--title--TextAlign: var(--slide--title--TextAlign);
+  --title-subtitle-slide--title--Border: none;
+  --title-subtitle-slide--title--Height: 19.0625kem; /* 366pt */
+  --title-subtitle-slide--title--Background: transparent;
+  
+  --title-subtitle-slide--subtitle--Margin: 0;
+  --title-subtitle-slide--subtitle--AlignItems: center;
+  --title-subtitle-slide--subtitle--JustifyContent: flex-start;
+  --title-subtitle-slide--subtitle--Color: var(--slide--subtitle--Color);
+  --title-subtitle-slide--subtitle--FontFamily: var(--slide--subtitle--FontFamily);
+  --title-subtitle-slide--subtitle--FontSize: var(--slide--subtitle--FontSize);
+  --title-subtitle-slide--subtitle--FontWeight: var(--slide--subtitle--FontWeight);
+  --title-subtitle-slide--subtitle--TextAlign: var(--slide--subtitle--TextAlign);
+  --title-subtitle-slide--subtitle--Border: none;
+  --title-subtitle-slide--subtitle--Height: 6.510417kem; /* 125pt */
+  --title-subtitle-slide--subtitle--Background: transparent;
+}
+</style>
+
+<style module>
+.body {
+  padding: var(--title-subtitle-slide--body--Padding);
+}
+
+.content {
+  margin: var(--title-subtitle-slide--content--Margin);
+}
+
+.title {
+  display: flex;
+  overflow: hidden;
+  flex-direction: column;
+  margin: var(--title-subtitle-slide--title--Margin);
+
+  /* Position */
+  align-items: var(--title-subtitle-slide--title--AlignItems);
+  justify-content: var(--title-subtitle-slide--title--JustifyContent);
+
+  /* Text */
+  color: var(--title-subtitle-slide--title--Color);
+  font-size: var(--title-subtitle-slide--title--FontSize);
+  font-family:  var(--title-subtitle-slide--title--FontFamily);
+  font-weight:  var(--title-subtitle-slide--title--FontWeight);
+  text-align: var(--title-subtitle-slide--title--TextAlign);
+
+  /* Shape */
+  border: var(--title-subtitle-slide--title--Border);
+  height: var(--title-subtitle-slide--title--Height);
+
+  /* Surface */
+  background: var(--title-subtitle-slide--title--Background);
+}
+
+.subtitle {
+  display: flex;
+  margin: 0;
+  overflow: hidden;
+  flex-direction: column;
+
+  /* Position */
+  align-items: var(--title-subtitle-slide--subtitle--AlignItems);
+  justify-content: var(--title-subtitle-slide--subtitle--JustifyContent);
+
+  /* Text */
+  color: var(--title-subtitle-slide--subtitle--Color);
+  font-size: var(--title-subtitle-slide--subtitle--FontSize);
+  font-family:  var(--title-subtitle-slide--subtitle--FontFamily);
+  font-weight:  var(--title-subtitle-slide--subtitle--FontWeight);
+
+  /* Shape */
+  border: var(--title-subtitle-slide--subtitle--Border);
+  height: var(--title-subtitle-slide--subtitle--Height);
+
+  /* Surface */
+  background: var(--title-subtitle-slide--subtitle--Background);
+}
+</style>
\ No newline at end of file
diff --git a/packages/theme-base/src/slides/title-top.vue b/packages/theme-base/src/slides/title-top.vue
new file mode 100644
index 0000000..61fd5da
--- /dev/null
+++ b/packages/theme-base/src/slides/title-top.vue
@@ -0,0 +1,83 @@
+<script>
+export default {
+  props: {
+    title: String
+  }
+}
+</script>
+
+<template>
+  <BlankSlide :class="$style.body">
+    <div :class="$style.content">
+      <h1 :class="$style.title">
+        <FitText :max=1>
+          <slot name="title">
+            {{ title }}
+          </slot>
+        </FitText>
+      </h1>
+
+      <slot />
+    </div>
+  </BlankSlide>
+</template>
+
+<style>
+.vue-slides-slide {
+  /* Tier 3 */
+  --title-top-slide--body--Padding: var(--slide--body--Padding);
+  
+  --title-top-slide--content--Margin: -2.395833kem 0 0; /* -46pt 0 0 0 */
+  --title-top-slide--content--Color: var(--slide--content--Color);
+  --title-top-slide--content--FontSize: var(--slide--content--FontSize);
+  
+  --title-top-slide--title--Margin: 0;
+  --title-top-slide--title--AlignItems: center;
+  --title-top-slide--title--JustifyContent: center;
+  --title-top-slide--title--Color: var(--slide--title--Color);
+  --title-top-slide--title--FontFamily: var(--slide--title--FontFamily);
+  --title-top-slide--title--FontSize: var(--slide--title--FontSize);
+  --title-top-slide--title--FontWeight: var(--slide--title--FontWeight);
+  --title-top-slide--title--TextAlign: var(--slide--title--TextAlign);
+  --title-top-slide--title--Border: none;
+  --title-top-slide--title--Height: 9.375kem; /* 180pt */
+  --title-top-slide--title--Background: transparent;
+}
+</style>
+
+<style module>
+.body {
+  padding: var(--title-top-slide--body--Padding);
+}
+
+.content {
+  margin: var(--title-top-slide--content--Margin);
+  color: var(--title-top-slide--content--Color);
+  font-size: var(--title-top-slide--content--FontSize);
+}
+
+.title {
+  display: flex;
+  overflow: hidden;
+  flex-direction: column;
+  margin: var(--title-top-slide--title--Margin);
+
+  /* Position */
+  align-items: var(--title-top-slide--title--AlignItems);
+  justify-content: var(--title-top-slide--title--JustifyContent);
+
+  /* Text */
+  color: var(--title-top-slide--title--Color);
+  font-size: var(--title-top-slide--title--FontSize);
+  font-family:  var(--title-top-slide--title--FontFamily);
+  font-weight:  var(--title-top-slide--title--FontWeight);
+  text-align: var(--title-top-slide--title--TextAlign);
+
+  /* Shape */
+  border: var(--title-top-slide--title--Border);
+  height: var(--title-top-slide--title--Height);
+
+  /* Surface */
+  background: var(--title-top-slide--title--Background);
+}
+</style>
\ No newline at end of file
diff --git a/packages/theme-black/.npmignore b/packages/theme-black/.npmignore
new file mode 100644
index 0000000..22923f4
--- /dev/null
+++ b/packages/theme-black/.npmignore
@@ -0,0 +1 @@
+*.unit.js
diff --git a/packages/theme-black/README.md b/packages/theme-black/README.md
new file mode 100644
index 0000000..276f695
--- /dev/null
+++ b/packages/theme-black/README.md
@@ -0,0 +1 @@
+# @vue-slides/theme-vue
\ No newline at end of file
diff --git a/packages/theme-black/package.json b/packages/theme-black/package.json
new file mode 100644
index 0000000..0203757
--- /dev/null
+++ b/packages/theme-black/package.json
@@ -0,0 +1,26 @@
+{
+  "name": "@vue-slides/theme-black",
+  "version": "2.0.0-alpha.1",
+  "description": "@vue-slides/theme-black",
+  "main": "src/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/vue-slides/vue-slides.git"
+  },
+  "keywords": [
+    "vue-slides",
+    "vue"
+  ],
+  "author": "Rahul Kadyan",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/vue-slides/vue-slides/issues"
+  },
+  "homepage": "https://github.com/vue-slides/vue-slides/tree/dev/packages/theme-black#readme",
+  "dependencies": {
+    "@vue-slides/theme-base": "^2.0.0-alpha.0"
+  },
+  "publishConfig": {
+    "access": "public"
+  }
+}
diff --git a/packages/theme-black/shrinkwrap.yaml b/packages/theme-black/shrinkwrap.yaml
new file mode 100644
index 0000000..97828d1
--- /dev/null
+++ b/packages/theme-black/shrinkwrap.yaml
@@ -0,0 +1,5 @@
+dependencies:
+  '@vue-slides/theme-base': 'link:../theme-base'
+shrinkwrapVersion: 5
+specifiers:
+  '@vue-slides/theme-base': ^2.0.0-alpha.0
diff --git a/packages/theme-black/src/index.js b/packages/theme-black/src/index.js
new file mode 100644
index 0000000..5c2c208
--- /dev/null
+++ b/packages/theme-black/src/index.js
@@ -0,0 +1,4 @@
+import base from '@vue-slides/theme-base'
+import './variables.css'
+
+export default base
\ No newline at end of file
diff --git a/packages/theme-black/src/variables.css b/packages/theme-black/src/variables.css
new file mode 100644
index 0000000..f00e795
--- /dev/null
+++ b/packages/theme-black/src/variables.css
@@ -0,0 +1,14 @@
+#vue-slides {
+  --color: white;
+  --text-color: rgb(44,62,80, 0.87);
+  --font-family-sans-serif: 'Helvetica Neue';
+}
+
+#vue-slides-presentation {
+  --global-progress-widget-background: #dedede;
+  --global-progress-widget-foreground: rgb(66,185,131);
+}
+
+.vue-slides-slide {
+  --slide--title--Color: rgb(66,185,131, 0.87);
+}
\ No newline at end of file
diff --git a/packages/theme-vue/.npmignore b/packages/theme-vue/.npmignore
new file mode 100644
index 0000000..22923f4
--- /dev/null
+++ b/packages/theme-vue/.npmignore
@@ -0,0 +1 @@
+*.unit.js
diff --git a/packages/theme-vue/README.md b/packages/theme-vue/README.md
new file mode 100644
index 0000000..276f695
--- /dev/null
+++ b/packages/theme-vue/README.md
@@ -0,0 +1 @@
+# @vue-slides/theme-vue
\ No newline at end of file
diff --git a/packages/theme-vue/package.json b/packages/theme-vue/package.json
new file mode 100644
index 0000000..186fdc1
--- /dev/null
+++ b/packages/theme-vue/package.json
@@ -0,0 +1,26 @@
+{
+  "name": "@vue-slides/theme-vue",
+  "version": "2.0.0-alpha.1",
+  "description": "@vue-slides/theme-vue",
+  "main": "src/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/vue-slides/vue-slides.git"
+  },
+  "keywords": [
+    "vue-slides",
+    "vue"
+  ],
+  "author": "Rahul Kadyan",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/vue-slides/vue-slides/issues"
+  },
+  "homepage": "https://github.com/vue-slides/vue-slides/tree/dev/packages/theme-vue#readme",
+  "dependencies": {
+    "@vue-slides/theme-base": "^2.0.0-alpha.0"
+  },
+  "publishConfig": {
+    "access": "public"
+  }
+}
diff --git a/packages/theme-vue/shrinkwrap.yaml b/packages/theme-vue/shrinkwrap.yaml
new file mode 100644
index 0000000..97828d1
--- /dev/null
+++ b/packages/theme-vue/shrinkwrap.yaml
@@ -0,0 +1,5 @@
+dependencies:
+  '@vue-slides/theme-base': 'link:../theme-base'
+shrinkwrapVersion: 5
+specifiers:
+  '@vue-slides/theme-base': ^2.0.0-alpha.0
diff --git a/packages/theme-vue/src/index.js b/packages/theme-vue/src/index.js
new file mode 100644
index 0000000..5c2c208
--- /dev/null
+++ b/packages/theme-vue/src/index.js
@@ -0,0 +1,4 @@
+import base from '@vue-slides/theme-base'
+import './variables.css'
+
+export default base
\ No newline at end of file
diff --git a/packages/theme-vue/src/variables.css b/packages/theme-vue/src/variables.css
new file mode 100644
index 0000000..f317641
--- /dev/null
+++ b/packages/theme-vue/src/variables.css
@@ -0,0 +1,7 @@
+#vue-slides {
+  --color: #fff;
+  --text-color: #4DBA87;
+  --font-family-sans-serif: 'Source Sans Pro';
+  --slide--title--Color: #4DBA87;
+  --slide--subtitle--Color: #435466;
+}
\ No newline at end of file
diff --git a/packages/theme-white/.npmignore b/packages/theme-white/.npmignore
new file mode 100644
index 0000000..22923f4
--- /dev/null
+++ b/packages/theme-white/.npmignore
@@ -0,0 +1 @@
+*.unit.js
diff --git a/packages/theme-white/README.md b/packages/theme-white/README.md
new file mode 100644
index 0000000..08f1099
--- /dev/null
+++ b/packages/theme-white/README.md
@@ -0,0 +1 @@
+# @vue-slides/theme-white
\ No newline at end of file
diff --git a/packages/theme-white/package.json b/packages/theme-white/package.json
new file mode 100644
index 0000000..4cf47b2
--- /dev/null
+++ b/packages/theme-white/package.json
@@ -0,0 +1,26 @@
+{
+  "name": "@vue-slides/theme-white",
+  "version": "2.0.0-alpha.1",
+  "description": "@vue-slides/theme-white",
+  "main": "src/index.js",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/vue-slides/vue-slides.git"
+  },
+  "keywords": [
+    "vue-slides",
+    "vue"
+  ],
+  "author": "Rahul Kadyan",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/vue-slides/vue-slides/issues"
+  },
+  "homepage": "https://github.com/vue-slides/vue-slides/tree/dev/packages/theme-white#readme",
+  "dependencies": {
+    "@vue-slides/theme-base": "^2.0.0-alpha.0"
+  },
+  "publishConfig": {
+    "access": "public"
+  }
+}
diff --git a/packages/theme-white/shrinkwrap.yaml b/packages/theme-white/shrinkwrap.yaml
new file mode 100644
index 0000000..97828d1
--- /dev/null
+++ b/packages/theme-white/shrinkwrap.yaml
@@ -0,0 +1,5 @@
+dependencies:
+  '@vue-slides/theme-base': 'link:../theme-base'
+shrinkwrapVersion: 5
+specifiers:
+  '@vue-slides/theme-base': ^2.0.0-alpha.0
diff --git a/packages/theme-white/src/index.js b/packages/theme-white/src/index.js
new file mode 100644
index 0000000..5c2c208
--- /dev/null
+++ b/packages/theme-white/src/index.js
@@ -0,0 +1,4 @@
+import base from '@vue-slides/theme-base'
+import './variables.css'
+
+export default base
\ No newline at end of file
diff --git a/packages/theme-white/src/variables.css b/packages/theme-white/src/variables.css
new file mode 100644
index 0000000..ade8b3f
--- /dev/null
+++ b/packages/theme-white/src/variables.css
@@ -0,0 +1,5 @@
+#vue-slides {
+  --color: #fff;
+  --text-color: rgba(0, 0, 0, 0.87);
+  --font-family-sans-serif: 'Helvetica Neue';
+}
diff --git a/packages/vue-keynote/index.browser.js b/packages/vue-keynote/index.browser.js
deleted file mode 100644
index 0bdc97e..0000000
--- a/packages/vue-keynote/index.browser.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import Keynote from '@keynote/core'
-import Theme from '@keynote/theme-default'
-
-if (!('Vue' in window)) {
-  console.log('You may want to add "<script src="//unpkg.com/vue"></script>" to the "<head>" section of the page.')
-  throw Error('Cannot detect Vue on page.')
-}
-
-Vue.use(Keynote)
-Keynote.use(Theme)
-
-export default Keynote
diff --git a/packages/vue-keynote/index.js b/packages/vue-keynote/index.js
deleted file mode 100644
index 57f8b9c..0000000
--- a/packages/vue-keynote/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-export * from '@keynote/core'
-import keynote from '@keynote/core'
-
-export default keynote
diff --git a/packages/vue-keynote/package.json b/packages/vue-keynote/package.json
deleted file mode 100644
index afa0b84..0000000
--- a/packages/vue-keynote/package.json
+++ /dev/null
@@ -1,56 +0,0 @@
-{
-  "name": "vue-keynote",
-  "version": "1.1.4",
-  "description": "Present with Vue",
-  "main": "index.js",
-  "unpkg": "dist/keynote.js",
-  "scripts": {
-    "prepublishOnly": "npm run build",
-    "build": "rollup -c",
-    "postbuild": "babel-minify dist/keynote.js -o dist/keynote.js && bundlesize"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/znck/keynote.git"
-  },
-  "keywords": [
-    "keynote",
-    "presentation",
-    "vue"
-  ],
-  "author": "Rahul Kadyan <hi@znck.me> (https://znck.me)",
-  "license": "MIT",
-  "bugs": {
-    "url": "https://github.com/znck/keynote/issues"
-  },
-  "homepage": "https://github.com/znck/keynote#readme",
-  "dependencies": {
-    "@keynote/core": "^1.1.3",
-    "@keynote/theme-default": "^1.0.2"
-  },
-  "files": [
-    "dist/keynote.js",
-    "index.js"
-  ],
-  "bundlesize": [
-    {
-      "path": "./dist/keynote.js",
-      "maxSize": "80 kB"
-    }
-  ],
-  "devDependencies": {
-    "babel-helper-evaluate-path": "^0.5.0",
-    "babel-minify": "^0.5.0",
-    "bundlesize": "^0.17.0",
-    "rollup": "^0.59.3",
-    "rollup-plugin-commonjs": "^9.1.3",
-    "rollup-plugin-node-resolve": "^3.3.0",
-    "rollup-plugin-replace": "^2.0.0",
-    "rollup-plugin-vue": "^4.2.0",
-    "vue": "^2.5.17",
-    "vue-template-compiler": "^2.5.17"
-  },
-  "peerDependencies": {
-    "@keynote/cli": "^1.*"
-  }
-}
diff --git a/packages/vue-keynote/rollup.config.js b/packages/vue-keynote/rollup.config.js
deleted file mode 100644
index 8496ee3..0000000
--- a/packages/vue-keynote/rollup.config.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import resolve from 'rollup-plugin-node-resolve';
-import commonjs from 'rollup-plugin-commonjs';
-import replace from 'rollup-plugin-replace'
-import vue from 'rollup-plugin-vue'
-
-process.env.NODE_ENV = 'production'
-
-export default {
-  input: './index.browser.js',
-  output: {
-    dir: './dist',
-    format: 'iife',
-    name: 'Keynote',
-    file: 'dist/keynote.js',
-    globals: {
-      vue: 'Vue'
-    }
-  },
-  plugins: [
-    resolve(),
-    commonjs(),
-    replace({ 'process.env.NODE_ENV': '"production"' }),
-    vue()
-  ],
-  external: ['vue']
-}
diff --git a/packages/vue-keynote/shrinkwrap.yaml b/packages/vue-keynote/shrinkwrap.yaml
deleted file mode 100644
index cf26a42..0000000
--- a/packages/vue-keynote/shrinkwrap.yaml
+++ /dev/null
@@ -1,2597 +0,0 @@
-dependencies:
-  '@keynote/core': 1.1.3
-  '@keynote/theme-default': 1.0.2
-devDependencies:
-  babel-helper-evaluate-path: 0.5.0
-  babel-minify: 0.5.0
-  bundlesize: 0.17.0
-  rollup: 0.59.4
-  rollup-plugin-commonjs: 9.1.3
-  rollup-plugin-node-resolve: 3.3.0
-  rollup-plugin-replace: 2.0.0
-  rollup-plugin-vue: 4.2.0
-  vue: 2.5.17
-  vue-template-compiler: 2.5.17
-packages:
-  /@babel/code-frame/7.0.0:
-    dependencies:
-      '@babel/highlight': 7.0.0
-    dev: true
-    resolution:
-      integrity: sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==
-  /@babel/core/7.1.6:
-    dependencies:
-      '@babel/code-frame': 7.0.0
-      '@babel/generator': 7.1.6
-      '@babel/helpers': 7.1.5
-      '@babel/parser': 7.1.6
-      '@babel/template': 7.1.2
-      '@babel/traverse': 7.1.6
-      '@babel/types': 7.1.6
-      convert-source-map: 1.6.0
-      debug: 4.1.0
-      json5: 2.1.0
-      lodash: 4.17.11
-      resolve: 1.8.1
-      semver: 5.6.0
-      source-map: 0.5.7
-    dev: true
-    engines:
-      node: '>=6.9.0'
-    resolution:
-      integrity: sha512-Hz6PJT6e44iUNpAn8AoyAs6B3bl60g7MJQaI0rZEar6ECzh6+srYO1xlIdssio34mPaUtAb1y+XlkkSJzok3yw==
-  /@babel/generator/7.1.6:
-    dependencies:
-      '@babel/types': 7.1.6
-      jsesc: 2.5.2
-      lodash: 4.17.11
-      source-map: 0.5.7
-      trim-right: 1.0.1
-    dev: true
-    resolution:
-      integrity: sha512-brwPBtVvdYdGxtenbQgfCdDPmtkmUBZPjUoK5SXJEBuHaA5BCubh9ly65fzXz7R6o5rA76Rs22ES8Z+HCc0YIQ==
-  /@babel/helper-function-name/7.1.0:
-    dependencies:
-      '@babel/helper-get-function-arity': 7.0.0
-      '@babel/template': 7.1.2
-      '@babel/types': 7.1.6
-    dev: true
-    resolution:
-      integrity: sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==
-  /@babel/helper-get-function-arity/7.0.0:
-    dependencies:
-      '@babel/types': 7.1.6
-    dev: true
-    resolution:
-      integrity: sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==
-  /@babel/helper-split-export-declaration/7.0.0:
-    dependencies:
-      '@babel/types': 7.1.6
-    dev: true
-    resolution:
-      integrity: sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==
-  /@babel/helpers/7.1.5:
-    dependencies:
-      '@babel/template': 7.1.2
-      '@babel/traverse': 7.1.6
-      '@babel/types': 7.1.6
-    dev: true
-    resolution:
-      integrity: sha512-2jkcdL02ywNBry1YNFAH/fViq4fXG0vdckHqeJk+75fpQ2OH+Az6076tX/M0835zA45E0Cqa6pV5Kiv9YOqjEg==
-  /@babel/highlight/7.0.0:
-    dependencies:
-      chalk: 2.4.1
-      esutils: 2.0.2
-      js-tokens: 4.0.0
-    dev: true
-    resolution:
-      integrity: sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==
-  /@babel/parser/7.1.6:
-    dev: true
-    engines:
-      node: '>=6.0.0'
-    hasBin: true
-    resolution:
-      integrity: sha512-dWP6LJm9nKT6ALaa+bnL247GHHMWir3vSlZ2+IHgHgktZQx0L3Uvq2uAWcuzIe+fujRsYWBW2q622C5UvGK9iQ==
-  /@babel/runtime/7.0.0-beta.49:
-    dependencies:
-      core-js: 2.5.7
-      regenerator-runtime: 0.11.1
-    dev: true
-    resolution:
-      integrity: sha1-A7O/B+uYIHLI6FHdLd1RECguYb8=
-  /@babel/template/7.1.2:
-    dependencies:
-      '@babel/code-frame': 7.0.0
-      '@babel/parser': 7.1.6
-      '@babel/types': 7.1.6
-    dev: true
-    resolution:
-      integrity: sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==
-  /@babel/traverse/7.1.6:
-    dependencies:
-      '@babel/code-frame': 7.0.0
-      '@babel/generator': 7.1.6
-      '@babel/helper-function-name': 7.1.0
-      '@babel/helper-split-export-declaration': 7.0.0
-      '@babel/parser': 7.1.6
-      '@babel/types': 7.1.6
-      debug: 4.1.0
-      globals: 11.9.0
-      lodash: 4.17.11
-    dev: true
-    resolution:
-      integrity: sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ==
-  /@babel/types/7.1.6:
-    dependencies:
-      esutils: 2.0.2
-      lodash: 4.17.11
-      to-fast-properties: 2.0.0
-    dev: true
-    resolution:
-      integrity: sha512-DMiUzlY9DSjVsOylJssxLHSgj6tWM9PRFJOGW/RaOglVOK9nzTxoOMfTfRQXGUCUQ/HmlG2efwC+XqUEJ5ay4w==
-  /@keynote/core/1.1.3:
-    dependencies:
-      '@znck/prop-types': 0.3.4
-      de-indent: 1.0.2
-      hammerjs: 2.0.8
-      prismjs: 1.15.0
-      resize-observer-polyfill: 1.5.0
-      velocity-animate: 1.5.2
-    dev: false
-    peerDependencies:
-      vue: ^2.5.16
-    resolution:
-      integrity: sha512-YeKG5TR1xPVHjxD92KKVf6/1rKUkQDp8UJDIKk9tifyCHSaME0nAR5Gk3BmTr+TOGQP6r0JKOE0xEz3CWrXMqw==
-  /@keynote/theme-default/1.0.2:
-    dev: false
-    resolution:
-      integrity: sha512-4pEorFmMJyKdkziITVSy6DozeO09i7ozVPyPuQ5ZFfaT+QcN5g6X1MpvX9MDv/ip5dZyS8k/BZ4aoO01tHeTQg==
-  /@types/estree/0.0.39:
-    dev: true
-    resolution:
-      integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
-  /@types/node/10.3.0:
-    dev: true
-    resolution:
-      integrity: sha512-hWzNviaVFIr1TqcRA8ou49JaSHp+Rfabmnqg2kNvusKqLhPU0rIsGPUj5WJJ7ld4Bb7qdgLmIhLfCD1qS08IVA==
-  /@vue/component-compiler-utils/1.3.1:
-    dependencies:
-      consolidate: 0.15.1
-      hash-sum: 1.0.2
-      lru-cache: 4.1.3
-      merge-source-map: 1.1.0
-      postcss: 6.0.22
-      postcss-selector-parser: 3.1.1
-      prettier: 1.13.3
-      source-map: 0.5.7
-      vue-template-es2015-compiler: 1.6.0
-    dev: true
-    resolution:
-      integrity: sha512-IyjJW6ToMitgAhp3xh22QiEW8JvHfLyzlyY/J+GjJ71miod9tNsy6xT2ckm/VirlhPMfeM43kgYZe34jhmmzpw==
-  /@vue/component-compiler/3.3.3/postcss@6.0.22:
-    dependencies:
-      '@vue/component-compiler-utils': 1.3.1
-      clean-css: 4.1.11
-      hash-sum: 1.0.2
-      postcss: 6.0.22
-      postcss-modules-sync: 1.0.0
-    dev: true
-    id: registry.npmjs.org/@vue/component-compiler/3.3.3
-    peerDependencies:
-      postcss: '>=6.0'
-      vue-template-compiler: '*'
-    resolution:
-      integrity: sha512-9Q3Qpx2k/JkeCbBlIgQV2lUTmWdOS9rWEJZuAirGpVQx2Sb3XlhyQSo3nc7q05Qji/IfgfURuvmBLDkarGijbw==
-  /@znck/prop-types/0.3.4:
-    dependencies:
-      lodash-es: 4.17.11
-      nyc: 11.9.0
-    dev: false
-    resolution:
-      integrity: sha512-TAaBr9Th6HF6MzQ3/MDVChEHMJ0EH7jj/4p3bp0GxqOzsn4HQxgceBBZ0DE0vshDUprA9d8USqlwzTKKepcnpg==
-  /abbrev/1.1.1:
-    dev: true
-    resolution:
-      integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-  /ajv/6.5.5:
-    dependencies:
-      fast-deep-equal: 2.0.1
-      fast-json-stable-stringify: 2.0.0
-      json-schema-traverse: 0.4.1
-      uri-js: 4.2.2
-    dev: true
-    resolution:
-      integrity: sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==
-  /ansi-regex/2.1.1:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
-  /ansi-regex/3.0.0:
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
-  /ansi-styles/2.2.1:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
-  /ansi-styles/3.2.1:
-    dependencies:
-      color-convert: 1.9.3
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
-  /aproba/1.2.0:
-    dev: true
-    resolution:
-      integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
-  /are-we-there-yet/1.1.5:
-    dependencies:
-      delegates: 1.0.0
-      readable-stream: 2.3.6
-    dev: true
-    resolution:
-      integrity: sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
-  /arr-diff/2.0.0:
-    dependencies:
-      arr-flatten: 1.1.0
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
-  /arr-flatten/1.1.0:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
-  /array-unique/0.2.1:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
-  /asn1/0.2.4:
-    dependencies:
-      safer-buffer: 2.1.2
-    dev: true
-    resolution:
-      integrity: sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
-  /assert-plus/1.0.0:
-    dev: true
-    engines:
-      node: '>=0.8'
-    resolution:
-      integrity: sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
-  /asynckit/0.4.0:
-    dev: true
-    resolution:
-      integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=
-  /aws-sign2/0.7.0:
-    dev: true
-    resolution:
-      integrity: sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
-  /aws4/1.8.0:
-    dev: true
-    resolution:
-      integrity: sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
-  /axios/0.15.3:
-    dependencies:
-      follow-redirects: 1.0.0
-    dev: true
-    resolution:
-      integrity: sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM=
-  /axios/0.17.1:
-    dependencies:
-      follow-redirects: 1.5.10
-      is-buffer: 1.1.6
-    dev: true
-    resolution:
-      integrity: sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=
-  /babel-helper-evaluate-path/0.5.0:
-    dev: true
-    resolution:
-      integrity: sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==
-  /babel-helper-flip-expressions/0.4.3:
-    dev: true
-    resolution:
-      integrity: sha1-NpZzahKKwYvCUlS19AoizrPB0/0=
-  /babel-helper-is-nodes-equiv/0.0.1:
-    dev: true
-    resolution:
-      integrity: sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=
-  /babel-helper-is-void-0/0.4.3:
-    dev: true
-    resolution:
-      integrity: sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=
-  /babel-helper-mark-eval-scopes/0.4.3:
-    dev: true
-    resolution:
-      integrity: sha1-0kSjvvmESHJgP/tG4izorN9VFWI=
-  /babel-helper-remove-or-void/0.4.3:
-    dev: true
-    resolution:
-      integrity: sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=
-  /babel-helper-to-multiple-sequence-expressions/0.5.0:
-    dev: true
-    resolution:
-      integrity: sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==
-  /babel-minify/0.5.0:
-    dependencies:
-      '@babel/core': 7.1.6
-      babel-preset-minify: 0.5.0
-      fs-readdir-recursive: 1.1.0
-      lodash.pick: 4.4.0
-      mkdirp: 0.5.1
-      util.promisify: 1.0.0
-      yargs-parser: 10.1.0
-    dev: true
-    hasBin: true
-    resolution:
-      integrity: sha512-fgoyQCWmqly7CT1rk4FL90qT+4ixzjZ7Q+vuO9dmNO1AUGCjPhk3IemKQhMpLnb0oQn5rZAMZm9072gE0rSrPw==
-  /babel-plugin-minify-builtins/0.5.0:
-    dev: true
-    resolution:
-      integrity: sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==
-  /babel-plugin-minify-constant-folding/0.5.0:
-    dependencies:
-      babel-helper-evaluate-path: 0.5.0
-    dev: true
-    resolution:
-      integrity: sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==
-  /babel-plugin-minify-dead-code-elimination/0.5.0:
-    dependencies:
-      babel-helper-evaluate-path: 0.5.0
-      babel-helper-mark-eval-scopes: 0.4.3
-      babel-helper-remove-or-void: 0.4.3
-      lodash.some: 4.6.0
-    dev: true
-    resolution:
-      integrity: sha512-XQteBGXlgEoAKc/BhO6oafUdT4LBa7ARi55mxoyhLHNuA+RlzRmeMAfc31pb/UqU01wBzRc36YqHQzopnkd/6Q==
-  /babel-plugin-minify-flip-comparisons/0.4.3:
-    dependencies:
-      babel-helper-is-void-0: 0.4.3
-    dev: true
-    resolution:
-      integrity: sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=
-  /babel-plugin-minify-guarded-expressions/0.4.3:
-    dependencies:
-      babel-helper-flip-expressions: 0.4.3
-    dev: true
-    resolution:
-      integrity: sha1-zHCbRFP9IbHzAod0RMifiEJ845c=
-  /babel-plugin-minify-infinity/0.4.3:
-    dev: true
-    resolution:
-      integrity: sha1-37h2obCKBldjhO8/kuZTumB7Oco=
-  /babel-plugin-minify-mangle-names/0.5.0:
-    dependencies:
-      babel-helper-mark-eval-scopes: 0.4.3
-    dev: true
-    resolution:
-      integrity: sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==
-  /babel-plugin-minify-numeric-literals/0.4.3:
-    dev: true
-    resolution:
-      integrity: sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=
-  /babel-plugin-minify-replace/0.5.0:
-    dev: true
-    resolution:
-      integrity: sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==
-  /babel-plugin-minify-simplify/0.5.0:
-    dependencies:
-      babel-helper-flip-expressions: 0.4.3
-      babel-helper-is-nodes-equiv: 0.0.1
-      babel-helper-to-multiple-sequence-expressions: 0.5.0
-    dev: true
-    resolution:
-      integrity: sha512-TM01J/YcKZ8XIQd1Z3nF2AdWHoDsarjtZ5fWPDksYZNsoOjQ2UO2EWm824Ym6sp127m44gPlLFiO5KFxU8pA5Q==
-  /babel-plugin-minify-type-constructors/0.4.3:
-    dependencies:
-      babel-helper-is-void-0: 0.4.3
-    dev: true
-    resolution:
-      integrity: sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=
-  /babel-plugin-transform-inline-consecutive-adds/0.4.3:
-    dev: true
-    resolution:
-      integrity: sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=
-  /babel-plugin-transform-member-expression-literals/6.9.4:
-    dev: true
-    resolution:
-      integrity: sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=
-  /babel-plugin-transform-merge-sibling-variables/6.9.4:
-    dev: true
-    resolution:
-      integrity: sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=
-  /babel-plugin-transform-minify-booleans/6.9.4:
-    dev: true
-    resolution:
-      integrity: sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=
-  /babel-plugin-transform-property-literals/6.9.4:
-    dependencies:
-      esutils: 2.0.2
-    dev: true
-    resolution:
-      integrity: sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=
-  /babel-plugin-transform-regexp-constructors/0.4.3:
-    dev: true
-    resolution:
-      integrity: sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=
-  /babel-plugin-transform-remove-console/6.9.4:
-    dev: true
-    resolution:
-      integrity: sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=
-  /babel-plugin-transform-remove-debugger/6.9.4:
-    dev: true
-    resolution:
-      integrity: sha1-QrcnYxyXl44estGZp67IShgznvI=
-  /babel-plugin-transform-remove-undefined/0.5.0:
-    dependencies:
-      babel-helper-evaluate-path: 0.5.0
-    dev: true
-    resolution:
-      integrity: sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==
-  /babel-plugin-transform-simplify-comparison-operators/6.9.4:
-    dev: true
-    resolution:
-      integrity: sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=
-  /babel-plugin-transform-undefined-to-void/6.9.4:
-    dev: true
-    resolution:
-      integrity: sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=
-  /babel-preset-minify/0.5.0:
-    dependencies:
-      babel-plugin-minify-builtins: 0.5.0
-      babel-plugin-minify-constant-folding: 0.5.0
-      babel-plugin-minify-dead-code-elimination: 0.5.0
-      babel-plugin-minify-flip-comparisons: 0.4.3
-      babel-plugin-minify-guarded-expressions: 0.4.3
-      babel-plugin-minify-infinity: 0.4.3
-      babel-plugin-minify-mangle-names: 0.5.0
-      babel-plugin-minify-numeric-literals: 0.4.3
-      babel-plugin-minify-replace: 0.5.0
-      babel-plugin-minify-simplify: 0.5.0
-      babel-plugin-minify-type-constructors: 0.4.3
-      babel-plugin-transform-inline-consecutive-adds: 0.4.3
-      babel-plugin-transform-member-expression-literals: 6.9.4
-      babel-plugin-transform-merge-sibling-variables: 6.9.4
-      babel-plugin-transform-minify-booleans: 6.9.4
-      babel-plugin-transform-property-literals: 6.9.4
-      babel-plugin-transform-regexp-constructors: 0.4.3
-      babel-plugin-transform-remove-console: 6.9.4
-      babel-plugin-transform-remove-debugger: 6.9.4
-      babel-plugin-transform-remove-undefined: 0.5.0
-      babel-plugin-transform-simplify-comparison-operators: 6.9.4
-      babel-plugin-transform-undefined-to-void: 6.9.4
-      lodash.isplainobject: 4.0.6
-    dev: true
-    resolution:
-      integrity: sha512-xj1s9Mon+RFubH569vrGCayA9Fm2GMsCgDRm1Jb8SgctOB7KFcrVc2o8K3YHUyMz+SWP8aea75BoS8YfsXXuiA==
-  /balanced-match/1.0.0:
-    dev: true
-    resolution:
-      integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
-  /bcrypt-pbkdf/1.0.2:
-    dependencies:
-      tweetnacl: 0.14.5
-    dev: true
-    resolution:
-      integrity: sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
-  /big.js/3.2.0:
-    dev: true
-    resolution:
-      integrity: sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==
-  /bl/1.2.2:
-    dependencies:
-      readable-stream: 2.3.6
-      safe-buffer: 5.1.2
-    dev: true
-    resolution:
-      integrity: sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==
-  /block-stream/0.0.9:
-    dependencies:
-      inherits: 2.0.3
-    dev: true
-    engines:
-      node: 0.4 || >=0.5.8
-    resolution:
-      integrity: sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
-  /bluebird/3.5.1:
-    dev: true
-    resolution:
-      integrity: sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==
-  /brace-expansion/1.1.11:
-    dependencies:
-      balanced-match: 1.0.0
-      concat-map: 0.0.1
-    dev: true
-    resolution:
-      integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
-  /braces/1.8.5:
-    dependencies:
-      expand-range: 1.8.2
-      preserve: 0.2.0
-      repeat-element: 1.1.3
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
-  /brotli-size/0.0.1:
-    dependencies:
-      duplexer: 0.1.1
-      iltorb: 1.3.10
-    dev: true
-    engines:
-      node: '>=0.12.0'
-    resolution:
-      integrity: sha1-jBruoBzSLzWbBIlRGFvVOf8Mgp8=
-  /buffer-alloc-unsafe/1.1.0:
-    dev: true
-    resolution:
-      integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
-  /buffer-alloc/1.2.0:
-    dependencies:
-      buffer-alloc-unsafe: 1.1.0
-      buffer-fill: 1.0.0
-    dev: true
-    resolution:
-      integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
-  /buffer-fill/1.0.0:
-    dev: true
-    resolution:
-      integrity: sha1-+PeLdniYiO858gXNY39o5wISKyw=
-  /builtin-modules/1.1.1:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
-  /builtin-modules/2.0.0:
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==
-  /bundlesize/0.17.0:
-    dependencies:
-      axios: 0.17.1
-      brotli-size: 0.0.1
-      bytes: 3.0.0
-      ci-env: 1.7.0
-      commander: 2.19.0
-      github-build: 1.2.0
-      glob: 7.1.3
-      gzip-size: 4.1.0
-      prettycli: 1.4.3
-      read-pkg-up: 3.0.0
-    dev: true
-    engines:
-      npm: ^5.0.0
-    hasBin: true
-    resolution:
-      integrity: sha512-w/jYWQupw/eijqx4LV6PPr1z0HmfXT8SMCg9tls1a3xrr6/PtC22MoFrYJ8j/uPLSANRQ+8WiN/gXuhTY6wogQ==
-  /bytes/3.0.0:
-    dev: true
-    engines:
-      node: '>= 0.8'
-    resolution:
-      integrity: sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
-  /camelcase/4.1.0:
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
-  /caseless/0.12.0:
-    dev: true
-    resolution:
-      integrity: sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
-  /chalk/1.1.3:
-    dependencies:
-      ansi-styles: 2.2.1
-      escape-string-regexp: 1.0.5
-      has-ansi: 2.0.0
-      strip-ansi: 3.0.1
-      supports-color: 2.0.0
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
-  /chalk/2.1.0:
-    dependencies:
-      ansi-styles: 3.2.1
-      escape-string-regexp: 1.0.5
-      supports-color: 4.5.0
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==
-  /chalk/2.4.1:
-    dependencies:
-      ansi-styles: 3.2.1
-      escape-string-regexp: 1.0.5
-      supports-color: 5.5.0
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==
-  /chownr/1.1.1:
-    dev: true
-    resolution:
-      integrity: sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
-  /ci-env/1.7.0:
-    dev: true
-    resolution:
-      integrity: sha512-ifHfV5JmACoTnoPxwjKjUUAekL1UCKZ9EU27GaaSkLVopkV3H1w0eYIpY+aAiX31SVEtTrZFMS94EFETSj0vIA==
-  /clean-css/4.1.11:
-    dependencies:
-      source-map: 0.5.7
-    dev: true
-    engines:
-      node: '>= 4.0'
-    resolution:
-      integrity: sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=
-  /clipboard/2.0.4:
-    dependencies:
-      good-listener: 1.2.2
-      select: 1.1.2
-      tiny-emitter: 2.0.2
-    dev: false
-    optional: true
-    resolution:
-      integrity: sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ==
-  /code-point-at/1.1.0:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
-  /color-convert/1.9.3:
-    dependencies:
-      color-name: 1.1.3
-    dev: true
-    resolution:
-      integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
-  /color-name/1.1.3:
-    dev: true
-    resolution:
-      integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-  /combined-stream/1.0.7:
-    dependencies:
-      delayed-stream: 1.0.0
-    dev: true
-    engines:
-      node: '>= 0.8'
-    resolution:
-      integrity: sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==
-  /commander/2.19.0:
-    dev: true
-    resolution:
-      integrity: sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
-  /concat-map/0.0.1:
-    dev: true
-    resolution:
-      integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-  /console-control-strings/1.1.0:
-    dev: true
-    resolution:
-      integrity: sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
-  /consolidate/0.15.1:
-    dependencies:
-      bluebird: 3.5.1
-    dev: true
-    engines:
-      node: '>= 0.10.0'
-    resolution:
-      integrity: sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==
-  /convert-source-map/1.6.0:
-    dependencies:
-      safe-buffer: 5.1.2
-    dev: true
-    resolution:
-      integrity: sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==
-  /core-js/2.5.7:
-    dev: true
-    resolution:
-      integrity: sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==
-  /core-util-is/1.0.2:
-    dev: true
-    resolution:
-      integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-  /css-selector-tokenizer/0.7.0:
-    dependencies:
-      cssesc: 0.1.0
-      fastparse: 1.1.1
-      regexpu-core: 1.0.0
-    dev: true
-    resolution:
-      integrity: sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=
-  /cssesc/0.1.0:
-    dev: true
-    hasBin: true
-    resolution:
-      integrity: sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=
-  /dashdash/1.14.1:
-    dependencies:
-      assert-plus: 1.0.0
-    dev: true
-    engines:
-      node: '>=0.10'
-    resolution:
-      integrity: sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
-  /de-indent/1.0.2:
-    resolution:
-      integrity: sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
-  /debug/2.6.9:
-    dependencies:
-      ms: 2.0.0
-    dev: true
-    resolution:
-      integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
-  /debug/3.1.0:
-    dependencies:
-      ms: 2.0.0
-    dev: true
-    resolution:
-      integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
-  /debug/4.1.0:
-    dependencies:
-      ms: 2.1.1
-    dev: true
-    resolution:
-      integrity: sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==
-  /decompress-response/3.3.0:
-    dependencies:
-      mimic-response: 1.0.1
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
-  /deep-extend/0.6.0:
-    dev: true
-    engines:
-      node: '>=4.0.0'
-    resolution:
-      integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-  /define-properties/1.1.3:
-    dependencies:
-      object-keys: 1.0.12
-    dev: true
-    engines:
-      node: '>= 0.4'
-    resolution:
-      integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
-  /delayed-stream/1.0.0:
-    dev: true
-    engines:
-      node: '>=0.4.0'
-    resolution:
-      integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
-  /delegate/3.2.0:
-    dev: false
-    optional: true
-    resolution:
-      integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
-  /delegates/1.0.0:
-    dev: true
-    resolution:
-      integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
-  /detect-libc/0.2.0:
-    dev: true
-    engines:
-      node: '>=4'
-    hasBin: true
-    resolution:
-      integrity: sha1-R/31ZzSKF+wl/L8LnkRjSKdvn7U=
-  /detect-libc/1.0.3:
-    dev: true
-    engines:
-      node: '>=0.10'
-    hasBin: true
-    resolution:
-      integrity: sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
-  /dot-prop/4.2.0:
-    dependencies:
-      is-obj: 1.0.1
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==
-  /duplexer/0.1.1:
-    dev: true
-    resolution:
-      integrity: sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
-  /ecc-jsbn/0.1.2:
-    dependencies:
-      jsbn: 0.1.1
-      safer-buffer: 2.1.2
-    dev: true
-    resolution:
-      integrity: sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
-  /emojis-list/2.1.0:
-    dev: true
-    engines:
-      node: '>= 0.10'
-    resolution:
-      integrity: sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
-  /end-of-stream/1.4.1:
-    dependencies:
-      once: 1.4.0
-    dev: true
-    resolution:
-      integrity: sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
-  /error-ex/1.3.2:
-    dependencies:
-      is-arrayish: 0.2.1
-    dev: true
-    resolution:
-      integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
-  /es-abstract/1.12.0:
-    dependencies:
-      es-to-primitive: 1.2.0
-      function-bind: 1.1.1
-      has: 1.0.3
-      is-callable: 1.1.4
-      is-regex: 1.0.4
-    dev: true
-    engines:
-      node: '>= 0.4'
-    resolution:
-      integrity: sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==
-  /es-to-primitive/1.2.0:
-    dependencies:
-      is-callable: 1.1.4
-      is-date-object: 1.0.1
-      is-symbol: 1.0.2
-    dev: true
-    engines:
-      node: '>= 0.4'
-    resolution:
-      integrity: sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
-  /escape-string-regexp/1.0.5:
-    dev: true
-    engines:
-      node: '>=0.8.0'
-    resolution:
-      integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-  /estree-walker/0.5.2:
-    dev: true
-    resolution:
-      integrity: sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==
-  /esutils/2.0.2:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
-  /expand-brackets/0.1.5:
-    dependencies:
-      is-posix-bracket: 0.1.1
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
-  /expand-range/1.8.2:
-    dependencies:
-      fill-range: 2.2.4
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
-  /expand-template/1.1.1:
-    dev: true
-    resolution:
-      integrity: sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==
-  /extend/3.0.2:
-    dev: true
-    resolution:
-      integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
-  /extglob/0.3.2:
-    dependencies:
-      is-extglob: 1.0.0
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
-  /extsprintf/1.3.0:
-    dev: true
-    engines:
-      '0': node >=0.6.0
-    resolution:
-      integrity: sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
-  /extsprintf/1.4.0:
-    dev: true
-    engines:
-      '0': node >=0.6.0
-    resolution:
-      integrity: sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
-  /fast-deep-equal/2.0.1:
-    dev: true
-    resolution:
-      integrity: sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
-  /fast-json-stable-stringify/2.0.0:
-    dev: true
-    resolution:
-      integrity: sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
-  /fastparse/1.1.1:
-    dev: true
-    resolution:
-      integrity: sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=
-  /filename-regex/2.0.1:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=
-  /fill-range/2.2.4:
-    dependencies:
-      is-number: 2.1.0
-      isobject: 2.1.0
-      randomatic: 3.1.1
-      repeat-element: 1.1.3
-      repeat-string: 1.6.1
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==
-  /find-up/2.1.0:
-    dependencies:
-      locate-path: 2.0.0
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
-  /follow-redirects/1.0.0:
-    dependencies:
-      debug: 2.6.9
-    dev: true
-    resolution:
-      integrity: sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=
-  /follow-redirects/1.5.10:
-    dependencies:
-      debug: 3.1.0
-    dev: true
-    engines:
-      node: '>=4.0'
-    resolution:
-      integrity: sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
-  /for-in/1.0.2:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
-  /for-own/0.1.5:
-    dependencies:
-      for-in: 1.0.2
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
-  /forever-agent/0.6.1:
-    dev: true
-    resolution:
-      integrity: sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
-  /form-data/2.3.3:
-    dependencies:
-      asynckit: 0.4.0
-      combined-stream: 1.0.7
-      mime-types: 2.1.21
-    dev: true
-    engines:
-      node: '>= 0.12'
-    resolution:
-      integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
-  /fs-constants/1.0.0:
-    dev: true
-    resolution:
-      integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
-  /fs-readdir-recursive/1.1.0:
-    dev: true
-    resolution:
-      integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==
-  /fs.realpath/1.0.0:
-    dev: true
-    resolution:
-      integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-  /fstream/1.0.11:
-    dependencies:
-      graceful-fs: 4.1.15
-      inherits: 2.0.3
-      mkdirp: 0.5.1
-      rimraf: 2.6.2
-    dev: true
-    engines:
-      node: '>=0.6'
-    resolution:
-      integrity: sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=
-  /function-bind/1.1.1:
-    dev: true
-    resolution:
-      integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-  /gauge/2.7.4:
-    dependencies:
-      aproba: 1.2.0
-      console-control-strings: 1.1.0
-      has-unicode: 2.0.1
-      object-assign: 4.1.1
-      signal-exit: 3.0.2
-      string-width: 1.0.2
-      strip-ansi: 3.0.1
-      wide-align: 1.1.3
-    dev: true
-    resolution:
-      integrity: sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
-  /generic-names/1.0.3:
-    dependencies:
-      loader-utils: 0.2.17
-    dev: true
-    resolution:
-      integrity: sha1-LXhqEhruUIh2eWk56OO/+DbCCRc=
-  /getpass/0.1.7:
-    dependencies:
-      assert-plus: 1.0.0
-    dev: true
-    resolution:
-      integrity: sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
-  /github-build/1.2.0:
-    dependencies:
-      axios: 0.15.3
-    dev: true
-    resolution:
-      integrity: sha512-Iq7NialLYz5yRZDkiX8zaOWd+N3BssJJfUvG7wd8r4MeLCN88SdxEYo2esseMLpLtP4vNXhgamg1eRm7hw59qw==
-  /github-from-package/0.0.0:
-    dev: true
-    resolution:
-      integrity: sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=
-  /glob-base/0.3.0:
-    dependencies:
-      glob-parent: 2.0.0
-      is-glob: 2.0.1
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
-  /glob-parent/2.0.0:
-    dependencies:
-      is-glob: 2.0.1
-    dev: true
-    resolution:
-      integrity: sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
-  /glob/7.1.3:
-    dependencies:
-      fs.realpath: 1.0.0
-      inflight: 1.0.6
-      inherits: 2.0.3
-      minimatch: 3.0.4
-      once: 1.4.0
-      path-is-absolute: 1.0.1
-    dev: true
-    resolution:
-      integrity: sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
-  /globals/11.9.0:
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==
-  /good-listener/1.2.2:
-    dependencies:
-      delegate: 3.2.0
-    dev: false
-    optional: true
-    resolution:
-      integrity: sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=
-  /graceful-fs/4.1.15:
-    dev: true
-    resolution:
-      integrity: sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
-  /gzip-size/4.1.0:
-    dependencies:
-      duplexer: 0.1.1
-      pify: 3.0.0
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=
-  /hammerjs/2.0.8:
-    dev: false
-    engines:
-      node: '>=0.8.0'
-    resolution:
-      integrity: sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=
-  /har-schema/2.0.0:
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
-  /har-validator/5.1.3:
-    dependencies:
-      ajv: 6.5.5
-      har-schema: 2.0.0
-    dev: true
-    engines:
-      node: '>=6'
-    resolution:
-      integrity: sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
-  /has-ansi/2.0.0:
-    dependencies:
-      ansi-regex: 2.1.1
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
-  /has-flag/1.0.0:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
-  /has-flag/2.0.0:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=
-  /has-flag/3.0.0:
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-  /has-symbols/1.0.0:
-    dev: true
-    engines:
-      node: '>= 0.4'
-    resolution:
-      integrity: sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
-  /has-unicode/2.0.1:
-    dev: true
-    resolution:
-      integrity: sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
-  /has/1.0.3:
-    dependencies:
-      function-bind: 1.1.1
-    dev: true
-    engines:
-      node: '>= 0.4.0'
-    resolution:
-      integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
-  /hash-sum/1.0.2:
-    dev: true
-    resolution:
-      integrity: sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=
-  /he/1.2.0:
-    dev: true
-    hasBin: true
-    resolution:
-      integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
-  /hosted-git-info/2.7.1:
-    dev: true
-    resolution:
-      integrity: sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==
-  /http-signature/1.2.0:
-    dependencies:
-      assert-plus: 1.0.0
-      jsprim: 1.4.1
-      sshpk: 1.15.2
-    dev: true
-    engines:
-      node: '>=0.8'
-      npm: '>=1.3.7'
-    resolution:
-      integrity: sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
-  /icss-replace-symbols/1.1.0:
-    dev: true
-    resolution:
-      integrity: sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
-  /iltorb/1.3.10:
-    dependencies:
-      detect-libc: 0.2.0
-      nan: 2.11.1
-      node-gyp: 3.8.0
-      prebuild-install: 2.5.3
-    dev: true
-    requiresBuild: true
-    resolution:
-      integrity: sha512-nyB4+ru1u8CQqQ6w7YjasboKN3NQTN8GH/V/eEssNRKhW6UbdxdWhB9fJ5EEdjJfezKY0qPrcwLyIcgjL8hHxA==
-  /indexes-of/1.0.1:
-    dev: true
-    resolution:
-      integrity: sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
-  /inflight/1.0.6:
-    dependencies:
-      once: 1.4.0
-      wrappy: 1.0.2
-    dev: true
-    resolution:
-      integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
-  /inherits/2.0.3:
-    dev: true
-    resolution:
-      integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-  /ini/1.3.5:
-    dev: true
-    resolution:
-      integrity: sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
-  /is-arrayish/0.2.1:
-    dev: true
-    resolution:
-      integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
-  /is-buffer/1.1.6:
-    dev: true
-    resolution:
-      integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-  /is-builtin-module/1.0.0:
-    dependencies:
-      builtin-modules: 1.1.1
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
-  /is-callable/1.1.4:
-    dev: true
-    engines:
-      node: '>= 0.4'
-    resolution:
-      integrity: sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
-  /is-date-object/1.0.1:
-    dev: true
-    engines:
-      node: '>= 0.4'
-    resolution:
-      integrity: sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
-  /is-dotfile/1.0.3:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=
-  /is-equal-shallow/0.1.3:
-    dependencies:
-      is-primitive: 2.0.0
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
-  /is-extendable/0.1.1:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
-  /is-extglob/1.0.0:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
-  /is-fullwidth-code-point/1.0.0:
-    dependencies:
-      number-is-nan: 1.0.1
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
-  /is-fullwidth-code-point/2.0.0:
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
-  /is-glob/2.0.1:
-    dependencies:
-      is-extglob: 1.0.0
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
-  /is-module/1.0.0:
-    dev: true
-    resolution:
-      integrity: sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=
-  /is-number/2.1.0:
-    dependencies:
-      kind-of: 3.2.2
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
-  /is-number/4.0.0:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
-  /is-obj/1.0.1:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
-  /is-posix-bracket/0.1.1:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
-  /is-primitive/2.0.0:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
-  /is-regex/1.0.4:
-    dependencies:
-      has: 1.0.3
-    dev: true
-    engines:
-      node: '>= 0.4'
-    resolution:
-      integrity: sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
-  /is-symbol/1.0.2:
-    dependencies:
-      has-symbols: 1.0.0
-    dev: true
-    engines:
-      node: '>= 0.4'
-    resolution:
-      integrity: sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
-  /is-typedarray/1.0.0:
-    dev: true
-    resolution:
-      integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
-  /isarray/1.0.0:
-    dev: true
-    resolution:
-      integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-  /isexe/2.0.0:
-    dev: true
-    resolution:
-      integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
-  /isobject/2.1.0:
-    dependencies:
-      isarray: 1.0.0
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
-  /isstream/0.1.2:
-    dev: true
-    resolution:
-      integrity: sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
-  /js-base64/2.4.5:
-    dev: true
-    resolution:
-      integrity: sha512-aUnNwqMOXw3yvErjMPSQu6qIIzUmT1e5KcU1OZxRDU1g/am6mzBvcrmLAYwzmB59BHPrh5/tKaiF4OPhqRWESQ==
-  /js-tokens/4.0.0:
-    dev: true
-    resolution:
-      integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-  /jsbn/0.1.1:
-    dev: true
-    resolution:
-      integrity: sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
-  /jsesc/0.5.0:
-    dev: true
-    hasBin: true
-    resolution:
-      integrity: sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
-  /jsesc/2.5.2:
-    dev: true
-    engines:
-      node: '>=4'
-    hasBin: true
-    resolution:
-      integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
-  /json-parse-better-errors/1.0.2:
-    dev: true
-    resolution:
-      integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
-  /json-schema-traverse/0.4.1:
-    dev: true
-    resolution:
-      integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
-  /json-schema/0.2.3:
-    dev: true
-    resolution:
-      integrity: sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
-  /json-stringify-safe/5.0.1:
-    dev: true
-    resolution:
-      integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
-  /json5/0.5.1:
-    dev: true
-    hasBin: true
-    resolution:
-      integrity: sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
-  /json5/2.1.0:
-    dependencies:
-      minimist: 1.2.0
-    dev: true
-    engines:
-      node: '>=6'
-    hasBin: true
-    resolution:
-      integrity: sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==
-  /jsprim/1.4.1:
-    dependencies:
-      assert-plus: 1.0.0
-      extsprintf: 1.3.0
-      json-schema: 0.2.3
-      verror: 1.10.0
-    dev: true
-    engines:
-      '0': node >=0.6.0
-    resolution:
-      integrity: sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
-  /kind-of/3.2.2:
-    dependencies:
-      is-buffer: 1.1.6
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
-  /kind-of/6.0.2:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
-  /load-json-file/4.0.0:
-    dependencies:
-      graceful-fs: 4.1.15
-      parse-json: 4.0.0
-      pify: 3.0.0
-      strip-bom: 3.0.0
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
-  /loader-utils/0.2.17:
-    dependencies:
-      big.js: 3.2.0
-      emojis-list: 2.1.0
-      json5: 0.5.1
-      object-assign: 4.1.1
-    dev: true
-    resolution:
-      integrity: sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=
-  /locate-path/2.0.0:
-    dependencies:
-      p-locate: 2.0.0
-      path-exists: 3.0.0
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
-  /lodash-es/4.17.11:
-    dev: false
-    resolution:
-      integrity: sha512-DHb1ub+rMjjrxqlB3H56/6MXtm1lSksDp2rA2cNWjG8mlDUYFhUj3Di2Zn5IwSU87xLv8tNIQ7sSwE/YOX/D/Q==
-  /lodash.isplainobject/4.0.6:
-    dev: true
-    resolution:
-      integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
-  /lodash.pick/4.4.0:
-    dev: true
-    resolution:
-      integrity: sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=
-  /lodash.some/4.6.0:
-    dev: true
-    resolution:
-      integrity: sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=
-  /lodash/4.17.11:
-    dev: true
-    resolution:
-      integrity: sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
-  /lru-cache/4.1.3:
-    dependencies:
-      pseudomap: 1.0.2
-      yallist: 2.1.2
-    dev: true
-    resolution:
-      integrity: sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==
-  /magic-string/0.22.5:
-    dependencies:
-      vlq: 0.2.3
-    dev: true
-    resolution:
-      integrity: sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==
-  /math-random/1.0.1:
-    dev: true
-    resolution:
-      integrity: sha1-izqsWIuKZuSXXjzepn97sylgH6w=
-  /merge-source-map/1.1.0:
-    dependencies:
-      source-map: 0.6.1
-    dev: true
-    resolution:
-      integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==
-  /micromatch/2.3.11:
-    dependencies:
-      arr-diff: 2.0.0
-      array-unique: 0.2.1
-      braces: 1.8.5
-      expand-brackets: 0.1.5
-      extglob: 0.3.2
-      filename-regex: 2.0.1
-      is-extglob: 1.0.0
-      is-glob: 2.0.1
-      kind-of: 3.2.2
-      normalize-path: 2.1.1
-      object.omit: 2.0.1
-      parse-glob: 3.0.4
-      regex-cache: 0.4.4
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
-  /mime-db/1.37.0:
-    dev: true
-    engines:
-      node: '>= 0.6'
-    resolution:
-      integrity: sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==
-  /mime-types/2.1.21:
-    dependencies:
-      mime-db: 1.37.0
-    dev: true
-    engines:
-      node: '>= 0.6'
-    resolution:
-      integrity: sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==
-  /mimic-response/1.0.1:
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
-  /minimatch/3.0.4:
-    dependencies:
-      brace-expansion: 1.1.11
-    dev: true
-    resolution:
-      integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
-  /minimist/0.0.8:
-    dev: true
-    resolution:
-      integrity: sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
-  /minimist/1.2.0:
-    dev: true
-    resolution:
-      integrity: sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
-  /mkdirp/0.5.1:
-    dependencies:
-      minimist: 0.0.8
-    dev: true
-    hasBin: true
-    resolution:
-      integrity: sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
-  /ms/2.0.0:
-    dev: true
-    resolution:
-      integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-  /ms/2.1.1:
-    dev: true
-    resolution:
-      integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
-  /nan/2.11.1:
-    dev: true
-    resolution:
-      integrity: sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==
-  /node-abi/2.5.0:
-    dependencies:
-      semver: 5.6.0
-    dev: true
-    resolution:
-      integrity: sha512-9g2twBGSP6wIR5PW7tXvAWnEWKJDH/VskdXp168xsw9VVxpEGov8K4jsP4/VeoC7b2ZAyzckvMCuQuQlw44lXg==
-  /node-gyp/3.8.0:
-    dependencies:
-      fstream: 1.0.11
-      glob: 7.1.3
-      graceful-fs: 4.1.15
-      mkdirp: 0.5.1
-      nopt: 3.0.6
-      npmlog: 4.1.2
-      osenv: 0.1.5
-      request: 2.88.0
-      rimraf: 2.6.2
-      semver: 5.3.0
-      tar: 2.2.1
-      which: 1.3.1
-    dev: true
-    engines:
-      node: '>= 0.8.0'
-    hasBin: true
-    resolution:
-      integrity: sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==
-  /noop-logger/0.1.1:
-    dev: true
-    resolution:
-      integrity: sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=
-  /nopt/3.0.6:
-    dependencies:
-      abbrev: 1.1.1
-    dev: true
-    hasBin: true
-    resolution:
-      integrity: sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
-  /normalize-package-data/2.4.0:
-    dependencies:
-      hosted-git-info: 2.7.1
-      is-builtin-module: 1.0.0
-      semver: 5.6.0
-      validate-npm-package-license: 3.0.4
-    dev: true
-    resolution:
-      integrity: sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==
-  /normalize-path/2.1.1:
-    dependencies:
-      remove-trailing-separator: 1.1.0
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
-  /npmlog/4.1.2:
-    dependencies:
-      are-we-there-yet: 1.1.5
-      console-control-strings: 1.1.0
-      gauge: 2.7.4
-      set-blocking: 2.0.0
-    dev: true
-    resolution:
-      integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
-  /number-is-nan/1.0.1:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
-  /nyc/11.9.0:
-    bundledDependencies:
-      - archy
-      - arrify
-      - caching-transform
-      - convert-source-map
-      - debug-log
-      - default-require-extensions
-      - find-cache-dir
-      - find-up
-      - foreground-child
-      - glob
-      - istanbul-lib-coverage
-      - istanbul-lib-hook
-      - istanbul-lib-instrument
-      - istanbul-lib-report
-      - istanbul-lib-source-maps
-      - istanbul-reports
-      - md5-hex
-      - merge-source-map
-      - micromatch
-      - mkdirp
-      - resolve-from
-      - rimraf
-      - signal-exit
-      - spawn-wrap
-      - test-exclude
-      - yargs
-      - yargs-parser
-    dev: false
-    hasBin: true
-    resolution:
-      integrity: sha512-w8OdJAhXL5izerzZMdqzYKMj/pgHJyY3qEPYBjLLxrhcVoHEY9pU5ENIiZyCgG9OR7x3VcUMoD40o6PtVpfR4g==
-  /oauth-sign/0.9.0:
-    dev: true
-    resolution:
-      integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
-  /object-assign/4.1.1:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
-  /object-keys/1.0.12:
-    dev: true
-    engines:
-      node: '>= 0.4'
-    resolution:
-      integrity: sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==
-  /object.getownpropertydescriptors/2.0.3:
-    dependencies:
-      define-properties: 1.1.3
-      es-abstract: 1.12.0
-    dev: true
-    engines:
-      node: '>= 0.8'
-    resolution:
-      integrity: sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=
-  /object.omit/2.0.1:
-    dependencies:
-      for-own: 0.1.5
-      is-extendable: 0.1.1
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
-  /once/1.4.0:
-    dependencies:
-      wrappy: 1.0.2
-    dev: true
-    resolution:
-      integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
-  /os-homedir/1.0.2:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
-  /os-tmpdir/1.0.2:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
-  /osenv/0.1.5:
-    dependencies:
-      os-homedir: 1.0.2
-      os-tmpdir: 1.0.2
-    dev: true
-    resolution:
-      integrity: sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
-  /p-limit/1.3.0:
-    dependencies:
-      p-try: 1.0.0
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
-  /p-locate/2.0.0:
-    dependencies:
-      p-limit: 1.3.0
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
-  /p-try/1.0.0:
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
-  /parse-glob/3.0.4:
-    dependencies:
-      glob-base: 0.3.0
-      is-dotfile: 1.0.3
-      is-extglob: 1.0.0
-      is-glob: 2.0.1
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
-  /parse-json/4.0.0:
-    dependencies:
-      error-ex: 1.3.2
-      json-parse-better-errors: 1.0.2
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
-  /path-exists/3.0.0:
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
-  /path-is-absolute/1.0.1:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-  /path-parse/1.0.5:
-    dev: true
-    resolution:
-      integrity: sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=
-  /path-parse/1.0.6:
-    dev: true
-    resolution:
-      integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
-  /path-type/3.0.0:
-    dependencies:
-      pify: 3.0.0
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
-  /performance-now/2.1.0:
-    dev: true
-    resolution:
-      integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
-  /pify/3.0.0:
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
-  /postcss-modules-local-by-default/1.2.0:
-    dependencies:
-      css-selector-tokenizer: 0.7.0
-      postcss: 6.0.22
-    dev: true
-    resolution:
-      integrity: sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=
-  /postcss-modules-scope/1.1.0:
-    dependencies:
-      css-selector-tokenizer: 0.7.0
-      postcss: 6.0.22
-    dev: true
-    resolution:
-      integrity: sha1-1upkmUx5+XtipytCb75gVqGUu5A=
-  /postcss-modules-sync/1.0.0:
-    dependencies:
-      generic-names: 1.0.3
-      icss-replace-symbols: 1.1.0
-      postcss: 5.2.18
-      postcss-modules-local-by-default: 1.2.0
-      postcss-modules-scope: 1.1.0
-      string-hash: 1.1.3
-    dev: true
-    resolution:
-      integrity: sha1-YZpxnPeN0WpINBNRQLMkz3czS+E=
-  /postcss-selector-parser/3.1.1:
-    dependencies:
-      dot-prop: 4.2.0
-      indexes-of: 1.0.1
-      uniq: 1.0.1
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=
-  /postcss/5.2.18:
-    dependencies:
-      chalk: 1.1.3
-      js-base64: 2.4.5
-      source-map: 0.5.7
-      supports-color: 3.2.3
-    dev: true
-    engines:
-      node: '>=0.12'
-    resolution:
-      integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==
-  /postcss/6.0.22:
-    dependencies:
-      chalk: 2.4.1
-      source-map: 0.6.1
-      supports-color: 5.4.0
-    dev: true
-    engines:
-      node: '>=4.0.0'
-    resolution:
-      integrity: sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==
-  /prebuild-install/2.5.3:
-    dependencies:
-      detect-libc: 1.0.3
-      expand-template: 1.1.1
-      github-from-package: 0.0.0
-      minimist: 1.2.0
-      mkdirp: 0.5.1
-      node-abi: 2.5.0
-      noop-logger: 0.1.1
-      npmlog: 4.1.2
-      os-homedir: 1.0.2
-      pump: 2.0.1
-      rc: 1.2.8
-      simple-get: 2.8.1
-      tar-fs: 1.16.3
-      tunnel-agent: 0.6.0
-      which-pm-runs: 1.0.0
-    dev: true
-    hasBin: true
-    resolution:
-      integrity: sha512-/rI36cN2g7vDQnKWN8Uzupi++KjyqS9iS+/fpwG4Ea8d0Pip0PQ5bshUNzVwt+/D2MRfhVAplYMMvWLqWrCF/g==
-  /preserve/0.2.0:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
-  /prettier/1.13.3:
-    dev: true
-    engines:
-      node: '>=4'
-    hasBin: true
-    resolution:
-      integrity: sha512-CIWJNU+cFFdeA0GJSzzFkxiq2WuMvWZMlz6cV/EXhPlRnI3esSFMh+lNmyZ8z/X8O8C1U60Sc8puXALj4/WmZw==
-  /prettycli/1.4.3:
-    dependencies:
-      chalk: 2.1.0
-    dev: true
-    resolution:
-      integrity: sha512-KLiwAXXfSWXZqGmZlnKPuGMTFp+0QbcySplL1ft9gfteT/BNsG64Xo8u2Qr9r+qnsIZWBQ66Zs8tg+8s2fmzvw==
-  /prismjs/1.15.0:
-    dev: false
-    optionalDependencies:
-      clipboard: 2.0.4
-    resolution:
-      integrity: sha512-Lf2JrFYx8FanHrjoV5oL8YHCclLQgbJcVZR+gikGGMqz6ub5QVWDTM6YIwm3BuPxM/LOV+rKns3LssXNLIf+DA==
-  /process-nextick-args/2.0.0:
-    dev: true
-    resolution:
-      integrity: sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
-  /pseudomap/1.0.2:
-    dev: true
-    resolution:
-      integrity: sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
-  /psl/1.1.29:
-    dev: true
-    resolution:
-      integrity: sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==
-  /pump/1.0.3:
-    dependencies:
-      end-of-stream: 1.4.1
-      once: 1.4.0
-    dev: true
-    resolution:
-      integrity: sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==
-  /pump/2.0.1:
-    dependencies:
-      end-of-stream: 1.4.1
-      once: 1.4.0
-    dev: true
-    resolution:
-      integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
-  /punycode/1.4.1:
-    dev: true
-    resolution:
-      integrity: sha1-wNWmOycYgArY4esPpSachN1BhF4=
-  /punycode/2.1.1:
-    dev: true
-    engines:
-      node: '>=6'
-    resolution:
-      integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
-  /qs/6.5.2:
-    dev: true
-    engines:
-      node: '>=0.6'
-    resolution:
-      integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
-  /querystring/0.2.0:
-    dev: true
-    engines:
-      node: '>=0.4.x'
-    resolution:
-      integrity: sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
-  /randomatic/3.1.1:
-    dependencies:
-      is-number: 4.0.0
-      kind-of: 6.0.2
-      math-random: 1.0.1
-    dev: true
-    engines:
-      node: '>= 0.10.0'
-    resolution:
-      integrity: sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==
-  /rc/1.2.8:
-    dependencies:
-      deep-extend: 0.6.0
-      ini: 1.3.5
-      minimist: 1.2.0
-      strip-json-comments: 2.0.1
-    dev: true
-    hasBin: true
-    resolution:
-      integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
-  /read-pkg-up/3.0.0:
-    dependencies:
-      find-up: 2.1.0
-      read-pkg: 3.0.0
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=
-  /read-pkg/3.0.0:
-    dependencies:
-      load-json-file: 4.0.0
-      normalize-package-data: 2.4.0
-      path-type: 3.0.0
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
-  /readable-stream/2.3.6:
-    dependencies:
-      core-util-is: 1.0.2
-      inherits: 2.0.3
-      isarray: 1.0.0
-      process-nextick-args: 2.0.0
-      safe-buffer: 5.1.2
-      string_decoder: 1.1.1
-      util-deprecate: 1.0.2
-    dev: true
-    resolution:
-      integrity: sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
-  /regenerate/1.4.0:
-    dev: true
-    resolution:
-      integrity: sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
-  /regenerator-runtime/0.11.1:
-    dev: true
-    resolution:
-      integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
-  /regex-cache/0.4.4:
-    dependencies:
-      is-equal-shallow: 0.1.3
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==
-  /regexpu-core/1.0.0:
-    dependencies:
-      regenerate: 1.4.0
-      regjsgen: 0.2.0
-      regjsparser: 0.1.5
-    dev: true
-    resolution:
-      integrity: sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=
-  /regjsgen/0.2.0:
-    dev: true
-    resolution:
-      integrity: sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=
-  /regjsparser/0.1.5:
-    dependencies:
-      jsesc: 0.5.0
-    dev: true
-    hasBin: true
-    resolution:
-      integrity: sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=
-  /remove-trailing-separator/1.1.0:
-    dev: true
-    resolution:
-      integrity: sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
-  /repeat-element/1.1.3:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
-  /repeat-string/1.6.1:
-    dev: true
-    engines:
-      node: '>=0.10'
-    resolution:
-      integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc=
-  /request/2.88.0:
-    dependencies:
-      aws-sign2: 0.7.0
-      aws4: 1.8.0
-      caseless: 0.12.0
-      combined-stream: 1.0.7
-      extend: 3.0.2
-      forever-agent: 0.6.1
-      form-data: 2.3.3
-      har-validator: 5.1.3
-      http-signature: 1.2.0
-      is-typedarray: 1.0.0
-      isstream: 0.1.2
-      json-stringify-safe: 5.0.1
-      mime-types: 2.1.21
-      oauth-sign: 0.9.0
-      performance-now: 2.1.0
-      qs: 6.5.2
-      safe-buffer: 5.1.2
-      tough-cookie: 2.4.3
-      tunnel-agent: 0.6.0
-      uuid: 3.3.2
-    dev: true
-    engines:
-      node: '>= 4'
-    resolution:
-      integrity: sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
-  /resize-observer-polyfill/1.5.0:
-    dev: false
-    resolution:
-      integrity: sha512-M2AelyJDVR/oLnToJLtuDJRBBWUGUvvGigj1411hXhAdyFWqMaqHp7TixW3FpiLuVaikIcR1QL+zqoJoZlOgpg==
-  /resolve/1.7.1:
-    dependencies:
-      path-parse: 1.0.5
-    dev: true
-    resolution:
-      integrity: sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==
-  /resolve/1.8.1:
-    dependencies:
-      path-parse: 1.0.6
-    dev: true
-    resolution:
-      integrity: sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==
-  /rimraf/2.6.2:
-    dependencies:
-      glob: 7.1.3
-    dev: true
-    hasBin: true
-    resolution:
-      integrity: sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==
-  /rollup-plugin-commonjs/9.1.3:
-    dependencies:
-      estree-walker: 0.5.2
-      magic-string: 0.22.5
-      resolve: 1.7.1
-      rollup-pluginutils: 2.3.0
-    dev: true
-    peerDependencies:
-      rollup: '>=0.56.0'
-    resolution:
-      integrity: sha512-g91ZZKZwTW7F7vL6jMee38I8coj/Q9GBdTmXXeFL7ldgC1Ky5WJvHgbKlAiXXTh762qvohhExwUgeQGFh9suGg==
-  /rollup-plugin-node-resolve/3.3.0:
-    dependencies:
-      builtin-modules: 2.0.0
-      is-module: 1.0.0
-      resolve: 1.7.1
-    dev: true
-    resolution:
-      integrity: sha512-9zHGr3oUJq6G+X0oRMYlzid9fXicBdiydhwGChdyeNRGPcN/majtegApRKHLR5drboUvEWU+QeUmGTyEZQs3WA==
-  /rollup-plugin-replace/2.0.0:
-    dependencies:
-      magic-string: 0.22.5
-      minimatch: 3.0.4
-      rollup-pluginutils: 2.3.0
-    dev: true
-    resolution:
-      integrity: sha512-pK9mTd/FNrhtBxcTBXoh0YOwRIShV0gGhv9qvUtNcXHxIMRZMXqfiZKVBmCRGp8/2DJRy62z2JUE7/5tP6WxOQ==
-  /rollup-plugin-vue/4.2.0:
-    dependencies:
-      '@babel/runtime': 7.0.0-beta.49
-      '@vue/component-compiler': /@vue/component-compiler/3.3.3/postcss@6.0.22
-      '@vue/component-compiler-utils': 1.3.1
-      debug: 2.6.9
-      hash-sum: 1.0.2
-      postcss: 6.0.22
-      querystring: 0.2.0
-      rollup-pluginutils: 2.3.0
-    dev: true
-    peerDependencies:
-      vue-template-compiler: '*'
-    resolution:
-      integrity: sha512-n8NDvhYtA9HC3hRyLNAV+0Ei4FHlaOB8LoiXxVwYclgHxOR4aku57zIw8EPf+ETSf45w49UP4VUXgpX6XNwdOA==
-  /rollup-pluginutils/2.3.0:
-    dependencies:
-      estree-walker: 0.5.2
-      micromatch: 2.3.11
-    dev: true
-    resolution:
-      integrity: sha512-xB6hsRsjdJdIYWEyYUJy/3ki5g69wrf0luHPGNK3ZSocV6HLNfio59l3dZ3TL4xUwEKgROhFi9jOCt6c5gfUWw==
-  /rollup/0.59.4:
-    dependencies:
-      '@types/estree': 0.0.39
-      '@types/node': 10.3.0
-    dev: true
-    hasBin: true
-    resolution:
-      integrity: sha512-ISiMqq/aJa+57QxX2MRcvLESHdJ7wSavmr6U1euMr+6UgFe6KM+3QANrYy8LQofwhTC1I7BcAdlLnDiaODs1BA==
-  /safe-buffer/5.1.2:
-    dev: true
-    resolution:
-      integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-  /safer-buffer/2.1.2:
-    dev: true
-    resolution:
-      integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-  /select/1.1.2:
-    dev: false
-    optional: true
-    resolution:
-      integrity: sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=
-  /semver/5.3.0:
-    dev: true
-    hasBin: true
-    resolution:
-      integrity: sha1-myzl094C0XxgEq0yaqa00M9U+U8=
-  /semver/5.6.0:
-    dev: true
-    hasBin: true
-    resolution:
-      integrity: sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
-  /set-blocking/2.0.0:
-    dev: true
-    resolution:
-      integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
-  /signal-exit/3.0.2:
-    dev: true
-    resolution:
-      integrity: sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
-  /simple-concat/1.0.0:
-    dev: true
-    resolution:
-      integrity: sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=
-  /simple-get/2.8.1:
-    dependencies:
-      decompress-response: 3.3.0
-      once: 1.4.0
-      simple-concat: 1.0.0
-    dev: true
-    resolution:
-      integrity: sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==
-  /source-map/0.5.7:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
-  /source-map/0.6.1:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-  /spdx-correct/3.0.2:
-    dependencies:
-      spdx-expression-parse: 3.0.0
-      spdx-license-ids: 3.0.2
-    dev: true
-    resolution:
-      integrity: sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==
-  /spdx-exceptions/2.2.0:
-    dev: true
-    resolution:
-      integrity: sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
-  /spdx-expression-parse/3.0.0:
-    dependencies:
-      spdx-exceptions: 2.2.0
-      spdx-license-ids: 3.0.2
-    dev: true
-    resolution:
-      integrity: sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
-  /spdx-license-ids/3.0.2:
-    dev: true
-    resolution:
-      integrity: sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==
-  /sshpk/1.15.2:
-    dependencies:
-      asn1: 0.2.4
-      assert-plus: 1.0.0
-      bcrypt-pbkdf: 1.0.2
-      dashdash: 1.14.1
-      ecc-jsbn: 0.1.2
-      getpass: 0.1.7
-      jsbn: 0.1.1
-      safer-buffer: 2.1.2
-      tweetnacl: 0.14.5
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    hasBin: true
-    resolution:
-      integrity: sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==
-  /string-hash/1.1.3:
-    dev: true
-    resolution:
-      integrity: sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=
-  /string-width/1.0.2:
-    dependencies:
-      code-point-at: 1.1.0
-      is-fullwidth-code-point: 1.0.0
-      strip-ansi: 3.0.1
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
-  /string-width/2.1.1:
-    dependencies:
-      is-fullwidth-code-point: 2.0.0
-      strip-ansi: 4.0.0
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
-  /string_decoder/1.1.1:
-    dependencies:
-      safe-buffer: 5.1.2
-    dev: true
-    resolution:
-      integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
-  /strip-ansi/3.0.1:
-    dependencies:
-      ansi-regex: 2.1.1
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
-  /strip-ansi/4.0.0:
-    dependencies:
-      ansi-regex: 3.0.0
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8=
-  /strip-bom/3.0.0:
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
-  /strip-json-comments/2.0.1:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=
-  /supports-color/2.0.0:
-    dev: true
-    engines:
-      node: '>=0.8.0'
-    resolution:
-      integrity: sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
-  /supports-color/3.2.3:
-    dependencies:
-      has-flag: 1.0.0
-    dev: true
-    engines:
-      node: '>=0.8.0'
-    resolution:
-      integrity: sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=
-  /supports-color/4.5.0:
-    dependencies:
-      has-flag: 2.0.0
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=
-  /supports-color/5.4.0:
-    dependencies:
-      has-flag: 3.0.0
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==
-  /supports-color/5.5.0:
-    dependencies:
-      has-flag: 3.0.0
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
-  /tar-fs/1.16.3:
-    dependencies:
-      chownr: 1.1.1
-      mkdirp: 0.5.1
-      pump: 1.0.3
-      tar-stream: 1.6.2
-    dev: true
-    resolution:
-      integrity: sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==
-  /tar-stream/1.6.2:
-    dependencies:
-      bl: 1.2.2
-      buffer-alloc: 1.2.0
-      end-of-stream: 1.4.1
-      fs-constants: 1.0.0
-      readable-stream: 2.3.6
-      to-buffer: 1.1.1
-      xtend: 4.0.1
-    dev: true
-    engines:
-      node: '>= 0.8.0'
-    resolution:
-      integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
-  /tar/2.2.1:
-    dependencies:
-      block-stream: 0.0.9
-      fstream: 1.0.11
-      inherits: 2.0.3
-    dev: true
-    resolution:
-      integrity: sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=
-  /tiny-emitter/2.0.2:
-    dev: false
-    optional: true
-    resolution:
-      integrity: sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==
-  /to-buffer/1.1.1:
-    dev: true
-    resolution:
-      integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
-  /to-fast-properties/2.0.0:
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
-  /tough-cookie/2.4.3:
-    dependencies:
-      psl: 1.1.29
-      punycode: 1.4.1
-    dev: true
-    engines:
-      node: '>=0.8'
-    resolution:
-      integrity: sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
-  /trim-right/1.0.1:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
-  /tunnel-agent/0.6.0:
-    dependencies:
-      safe-buffer: 5.1.2
-    dev: true
-    resolution:
-      integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
-  /tweetnacl/0.14.5:
-    dev: true
-    resolution:
-      integrity: sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
-  /uniq/1.0.1:
-    dev: true
-    resolution:
-      integrity: sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
-  /uri-js/4.2.2:
-    dependencies:
-      punycode: 2.1.1
-    dev: true
-    resolution:
-      integrity: sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
-  /util-deprecate/1.0.2:
-    dev: true
-    resolution:
-      integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-  /util.promisify/1.0.0:
-    dependencies:
-      define-properties: 1.1.3
-      object.getownpropertydescriptors: 2.0.3
-    dev: true
-    resolution:
-      integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==
-  /uuid/3.3.2:
-    dev: true
-    hasBin: true
-    resolution:
-      integrity: sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
-  /validate-npm-package-license/3.0.4:
-    dependencies:
-      spdx-correct: 3.0.2
-      spdx-expression-parse: 3.0.0
-    dev: true
-    resolution:
-      integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
-  /velocity-animate/1.5.2:
-    dev: false
-    resolution:
-      integrity: sha512-m6EXlCAMetKztO1ppBhGU1/1MR3IiEevO6ESq6rcrSQ3Q77xYSW13jkfXW88o4xMrkXJhy/U7j4wFR/twMB0Eg==
-  /verror/1.10.0:
-    dependencies:
-      assert-plus: 1.0.0
-      core-util-is: 1.0.2
-      extsprintf: 1.4.0
-    dev: true
-    engines:
-      '0': node >=0.6.0
-    resolution:
-      integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
-  /vlq/0.2.3:
-    dev: true
-    resolution:
-      integrity: sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==
-  /vue-template-compiler/2.5.17:
-    dependencies:
-      de-indent: 1.0.2
-      he: 1.2.0
-    dev: true
-    resolution:
-      integrity: sha512-63uI4syCwtGR5IJvZM0LN5tVsahrelomHtCxvRkZPJ/Tf3ADm1U1wG6KWycK3qCfqR+ygM5vewUvmJ0REAYksg==
-  /vue-template-es2015-compiler/1.6.0:
-    dev: true
-    resolution:
-      integrity: sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==
-  /vue/2.5.17:
-    dev: true
-    resolution:
-      integrity: sha512-mFbcWoDIJi0w0Za4emyLiW72Jae0yjANHbCVquMKijcavBGypqlF7zHRgMa5k4sesdv7hv2rB4JPdZfR+TPfhQ==
-  /which-pm-runs/1.0.0:
-    dev: true
-    resolution:
-      integrity: sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=
-  /which/1.3.1:
-    dependencies:
-      isexe: 2.0.0
-    dev: true
-    hasBin: true
-    resolution:
-      integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
-  /wide-align/1.1.3:
-    dependencies:
-      string-width: 2.1.1
-    dev: true
-    resolution:
-      integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
-  /wrappy/1.0.2:
-    dev: true
-    resolution:
-      integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-  /xtend/4.0.1:
-    dev: true
-    engines:
-      node: '>=0.4'
-    resolution:
-      integrity: sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
-  /yallist/2.1.2:
-    dev: true
-    resolution:
-      integrity: sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
-  /yargs-parser/10.1.0:
-    dependencies:
-      camelcase: 4.1.0
-    dev: true
-    resolution:
-      integrity: sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==
-registry: 'https://registry.npmjs.org/'
-shrinkwrapMinorVersion: 9
-shrinkwrapVersion: 3
-specifiers:
-  '@keynote/core': ^1.1.3
-  '@keynote/theme-default': ^1.0.2
-  babel-helper-evaluate-path: ^0.5.0
-  babel-minify: ^0.5.0
-  bundlesize: ^0.17.0
-  rollup: ^0.59.3
-  rollup-plugin-commonjs: ^9.1.3
-  rollup-plugin-node-resolve: ^3.3.0
-  rollup-plugin-replace: ^2.0.0
-  rollup-plugin-vue: ^4.2.0
-  vue: ^2.5.17
-  vue-template-compiler: ^2.5.17
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..781c79c
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,19 @@
+dependencies:
+  '@types/node': 11.12.0
+  typescript: 3.3.4000
+lockfileVersion: 5
+packages:
+  /@types/node/11.12.0:
+    dev: false
+    resolution:
+      integrity: sha512-Lg00egj78gM+4aE0Erw05cuDbvX9sLJbaaPwwRtdCdAMnIudqrQZ0oZX98Ek0yiSK/A2nubHgJfvII/rTT2Dwg==
+  /typescript/3.3.4000:
+    dev: false
+    engines:
+      node: '>=4.2.0'
+    hasBin: true
+    resolution:
+      integrity: sha512-jjOcCZvpkl2+z7JFn0yBOoLQyLoIkNZAs/fYJkUG6VKy6zLPHJGfQJYFHzibB6GJaF/8QrcECtlQ5cpvRHSMEA==
+specifiers:
+  '@types/node': ^11.12.0
+  typescript: ^3.3.4000
diff --git a/pnpm-workspace.yml b/pnpm-workspace.yml
index 4f60f86..600b4bb 100644
--- a/pnpm-workspace.yml
+++ b/pnpm-workspace.yml
@@ -1,3 +1,2 @@
 packages:
   - 'packages/**'
-  - 'packages/@keynote/**'
\ No newline at end of file
diff --git a/pnpmfile.js b/pnpmfile.js
deleted file mode 100644
index bb6e588..0000000
--- a/pnpmfile.js
+++ /dev/null
@@ -1,26 +0,0 @@
-module.exports = {
-  hooks: {
-    readPackage
-  }
-}
-
-function readPackage(pkg, context) {
-  addDependency.context = context
-  addDependency.pkg = pkg
-  if (pkg.name === 'vuepress') {
-    addDependency('vue-style-loader')
-    addDependency('webpack-hot-client', '^3.0.0')
-  }
-  return pkg
-}
-
-function addDependency(name, version = '*', type = 'dependencies') {
-  const old = addDependency.pkg[type][name]
-  addDependency.pkg[type][name] = version
-
-  if (old) {
-    addDependency.context.log(`'${name}'@${old} => ${name}@${version} in ${type} of ${addDependency.pkg.name}`)
-  } else {
-    addDependency.context.log(`+ ${name}@${version} in ${type} of ${addDependency.pkg.name}`)
-  }
-}
\ No newline at end of file
diff --git a/scripts/bootstrap.js b/scripts/bootstrap.js
new file mode 100755
index 0000000..bef62f2
--- /dev/null
+++ b/scripts/bootstrap.js
@@ -0,0 +1,58 @@
+#!/usr/bin/env node
+// create package.json, README, etc. for packages that don't have them yet
+
+const args = require('minimist')(process.argv.slice(2))
+const fs = require('fs')
+const path = require('path')
+const baseVersion = require('../lerna.json').version
+
+const packagesDir = path.resolve(__dirname, '../packages')
+const files = fs.readdirSync(packagesDir)
+
+files.forEach(shortName => {
+  if (!fs.statSync(path.join(packagesDir, shortName)).isDirectory()) {
+    return
+  }
+
+  const name = `@vue-slides/${shortName}`
+  const pkgPath = path.join(packagesDir, shortName, `package.json`)
+  if (args.force || !fs.existsSync(pkgPath)) {
+    const json = {
+      name,
+      version: baseVersion,
+      description: name,
+      main: `src/index.js`,
+      repository: {
+        type: 'git',
+        url: 'git+https://github.com/vue-slides/vue-slides.git'
+      },
+      keywords: ['vue-slides', 'vue'],
+      author: 'Rahul Kadyan',
+      license: 'MIT',
+      bugs: {
+        url: 'https://github.com/vue-slides/vue-slides/issues'
+      },
+      homepage: `https://github.com/vue-slides/vue-slides/tree/dev/packages/${shortName}#readme`
+    }
+    fs.writeFileSync(pkgPath, JSON.stringify(json, null, 2))
+  }
+
+  const readmePath = path.join(packagesDir, shortName, `README.md`)
+  if (args.force || !fs.existsSync(readmePath)) {
+    fs.writeFileSync(readmePath, `# ${name}`)
+  }
+
+  const npmIgnorePath = path.join(packagesDir, shortName, `.npmignore`)
+  if (args.force || !fs.existsSync(npmIgnorePath)) {
+    fs.writeFileSync(npmIgnorePath, '*.unit.js\n')
+  }
+
+  const srcDir = path.join(packagesDir, shortName, `src`)
+  const indexPath = path.join(packagesDir, shortName, `src/index.js`)
+  if (args.force || !fs.existsSync(indexPath)) {
+    if (!fs.existsSync(srcDir)) {
+      fs.mkdirSync(srcDir)
+    }
+    fs.writeFileSync(indexPath, ``)
+  }
+})
diff --git a/shrinkwrap.yaml b/shrinkwrap.yaml
index efdbfd1..d1f9e52 100644
--- a/shrinkwrap.yaml
+++ b/shrinkwrap.yaml
@@ -1,607 +1,2301 @@
+dependencies:
+  standard-version: 4.4.0
 devDependencies:
-  lerna: 2.11.0
-  rollup-plugin-commonjs: 9.2.0
-  rollup-plugin-node-resolve: 3.4.0
+  '@cypress/webpack-preprocessor': 3.0.1
+  '@vue/eslint-config-prettier': 4.0.1
+  '@vue/test-utils': 1.0.0-beta.29
+  babel-core: 7.0.0-bridge.0
+  babel-eslint: 10.0.1
+  babel-jest: 23.6.0
+  eslint: 5.15.1
+  eslint-plugin-vue: 5.2.2
+  minimist: 1.2.0
 packages:
-  /JSONStream/1.3.3:
+  /@babel/code-frame/7.0.0:
+    dependencies:
+      '@babel/highlight': 7.0.0
+    dev: true
+    resolution:
+      integrity: sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==
+  /@babel/core/7.0.1:
+    dependencies:
+      '@babel/code-frame': 7.0.0
+      '@babel/generator': 7.3.4
+      '@babel/helpers': 7.3.1
+      '@babel/parser': 7.3.4
+      '@babel/template': 7.2.2
+      '@babel/traverse': 7.3.4
+      '@babel/types': 7.3.4
+      convert-source-map: 1.6.0
+      debug: 3.2.6
+      json5: 0.5.1
+      lodash: 4.17.11
+      resolve: 1.10.0
+      semver: 5.6.0
+      source-map: 0.5.7
+    dev: true
+    engines:
+      node: '>=6.9.0'
+    resolution:
+      integrity: sha512-7Yy2vRB6KYbhWeIrrwJmKv9UwDxokmlo43wi6AV84oNs4Gi71NTNGh3YxY/hK3+CxuSc6wcKSl25F2tQOhm1GQ==
+  /@babel/generator/7.3.4:
     dependencies:
-      jsonparse: 1.3.1
-      through: 2.3.8
+      '@babel/types': 7.3.4
+      jsesc: 2.5.2
+      lodash: 4.17.11
+      source-map: 0.5.7
+      trim-right: 1.0.1
     dev: true
-    hasBin: true
     resolution:
-      integrity: sha512-3Sp6WZZ/lXl+nTDoGpGWHEpTnnC6X5fnkolYZR6nwIfzbxxvA8utPWe1gCt7i0m9uVGsSz2IS8K8mJ7HmlduMg==
-  /add-stream/1.0.0:
+      integrity: sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==
+  /@babel/helper-annotate-as-pure/7.0.0:
+    dependencies:
+      '@babel/types': 7.3.4
     dev: true
     resolution:
-      integrity: sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=
-  /align-text/0.1.4:
+      integrity: sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==
+  /@babel/helper-builder-binary-assignment-operator-visitor/7.1.0:
     dependencies:
-      kind-of: 3.2.2
-      longest: 1.0.1
-      repeat-string: 1.6.1
+      '@babel/helper-explode-assignable-expression': 7.1.0
+      '@babel/types': 7.3.4
     dev: true
-    engines:
-      node: '>=0.10.0'
-    optional: true
     resolution:
-      integrity: sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=
-  /amdefine/1.0.1:
+      integrity: sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==
+  /@babel/helper-builder-react-jsx/7.3.0:
+    dependencies:
+      '@babel/types': 7.3.4
+      esutils: 2.0.2
     dev: true
-    engines:
-      node: '>=0.4.2'
     resolution:
-      integrity: sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
-  /ansi-escapes/3.1.0:
+      integrity: sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==
+  /@babel/helper-call-delegate/7.1.0:
+    dependencies:
+      '@babel/helper-hoist-variables': 7.0.0
+      '@babel/traverse': 7.3.4
+      '@babel/types': 7.3.4
     dev: true
-    engines:
-      node: '>=4'
     resolution:
-      integrity: sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==
-  /ansi-regex/2.1.1:
+      integrity: sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==
+  /@babel/helper-define-map/7.1.0:
+    dependencies:
+      '@babel/helper-function-name': 7.1.0
+      '@babel/types': 7.3.4
+      lodash: 4.17.11
     dev: true
-    engines:
-      node: '>=0.10.0'
     resolution:
-      integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
-  /ansi-regex/3.0.0:
+      integrity: sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==
+  /@babel/helper-explode-assignable-expression/7.1.0:
+    dependencies:
+      '@babel/traverse': 7.3.4
+      '@babel/types': 7.3.4
     dev: true
-    engines:
-      node: '>=4'
     resolution:
-      integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
-  /ansi-styles/3.2.1:
+      integrity: sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==
+  /@babel/helper-function-name/7.1.0:
     dependencies:
-      color-convert: 1.9.1
+      '@babel/helper-get-function-arity': 7.0.0
+      '@babel/template': 7.2.2
+      '@babel/types': 7.3.4
     dev: true
-    engines:
-      node: '>=4'
     resolution:
-      integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
-  /aproba/1.2.0:
+      integrity: sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==
+  /@babel/helper-get-function-arity/7.0.0:
+    dependencies:
+      '@babel/types': 7.3.4
     dev: true
     resolution:
-      integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
-  /are-we-there-yet/1.1.5:
+      integrity: sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==
+  /@babel/helper-hoist-variables/7.0.0:
     dependencies:
-      delegates: 1.0.0
-      readable-stream: 2.3.6
+      '@babel/types': 7.3.4
     dev: true
     resolution:
-      integrity: sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
-  /arr-diff/2.0.0:
+      integrity: sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==
+  /@babel/helper-member-expression-to-functions/7.0.0:
     dependencies:
-      arr-flatten: 1.1.0
+      '@babel/types': 7.3.4
     dev: true
-    engines:
-      node: '>=0.10.0'
     resolution:
-      integrity: sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
-  /arr-flatten/1.1.0:
+      integrity: sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==
+  /@babel/helper-module-imports/7.0.0:
+    dependencies:
+      '@babel/types': 7.3.4
     dev: true
-    engines:
-      node: '>=0.10.0'
     resolution:
-      integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
-  /array-find-index/1.0.2:
+      integrity: sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==
+  /@babel/helper-module-transforms/7.2.2:
+    dependencies:
+      '@babel/helper-module-imports': 7.0.0
+      '@babel/helper-simple-access': 7.1.0
+      '@babel/helper-split-export-declaration': 7.0.0
+      '@babel/template': 7.2.2
+      '@babel/types': 7.3.4
+      lodash: 4.17.11
     dev: true
-    engines:
-      node: '>=0.10.0'
     resolution:
-      integrity: sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
-  /array-ify/1.0.0:
+      integrity: sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==
+  /@babel/helper-optimise-call-expression/7.0.0:
+    dependencies:
+      '@babel/types': 7.3.4
     dev: true
     resolution:
-      integrity: sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=
-  /array-union/1.0.2:
+      integrity: sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==
+  /@babel/helper-plugin-utils/7.0.0:
+    dev: true
+    resolution:
+      integrity: sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==
+  /@babel/helper-regex/7.0.0:
     dependencies:
-      array-uniq: 1.0.3
+      lodash: 4.17.11
     dev: true
-    engines:
-      node: '>=0.10.0'
     resolution:
-      integrity: sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
-  /array-uniq/1.0.3:
+      integrity: sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==
+  /@babel/helper-remap-async-to-generator/7.1.0:
+    dependencies:
+      '@babel/helper-annotate-as-pure': 7.0.0
+      '@babel/helper-wrap-function': 7.2.0
+      '@babel/template': 7.2.2
+      '@babel/traverse': 7.3.4
+      '@babel/types': 7.3.4
     dev: true
-    engines:
-      node: '>=0.10.0'
     resolution:
-      integrity: sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
-  /array-unique/0.2.1:
+      integrity: sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==
+  /@babel/helper-replace-supers/7.3.4:
+    dependencies:
+      '@babel/helper-member-expression-to-functions': 7.0.0
+      '@babel/helper-optimise-call-expression': 7.0.0
+      '@babel/traverse': 7.3.4
+      '@babel/types': 7.3.4
     dev: true
-    engines:
-      node: '>=0.10.0'
     resolution:
-      integrity: sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
-  /arrify/1.0.1:
+      integrity: sha512-pvObL9WVf2ADs+ePg0jrqlhHoxRXlOa+SHRHzAXIz2xkYuOHfGl+fKxPMaS4Fq+uje8JQPobnertBBvyrWnQ1A==
+  /@babel/helper-simple-access/7.1.0:
+    dependencies:
+      '@babel/template': 7.2.2
+      '@babel/types': 7.3.4
     dev: true
-    engines:
-      node: '>=0.10.0'
     resolution:
-      integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
-  /async/1.5.2:
+      integrity: sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==
+  /@babel/helper-split-export-declaration/7.0.0:
+    dependencies:
+      '@babel/types': 7.3.4
     dev: true
     resolution:
-      integrity: sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
-  /balanced-match/1.0.0:
+      integrity: sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==
+  /@babel/helper-wrap-function/7.2.0:
+    dependencies:
+      '@babel/helper-function-name': 7.1.0
+      '@babel/template': 7.2.2
+      '@babel/traverse': 7.3.4
+      '@babel/types': 7.3.4
     dev: true
     resolution:
-      integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
-  /brace-expansion/1.1.11:
+      integrity: sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==
+  /@babel/helpers/7.3.1:
     dependencies:
-      balanced-match: 1.0.0
-      concat-map: 0.0.1
+      '@babel/template': 7.2.2
+      '@babel/traverse': 7.3.4
+      '@babel/types': 7.3.4
     dev: true
     resolution:
-      integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
-  /braces/1.8.5:
+      integrity: sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==
+  /@babel/highlight/7.0.0:
     dependencies:
-      expand-range: 1.8.2
-      preserve: 0.2.0
-      repeat-element: 1.1.3
+      chalk: 2.4.2
+      esutils: 2.0.2
+      js-tokens: 4.0.0
+    dev: true
+    resolution:
+      integrity: sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==
+  /@babel/parser/7.3.4:
     dev: true
     engines:
-      node: '>=0.10.0'
+      node: '>=6.0.0'
+    hasBin: true
     resolution:
-      integrity: sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
-  /buffer-from/1.1.0:
+      integrity: sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==
+  /@babel/plugin-proposal-async-generator-functions/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
+      '@babel/helper-remap-async-to-generator': 7.1.0
+      '@babel/plugin-syntax-async-generators': 7.2.0_@babel+core@7.0.1
     dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==
-  /builtin-modules/1.1.1:
+      integrity: sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==
+  /@babel/plugin-proposal-json-strings/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
+      '@babel/plugin-syntax-json-strings': 7.2.0_@babel+core@7.0.1
     dev: true
-    engines:
-      node: '>=0.10.0'
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    resolution:
+      integrity: sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==
+  /@babel/plugin-proposal-object-rest-spread/7.3.4_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
+      '@babel/plugin-syntax-object-rest-spread': 7.2.0_@babel+core@7.0.1
+    dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    resolution:
+      integrity: sha512-j7VQmbbkA+qrzNqbKHrBsW3ddFnOeva6wzSe/zB7T+xaxGc+RCpwo44wCmRixAIGRoIpmVgvzFzNJqQcO3/9RA==
+  /@babel/plugin-proposal-optional-catch-binding/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
+      '@babel/plugin-syntax-optional-catch-binding': 7.2.0_@babel+core@7.0.1
+    dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
-  /builtin-modules/2.0.0:
+      integrity: sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==
+  /@babel/plugin-proposal-unicode-property-regex/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
+      '@babel/helper-regex': 7.0.0
+      regexpu-core: 4.5.2
     dev: true
     engines:
       node: '>=4'
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==
-  /byline/5.0.0:
+      integrity: sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==
+  /@babel/plugin-syntax-async-generators/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
-    engines:
-      node: '>=0.10.0'
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=
-  /camelcase-keys/2.1.0:
+      integrity: sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==
+  /@babel/plugin-syntax-json-strings/7.2.0_@babel+core@7.0.1:
     dependencies:
-      camelcase: 2.1.1
-      map-obj: 1.0.1
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
-    engines:
-      node: '>=0.10.0'
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
-  /camelcase-keys/4.2.0:
+      integrity: sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==
+  /@babel/plugin-syntax-jsx/7.2.0_@babel+core@7.0.1:
     dependencies:
-      camelcase: 4.1.0
-      map-obj: 2.0.0
-      quick-lru: 1.1.0
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
-    engines:
-      node: '>=4'
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=
-  /camelcase/1.2.1:
+      integrity: sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==
+  /@babel/plugin-syntax-object-rest-spread/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
-    engines:
-      node: '>=0.10.0'
-    optional: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
-  /camelcase/2.1.1:
+      integrity: sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==
+  /@babel/plugin-syntax-optional-catch-binding/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
-    engines:
-      node: '>=0.10.0'
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
-  /camelcase/4.1.0:
+      integrity: sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==
+  /@babel/plugin-transform-arrow-functions/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
-    engines:
-      node: '>=4'
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
-  /capture-stack-trace/1.0.0:
+      integrity: sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==
+  /@babel/plugin-transform-async-to-generator/7.3.4_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-module-imports': 7.0.0
+      '@babel/helper-plugin-utils': 7.0.0
+      '@babel/helper-remap-async-to-generator': 7.1.0
     dev: true
-    engines:
-      node: '>=0.10.0'
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=
-  /center-align/0.1.3:
+      integrity: sha512-Y7nCzv2fw/jEZ9f678MuKdMo99MFDJMT/PvD9LisrR5JDFcJH6vYeH6RnjVt3p5tceyGRvTtEN0VOlU+rgHZjA==
+  /@babel/plugin-transform-block-scoped-functions/7.2.0_@babel+core@7.0.1:
     dependencies:
-      align-text: 0.1.4
-      lazy-cache: 1.0.4
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
-    engines:
-      node: '>=0.10.0'
-    optional: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-qg0yYptu6XIgBBHL1EYckHvCt60=
-  /chalk/2.4.1:
+      integrity: sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==
+  /@babel/plugin-transform-block-scoping/7.3.4_@babel+core@7.0.1:
     dependencies:
-      ansi-styles: 3.2.1
-      escape-string-regexp: 1.0.5
-      supports-color: 5.4.0
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
+      lodash: 4.17.11
     dev: true
-    engines:
-      node: '>=4'
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==
-  /chardet/0.4.2:
+      integrity: sha512-blRr2O8IOZLAOJklXLV4WhcEzpYafYQKSGT3+R26lWG41u/FODJuBggehtOwilVAcFu393v3OFj+HmaE6tVjhA==
+  /@babel/plugin-transform-classes/7.3.4_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-annotate-as-pure': 7.0.0
+      '@babel/helper-define-map': 7.1.0
+      '@babel/helper-function-name': 7.1.0
+      '@babel/helper-optimise-call-expression': 7.0.0
+      '@babel/helper-plugin-utils': 7.0.0
+      '@babel/helper-replace-supers': 7.3.4
+      '@babel/helper-split-export-declaration': 7.0.0
+      globals: 11.11.0
     dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
-  /ci-info/1.1.3:
+      integrity: sha512-J9fAvCFBkXEvBimgYxCjvaVDzL6thk0j0dBvCeZmIUDBwyt+nv6HfbImsSrWsYXfDNDivyANgJlFXDUWRTZBuA==
+  /@babel/plugin-transform-computed-properties/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==
-  /cli-cursor/2.1.0:
+      integrity: sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==
+  /@babel/plugin-transform-destructuring/7.3.2_@babel+core@7.0.1:
     dependencies:
-      restore-cursor: 2.0.0
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
+    dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    resolution:
+      integrity: sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw==
+  /@babel/plugin-transform-dotall-regex/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
+      '@babel/helper-regex': 7.0.0
+      regexpu-core: 4.5.2
     dev: true
     engines:
       node: '>=4'
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
-  /cli-width/2.2.0:
+      integrity: sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==
+  /@babel/plugin-transform-duplicate-keys/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
-  /cliui/2.1.0:
+      integrity: sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==
+  /@babel/plugin-transform-exponentiation-operator/7.2.0_@babel+core@7.0.1:
     dependencies:
-      center-align: 0.1.3
-      right-align: 0.1.3
-      wordwrap: 0.0.2
+      '@babel/core': 7.0.1
+      '@babel/helper-builder-binary-assignment-operator-visitor': 7.1.0
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
-    optional: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=
-  /cliui/3.2.0:
+      integrity: sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==
+  /@babel/plugin-transform-for-of/7.2.0_@babel+core@7.0.1:
     dependencies:
-      string-width: 1.0.2
-      strip-ansi: 3.0.1
-      wrap-ansi: 2.1.0
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
-  /clone/1.0.4:
+      integrity: sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==
+  /@babel/plugin-transform-function-name/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-function-name': 7.1.0
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
-    engines:
-      node: '>=0.8'
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
-  /cmd-shim/2.0.2:
+      integrity: sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==
+  /@babel/plugin-transform-literals/7.2.0_@babel+core@7.0.1:
     dependencies:
-      graceful-fs: 4.1.11
-      mkdirp: 0.5.1
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-b8vamUg6j9FdfTChlspp1oii79s=
-  /code-point-at/1.1.0:
+      integrity: sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==
+  /@babel/plugin-transform-modules-amd/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-module-transforms': 7.2.2
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
-    engines:
-      node: '>=0.10.0'
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
-  /color-convert/1.9.1:
+      integrity: sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==
+  /@babel/plugin-transform-modules-commonjs/7.2.0_@babel+core@7.0.1:
     dependencies:
-      color-name: 1.1.3
+      '@babel/core': 7.0.1
+      '@babel/helper-module-transforms': 7.2.2
+      '@babel/helper-plugin-utils': 7.0.0
+      '@babel/helper-simple-access': 7.1.0
     dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==
-  /color-name/1.1.3:
+      integrity: sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==
+  /@babel/plugin-transform-modules-systemjs/7.3.4_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-hoist-variables': 7.0.0
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-  /columnify/1.5.4:
+      integrity: sha512-VZ4+jlGOF36S7TjKs8g4ojp4MEI+ebCQZdswWb/T9I4X84j8OtFAyjXjt/M16iIm5RIZn0UMQgg/VgIwo/87vw==
+  /@babel/plugin-transform-modules-umd/7.2.0_@babel+core@7.0.1:
     dependencies:
-      strip-ansi: 3.0.1
-      wcwidth: 1.0.1
+      '@babel/core': 7.0.1
+      '@babel/helper-module-transforms': 7.2.2
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=
-  /command-join/2.0.0:
+      integrity: sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==
+  /@babel/plugin-transform-new-target/7.0.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
-    engines:
-      node: '>=4.0.0'
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-Uui5hPSHLZUv8b3IuYOX0nxxRM8=
-  /compare-func/1.3.2:
+      integrity: sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==
+  /@babel/plugin-transform-object-super/7.2.0_@babel+core@7.0.1:
     dependencies:
-      array-ify: 1.0.0
-      dot-prop: 3.0.0
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
+      '@babel/helper-replace-supers': 7.3.4
     dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=
-  /concat-map/0.0.1:
+      integrity: sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==
+  /@babel/plugin-transform-parameters/7.3.3_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-call-delegate': 7.1.0
+      '@babel/helper-get-function-arity': 7.0.0
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-  /concat-stream/1.6.2:
+      integrity: sha512-IrIP25VvXWu/VlBWTpsjGptpomtIkYrN/3aDp4UKm7xK6UxZY88kcJ1UwETbzHAlwN21MnNfwlar0u8y3KpiXw==
+  /@babel/plugin-transform-react-display-name/7.2.0_@babel+core@7.0.1:
     dependencies:
-      buffer-from: 1.1.0
-      inherits: 2.0.3
-      readable-stream: 2.3.6
-      typedarray: 0.0.6
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
     dev: true
-    engines:
-      '0': node >= 0.8
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
-  /console-control-strings/1.1.0:
+      integrity: sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==
+  /@babel/plugin-transform-react-jsx-self/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
+      '@babel/plugin-syntax-jsx': 7.2.0_@babel+core@7.0.1
     dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
     resolution:
-      integrity: sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
-  /conventional-changelog-angular/1.6.6:
+      integrity: sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==
+  /@babel/plugin-transform-react-jsx-source/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
+      '@babel/plugin-syntax-jsx': 7.2.0_@babel+core@7.0.1
+    dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    resolution:
+      integrity: sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g==
+  /@babel/plugin-transform-react-jsx/7.3.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-builder-react-jsx': 7.3.0
+      '@babel/helper-plugin-utils': 7.0.0
+      '@babel/plugin-syntax-jsx': 7.2.0_@babel+core@7.0.1
+    dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    resolution:
+      integrity: sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==
+  /@babel/plugin-transform-regenerator/7.3.4_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      regenerator-transform: 0.13.4
+    dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    resolution:
+      integrity: sha512-hvJg8EReQvXT6G9H2MvNPXkv9zK36Vxa1+csAVTpE1J3j0zlHplw76uudEbJxgvqZzAq9Yh45FLD4pk5mKRFQA==
+  /@babel/plugin-transform-shorthand-properties/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
+    dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    resolution:
+      integrity: sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==
+  /@babel/plugin-transform-spread/7.2.2_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
+    dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    resolution:
+      integrity: sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==
+  /@babel/plugin-transform-sticky-regex/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
+      '@babel/helper-regex': 7.0.0
+    dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    resolution:
+      integrity: sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==
+  /@babel/plugin-transform-template-literals/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-annotate-as-pure': 7.0.0
+      '@babel/helper-plugin-utils': 7.0.0
+    dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    resolution:
+      integrity: sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==
+  /@babel/plugin-transform-typeof-symbol/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
+    dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    resolution:
+      integrity: sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==
+  /@babel/plugin-transform-unicode-regex/7.2.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
+      '@babel/helper-regex': 7.0.0
+      regexpu-core: 4.5.2
+    dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    resolution:
+      integrity: sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==
+  /@babel/preset-env/7.0.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-module-imports': 7.0.0
+      '@babel/helper-plugin-utils': 7.0.0
+      '@babel/plugin-proposal-async-generator-functions': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-proposal-json-strings': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-proposal-object-rest-spread': 7.3.4_@babel+core@7.0.1
+      '@babel/plugin-proposal-optional-catch-binding': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-proposal-unicode-property-regex': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-syntax-async-generators': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-syntax-object-rest-spread': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-syntax-optional-catch-binding': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-arrow-functions': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-async-to-generator': 7.3.4_@babel+core@7.0.1
+      '@babel/plugin-transform-block-scoped-functions': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-block-scoping': 7.3.4_@babel+core@7.0.1
+      '@babel/plugin-transform-classes': 7.3.4_@babel+core@7.0.1
+      '@babel/plugin-transform-computed-properties': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-destructuring': 7.3.2_@babel+core@7.0.1
+      '@babel/plugin-transform-dotall-regex': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-duplicate-keys': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-exponentiation-operator': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-for-of': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-function-name': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-literals': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-modules-amd': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-modules-commonjs': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-modules-systemjs': 7.3.4_@babel+core@7.0.1
+      '@babel/plugin-transform-modules-umd': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-new-target': 7.0.0_@babel+core@7.0.1
+      '@babel/plugin-transform-object-super': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-parameters': 7.3.3_@babel+core@7.0.1
+      '@babel/plugin-transform-regenerator': 7.3.4_@babel+core@7.0.1
+      '@babel/plugin-transform-shorthand-properties': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-spread': 7.2.2_@babel+core@7.0.1
+      '@babel/plugin-transform-sticky-regex': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-template-literals': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-typeof-symbol': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-unicode-regex': 7.2.0_@babel+core@7.0.1
+      browserslist: 4.4.2
+      invariant: 2.2.4
+      js-levenshtein: 1.1.6
+      semver: 5.6.0
+    dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    resolution:
+      integrity: sha512-Fnx1wWaWv2w2rl+VHxA9si//Da40941IQ29fKiRejVR7oN1FxSEL8+SyAX/2oKIye2gPvY/GBbJVEKQ/oi43zQ==
+  /@babel/preset-react/7.0.0_@babel+core@7.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/helper-plugin-utils': 7.0.0
+      '@babel/plugin-transform-react-display-name': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-react-jsx': 7.3.0_@babel+core@7.0.1
+      '@babel/plugin-transform-react-jsx-self': 7.2.0_@babel+core@7.0.1
+      '@babel/plugin-transform-react-jsx-source': 7.2.0_@babel+core@7.0.1
+    dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    resolution:
+      integrity: sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==
+  /@babel/template/7.2.2:
+    dependencies:
+      '@babel/code-frame': 7.0.0
+      '@babel/parser': 7.3.4
+      '@babel/types': 7.3.4
+    dev: true
+    resolution:
+      integrity: sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==
+  /@babel/traverse/7.3.4:
+    dependencies:
+      '@babel/code-frame': 7.0.0
+      '@babel/generator': 7.3.4
+      '@babel/helper-function-name': 7.1.0
+      '@babel/helper-split-export-declaration': 7.0.0
+      '@babel/parser': 7.3.4
+      '@babel/types': 7.3.4
+      debug: 4.1.1
+      globals: 11.11.0
+      lodash: 4.17.11
+    dev: true
+    resolution:
+      integrity: sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==
+  /@babel/types/7.3.4:
+    dependencies:
+      esutils: 2.0.2
+      lodash: 4.17.11
+      to-fast-properties: 2.0.0
+    dev: true
+    resolution:
+      integrity: sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==
+  /@cypress/webpack-preprocessor/3.0.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      '@babel/preset-env': 7.0.0_@babel+core@7.0.1
+      '@babel/preset-react': 7.0.0_@babel+core@7.0.1
+      babel-loader: 8.0.2_@babel+core@7.0.1+webpack@4.18.1
+      bluebird: 3.5.0
+      debug: 3.1.0
+      lodash.clonedeep: 4.5.0
+      webpack: 4.18.1_webpack@4.18.1
+    dev: true
+    resolution:
+      integrity: sha512-alqtAWgNiSxmsbKYeCnUz6/dmAZtbD3wYJgw2WFFy/HE6z+/qAOE8jQ2rZeZ2PMef+XP/OjZFN+ThvARJ3hvvg==
+  /@vue/eslint-config-prettier/4.0.1:
+    dependencies:
+      eslint-config-prettier: 3.6.0
+      eslint-plugin-prettier: 3.0.1_prettier@1.16.4
+      prettier: 1.16.4
+    dev: true
+    resolution:
+      integrity: sha512-rJEDXPb61Hfgg8GllO3XXFP98bcIxdNNHSrNcxP/vBSukOolgOwQyZJ5f5z/c7ViPyh5/IDlC4qBnhx/0n+I4g==
+  /@vue/test-utils/1.0.0-beta.29:
+    dependencies:
+      dom-event-types: 1.0.0
+      lodash: 4.17.11
+    dev: true
+    peerDependencies:
+      vue: 2.x
+      vue-template-compiler: ^2.x
+    resolution:
+      integrity: sha512-yX4sxEIHh4M9yAbLA/ikpEnGKMNBCnoX98xE1RwxfhQVcn0MaXNSj1Qmac+ZydTj6VBSEVukchBogXBTwc+9iA==
+  /@webassemblyjs/ast/1.7.6:
+    dependencies:
+      '@webassemblyjs/helper-module-context': 1.7.6
+      '@webassemblyjs/helper-wasm-bytecode': 1.7.6
+      '@webassemblyjs/wast-parser': 1.7.6
+      mamacro: 0.0.3
+    dev: true
+    resolution:
+      integrity: sha512-8nkZS48EVsMUU0v6F1LCIOw4RYWLm2plMtbhFTjNgeXmsTNLuU3xTRtnljt9BFQB+iPbLRobkNrCWftWnNC7wQ==
+  /@webassemblyjs/floating-point-hex-parser/1.7.6:
+    dev: true
+    resolution:
+      integrity: sha512-VBOZvaOyBSkPZdIt5VBMg3vPWxouuM13dPXGWI1cBh3oFLNcFJ8s9YA7S9l4mPI7+Q950QqOmqj06oa83hNWBA==
+  /@webassemblyjs/helper-api-error/1.7.6:
+    dev: true
+    resolution:
+      integrity: sha512-SCzhcQWHXfrfMSKcj8zHg1/kL9kb3aa5TN4plc/EREOs5Xop0ci5bdVBApbk2yfVi8aL+Ly4Qpp3/TRAUInjrg==
+  /@webassemblyjs/helper-buffer/1.7.6:
+    dev: true
+    resolution:
+      integrity: sha512-1/gW5NaGsEOZ02fjnFiU8/OEEXU1uVbv2um0pQ9YVL3IHSkyk6xOwokzyqqO1qDZQUAllb+V8irtClPWntbVqw==
+  /@webassemblyjs/helper-code-frame/1.7.6:
+    dependencies:
+      '@webassemblyjs/wast-printer': 1.7.6
+    dev: true
+    resolution:
+      integrity: sha512-+suMJOkSn9+vEvDvgyWyrJo5vJsWSDXZmJAjtoUq4zS4eqHyXImpktvHOZwXp1XQjO5H+YQwsBgqTQEc0J/5zg==
+  /@webassemblyjs/helper-fsm/1.7.6:
+    dev: true
+    resolution:
+      integrity: sha512-HCS6KN3wgxUihGBW7WFzEC/o8Eyvk0d56uazusnxXthDPnkWiMv+kGi9xXswL2cvfYfeK5yiM17z2K5BVlwypw==
+  /@webassemblyjs/helper-module-context/1.7.6:
+    dependencies:
+      mamacro: 0.0.3
+    dev: true
+    resolution:
+      integrity: sha512-e8/6GbY7OjLM+6OsN7f2krC2qYVNaSr0B0oe4lWdmq5sL++8dYDD1TFbD1TdAdWMRTYNr/Qq7ovXWzia2EbSjw==
+  /@webassemblyjs/helper-wasm-bytecode/1.7.6:
+    dev: true
+    resolution:
+      integrity: sha512-PzYFCb7RjjSdAOljyvLWVqd6adAOabJW+8yRT+NWhXuf1nNZWH+igFZCUK9k7Cx7CsBbzIfXjJc7u56zZgFj9Q==
+  /@webassemblyjs/helper-wasm-section/1.7.6:
+    dependencies:
+      '@webassemblyjs/ast': 1.7.6
+      '@webassemblyjs/helper-buffer': 1.7.6
+      '@webassemblyjs/helper-wasm-bytecode': 1.7.6
+      '@webassemblyjs/wasm-gen': 1.7.6
+    dev: true
+    resolution:
+      integrity: sha512-3GS628ppDPSuwcYlQ7cDCGr4W2n9c4hLzvnRKeuz+lGsJSmc/ADVoYpm1ts2vlB1tGHkjtQMni+yu8mHoMlKlA==
+  /@webassemblyjs/ieee754/1.7.6:
+    dependencies:
+      '@xtuc/ieee754': 1.2.0
+    dev: true
+    resolution:
+      integrity: sha512-V4cIp0ruyw+hawUHwQLn6o2mFEw4t50tk530oKsYXQhEzKR+xNGDxs/SFFuyTO7X3NzEu4usA3w5jzhl2RYyzQ==
+  /@webassemblyjs/leb128/1.7.6:
+    dependencies:
+      '@xtuc/long': 4.2.1
+    dev: true
+    resolution:
+      integrity: sha512-ojdlG8WpM394lBow4ncTGJoIVZ4aAtNOWHhfAM7m7zprmkVcKK+2kK5YJ9Bmj6/ketTtOn7wGSHCtMt+LzqgYQ==
+  /@webassemblyjs/utf8/1.7.6:
+    dev: true
+    resolution:
+      integrity: sha512-oId+tLxQ+AeDC34ELRYNSqJRaScB0TClUU6KQfpB8rNT6oelYlz8axsPhf6yPTg7PBJ/Z5WcXmUYiHEWgbbHJw==
+  /@webassemblyjs/wasm-edit/1.7.6:
+    dependencies:
+      '@webassemblyjs/ast': 1.7.6
+      '@webassemblyjs/helper-buffer': 1.7.6
+      '@webassemblyjs/helper-wasm-bytecode': 1.7.6
+      '@webassemblyjs/helper-wasm-section': 1.7.6
+      '@webassemblyjs/wasm-gen': 1.7.6
+      '@webassemblyjs/wasm-opt': 1.7.6
+      '@webassemblyjs/wasm-parser': 1.7.6
+      '@webassemblyjs/wast-printer': 1.7.6
+    dev: true
+    resolution:
+      integrity: sha512-pTNjLO3o41v/Vz9VFLl+I3YLImpCSpodFW77pNoH4agn5I6GgSxXHXtvWDTvYJFty0jSeXZWLEmbaSIRUDlekg==
+  /@webassemblyjs/wasm-gen/1.7.6:
+    dependencies:
+      '@webassemblyjs/ast': 1.7.6
+      '@webassemblyjs/helper-wasm-bytecode': 1.7.6
+      '@webassemblyjs/ieee754': 1.7.6
+      '@webassemblyjs/leb128': 1.7.6
+      '@webassemblyjs/utf8': 1.7.6
+    dev: true
+    resolution:
+      integrity: sha512-mQvFJVumtmRKEUXMohwn8nSrtjJJl6oXwF3FotC5t6e2hlKMh8sIaW03Sck2MDzw9xPogZD7tdP5kjPlbH9EcQ==
+  /@webassemblyjs/wasm-opt/1.7.6:
+    dependencies:
+      '@webassemblyjs/ast': 1.7.6
+      '@webassemblyjs/helper-buffer': 1.7.6
+      '@webassemblyjs/wasm-gen': 1.7.6
+      '@webassemblyjs/wasm-parser': 1.7.6
+    dev: true
+    resolution:
+      integrity: sha512-go44K90fSIsDwRgtHhX14VtbdDPdK2sZQtZqUcMRvTojdozj5tLI0VVJAzLCfz51NOkFXezPeVTAYFqrZ6rI8Q==
+  /@webassemblyjs/wasm-parser/1.7.6:
+    dependencies:
+      '@webassemblyjs/ast': 1.7.6
+      '@webassemblyjs/helper-api-error': 1.7.6
+      '@webassemblyjs/helper-wasm-bytecode': 1.7.6
+      '@webassemblyjs/ieee754': 1.7.6
+      '@webassemblyjs/leb128': 1.7.6
+      '@webassemblyjs/utf8': 1.7.6
+    dev: true
+    resolution:
+      integrity: sha512-t1T6TfwNY85pDA/HWPA8kB9xA4sp9ajlRg5W7EKikqrynTyFo+/qDzIpvdkOkOGjlS6d4n4SX59SPuIayR22Yg==
+  /@webassemblyjs/wast-parser/1.7.6:
+    dependencies:
+      '@webassemblyjs/ast': 1.7.6
+      '@webassemblyjs/floating-point-hex-parser': 1.7.6
+      '@webassemblyjs/helper-api-error': 1.7.6
+      '@webassemblyjs/helper-code-frame': 1.7.6
+      '@webassemblyjs/helper-fsm': 1.7.6
+      '@xtuc/long': 4.2.1
+      mamacro: 0.0.3
+    dev: true
+    resolution:
+      integrity: sha512-1MaWTErN0ziOsNUlLdvwS+NS1QWuI/kgJaAGAMHX8+fMJFgOJDmN/xsG4h/A1Gtf/tz5VyXQciaqHZqp2q0vfg==
+  /@webassemblyjs/wast-printer/1.7.6:
+    dependencies:
+      '@webassemblyjs/ast': 1.7.6
+      '@webassemblyjs/wast-parser': 1.7.6
+      '@xtuc/long': 4.2.1
+    dev: true
+    resolution:
+      integrity: sha512-vHdHSK1tOetvDcl1IV1OdDeGNe/NDDQ+KzuZHMtqTVP1xO/tZ/IKNpj5BaGk1OYFdsDWQqb31PIwdEyPntOWRQ==
+  /@xtuc/ieee754/1.2.0:
+    dev: true
+    resolution:
+      integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+  /@xtuc/long/4.2.1:
+    dev: true
+    resolution:
+      integrity: sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==
+  /JSONStream/1.3.5:
+    dependencies:
+      jsonparse: 1.3.1
+      through: 2.3.8
+    dev: false
+    hasBin: true
+    resolution:
+      integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
+  /acorn-dynamic-import/3.0.0:
+    dependencies:
+      acorn: 5.7.3
+    dev: true
+    resolution:
+      integrity: sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==
+  /acorn-jsx/5.0.1_acorn@6.1.1:
+    dependencies:
+      acorn: 6.1.1
+    dev: true
+    peerDependencies:
+      acorn: ^6.0.0
+    resolution:
+      integrity: sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==
+  /acorn/5.7.3:
+    dev: true
+    engines:
+      node: '>=0.4.0'
+    hasBin: true
+    resolution:
+      integrity: sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
+  /acorn/6.1.1:
+    dev: true
+    engines:
+      node: '>=0.4.0'
+    hasBin: true
+    resolution:
+      integrity: sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==
+  /ajv-keywords/3.4.0_ajv@6.10.0:
+    dependencies:
+      ajv: 6.10.0
+    dev: true
+    peerDependencies:
+      ajv: ^6.9.1
+    resolution:
+      integrity: sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==
+  /ajv/6.10.0:
+    dependencies:
+      fast-deep-equal: 2.0.1
+      fast-json-stable-stringify: 2.0.0
+      json-schema-traverse: 0.4.1
+      uri-js: 4.2.2
+    dev: true
+    resolution:
+      integrity: sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==
+  /ansi-escapes/3.2.0:
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+  /ansi-regex/2.1.1:
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+  /ansi-regex/3.0.0:
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+  /ansi-regex/4.0.0:
+    dev: true
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==
+  /ansi-styles/2.2.1:
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+  /ansi-styles/3.2.1:
+    dependencies:
+      color-convert: 1.9.3
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+  /anymatch/2.0.0:
+    dependencies:
+      micromatch: 3.1.10
+      normalize-path: 2.1.1
+    dev: true
+    resolution:
+      integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+  /aproba/1.2.0:
+    dev: true
+    resolution:
+      integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+  /argparse/1.0.10:
+    dependencies:
+      sprintf-js: 1.0.3
+    dev: true
+    resolution:
+      integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+  /arr-diff/2.0.0:
+    dependencies:
+      arr-flatten: 1.1.0
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
+  /arr-diff/4.0.0:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+  /arr-flatten/1.1.0:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+  /arr-union/3.1.0:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+  /array-find-index/1.0.2:
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+  /array-ify/1.0.0:
+    dev: false
+    resolution:
+      integrity: sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=
+  /array-unique/0.2.1:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
+  /array-unique/0.3.2:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+  /arrify/1.0.1:
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+  /asn1.js/4.10.1:
+    dependencies:
+      bn.js: 4.11.8
+      inherits: 2.0.3
+      minimalistic-assert: 1.0.1
+    dev: true
+    resolution:
+      integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
+  /assert/1.4.1:
+    dependencies:
+      util: 0.10.3
+    dev: true
+    resolution:
+      integrity: sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=
+  /assign-symbols/1.0.0:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+  /astral-regex/1.0.0:
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+  /async-each/1.0.1:
+    dev: true
+    resolution:
+      integrity: sha1-GdOGodntxufByF04iu28xW0zYC0=
+  /async/2.6.2:
+    dependencies:
+      lodash: 4.17.11
+    dev: false
+    resolution:
+      integrity: sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==
+  /atob/2.1.2:
+    dev: true
+    engines:
+      node: '>= 4.5.0'
+    hasBin: true
+    resolution:
+      integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+  /babel-code-frame/6.26.0:
+    dependencies:
+      chalk: 1.1.3
+      esutils: 2.0.2
+      js-tokens: 3.0.2
+    dev: true
+    resolution:
+      integrity: sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
+  /babel-core/7.0.0-bridge.0:
+    dev: true
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    resolution:
+      integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==
+  /babel-eslint/10.0.1:
+    dependencies:
+      '@babel/code-frame': 7.0.0
+      '@babel/parser': 7.3.4
+      '@babel/traverse': 7.3.4
+      '@babel/types': 7.3.4
+      eslint-scope: 3.7.1
+      eslint-visitor-keys: 1.0.0
+    dev: true
+    engines:
+      node: '>=6'
+    peerDependencies:
+      eslint: '>= 4.12.1'
+    resolution:
+      integrity: sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==
+  /babel-generator/6.26.1:
+    dependencies:
+      babel-messages: 6.23.0
+      babel-runtime: 6.26.0
+      babel-types: 6.26.0
+      detect-indent: 4.0.0
+      jsesc: 1.3.0
+      lodash: 4.17.11
+      source-map: 0.5.7
+      trim-right: 1.0.1
+    dev: true
+    resolution:
+      integrity: sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==
+  /babel-jest/23.6.0:
+    dependencies:
+      babel-plugin-istanbul: 4.1.6
+      babel-preset-jest: 23.2.0
+    dev: true
+    peerDependencies:
+      babel-core: ^6.0.0 || ^7.0.0-0
+    resolution:
+      integrity: sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==
+  /babel-loader/8.0.2_@babel+core@7.0.1+webpack@4.18.1:
+    dependencies:
+      '@babel/core': 7.0.1
+      find-cache-dir: 1.0.0
+      loader-utils: 1.2.3
+      mkdirp: 0.5.1
+      util.promisify: 1.0.0
+      webpack: 4.18.1_webpack@4.18.1
+    dev: true
+    engines:
+      node: '>= 6.9'
+    peerDependencies:
+      '@babel/core': ^7.0.0
+      webpack: '>=2'
+    resolution:
+      integrity: sha512-Law0PGtRV1JL8Y9Wpzc0d6EE0GD7LzXWCfaeWwboUMcBWNG6gvaWTK1/+BK7a4X5EmeJiGEuDDFxUsOa8RSWCw==
+  /babel-messages/6.23.0:
+    dependencies:
+      babel-runtime: 6.26.0
+    dev: true
+    resolution:
+      integrity: sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=
+  /babel-plugin-istanbul/4.1.6:
+    dependencies:
+      babel-plugin-syntax-object-rest-spread: 6.13.0
+      find-up: 2.1.0
+      istanbul-lib-instrument: 1.10.2
+      test-exclude: 4.2.3
+    dev: true
+    resolution:
+      integrity: sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==
+  /babel-plugin-jest-hoist/23.2.0:
+    dev: true
+    resolution:
+      integrity: sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=
+  /babel-plugin-syntax-object-rest-spread/6.13.0:
+    dev: true
+    resolution:
+      integrity: sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=
+  /babel-preset-jest/23.2.0:
+    dependencies:
+      babel-plugin-jest-hoist: 23.2.0
+      babel-plugin-syntax-object-rest-spread: 6.13.0
+    dev: true
+    resolution:
+      integrity: sha1-jsegOhOPABoaj7HoETZSvxpV2kY=
+  /babel-runtime/6.26.0:
+    dependencies:
+      core-js: 2.6.5
+      regenerator-runtime: 0.11.1
+    dev: true
+    resolution:
+      integrity: sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
+  /babel-template/6.26.0:
+    dependencies:
+      babel-runtime: 6.26.0
+      babel-traverse: 6.26.0
+      babel-types: 6.26.0
+      babylon: 6.18.0
+      lodash: 4.17.11
+    dev: true
+    resolution:
+      integrity: sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=
+  /babel-traverse/6.26.0:
+    dependencies:
+      babel-code-frame: 6.26.0
+      babel-messages: 6.23.0
+      babel-runtime: 6.26.0
+      babel-types: 6.26.0
+      babylon: 6.18.0
+      debug: 2.6.9
+      globals: 9.18.0
+      invariant: 2.2.4
+      lodash: 4.17.11
+    dev: true
+    resolution:
+      integrity: sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=
+  /babel-types/6.26.0:
+    dependencies:
+      babel-runtime: 6.26.0
+      esutils: 2.0.2
+      lodash: 4.17.11
+      to-fast-properties: 1.0.3
+    dev: true
+    resolution:
+      integrity: sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
+  /babylon/6.18.0:
+    dev: true
+    hasBin: true
+    resolution:
+      integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
+  /balanced-match/1.0.0:
+    resolution:
+      integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+  /base/0.11.2:
+    dependencies:
+      cache-base: 1.0.1
+      class-utils: 0.3.6
+      component-emitter: 1.2.1
+      define-property: 1.0.0
+      isobject: 3.0.1
+      mixin-deep: 1.3.1
+      pascalcase: 0.1.1
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+  /base64-js/1.3.0:
+    dev: true
+    resolution:
+      integrity: sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==
+  /big.js/5.2.2:
+    dev: true
+    resolution:
+      integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+  /binary-extensions/1.13.0:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==
+  /bluebird/3.5.0:
+    dev: true
+    resolution:
+      integrity: sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=
+  /bluebird/3.5.3:
+    dev: true
+    resolution:
+      integrity: sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==
+  /bn.js/4.11.8:
+    dev: true
+    resolution:
+      integrity: sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
+  /brace-expansion/1.1.11:
+    dependencies:
+      balanced-match: 1.0.0
+      concat-map: 0.0.1
+    resolution:
+      integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+  /braces/1.8.5:
+    dependencies:
+      expand-range: 1.8.2
+      preserve: 0.2.0
+      repeat-element: 1.1.3
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
+  /braces/2.3.2:
+    dependencies:
+      arr-flatten: 1.1.0
+      array-unique: 0.3.2
+      extend-shallow: 2.0.1
+      fill-range: 4.0.0
+      isobject: 3.0.1
+      repeat-element: 1.1.3
+      snapdragon: 0.8.2
+      snapdragon-node: 2.1.1
+      split-string: 3.1.0
+      to-regex: 3.0.2
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+  /brorand/1.1.0:
+    dev: true
+    resolution:
+      integrity: sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+  /browserify-aes/1.2.0:
+    dependencies:
+      buffer-xor: 1.0.3
+      cipher-base: 1.0.4
+      create-hash: 1.2.0
+      evp_bytestokey: 1.0.3
+      inherits: 2.0.3
+      safe-buffer: 5.1.2
+    dev: true
+    resolution:
+      integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+  /browserify-cipher/1.0.1:
+    dependencies:
+      browserify-aes: 1.2.0
+      browserify-des: 1.0.2
+      evp_bytestokey: 1.0.3
+    dev: true
+    resolution:
+      integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+  /browserify-des/1.0.2:
+    dependencies:
+      cipher-base: 1.0.4
+      des.js: 1.0.0
+      inherits: 2.0.3
+      safe-buffer: 5.1.2
+    dev: true
+    resolution:
+      integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+  /browserify-rsa/4.0.1:
+    dependencies:
+      bn.js: 4.11.8
+      randombytes: 2.1.0
+    dev: true
+    resolution:
+      integrity: sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
+  /browserify-sign/4.0.4:
+    dependencies:
+      bn.js: 4.11.8
+      browserify-rsa: 4.0.1
+      create-hash: 1.2.0
+      create-hmac: 1.1.7
+      elliptic: 6.4.1
+      inherits: 2.0.3
+      parse-asn1: 5.1.4
+    dev: true
+    resolution:
+      integrity: sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
+  /browserify-zlib/0.2.0:
+    dependencies:
+      pako: 1.0.10
+    dev: true
+    resolution:
+      integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+  /browserslist/4.4.2:
+    dependencies:
+      caniuse-lite: 1.0.30000941
+      electron-to-chromium: 1.3.113
+      node-releases: 1.1.9
+    dev: true
+    hasBin: true
+    resolution:
+      integrity: sha512-ISS/AIAiHERJ3d45Fz0AVYKkgcy+F/eJHzKEvv1j0wwKGKD9T3BrwKr/5g45L+Y4XIK5PlTqefHciRFcfE1Jxg==
+  /buffer-from/1.1.1:
+    resolution:
+      integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+  /buffer-xor/1.0.3:
+    dev: true
+    resolution:
+      integrity: sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+  /buffer/4.9.1:
+    dependencies:
+      base64-js: 1.3.0
+      ieee754: 1.1.12
+      isarray: 1.0.0
+    dev: true
+    resolution:
+      integrity: sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
+  /builtin-status-codes/3.0.0:
+    dev: true
+    resolution:
+      integrity: sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+  /cacache/10.0.4:
+    dependencies:
+      bluebird: 3.5.3
+      chownr: 1.1.1
+      glob: 7.1.3
+      graceful-fs: 4.1.15
+      lru-cache: 4.1.5
+      mississippi: 2.0.0
+      mkdirp: 0.5.1
+      move-concurrently: 1.0.1
+      promise-inflight: 1.0.1
+      rimraf: 2.6.3
+      ssri: 5.3.0
+      unique-filename: 1.1.1
+      y18n: 4.0.0
+    dev: true
+    resolution:
+      integrity: sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==
+  /cache-base/1.0.1:
+    dependencies:
+      collection-visit: 1.0.0
+      component-emitter: 1.2.1
+      get-value: 2.0.6
+      has-value: 1.0.0
+      isobject: 3.0.1
+      set-value: 2.0.0
+      to-object-path: 0.3.0
+      union-value: 1.0.0
+      unset-value: 1.0.0
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+  /callsites/3.0.0:
+    dev: true
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==
+  /camelcase-keys/2.1.0:
+    dependencies:
+      camelcase: 2.1.1
+      map-obj: 1.0.1
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
+  /camelcase-keys/4.2.0:
+    dependencies:
+      camelcase: 4.1.0
+      map-obj: 2.0.0
+      quick-lru: 1.1.0
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=
+  /camelcase/2.1.1:
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
+  /camelcase/4.1.0:
+    dev: false
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
+  /caniuse-lite/1.0.30000941:
+    dev: true
+    resolution:
+      integrity: sha512-4vzGb2MfZcO20VMPj1j6nRAixhmtlhkypM4fL4zhgzEucQIYiRzSqPcWIu1OF8i0FETD93FMIPWfUJCAcFvrqA==
+  /chalk/1.1.3:
+    dependencies:
+      ansi-styles: 2.2.1
+      escape-string-regexp: 1.0.5
+      has-ansi: 2.0.0
+      strip-ansi: 3.0.1
+      supports-color: 2.0.0
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+  /chalk/2.4.2:
+    dependencies:
+      ansi-styles: 3.2.1
+      escape-string-regexp: 1.0.5
+      supports-color: 5.5.0
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+  /chardet/0.7.0:
+    dev: true
+    resolution:
+      integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+  /chokidar/2.1.2:
+    dependencies:
+      anymatch: 2.0.0
+      async-each: 1.0.1
+      braces: 2.3.2
+      glob-parent: 3.1.0
+      inherits: 2.0.3
+      is-binary-path: 1.0.1
+      is-glob: 4.0.0
+      normalize-path: 3.0.0
+      path-is-absolute: 1.0.1
+      readdirp: 2.2.1
+      upath: 1.1.0
+    dev: true
+    optionalDependencies:
+      fsevents: 1.2.7
+    resolution:
+      integrity: sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==
+  /chownr/1.1.1:
+    dev: true
+    resolution:
+      integrity: sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
+  /chrome-trace-event/1.0.0:
+    dependencies:
+      tslib: 1.9.3
+    dev: true
+    engines:
+      node: '>=6.0'
+    resolution:
+      integrity: sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==
+  /cipher-base/1.0.4:
+    dependencies:
+      inherits: 2.0.3
+      safe-buffer: 5.1.2
+    dev: true
+    resolution:
+      integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+  /class-utils/0.3.6:
+    dependencies:
+      arr-union: 3.1.0
+      define-property: 0.2.5
+      isobject: 3.0.1
+      static-extend: 0.1.2
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+  /cli-cursor/2.1.0:
+    dependencies:
+      restore-cursor: 2.0.0
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+  /cli-width/2.2.0:
+    dev: true
+    resolution:
+      integrity: sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
+  /cliui/3.2.0:
+    dependencies:
+      string-width: 1.0.2
+      strip-ansi: 3.0.1
+      wrap-ansi: 2.1.0
+    dev: false
+    resolution:
+      integrity: sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
+  /code-point-at/1.1.0:
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+  /collection-visit/1.0.0:
+    dependencies:
+      map-visit: 1.0.0
+      object-visit: 1.0.1
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+  /color-convert/1.9.3:
+    dependencies:
+      color-name: 1.1.3
+    dev: true
+    resolution:
+      integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+  /color-name/1.1.3:
+    dev: true
+    resolution:
+      integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+  /commander/2.13.0:
+    dev: true
+    resolution:
+      integrity: sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==
+  /commander/2.17.1:
+    dev: false
+    optional: true
+    resolution:
+      integrity: sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
+  /commondir/1.0.1:
+    dev: true
+    resolution:
+      integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+  /compare-func/1.3.2:
+    dependencies:
+      array-ify: 1.0.0
+      dot-prop: 3.0.0
+    dev: false
+    resolution:
+      integrity: sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=
+  /component-emitter/1.2.1:
+    dev: true
+    resolution:
+      integrity: sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
+  /concat-map/0.0.1:
+    resolution:
+      integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+  /concat-stream/1.6.2:
+    dependencies:
+      buffer-from: 1.1.1
+      inherits: 2.0.3
+      readable-stream: 2.3.6
+      typedarray: 0.0.6
+    engines:
+      '0': node >= 0.8
+    resolution:
+      integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+  /console-browserify/1.1.0:
+    dependencies:
+      date-now: 0.1.4
+    dev: true
+    resolution:
+      integrity: sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
+  /constants-browserify/1.0.0:
+    dev: true
+    resolution:
+      integrity: sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+  /conventional-changelog-angular/1.6.6:
+    dependencies:
+      compare-func: 1.3.2
+      q: 1.5.1
+    dev: false
+    resolution:
+      integrity: sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==
+  /conventional-changelog-atom/0.2.8:
+    dependencies:
+      q: 1.5.1
+    dev: false
+    resolution:
+      integrity: sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==
+  /conventional-changelog-codemirror/0.3.8:
+    dependencies:
+      q: 1.5.1
+    dev: false
+    resolution:
+      integrity: sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==
+  /conventional-changelog-core/2.0.11:
+    dependencies:
+      conventional-changelog-writer: 3.0.9
+      conventional-commits-parser: 2.1.7
+      dateformat: 3.0.3
+      get-pkg-repo: 1.4.0
+      git-raw-commits: 1.3.6
+      git-remote-origin-url: 2.0.0
+      git-semver-tags: 1.3.6
+      lodash: 4.17.11
+      normalize-package-data: 2.5.0
+      q: 1.5.1
+      read-pkg: 1.1.0
+      read-pkg-up: 1.0.1
+      through2: 2.0.5
+    dev: false
+    resolution:
+      integrity: sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==
+  /conventional-changelog-ember/0.3.12:
+    dependencies:
+      q: 1.5.1
+    dev: false
+    resolution:
+      integrity: sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==
+  /conventional-changelog-eslint/1.0.9:
+    dependencies:
+      q: 1.5.1
+    dev: false
+    resolution:
+      integrity: sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==
+  /conventional-changelog-express/0.3.6:
+    dependencies:
+      q: 1.5.1
+    dev: false
+    resolution:
+      integrity: sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==
+  /conventional-changelog-jquery/0.1.0:
+    dependencies:
+      q: 1.5.1
+    dev: false
+    resolution:
+      integrity: sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=
+  /conventional-changelog-jscs/0.1.0:
+    dependencies:
+      q: 1.5.1
+    dev: false
+    resolution:
+      integrity: sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=
+  /conventional-changelog-jshint/0.3.8:
+    dependencies:
+      compare-func: 1.3.2
+      q: 1.5.1
+    dev: false
+    resolution:
+      integrity: sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==
+  /conventional-changelog-preset-loader/1.1.8:
+    dev: false
+    resolution:
+      integrity: sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==
+  /conventional-changelog-writer/3.0.9:
+    dependencies:
+      compare-func: 1.3.2
+      conventional-commits-filter: 1.1.6
+      dateformat: 3.0.3
+      handlebars: 4.1.0
+      json-stringify-safe: 5.0.1
+      lodash: 4.17.11
+      meow: 4.0.1
+      semver: 5.6.0
+      split: 1.0.1
+      through2: 2.0.5
+    dev: false
+    hasBin: true
+    resolution:
+      integrity: sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==
+  /conventional-changelog/1.1.24:
+    dependencies:
+      conventional-changelog-angular: 1.6.6
+      conventional-changelog-atom: 0.2.8
+      conventional-changelog-codemirror: 0.3.8
+      conventional-changelog-core: 2.0.11
+      conventional-changelog-ember: 0.3.12
+      conventional-changelog-eslint: 1.0.9
+      conventional-changelog-express: 0.3.6
+      conventional-changelog-jquery: 0.1.0
+      conventional-changelog-jscs: 0.1.0
+      conventional-changelog-jshint: 0.3.8
+      conventional-changelog-preset-loader: 1.1.8
+    dev: false
+    resolution:
+      integrity: sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==
+  /conventional-commits-filter/1.1.6:
+    dependencies:
+      is-subset: 0.1.1
+      modify-values: 1.0.1
+    dev: false
+    resolution:
+      integrity: sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==
+  /conventional-commits-parser/2.1.7:
+    dependencies:
+      JSONStream: 1.3.5
+      is-text-path: 1.0.1
+      lodash: 4.17.11
+      meow: 4.0.1
+      split2: 2.2.0
+      through2: 2.0.5
+      trim-off-newlines: 1.0.1
+    dev: false
+    hasBin: true
+    resolution:
+      integrity: sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==
+  /conventional-recommended-bump/1.2.1:
+    dependencies:
+      concat-stream: 1.6.2
+      conventional-commits-filter: 1.1.6
+      conventional-commits-parser: 2.1.7
+      git-raw-commits: 1.3.6
+      git-semver-tags: 1.3.6
+      meow: 3.7.0
+      object-assign: 4.1.1
+    dev: false
+    hasBin: true
+    resolution:
+      integrity: sha512-oJjG6DkRgtnr/t/VrPdzmf4XZv8c4xKVJrVT4zrSHd92KEL+EYxSbYoKq8lQ7U5yLMw7130wrcQTLRjM/T+d4w==
+  /convert-source-map/1.6.0:
+    dependencies:
+      safe-buffer: 5.1.2
+    dev: true
+    resolution:
+      integrity: sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==
+  /copy-concurrently/1.0.5:
+    dependencies:
+      aproba: 1.2.0
+      fs-write-stream-atomic: 1.0.10
+      iferr: 0.1.5
+      mkdirp: 0.5.1
+      rimraf: 2.6.3
+      run-queue: 1.0.3
+    dev: true
+    resolution:
+      integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+  /copy-descriptor/0.1.1:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+  /core-js/2.6.5:
+    dev: true
+    resolution:
+      integrity: sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==
+  /core-util-is/1.0.2:
+    resolution:
+      integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+  /create-ecdh/4.0.3:
+    dependencies:
+      bn.js: 4.11.8
+      elliptic: 6.4.1
+    dev: true
+    resolution:
+      integrity: sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
+  /create-hash/1.2.0:
+    dependencies:
+      cipher-base: 1.0.4
+      inherits: 2.0.3
+      md5.js: 1.3.5
+      ripemd160: 2.0.2
+      sha.js: 2.4.11
+    dev: true
+    resolution:
+      integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+  /create-hmac/1.1.7:
+    dependencies:
+      cipher-base: 1.0.4
+      create-hash: 1.2.0
+      inherits: 2.0.3
+      ripemd160: 2.0.2
+      safe-buffer: 5.1.2
+      sha.js: 2.4.11
+    dev: true
+    resolution:
+      integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+  /cross-spawn/5.1.0:
+    dependencies:
+      lru-cache: 4.1.5
+      shebang-command: 1.2.0
+      which: 1.3.1
+    dev: false
+    resolution:
+      integrity: sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
+  /cross-spawn/6.0.5:
+    dependencies:
+      nice-try: 1.0.5
+      path-key: 2.0.1
+      semver: 5.6.0
+      shebang-command: 1.2.0
+      which: 1.3.1
+    dev: true
+    engines:
+      node: '>=4.8'
+    resolution:
+      integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+  /crypto-browserify/3.12.0:
+    dependencies:
+      browserify-cipher: 1.0.1
+      browserify-sign: 4.0.4
+      create-ecdh: 4.0.3
+      create-hash: 1.2.0
+      create-hmac: 1.1.7
+      diffie-hellman: 5.0.3
+      inherits: 2.0.3
+      pbkdf2: 3.0.17
+      public-encrypt: 4.0.3
+      randombytes: 2.1.0
+      randomfill: 1.0.4
+    dev: true
+    resolution:
+      integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+  /currently-unhandled/0.4.1:
+    dependencies:
+      array-find-index: 1.0.2
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-mI3zP+qxke95mmE2nddsF635V+o=
+  /cyclist/0.2.2:
+    dev: true
+    resolution:
+      integrity: sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=
+  /dargs/4.1.0:
+    dependencies:
+      number-is-nan: 1.0.1
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=
+  /date-now/0.1.4:
+    dev: true
+    resolution:
+      integrity: sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
+  /dateformat/3.0.3:
+    dev: false
+    resolution:
+      integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
+  /debug/2.6.9:
+    dependencies:
+      ms: 2.0.0
+    dev: true
+    resolution:
+      integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+  /debug/3.1.0:
+    dependencies:
+      ms: 2.0.0
+    dev: true
+    resolution:
+      integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
+  /debug/3.2.6:
+    dependencies:
+      ms: 2.1.1
+    dev: true
+    resolution:
+      integrity: sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+  /debug/4.1.1:
+    dependencies:
+      ms: 2.1.1
+    dev: true
+    resolution:
+      integrity: sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+  /decamelize-keys/1.1.0:
+    dependencies:
+      decamelize: 1.2.0
+      map-obj: 1.0.1
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=
+  /decamelize/1.2.0:
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+  /decode-uri-component/0.2.0:
+    dev: true
+    engines:
+      node: '>=0.10'
+    resolution:
+      integrity: sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+  /deep-is/0.1.3:
+    dev: true
+    resolution:
+      integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+  /define-properties/1.1.3:
+    dependencies:
+      object-keys: 1.1.0
+    dev: true
+    engines:
+      node: '>= 0.4'
+    resolution:
+      integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+  /define-property/0.2.5:
+    dependencies:
+      is-descriptor: 0.1.6
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+  /define-property/1.0.0:
+    dependencies:
+      is-descriptor: 1.0.2
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+  /define-property/2.0.2:
+    dependencies:
+      is-descriptor: 1.0.2
+      isobject: 3.0.1
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+  /des.js/1.0.0:
     dependencies:
-      compare-func: 1.3.2
-      q: 1.5.1
+      inherits: 2.0.3
+      minimalistic-assert: 1.0.1
     dev: true
     resolution:
-      integrity: sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==
-  /conventional-changelog-atom/0.2.8:
+      integrity: sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=
+  /detect-indent/4.0.0:
     dependencies:
-      q: 1.5.1
+      repeating: 2.0.1
     dev: true
+    engines:
+      node: '>=0.10.0'
     resolution:
-      integrity: sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==
-  /conventional-changelog-cli/1.3.22:
+      integrity: sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
+  /diffie-hellman/5.0.3:
     dependencies:
-      add-stream: 1.0.0
-      conventional-changelog: 1.1.24
-      lodash: 4.17.10
-      meow: 4.0.1
-      tempfile: 1.1.1
+      bn.js: 4.11.8
+      miller-rabin: 4.0.1
+      randombytes: 2.1.0
     dev: true
-    hasBin: true
     resolution:
-      integrity: sha512-pnjdIJbxjkZ5VdAX/H1wndr1G10CY8MuZgnXuJhIHglOXfIrXygb7KZC836GW9uo1u8PjEIvIw/bKX0lOmOzZg==
-  /conventional-changelog-codemirror/0.3.8:
+      integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+  /doctrine/3.0.0:
     dependencies:
-      q: 1.5.1
+      esutils: 2.0.2
     dev: true
+    engines:
+      node: '>=6.0.0'
     resolution:
-      integrity: sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==
-  /conventional-changelog-core/2.0.11:
-    dependencies:
-      conventional-changelog-writer: 3.0.9
-      conventional-commits-parser: 2.1.7
-      dateformat: 3.0.3
-      get-pkg-repo: 1.4.0
-      git-raw-commits: 1.3.6
-      git-remote-origin-url: 2.0.0
-      git-semver-tags: 1.3.6
-      lodash: 4.17.10
-      normalize-package-data: 2.4.0
-      q: 1.5.1
-      read-pkg: 1.1.0
-      read-pkg-up: 1.0.1
-      through2: 2.0.3
+      integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+  /dom-event-types/1.0.0:
     dev: true
     resolution:
-      integrity: sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==
-  /conventional-changelog-ember/0.3.12:
-    dependencies:
-      q: 1.5.1
+      integrity: sha512-2G2Vwi2zXTHBGqXHsJ4+ak/iP0N8Ar+G8a7LiD2oup5o4sQWytwqqrZu/O6hIMV0KMID2PL69OhpshLO0n7UJQ==
+  /domain-browser/1.2.0:
     dev: true
+    engines:
+      node: '>=0.4'
+      npm: '>=1.2'
     resolution:
-      integrity: sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==
-  /conventional-changelog-eslint/1.0.9:
+      integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+  /dot-prop/3.0.0:
     dependencies:
-      q: 1.5.1
-    dev: true
+      is-obj: 1.0.1
+    dev: false
+    engines:
+      node: '>=0.10.0'
     resolution:
-      integrity: sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==
-  /conventional-changelog-express/0.3.6:
+      integrity: sha1-G3CK8JSknJoOfbyteQq6U52sEXc=
+  /dotgitignore/1.0.3:
     dependencies:
-      q: 1.5.1
-    dev: true
+      find-up: 2.1.0
+      minimatch: 3.0.4
+    dev: false
     resolution:
-      integrity: sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==
-  /conventional-changelog-jquery/0.1.0:
+      integrity: sha512-eu5XjSstm0WXQsARgo6kPjkINYZlOUW+z/KtAAIBjHa5mUpMPrxJytbPIndWz6GubBuuuH5ljtVcXKnVnH5q8w==
+  /duplexify/3.7.1:
     dependencies:
-      q: 1.5.1
+      end-of-stream: 1.4.1
+      inherits: 2.0.3
+      readable-stream: 2.3.6
+      stream-shift: 1.0.0
     dev: true
     resolution:
-      integrity: sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=
-  /conventional-changelog-jscs/0.1.0:
-    dependencies:
-      q: 1.5.1
+      integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+  /electron-to-chromium/1.3.113:
     dev: true
     resolution:
-      integrity: sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=
-  /conventional-changelog-jshint/0.3.8:
+      integrity: sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==
+  /elliptic/6.4.1:
     dependencies:
-      compare-func: 1.3.2
-      q: 1.5.1
+      bn.js: 4.11.8
+      brorand: 1.1.0
+      hash.js: 1.1.7
+      hmac-drbg: 1.0.1
+      inherits: 2.0.3
+      minimalistic-assert: 1.0.1
+      minimalistic-crypto-utils: 1.0.1
     dev: true
     resolution:
-      integrity: sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==
-  /conventional-changelog-preset-loader/1.1.8:
+      integrity: sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==
+  /emoji-regex/7.0.3:
     dev: true
     resolution:
-      integrity: sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==
-  /conventional-changelog-writer/3.0.9:
-    dependencies:
-      compare-func: 1.3.2
-      conventional-commits-filter: 1.1.6
-      dateformat: 3.0.3
-      handlebars: 4.0.11
-      json-stringify-safe: 5.0.1
-      lodash: 4.17.10
-      meow: 4.0.1
-      semver: 5.5.0
-      split: 1.0.1
-      through2: 2.0.3
+      integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+  /emojis-list/2.1.0:
     dev: true
-    hasBin: true
+    engines:
+      node: '>= 0.10'
     resolution:
-      integrity: sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==
-  /conventional-changelog/1.1.24:
+      integrity: sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+  /end-of-stream/1.4.1:
     dependencies:
-      conventional-changelog-angular: 1.6.6
-      conventional-changelog-atom: 0.2.8
-      conventional-changelog-codemirror: 0.3.8
-      conventional-changelog-core: 2.0.11
-      conventional-changelog-ember: 0.3.12
-      conventional-changelog-eslint: 1.0.9
-      conventional-changelog-express: 0.3.6
-      conventional-changelog-jquery: 0.1.0
-      conventional-changelog-jscs: 0.1.0
-      conventional-changelog-jshint: 0.3.8
-      conventional-changelog-preset-loader: 1.1.8
+      once: 1.4.0
     dev: true
     resolution:
-      integrity: sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==
-  /conventional-commits-filter/1.1.6:
+      integrity: sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
+  /enhanced-resolve/4.1.0:
     dependencies:
-      is-subset: 0.1.1
-      modify-values: 1.0.1
+      graceful-fs: 4.1.15
+      memory-fs: 0.4.1
+      tapable: 1.1.1
     dev: true
+    engines:
+      node: '>=6.9.0'
     resolution:
-      integrity: sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==
-  /conventional-commits-parser/2.1.7:
+      integrity: sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==
+  /errno/0.1.7:
     dependencies:
-      JSONStream: 1.3.3
-      is-text-path: 1.0.1
-      lodash: 4.17.10
-      meow: 4.0.1
-      split2: 2.2.0
-      through2: 2.0.3
-      trim-off-newlines: 1.0.1
+      prr: 1.0.1
     dev: true
     hasBin: true
     resolution:
-      integrity: sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==
-  /conventional-recommended-bump/1.2.1:
+      integrity: sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
+  /error-ex/1.3.2:
     dependencies:
-      concat-stream: 1.6.2
-      conventional-commits-filter: 1.1.6
-      conventional-commits-parser: 2.1.7
-      git-raw-commits: 1.3.6
-      git-semver-tags: 1.3.6
-      meow: 3.7.0
-      object-assign: 4.1.1
-    dev: true
-    hasBin: true
+      is-arrayish: 0.2.1
     resolution:
-      integrity: sha512-oJjG6DkRgtnr/t/VrPdzmf4XZv8c4xKVJrVT4zrSHd92KEL+EYxSbYoKq8lQ7U5yLMw7130wrcQTLRjM/T+d4w==
-  /core-util-is/1.0.2:
+      integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+  /es-abstract/1.13.0:
+    dependencies:
+      es-to-primitive: 1.2.0
+      function-bind: 1.1.1
+      has: 1.0.3
+      is-callable: 1.1.4
+      is-regex: 1.0.4
+      object-keys: 1.1.0
     dev: true
+    engines:
+      node: '>= 0.4'
     resolution:
-      integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-  /create-error-class/3.0.2:
+      integrity: sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
+  /es-to-primitive/1.2.0:
     dependencies:
-      capture-stack-trace: 1.0.0
+      is-callable: 1.1.4
+      is-date-object: 1.0.1
+      is-symbol: 1.0.2
     dev: true
     engines:
-      node: '>=0.10.0'
+      node: '>= 0.4'
     resolution:
-      integrity: sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=
-  /cross-spawn/5.1.0:
+      integrity: sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
+  /escape-string-regexp/1.0.5:
+    engines:
+      node: '>=0.8.0'
+    resolution:
+      integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+  /eslint-config-prettier/3.6.0:
     dependencies:
-      lru-cache: 4.1.3
-      shebang-command: 1.2.0
-      which: 1.3.1
+      get-stdin: 6.0.0
     dev: true
+    hasBin: true
+    peerDependencies:
+      eslint: '>=3.14.1'
     resolution:
-      integrity: sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
-  /currently-unhandled/0.4.1:
+      integrity: sha512-ixJ4U3uTLXwJts4rmSVW/lMXjlGwCijhBJHk8iVqKKSifeI0qgFEfWl8L63isfc8Od7EiBALF6BX3jKLluf/jQ==
+  /eslint-plugin-prettier/3.0.1_prettier@1.16.4:
     dependencies:
-      array-find-index: 1.0.2
+      prettier: 1.16.4
+      prettier-linter-helpers: 1.0.0
     dev: true
     engines:
-      node: '>=0.10.0'
+      node: '>=6.0.0'
+    peerDependencies:
+      eslint: '>= 5.0.0'
+      prettier: '>= 1.13.0'
     resolution:
-      integrity: sha1-mI3zP+qxke95mmE2nddsF635V+o=
-  /dargs/4.1.0:
+      integrity: sha512-/PMttrarPAY78PLvV3xfWibMOdMDl57hmlQ2XqFeA37wd+CJ7WSxV7txqjVPHi/AAFKd2lX0ZqfsOc/i5yFCSQ==
+  /eslint-plugin-vue/5.2.2:
     dependencies:
-      number-is-nan: 1.0.1
+      vue-eslint-parser: 5.0.0
     dev: true
     engines:
-      node: '>=0.10.0'
+      node: '>=6.5'
+    peerDependencies:
+      eslint: ^5.0.0
     resolution:
-      integrity: sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=
-  /dateformat/3.0.3:
+      integrity: sha512-CtGWH7IB0DA6BZOwcV9w9q3Ri6Yuo8qMjx05SmOGJ6X6E0Yo3y9E/gQ5tuNxg2dEt30tRnBoFTbvtmW9iEoyHA==
+  /eslint-scope/3.7.1:
+    dependencies:
+      esrecurse: 4.2.1
+      estraverse: 4.2.0
     dev: true
+    engines:
+      node: '>=4.0.0'
     resolution:
-      integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
-  /decamelize-keys/1.1.0:
+      integrity: sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=
+  /eslint-scope/4.0.2:
     dependencies:
-      decamelize: 1.2.0
-      map-obj: 1.0.1
+      esrecurse: 4.2.1
+      estraverse: 4.2.0
     dev: true
     engines:
-      node: '>=0.10.0'
+      node: '>=4.0.0'
     resolution:
-      integrity: sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=
-  /decamelize/1.2.0:
+      integrity: sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==
+  /eslint-utils/1.3.1:
     dev: true
     engines:
-      node: '>=0.10.0'
+      node: '>=6'
     resolution:
-      integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
-  /dedent/0.7.0:
+      integrity: sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==
+  /eslint-visitor-keys/1.0.0:
     dev: true
+    engines:
+      node: '>=4'
     resolution:
-      integrity: sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
-  /deep-extend/0.6.0:
+      integrity: sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==
+  /eslint/5.15.1:
+    dependencies:
+      '@babel/code-frame': 7.0.0
+      ajv: 6.10.0
+      chalk: 2.4.2
+      cross-spawn: 6.0.5
+      debug: 4.1.1
+      doctrine: 3.0.0
+      eslint-scope: 4.0.2
+      eslint-utils: 1.3.1
+      eslint-visitor-keys: 1.0.0
+      espree: 5.0.1
+      esquery: 1.0.1
+      esutils: 2.0.2
+      file-entry-cache: 5.0.1
+      functional-red-black-tree: 1.0.1
+      glob: 7.1.3
+      globals: 11.11.0
+      ignore: 4.0.6
+      import-fresh: 3.0.0
+      imurmurhash: 0.1.4
+      inquirer: 6.2.2
+      js-yaml: 3.12.2
+      json-stable-stringify-without-jsonify: 1.0.1
+      levn: 0.3.0
+      lodash: 4.17.11
+      minimatch: 3.0.4
+      mkdirp: 0.5.1
+      natural-compare: 1.4.0
+      optionator: 0.8.2
+      path-is-inside: 1.0.2
+      progress: 2.0.3
+      regexpp: 2.0.1
+      semver: 5.6.0
+      strip-ansi: 4.0.0
+      strip-json-comments: 2.0.1
+      table: 5.2.3
+      text-table: 0.2.0
     dev: true
     engines:
-      node: '>=4.0.0'
+      node: ^6.14.0 || ^8.10.0 || >=9.10.0
+    hasBin: true
     resolution:
-      integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-  /defaults/1.0.3:
+      integrity: sha512-NTcm6vQ+PTgN3UBsALw5BMhgO6i5EpIjQF/Xb5tIh3sk9QhrFafujUOczGz4J24JBlzWclSB9Vmx8d+9Z6bFCg==
+  /espree/4.1.0:
     dependencies:
-      clone: 1.0.4
+      acorn: 6.1.1
+      acorn-jsx: 5.0.1_acorn@6.1.1
+      eslint-visitor-keys: 1.0.0
     dev: true
+    engines:
+      node: '>=6.0.0'
     resolution:
-      integrity: sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=
-  /delegates/1.0.0:
+      integrity: sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==
+  /espree/5.0.1:
+    dependencies:
+      acorn: 6.1.1
+      acorn-jsx: 5.0.1_acorn@6.1.1
+      eslint-visitor-keys: 1.0.0
     dev: true
+    engines:
+      node: '>=6.0.0'
     resolution:
-      integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
-  /detect-indent/5.0.0:
+      integrity: sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==
+  /esprima/4.0.1:
     dev: true
     engines:
       node: '>=4'
+    hasBin: true
     resolution:
-      integrity: sha1-OHHMCmoALow+Wzz38zYmRnXwa50=
-  /dot-prop/3.0.0:
+      integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+  /esquery/1.0.1:
     dependencies:
-      is-obj: 1.0.1
+      estraverse: 4.2.0
     dev: true
     engines:
-      node: '>=0.10.0'
+      node: '>=0.6'
     resolution:
-      integrity: sha1-G3CK8JSknJoOfbyteQq6U52sEXc=
-  /duplexer/0.1.1:
+      integrity: sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
+  /esrecurse/4.2.1:
+    dependencies:
+      estraverse: 4.2.0
     dev: true
+    engines:
+      node: '>=4.0'
     resolution:
-      integrity: sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
-  /duplexer3/0.1.4:
+      integrity: sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+  /estraverse/4.2.0:
     dev: true
+    engines:
+      node: '>=0.10.0'
     resolution:
-      integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
-  /error-ex/1.3.1:
-    dependencies:
-      is-arrayish: 0.2.1
+      integrity: sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
+  /esutils/2.0.2:
     dev: true
+    engines:
+      node: '>=0.10.0'
     resolution:
-      integrity: sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=
-  /escape-string-regexp/1.0.5:
+      integrity: sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
+  /events/3.0.0:
     dev: true
     engines:
-      node: '>=0.8.0'
+      node: '>=0.8.x'
     resolution:
-      integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-  /estree-walker/0.5.2:
+      integrity: sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==
+  /evp_bytestokey/1.0.3:
+    dependencies:
+      md5.js: 1.3.5
+      safe-buffer: 5.1.2
     dev: true
     resolution:
-      integrity: sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==
+      integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
   /execa/0.7.0:
     dependencies:
       cross-spawn: 5.1.0
@@ -611,33 +2305,33 @@ packages:
       p-finally: 1.0.0
       signal-exit: 3.0.2
       strip-eof: 1.0.0
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
-  /execa/0.8.0:
+  /expand-brackets/0.1.5:
     dependencies:
-      cross-spawn: 5.1.0
-      get-stream: 3.0.0
-      is-stream: 1.1.0
-      npm-run-path: 2.0.2
-      p-finally: 1.0.0
-      signal-exit: 3.0.2
-      strip-eof: 1.0.0
+      is-posix-bracket: 0.1.1
     dev: true
     engines:
-      node: '>=4'
+      node: '>=0.10.0'
     resolution:
-      integrity: sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=
-  /expand-brackets/0.1.5:
+      integrity: sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
+  /expand-brackets/2.1.4:
     dependencies:
-      is-posix-bracket: 0.1.1
+      debug: 2.6.9
+      define-property: 0.2.5
+      extend-shallow: 2.0.1
+      posix-character-classes: 0.1.1
+      regex-not: 1.0.2
+      snapdragon: 0.8.2
+      to-regex: 3.0.2
     dev: true
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
+      integrity: sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
   /expand-range/1.8.2:
     dependencies:
       fill-range: 2.2.4
@@ -646,16 +2340,33 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
-  /external-editor/2.2.0:
+  /extend-shallow/2.0.1:
+    dependencies:
+      is-extendable: 0.1.1
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+  /extend-shallow/3.0.2:
+    dependencies:
+      assign-symbols: 1.0.0
+      is-extendable: 1.0.1
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+  /external-editor/3.0.3:
     dependencies:
-      chardet: 0.4.2
-      iconv-lite: 0.4.23
+      chardet: 0.7.0
+      iconv-lite: 0.4.24
       tmp: 0.0.33
     dev: true
     engines:
-      node: '>=0.12'
+      node: '>=4'
     resolution:
-      integrity: sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
+      integrity: sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==
   /extglob/0.3.2:
     dependencies:
       is-extglob: 1.0.0
@@ -664,6 +2375,46 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
+  /extglob/2.0.4:
+    dependencies:
+      array-unique: 0.3.2
+      define-property: 1.0.0
+      expand-brackets: 2.1.4
+      extend-shallow: 2.0.1
+      fragment-cache: 0.2.1
+      regex-not: 1.0.2
+      snapdragon: 0.8.2
+      to-regex: 3.0.2
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+  /fast-deep-equal/2.0.1:
+    dev: true
+    resolution:
+      integrity: sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
+  /fast-diff/1.2.0:
+    dev: true
+    resolution:
+      integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
+  /fast-json-stable-stringify/2.0.0:
+    dev: true
+    resolution:
+      integrity: sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
+  /fast-levenshtein/2.0.6:
+    dev: true
+    resolution:
+      integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+  /figures/1.7.0:
+    dependencies:
+      escape-string-regexp: 1.0.5
+      object-assign: 4.1.1
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=
   /figures/2.0.0:
     dependencies:
       escape-string-regexp: 1.0.5
@@ -672,6 +2423,14 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+  /file-entry-cache/5.0.1:
+    dependencies:
+      flat-cache: 2.0.1
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
   /filename-regex/2.0.1:
     dev: true
     engines:
@@ -690,23 +2449,63 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==
+  /fill-range/4.0.0:
+    dependencies:
+      extend-shallow: 2.0.1
+      is-number: 3.0.0
+      repeat-string: 1.6.1
+      to-regex-range: 2.1.1
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+  /find-cache-dir/1.0.0:
+    dependencies:
+      commondir: 1.0.1
+      make-dir: 1.3.0
+      pkg-dir: 2.0.0
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=
   /find-up/1.1.2:
     dependencies:
       path-exists: 2.1.0
       pinkie-promise: 2.0.1
-    dev: true
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
   /find-up/2.1.0:
     dependencies:
-      locate-path: 2.0.0
+      locate-path: 2.0.0
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+  /flat-cache/2.0.1:
+    dependencies:
+      flatted: 2.0.0
+      rimraf: 2.6.3
+      write: 1.0.3
     dev: true
     engines:
       node: '>=4'
     resolution:
-      integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+      integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+  /flatted/2.0.0:
+    dev: true
+    resolution:
+      integrity: sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==
+  /flush-write-stream/1.1.1:
+    dependencies:
+      inherits: 2.0.3
+      readable-stream: 2.3.6
+    dev: true
+    resolution:
+      integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
   /for-in/1.0.2:
     dev: true
     engines:
@@ -721,72 +2520,109 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
-  /fs-extra/4.0.3:
+  /fragment-cache/0.2.1:
+    dependencies:
+      map-cache: 0.2.2
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+  /from2/2.3.0:
+    dependencies:
+      inherits: 2.0.3
+      readable-stream: 2.3.6
+    dev: true
+    resolution:
+      integrity: sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
+  /fs-access/1.0.1:
+    dependencies:
+      null-check: 1.0.0
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=
+  /fs-write-stream-atomic/1.0.10:
     dependencies:
-      graceful-fs: 4.1.11
-      jsonfile: 4.0.0
-      universalify: 0.1.1
+      graceful-fs: 4.1.15
+      iferr: 0.1.5
+      imurmurhash: 0.1.4
+      readable-stream: 2.3.6
     dev: true
     resolution:
-      integrity: sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==
+      integrity: sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
   /fs.realpath/1.0.0:
     dev: true
     resolution:
       integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-  /gauge/2.7.4:
+  /fsevents/1.2.7:
+    bundledDependencies:
+      - node-pre-gyp
     dependencies:
-      aproba: 1.2.0
-      console-control-strings: 1.1.0
-      has-unicode: 2.0.1
-      object-assign: 4.1.1
-      signal-exit: 3.0.2
-      string-width: 1.0.2
-      strip-ansi: 3.0.1
-      wide-align: 1.1.3
+      nan: 2.12.1
+    dev: true
+    engines:
+      node: '>=4.0'
+    optional: true
+    requiresBuild: true
+    resolution:
+      integrity: sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==
+  /function-bind/1.1.1:
     dev: true
     resolution:
-      integrity: sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
-  /get-caller-file/1.0.2:
+      integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+  /functional-red-black-tree/1.0.1:
     dev: true
     resolution:
-      integrity: sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=
+      integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+  /get-caller-file/1.0.3:
+    dev: false
+    resolution:
+      integrity: sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
   /get-pkg-repo/1.4.0:
     dependencies:
-      hosted-git-info: 2.6.0
+      hosted-git-info: 2.7.1
       meow: 3.7.0
-      normalize-package-data: 2.4.0
+      normalize-package-data: 2.5.0
       parse-github-repo-url: 1.4.1
-      through2: 2.0.3
-    dev: true
+      through2: 2.0.5
+    dev: false
     hasBin: true
     resolution:
       integrity: sha1-xztInAbYDMVTbCyFP54FIyBWly0=
-  /get-port/3.2.0:
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=
   /get-stdin/4.0.1:
-    dev: true
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
-  /get-stream/3.0.0:
+  /get-stdin/6.0.0:
     dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
+  /get-stream/3.0.0:
+    dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+  /get-value/2.0.6:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
   /git-raw-commits/1.3.6:
     dependencies:
       dargs: 4.1.0
       lodash.template: 4.4.0
       meow: 4.0.1
       split2: 2.2.0
-      through2: 2.0.3
-    dev: true
+      through2: 2.0.5
+    dev: false
     hasBin: true
     resolution:
       integrity: sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==
@@ -794,7 +2630,7 @@ packages:
     dependencies:
       gitconfiglocal: 1.0.0
       pify: 2.3.0
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
@@ -802,15 +2638,15 @@ packages:
   /git-semver-tags/1.3.6:
     dependencies:
       meow: 4.0.1
-      semver: 5.5.0
-    dev: true
+      semver: 5.6.0
+    dev: false
     hasBin: true
     resolution:
       integrity: sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==
   /gitconfiglocal/1.0.0:
     dependencies:
       ini: 1.3.5
-    dev: true
+    dev: false
     resolution:
       integrity: sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=
   /glob-base/0.3.0:
@@ -835,7 +2671,7 @@ packages:
     dev: true
     resolution:
       integrity: sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
-  /glob/7.1.2:
+  /glob/7.1.3:
     dependencies:
       fs.realpath: 1.0.0
       inflight: 1.0.6
@@ -845,80 +2681,159 @@ packages:
       path-is-absolute: 1.0.1
     dev: true
     resolution:
-      integrity: sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
-  /globby/6.1.0:
-    dependencies:
-      array-union: 1.0.2
-      glob: 7.1.2
-      object-assign: 4.1.1
-      pify: 2.3.0
-      pinkie-promise: 2.0.1
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
-  /got/6.7.1:
-    dependencies:
-      create-error-class: 3.0.2
-      duplexer3: 0.1.4
-      get-stream: 3.0.0
-      is-redirect: 1.0.0
-      is-retry-allowed: 1.1.0
-      is-stream: 1.1.0
-      lowercase-keys: 1.0.1
-      safe-buffer: 5.1.2
-      timed-out: 4.0.1
-      unzip-response: 2.0.1
-      url-parse-lax: 1.0.0
+      integrity: sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
+  /globals/11.11.0:
     dev: true
     engines:
       node: '>=4'
     resolution:
-      integrity: sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=
-  /graceful-fs/4.1.11:
+      integrity: sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==
+  /globals/9.18.0:
     dev: true
     engines:
-      node: '>=0.4.0'
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
+  /graceful-fs/4.1.15:
     resolution:
-      integrity: sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
-  /handlebars/4.0.11:
+      integrity: sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
+  /handlebars/4.1.0:
     dependencies:
-      async: 1.5.2
+      async: 2.6.2
       optimist: 0.6.1
-      source-map: 0.4.4
-    dev: true
+      source-map: 0.6.1
+    dev: false
     engines:
       node: '>=0.4.7'
     hasBin: true
     optionalDependencies:
-      uglify-js: 2.8.29
+      uglify-js: 3.4.9
+    resolution:
+      integrity: sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==
+  /has-ansi/2.0.0:
+    dependencies:
+      ansi-regex: 2.1.1
+    engines:
+      node: '>=0.10.0'
     resolution:
-      integrity: sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=
+      integrity: sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
   /has-flag/3.0.0:
     dev: true
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-  /has-unicode/2.0.1:
+  /has-symbols/1.0.0:
+    dev: true
+    engines:
+      node: '>= 0.4'
+    resolution:
+      integrity: sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
+  /has-value/0.3.1:
+    dependencies:
+      get-value: 2.0.6
+      has-values: 0.1.4
+      isobject: 2.1.0
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+  /has-value/1.0.0:
+    dependencies:
+      get-value: 2.0.6
+      has-values: 1.0.0
+      isobject: 3.0.1
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+  /has-values/0.1.4:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+  /has-values/1.0.0:
+    dependencies:
+      is-number: 3.0.0
+      kind-of: 4.0.0
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+  /has/1.0.3:
+    dependencies:
+      function-bind: 1.1.1
     dev: true
+    engines:
+      node: '>= 0.4.0'
     resolution:
-      integrity: sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
-  /hosted-git-info/2.6.0:
+      integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+  /hash-base/3.0.4:
+    dependencies:
+      inherits: 2.0.3
+      safe-buffer: 5.1.2
     dev: true
     engines:
       node: '>=4'
     resolution:
-      integrity: sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==
-  /iconv-lite/0.4.23:
+      integrity: sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
+  /hash.js/1.1.7:
+    dependencies:
+      inherits: 2.0.3
+      minimalistic-assert: 1.0.1
+    dev: true
+    resolution:
+      integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+  /hmac-drbg/1.0.1:
+    dependencies:
+      hash.js: 1.1.7
+      minimalistic-assert: 1.0.1
+      minimalistic-crypto-utils: 1.0.1
+    dev: true
+    resolution:
+      integrity: sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+  /hosted-git-info/2.7.1:
+    resolution:
+      integrity: sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==
+  /https-browserify/1.0.0:
+    dev: true
+    resolution:
+      integrity: sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+  /iconv-lite/0.4.24:
     dependencies:
       safer-buffer: 2.1.2
     dev: true
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==
+      integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+  /ieee754/1.1.12:
+    dev: true
+    resolution:
+      integrity: sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==
+  /iferr/0.1.5:
+    dev: true
+    resolution:
+      integrity: sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+  /ignore/4.0.6:
+    dev: true
+    engines:
+      node: '>= 4'
+    resolution:
+      integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+  /import-fresh/3.0.0:
+    dependencies:
+      parent-module: 1.0.0
+      resolve-from: 4.0.0
+    dev: true
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==
   /imurmurhash/0.1.4:
     dev: true
     engines:
@@ -928,17 +2843,21 @@ packages:
   /indent-string/2.1.0:
     dependencies:
       repeating: 2.0.1
-    dev: true
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
   /indent-string/3.2.0:
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=
+  /indexof/0.0.1:
+    dev: true
+    resolution:
+      integrity: sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
   /inflight/1.0.6:
     dependencies:
       once: 1.4.0
@@ -946,62 +2865,128 @@ packages:
     dev: true
     resolution:
       integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
-  /inherits/2.0.3:
+  /inherits/2.0.1:
     dev: true
+    resolution:
+      integrity: sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+  /inherits/2.0.3:
     resolution:
       integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
   /ini/1.3.5:
-    dev: true
+    dev: false
     resolution:
       integrity: sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
-  /inquirer/3.3.0:
+  /inquirer/6.2.2:
     dependencies:
-      ansi-escapes: 3.1.0
-      chalk: 2.4.1
+      ansi-escapes: 3.2.0
+      chalk: 2.4.2
       cli-cursor: 2.1.0
       cli-width: 2.2.0
-      external-editor: 2.2.0
+      external-editor: 3.0.3
       figures: 2.0.0
-      lodash: 4.17.10
+      lodash: 4.17.11
       mute-stream: 0.0.7
       run-async: 2.3.0
-      rx-lite: 4.0.8
-      rx-lite-aggregates: 4.0.8
+      rxjs: 6.4.0
       string-width: 2.1.1
-      strip-ansi: 4.0.0
+      strip-ansi: 5.0.0
       through: 2.3.8
     dev: true
+    engines:
+      node: '>=6.0.0'
+    resolution:
+      integrity: sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==
+  /invariant/2.2.4:
+    dependencies:
+      loose-envify: 1.4.0
+    dev: true
     resolution:
-      integrity: sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==
+      integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
   /invert-kv/1.0.0:
-    dev: true
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
-  /is-arrayish/0.2.1:
+  /is-accessor-descriptor/0.1.6:
+    dependencies:
+      kind-of: 3.2.2
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+  /is-accessor-descriptor/1.0.0:
+    dependencies:
+      kind-of: 6.0.2
     dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+  /is-arrayish/0.2.1:
     resolution:
       integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+  /is-binary-path/1.0.1:
+    dependencies:
+      binary-extensions: 1.13.0
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
   /is-buffer/1.1.6:
     dev: true
     resolution:
       integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-  /is-builtin-module/1.0.0:
+  /is-callable/1.1.4:
+    dev: true
+    engines:
+      node: '>= 0.4'
+    resolution:
+      integrity: sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
+  /is-data-descriptor/0.1.4:
     dependencies:
-      builtin-modules: 1.1.1
+      kind-of: 3.2.2
     dev: true
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
-  /is-ci/1.1.0:
+      integrity: sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+  /is-data-descriptor/1.0.0:
     dependencies:
-      ci-info: 1.1.3
+      kind-of: 6.0.2
     dev: true
-    hasBin: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+  /is-date-object/1.0.1:
+    dev: true
+    engines:
+      node: '>= 0.4'
+    resolution:
+      integrity: sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
+  /is-descriptor/0.1.6:
+    dependencies:
+      is-accessor-descriptor: 0.1.6
+      is-data-descriptor: 0.1.4
+      kind-of: 5.1.0
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+  /is-descriptor/1.0.2:
+    dependencies:
+      is-accessor-descriptor: 1.0.0
+      is-data-descriptor: 1.0.0
+      kind-of: 6.0.2
+    dev: true
+    engines:
+      node: '>=0.10.0'
     resolution:
-      integrity: sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==
+      integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
   /is-dotfile/1.0.3:
     dev: true
     engines:
@@ -1022,6 +3007,14 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+  /is-extendable/1.0.1:
+    dependencies:
+      is-plain-object: 2.0.4
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
   /is-extglob/1.0.0:
     dev: true
     engines:
@@ -1037,7 +3030,6 @@ packages:
   /is-finite/1.0.2:
     dependencies:
       number-is-nan: 1.0.1
-    dev: true
     engines:
       node: '>=0.10.0'
     resolution:
@@ -1045,13 +3037,12 @@ packages:
   /is-fullwidth-code-point/1.0.0:
     dependencies:
       number-is-nan: 1.0.1
-    dev: true
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
   /is-fullwidth-code-point/2.0.0:
-    dev: true
     engines:
       node: '>=4'
     resolution:
@@ -1072,10 +3063,14 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
-  /is-module/1.0.0:
+  /is-glob/4.0.0:
+    dependencies:
+      is-extglob: 2.1.1
     dev: true
+    engines:
+      node: '>=0.10.0'
     resolution:
-      integrity: sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=
+      integrity: sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=
   /is-number/2.1.0:
     dependencies:
       kind-of: 3.2.2
@@ -1084,6 +3079,14 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
+  /is-number/3.0.0:
+    dependencies:
+      kind-of: 3.2.2
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
   /is-number/4.0.0:
     dev: true
     engines:
@@ -1091,99 +3094,188 @@ packages:
     resolution:
       integrity: sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
   /is-obj/1.0.1:
-    dev: true
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
   /is-plain-obj/1.1.0:
-    dev: true
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+  /is-plain-object/2.0.4:
+    dependencies:
+      isobject: 3.0.1
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
   /is-posix-bracket/0.1.1:
     dev: true
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
-  /is-primitive/2.0.0:
+      integrity: sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
+  /is-primitive/2.0.0:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
+  /is-promise/2.1.0:
+    dev: true
+    resolution:
+      integrity: sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
+  /is-regex/1.0.4:
+    dependencies:
+      has: 1.0.3
+    dev: true
+    engines:
+      node: '>= 0.4'
+    resolution:
+      integrity: sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
+  /is-stream/1.1.0:
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+  /is-subset/0.1.1:
+    dev: false
+    resolution:
+      integrity: sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=
+  /is-symbol/1.0.2:
+    dependencies:
+      has-symbols: 1.0.0
+    dev: true
+    engines:
+      node: '>= 0.4'
+    resolution:
+      integrity: sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
+  /is-text-path/1.0.1:
+    dependencies:
+      text-extensions: 1.9.0
+    dev: false
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=
+  /is-utf8/0.2.1:
+    resolution:
+      integrity: sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+  /is-windows/1.0.2:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+  /isarray/1.0.0:
+    resolution:
+      integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+  /isexe/2.0.0:
+    resolution:
+      integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+  /isobject/2.1.0:
+    dependencies:
+      isarray: 1.0.0
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+  /isobject/3.0.1:
     dev: true
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
-  /is-promise/2.1.0:
+      integrity: sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+  /istanbul-lib-coverage/1.2.1:
     dev: true
     resolution:
-      integrity: sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
-  /is-redirect/1.0.0:
+      integrity: sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==
+  /istanbul-lib-instrument/1.10.2:
+    dependencies:
+      babel-generator: 6.26.1
+      babel-template: 6.26.0
+      babel-traverse: 6.26.0
+      babel-types: 6.26.0
+      babylon: 6.18.0
+      istanbul-lib-coverage: 1.2.1
+      semver: 5.6.0
     dev: true
-    engines:
-      node: '>=0.10.0'
     resolution:
-      integrity: sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=
-  /is-retry-allowed/1.1.0:
+      integrity: sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==
+  /js-levenshtein/1.1.6:
     dev: true
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=
-  /is-stream/1.1.0:
+      integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==
+  /js-tokens/3.0.2:
     dev: true
-    engines:
-      node: '>=0.10.0'
     resolution:
-      integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
-  /is-subset/0.1.1:
+      integrity: sha1-mGbfOVECEw449/mWvOtlRDIJwls=
+  /js-tokens/4.0.0:
     dev: true
     resolution:
-      integrity: sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=
-  /is-text-path/1.0.1:
+      integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+  /js-yaml/3.12.2:
     dependencies:
-      text-extensions: 1.7.0
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=
-  /is-utf8/0.2.1:
+      argparse: 1.0.10
+      esprima: 4.0.1
     dev: true
+    hasBin: true
     resolution:
-      integrity: sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
-  /isarray/1.0.0:
+      integrity: sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==
+  /jsesc/0.5.0:
     dev: true
+    hasBin: true
     resolution:
-      integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-  /isexe/2.0.0:
+      integrity: sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+  /jsesc/1.3.0:
     dev: true
+    hasBin: true
     resolution:
-      integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
-  /isobject/2.1.0:
-    dependencies:
-      isarray: 1.0.0
+      integrity: sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
+  /jsesc/2.5.2:
     dev: true
     engines:
-      node: '>=0.10.0'
+      node: '>=4'
+    hasBin: true
     resolution:
-      integrity: sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+      integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
   /json-parse-better-errors/1.0.2:
-    dev: true
     resolution:
       integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
-  /json-stringify-safe/5.0.1:
+  /json-schema-traverse/0.4.1:
+    dev: true
+    resolution:
+      integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+  /json-stable-stringify-without-jsonify/1.0.1:
     dev: true
+    resolution:
+      integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+  /json-stringify-safe/5.0.1:
+    dev: false
     resolution:
       integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
-  /jsonfile/4.0.0:
+  /json5/0.5.1:
     dev: true
-    optionalDependencies:
-      graceful-fs: 4.1.11
+    hasBin: true
     resolution:
-      integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
-  /jsonparse/1.3.1:
+      integrity: sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
+  /json5/1.0.1:
+    dependencies:
+      minimist: 1.2.0
     dev: true
+    hasBin: true
+    resolution:
+      integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+  /jsonparse/1.3.1:
+    dev: false
     engines:
       '0': node >= 0.2.0
     resolution:
@@ -1196,173 +3288,146 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
-  /kind-of/6.0.2:
+  /kind-of/4.0.0:
+    dependencies:
+      is-buffer: 1.1.6
     dev: true
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
-  /lazy-cache/1.0.4:
+      integrity: sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+  /kind-of/5.1.0:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+  /kind-of/6.0.2:
     dev: true
     engines:
       node: '>=0.10.0'
-    optional: true
     resolution:
-      integrity: sha1-odePw6UEdMuAhF07O24dpJpEbo4=
+      integrity: sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
   /lcid/1.0.0:
     dependencies:
       invert-kv: 1.0.0
-    dev: true
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=
-  /lerna/2.11.0:
-    dependencies:
-      async: 1.5.2
-      chalk: 2.4.1
-      cmd-shim: 2.0.2
-      columnify: 1.5.4
-      command-join: 2.0.0
-      conventional-changelog-cli: 1.3.22
-      conventional-recommended-bump: 1.2.1
-      dedent: 0.7.0
-      execa: 0.8.0
-      find-up: 2.1.0
-      fs-extra: 4.0.3
-      get-port: 3.2.0
-      glob: 7.1.2
-      glob-parent: 3.1.0
-      globby: 6.1.0
-      graceful-fs: 4.1.11
-      hosted-git-info: 2.6.0
-      inquirer: 3.3.0
-      is-ci: 1.1.0
-      load-json-file: 4.0.0
-      lodash: 4.17.10
-      minimatch: 3.0.4
-      npmlog: 4.1.2
-      p-finally: 1.0.0
-      package-json: 4.0.1
-      path-exists: 3.0.0
-      read-cmd-shim: 1.0.1
-      read-pkg: 3.0.0
-      rimraf: 2.6.2
-      safe-buffer: 5.1.2
-      semver: 5.5.0
-      signal-exit: 3.0.2
-      slash: 1.0.0
-      strong-log-transformer: 1.0.6
-      temp-write: 3.4.0
-      write-file-atomic: 2.3.0
-      write-json-file: 2.3.0
-      write-pkg: 3.1.0
-      yargs: 8.0.2
+  /levn/0.3.0:
+    dependencies:
+      prelude-ls: 1.1.2
+      type-check: 0.3.2
     dev: true
     engines:
-      node: '>= 4'
-    hasBin: true
+      node: '>= 0.8.0'
     resolution:
-      integrity: sha512-kgM6zwe2P2tR30MYvgiLLW+9buFCm6E7o8HnRlhTgm70WVBvXVhydqv+q/MF2HrVZkCawfVtCfetyQmtd4oHhQ==
+      integrity: sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
   /load-json-file/1.1.0:
     dependencies:
-      graceful-fs: 4.1.11
+      graceful-fs: 4.1.15
       parse-json: 2.2.0
       pify: 2.3.0
       pinkie-promise: 2.0.1
       strip-bom: 2.0.0
-    dev: true
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
   /load-json-file/2.0.0:
     dependencies:
-      graceful-fs: 4.1.11
+      graceful-fs: 4.1.15
       parse-json: 2.2.0
       pify: 2.3.0
       strip-bom: 3.0.0
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
   /load-json-file/4.0.0:
     dependencies:
-      graceful-fs: 4.1.11
+      graceful-fs: 4.1.15
       parse-json: 4.0.0
       pify: 3.0.0
       strip-bom: 3.0.0
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
+  /loader-runner/2.4.0:
+    dev: true
+    engines:
+      node: '>=4.3.0 <5.0.0 || >=5.10'
+    resolution:
+      integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
+  /loader-utils/1.2.3:
+    dependencies:
+      big.js: 5.2.2
+      emojis-list: 2.1.0
+      json5: 1.0.1
+    dev: true
+    engines:
+      node: '>=4.0.0'
+    resolution:
+      integrity: sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
   /locate-path/2.0.0:
     dependencies:
       p-locate: 2.0.0
       path-exists: 3.0.0
-    dev: true
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
   /lodash._reinterpolate/3.0.0:
-    dev: true
+    dev: false
     resolution:
       integrity: sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
+  /lodash.clonedeep/4.5.0:
+    dev: true
+    resolution:
+      integrity: sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
   /lodash.template/4.4.0:
     dependencies:
       lodash._reinterpolate: 3.0.0
       lodash.templatesettings: 4.1.0
-    dev: true
+    dev: false
     resolution:
       integrity: sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=
   /lodash.templatesettings/4.1.0:
     dependencies:
       lodash._reinterpolate: 3.0.0
-    dev: true
+    dev: false
     resolution:
       integrity: sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=
-  /lodash/4.17.10:
-    dev: true
+  /lodash/4.17.11:
     resolution:
-      integrity: sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==
-  /longest/1.0.1:
+      integrity: sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
+  /loose-envify/1.4.0:
+    dependencies:
+      js-tokens: 4.0.0
     dev: true
-    engines:
-      node: '>=0.10.0'
-    optional: true
+    hasBin: true
     resolution:
-      integrity: sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
+      integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
   /loud-rejection/1.6.0:
     dependencies:
       currently-unhandled: 0.4.1
       signal-exit: 3.0.2
-    dev: true
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
-  /lowercase-keys/1.0.1:
-    dev: true
-    engines:
-      node: '>=0.10.0'
-    resolution:
-      integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
-  /lru-cache/4.1.3:
+  /lru-cache/4.1.5:
     dependencies:
       pseudomap: 1.0.2
       yallist: 2.1.2
-    dev: true
-    resolution:
-      integrity: sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==
-  /magic-string/0.25.1:
-    dependencies:
-      sourcemap-codec: 1.4.3
-    dev: true
     resolution:
-      integrity: sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==
+      integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
   /make-dir/1.3.0:
     dependencies:
       pify: 3.0.0
@@ -1371,30 +3436,63 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
-  /map-obj/1.0.1:
+  /mamacro/0.0.3:
+    dev: true
+    resolution:
+      integrity: sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==
+  /map-cache/0.2.2:
     dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+  /map-obj/1.0.1:
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
   /map-obj/2.0.0:
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-plzSkIepJZi4eRJXpSPgISIqwfk=
-  /math-random/1.0.1:
+  /map-visit/1.0.0:
+    dependencies:
+      object-visit: 1.0.1
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+  /math-random/1.0.4:
+    dev: true
+    resolution:
+      integrity: sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==
+  /md5.js/1.3.5:
+    dependencies:
+      hash-base: 3.0.4
+      inherits: 2.0.3
+      safe-buffer: 5.1.2
     dev: true
     resolution:
-      integrity: sha1-izqsWIuKZuSXXjzepn97sylgH6w=
+      integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
   /mem/1.1.0:
     dependencies:
       mimic-fn: 1.2.0
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=
+  /memory-fs/0.4.1:
+    dependencies:
+      errno: 0.1.7
+      readable-stream: 2.3.6
+    dev: true
+    resolution:
+      integrity: sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
   /meow/3.7.0:
     dependencies:
       camelcase-keys: 2.1.0
@@ -1402,12 +3500,12 @@ packages:
       loud-rejection: 1.6.0
       map-obj: 1.0.1
       minimist: 1.2.0
-      normalize-package-data: 2.4.0
+      normalize-package-data: 2.5.0
       object-assign: 4.1.1
       read-pkg-up: 1.0.1
       redent: 1.0.0
       trim-newlines: 1.0.0
-    dev: true
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
@@ -1419,11 +3517,11 @@ packages:
       loud-rejection: 1.6.0
       minimist: 1.2.0
       minimist-options: 3.0.2
-      normalize-package-data: 2.4.0
+      normalize-package-data: 2.5.0
       read-pkg-up: 3.0.0
       redent: 2.0.0
       trim-newlines: 2.0.0
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
@@ -1448,43 +3546,98 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
-  /mimic-fn/1.2.0:
+  /micromatch/3.1.10:
+    dependencies:
+      arr-diff: 4.0.0
+      array-unique: 0.3.2
+      braces: 2.3.2
+      define-property: 2.0.2
+      extend-shallow: 3.0.2
+      extglob: 2.0.4
+      fragment-cache: 0.2.1
+      kind-of: 6.0.2
+      nanomatch: 1.2.13
+      object.pick: 1.3.0
+      regex-not: 1.0.2
+      snapdragon: 0.8.2
+      to-regex: 3.0.2
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+  /miller-rabin/4.0.1:
+    dependencies:
+      bn.js: 4.11.8
+      brorand: 1.1.0
     dev: true
+    hasBin: true
+    resolution:
+      integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+  /mimic-fn/1.2.0:
     engines:
       node: '>=4'
     resolution:
       integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+  /minimalistic-assert/1.0.1:
+    dev: true
+    resolution:
+      integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+  /minimalistic-crypto-utils/1.0.1:
+    dev: true
+    resolution:
+      integrity: sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
   /minimatch/3.0.4:
     dependencies:
       brace-expansion: 1.1.11
-    dev: true
     resolution:
       integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
   /minimist-options/3.0.2:
     dependencies:
       arrify: 1.0.1
       is-plain-obj: 1.1.0
-    dev: true
+    dev: false
     engines:
       node: '>= 4'
     resolution:
       integrity: sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==
   /minimist/0.0.10:
-    dev: true
+    dev: false
     resolution:
       integrity: sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
   /minimist/0.0.8:
     dev: true
     resolution:
       integrity: sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
-  /minimist/0.1.0:
+  /minimist/1.2.0:
+    resolution:
+      integrity: sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+  /mississippi/2.0.0:
+    dependencies:
+      concat-stream: 1.6.2
+      duplexify: 3.7.1
+      end-of-stream: 1.4.1
+      flush-write-stream: 1.1.1
+      from2: 2.3.0
+      parallel-transform: 1.1.0
+      pump: 2.0.1
+      pumpify: 1.5.1
+      stream-each: 1.2.3
+      through2: 2.0.5
     dev: true
+    engines:
+      node: '>=4.0.0'
     resolution:
-      integrity: sha1-md9lelJXTCHJBXSX33QnkLK0wN4=
-  /minimist/1.2.0:
+      integrity: sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==
+  /mixin-deep/1.3.1:
+    dependencies:
+      for-in: 1.0.2
+      is-extendable: 1.0.1
     dev: true
+    engines:
+      node: '>=0.10.0'
     resolution:
-      integrity: sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+      integrity: sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
   /mkdirp/0.5.1:
     dependencies:
       minimist: 0.0.8
@@ -1493,28 +3646,111 @@ packages:
     resolution:
       integrity: sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
   /modify-values/1.0.1:
-    dev: true
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==
-  /moment/2.22.2:
+  /move-concurrently/1.0.1:
+    dependencies:
+      aproba: 1.2.0
+      copy-concurrently: 1.0.5
+      fs-write-stream-atomic: 1.0.10
+      mkdirp: 0.5.1
+      rimraf: 2.6.3
+      run-queue: 1.0.3
+    dev: true
+    resolution:
+      integrity: sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
+  /ms/2.0.0:
+    dev: true
+    resolution:
+      integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+  /ms/2.1.1:
     dev: true
     resolution:
-      integrity: sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=
+      integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
   /mute-stream/0.0.7:
     dev: true
     resolution:
       integrity: sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
-  /normalize-package-data/2.4.0:
+  /nan/2.12.1:
+    dev: true
+    optional: true
+    resolution:
+      integrity: sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==
+  /nanomatch/1.2.13:
+    dependencies:
+      arr-diff: 4.0.0
+      array-unique: 0.3.2
+      define-property: 2.0.2
+      extend-shallow: 3.0.2
+      fragment-cache: 0.2.1
+      is-windows: 1.0.2
+      kind-of: 6.0.2
+      object.pick: 1.3.0
+      regex-not: 1.0.2
+      snapdragon: 0.8.2
+      to-regex: 3.0.2
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+  /natural-compare/1.4.0:
+    dev: true
+    resolution:
+      integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+  /neo-async/2.6.0:
+    dev: true
+    resolution:
+      integrity: sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==
+  /nice-try/1.0.5:
+    dev: true
+    resolution:
+      integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+  /node-libs-browser/2.2.0:
+    dependencies:
+      assert: 1.4.1
+      browserify-zlib: 0.2.0
+      buffer: 4.9.1
+      console-browserify: 1.1.0
+      constants-browserify: 1.0.0
+      crypto-browserify: 3.12.0
+      domain-browser: 1.2.0
+      events: 3.0.0
+      https-browserify: 1.0.0
+      os-browserify: 0.3.0
+      path-browserify: 0.0.0
+      process: 0.11.10
+      punycode: 1.4.1
+      querystring-es3: 0.2.1
+      readable-stream: 2.3.6
+      stream-browserify: 2.0.2
+      stream-http: 2.8.3
+      string_decoder: 1.2.0
+      timers-browserify: 2.0.10
+      tty-browserify: 0.0.0
+      url: 0.11.0
+      util: 0.11.1
+      vm-browserify: 0.0.4
+    dev: true
+    resolution:
+      integrity: sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==
+  /node-releases/1.1.9:
     dependencies:
-      hosted-git-info: 2.6.0
-      is-builtin-module: 1.0.0
-      semver: 5.5.0
-      validate-npm-package-license: 3.0.3
+      semver: 5.6.0
     dev: true
     resolution:
-      integrity: sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==
+      integrity: sha512-oic3GT4OtbWWKfRolz5Syw0Xus0KRFxeorLNj0s93ofX6PWyuzKjsiGxsCtWktBwwmTF6DdRRf2KreGqeOk5KA==
+  /normalize-package-data/2.5.0:
+    dependencies:
+      hosted-git-info: 2.7.1
+      resolve: 1.10.0
+      semver: 5.6.0
+      validate-npm-package-license: 3.0.4
+    resolution:
+      integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
   /normalize-path/2.1.1:
     dependencies:
       remove-trailing-separator: 1.1.0
@@ -1523,35 +3759,69 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+  /normalize-path/3.0.0:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
   /npm-run-path/2.0.2:
     dependencies:
       path-key: 2.0.1
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
-  /npmlog/4.1.2:
-    dependencies:
-      are-we-there-yet: 1.1.5
-      console-control-strings: 1.1.0
-      gauge: 2.7.4
-      set-blocking: 2.0.0
-    dev: true
+  /null-check/1.0.0:
+    dev: false
+    engines:
+      node: '>=0.10.0'
     resolution:
-      integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+      integrity: sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=
   /number-is-nan/1.0.1:
-    dev: true
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
   /object-assign/4.1.1:
-    dev: true
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+  /object-copy/0.1.0:
+    dependencies:
+      copy-descriptor: 0.1.1
+      define-property: 0.2.5
+      kind-of: 3.2.2
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+  /object-keys/1.1.0:
+    dev: true
+    engines:
+      node: '>= 0.4'
+    resolution:
+      integrity: sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==
+  /object-visit/1.0.1:
+    dependencies:
+      isobject: 3.0.1
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+  /object.getownpropertydescriptors/2.0.3:
+    dependencies:
+      define-properties: 1.1.3
+      es-abstract: 1.13.0
+    dev: true
+    engines:
+      node: '>= 0.8'
+    resolution:
+      integrity: sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=
   /object.omit/2.0.1:
     dependencies:
       for-own: 0.1.5
@@ -1561,6 +3831,14 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
+  /object.pick/1.3.0:
+    dependencies:
+      isobject: 3.0.1
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
   /once/1.4.0:
     dependencies:
       wrappy: 1.0.2
@@ -1579,15 +3857,32 @@ packages:
     dependencies:
       minimist: 0.0.10
       wordwrap: 0.0.3
-    dev: true
+    dev: false
     resolution:
       integrity: sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
+  /optionator/0.8.2:
+    dependencies:
+      deep-is: 0.1.3
+      fast-levenshtein: 2.0.6
+      levn: 0.3.0
+      prelude-ls: 1.1.2
+      type-check: 0.3.2
+      wordwrap: 1.0.0
+    dev: true
+    engines:
+      node: '>= 0.8.0'
+    resolution:
+      integrity: sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
+  /os-browserify/0.3.0:
+    dev: true
+    resolution:
+      integrity: sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
   /os-locale/2.1.0:
     dependencies:
       execa: 0.7.0
       lcid: 1.0.0
       mem: 1.1.0
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
@@ -1599,46 +3894,63 @@ packages:
     resolution:
       integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
   /p-finally/1.0.0:
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
-  /p-limit/1.2.0:
+  /p-limit/1.3.0:
     dependencies:
       p-try: 1.0.0
-    dev: true
     engines:
       node: '>=4'
     resolution:
-      integrity: sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==
+      integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
   /p-locate/2.0.0:
     dependencies:
-      p-limit: 1.2.0
-    dev: true
+      p-limit: 1.3.0
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
   /p-try/1.0.0:
-    dev: true
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
-  /package-json/4.0.1:
+  /pako/1.0.10:
+    dev: true
+    resolution:
+      integrity: sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==
+  /parallel-transform/1.1.0:
+    dependencies:
+      cyclist: 0.2.2
+      inherits: 2.0.3
+      readable-stream: 2.3.6
+    dev: true
+    resolution:
+      integrity: sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=
+  /parent-module/1.0.0:
+    dependencies:
+      callsites: 3.0.0
+    dev: true
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==
+  /parse-asn1/5.1.4:
     dependencies:
-      got: 6.7.1
-      registry-auth-token: 3.3.2
-      registry-url: 3.1.0
-      semver: 5.5.0
+      asn1.js: 4.10.1
+      browserify-aes: 1.2.0
+      create-hash: 1.2.0
+      evp_bytestokey: 1.0.3
+      pbkdf2: 3.0.17
+      safe-buffer: 5.1.2
     dev: true
-    engines:
-      node: '>=4'
     resolution:
-      integrity: sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=
+      integrity: sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==
   /parse-github-repo-url/1.4.1:
-    dev: true
+    dev: false
     resolution:
       integrity: sha1-nn2LslKmy2ukJZUGC3v23z28H1A=
   /parse-glob/3.0.4:
@@ -1654,21 +3966,30 @@ packages:
       integrity: sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
   /parse-json/2.2.0:
     dependencies:
-      error-ex: 1.3.1
-    dev: true
+      error-ex: 1.3.2
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
   /parse-json/4.0.0:
     dependencies:
-      error-ex: 1.3.1
+      error-ex: 1.3.2
       json-parse-better-errors: 1.0.2
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+  /pascalcase/0.1.1:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+  /path-browserify/0.0.0:
+    dev: true
+    resolution:
+      integrity: sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=
   /path-dirname/1.0.2:
     dev: true
     resolution:
@@ -1676,13 +3997,11 @@ packages:
   /path-exists/2.1.0:
     dependencies:
       pinkie-promise: 2.0.1
-    dev: true
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
   /path-exists/3.0.0:
-    dev: true
     engines:
       node: '>=4'
     resolution:
@@ -1693,22 +4012,23 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-  /path-key/2.0.1:
+  /path-is-inside/1.0.2:
     dev: true
+    resolution:
+      integrity: sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
+  /path-key/2.0.1:
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
   /path-parse/1.0.6:
-    dev: true
     resolution:
       integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
   /path-type/1.1.0:
     dependencies:
-      graceful-fs: 4.1.11
+      graceful-fs: 4.1.15
       pify: 2.3.0
       pinkie-promise: 2.0.1
-    dev: true
     engines:
       node: '>=0.10.0'
     resolution:
@@ -1716,7 +4036,7 @@ packages:
   /path-type/2.0.0:
     dependencies:
       pify: 2.3.0
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
@@ -1724,19 +4044,29 @@ packages:
   /path-type/3.0.0:
     dependencies:
       pify: 3.0.0
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
-  /pify/2.3.0:
+  /pbkdf2/3.0.17:
+    dependencies:
+      create-hash: 1.2.0
+      create-hmac: 1.1.7
+      ripemd160: 2.0.2
+      safe-buffer: 5.1.2
+      sha.js: 2.4.11
     dev: true
+    engines:
+      node: '>=0.12'
+    resolution:
+      integrity: sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
+  /pify/2.3.0:
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
   /pify/3.0.0:
-    dev: true
     engines:
       node: '>=4'
     resolution:
@@ -1744,46 +4074,149 @@ packages:
   /pinkie-promise/2.0.1:
     dependencies:
       pinkie: 2.0.4
-    dev: true
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-ITXW36ejWMBprJsXh3YogihFD/o=
   /pinkie/2.0.4:
-    dev: true
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
-  /prepend-http/1.0.4:
+  /pkg-dir/2.0.0:
+    dependencies:
+      find-up: 2.1.0
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+  /posix-character-classes/0.1.1:
     dev: true
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
+      integrity: sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+  /prelude-ls/1.1.2:
+    dev: true
+    engines:
+      node: '>= 0.8.0'
+    resolution:
+      integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
   /preserve/0.2.0:
     dev: true
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
-  /process-nextick-args/2.0.0:
+  /prettier-linter-helpers/1.0.0:
+    dependencies:
+      fast-diff: 1.2.0
+    dev: true
+    engines:
+      node: '>=6.0.0'
+    resolution:
+      integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
+  /prettier/1.16.4:
+    dev: true
+    engines:
+      node: '>=4'
+    hasBin: true
+    resolution:
+      integrity: sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==
+  /private/0.1.8:
     dev: true
+    engines:
+      node: '>= 0.6'
+    resolution:
+      integrity: sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
+  /process-nextick-args/2.0.0:
     resolution:
       integrity: sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
-  /pseudomap/1.0.2:
+  /process/0.11.10:
+    dev: true
+    engines:
+      node: '>= 0.6.0'
+    resolution:
+      integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+  /progress/2.0.3:
+    dev: true
+    engines:
+      node: '>=0.4.0'
+    resolution:
+      integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+  /promise-inflight/1.0.1:
+    dev: true
+    resolution:
+      integrity: sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+  /prr/1.0.1:
     dev: true
+    resolution:
+      integrity: sha1-0/wRS6BplaRexok/SEzrHXj19HY=
+  /pseudomap/1.0.2:
     resolution:
       integrity: sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
-  /q/1.5.1:
+  /public-encrypt/4.0.3:
+    dependencies:
+      bn.js: 4.11.8
+      browserify-rsa: 4.0.1
+      create-hash: 1.2.0
+      parse-asn1: 5.1.4
+      randombytes: 2.1.0
+      safe-buffer: 5.1.2
+    dev: true
+    resolution:
+      integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+  /pump/2.0.1:
+    dependencies:
+      end-of-stream: 1.4.1
+      once: 1.4.0
+    dev: true
+    resolution:
+      integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+  /pumpify/1.5.1:
+    dependencies:
+      duplexify: 3.7.1
+      inherits: 2.0.3
+      pump: 2.0.1
+    dev: true
+    resolution:
+      integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+  /punycode/1.3.2:
+    dev: true
+    resolution:
+      integrity: sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+  /punycode/1.4.1:
     dev: true
+    resolution:
+      integrity: sha1-wNWmOycYgArY4esPpSachN1BhF4=
+  /punycode/2.1.1:
+    dev: true
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+  /q/1.5.1:
+    dev: false
     engines:
       node: '>=0.6.0'
       teleport: '>=0.2.0'
     resolution:
       integrity: sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
-  /quick-lru/1.1.0:
+  /querystring-es3/0.2.1:
+    dev: true
+    engines:
+      node: '>=0.4.x'
+    resolution:
+      integrity: sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+  /querystring/0.2.0:
     dev: true
+    engines:
+      node: '>=0.4.x'
+    resolution:
+      integrity: sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+  /quick-lru/1.1.0:
+    dev: false
     engines:
       node: '>=4'
     resolution:
@@ -1792,33 +4225,29 @@ packages:
     dependencies:
       is-number: 4.0.0
       kind-of: 6.0.2
-      math-random: 1.0.1
+      math-random: 1.0.4
     dev: true
     engines:
       node: '>= 0.10.0'
     resolution:
       integrity: sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==
-  /rc/1.2.8:
+  /randombytes/2.1.0:
     dependencies:
-      deep-extend: 0.6.0
-      ini: 1.3.5
-      minimist: 1.2.0
-      strip-json-comments: 2.0.1
+      safe-buffer: 5.1.2
     dev: true
-    hasBin: true
     resolution:
-      integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
-  /read-cmd-shim/1.0.1:
+      integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+  /randomfill/1.0.4:
     dependencies:
-      graceful-fs: 4.1.11
+      randombytes: 2.1.0
+      safe-buffer: 5.1.2
     dev: true
     resolution:
-      integrity: sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=
+      integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
   /read-pkg-up/1.0.1:
     dependencies:
       find-up: 1.1.2
       read-pkg: 1.1.0
-    dev: true
     engines:
       node: '>=0.10.0'
     resolution:
@@ -1827,7 +4256,7 @@ packages:
     dependencies:
       find-up: 2.1.0
       read-pkg: 2.0.0
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
@@ -1836,7 +4265,7 @@ packages:
     dependencies:
       find-up: 2.1.0
       read-pkg: 3.0.0
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
@@ -1844,9 +4273,8 @@ packages:
   /read-pkg/1.1.0:
     dependencies:
       load-json-file: 1.1.0
-      normalize-package-data: 2.4.0
+      normalize-package-data: 2.5.0
       path-type: 1.1.0
-    dev: true
     engines:
       node: '>=0.10.0'
     resolution:
@@ -1854,9 +4282,9 @@ packages:
   /read-pkg/2.0.0:
     dependencies:
       load-json-file: 2.0.0
-      normalize-package-data: 2.4.0
+      normalize-package-data: 2.5.0
       path-type: 2.0.0
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
@@ -1864,9 +4292,9 @@ packages:
   /read-pkg/3.0.0:
     dependencies:
       load-json-file: 4.0.0
-      normalize-package-data: 2.4.0
+      normalize-package-data: 2.5.0
       path-type: 3.0.0
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
@@ -1880,14 +4308,23 @@ packages:
       safe-buffer: 5.1.2
       string_decoder: 1.1.1
       util-deprecate: 1.0.2
-    dev: true
     resolution:
       integrity: sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
+  /readdirp/2.2.1:
+    dependencies:
+      graceful-fs: 4.1.15
+      micromatch: 3.1.10
+      readable-stream: 2.3.6
+    dev: true
+    engines:
+      node: '>=0.10'
+    resolution:
+      integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
   /redent/1.0.0:
     dependencies:
       indent-string: 2.1.0
       strip-indent: 1.0.1
-    dev: true
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
@@ -1896,11 +4333,33 @@ packages:
     dependencies:
       indent-string: 3.2.0
       strip-indent: 2.0.0
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=
+  /regenerate-unicode-properties/8.0.0:
+    dependencies:
+      regenerate: 1.4.0
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-tlYkVh6F/QXtosuyOZV2SkOtA248fjMAUWjGf8aYBvQK1ZMarbMvFBvkguSt93HhdXh20m15sc4b5EIBxXLHQQ==
+  /regenerate/1.4.0:
+    dev: true
+    resolution:
+      integrity: sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
+  /regenerator-runtime/0.11.1:
+    dev: true
+    resolution:
+      integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+  /regenerator-transform/0.13.4:
+    dependencies:
+      private: 0.1.8
+    dev: true
+    resolution:
+      integrity: sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==
   /regex-cache/0.4.4:
     dependencies:
       is-equal-shallow: 0.1.3
@@ -1909,21 +4368,45 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==
-  /registry-auth-token/3.3.2:
+  /regex-not/1.0.2:
     dependencies:
-      rc: 1.2.8
-      safe-buffer: 5.1.2
+      extend-shallow: 3.0.2
+      safe-regex: 1.1.0
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+  /regexpp/2.0.1:
     dev: true
+    engines:
+      node: '>=6.5.0'
     resolution:
-      integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==
-  /registry-url/3.1.0:
+      integrity: sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
+  /regexpu-core/4.5.2:
     dependencies:
-      rc: 1.2.8
+      regenerate: 1.4.0
+      regenerate-unicode-properties: 8.0.0
+      regjsgen: 0.5.0
+      regjsparser: 0.6.0
+      unicode-match-property-ecmascript: 1.0.4
+      unicode-match-property-value-ecmascript: 1.1.0
     dev: true
     engines:
-      node: '>=0.10.0'
+      node: '>=4'
+    resolution:
+      integrity: sha512-CgGxXmuX0Cf57z7KahSHe4kaNY8gBRCFFEretQ5AHsnlLx/5VdCrQOoOz1POxLdZjPbwE5ncTspPJwp2WHPcHA==
+  /regjsgen/0.5.0:
+    dev: true
+    resolution:
+      integrity: sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==
+  /regjsparser/0.6.0:
+    dependencies:
+      jsesc: 0.5.0
+    dev: true
+    hasBin: true
     resolution:
-      integrity: sha1-PU74cPc93h138M+aOBQyRE4XSUI=
+      integrity: sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==
   /remove-trailing-separator/1.1.0:
     dev: true
     resolution:
@@ -1943,27 +4426,34 @@ packages:
   /repeating/2.0.1:
     dependencies:
       is-finite: 1.0.2
-    dev: true
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
   /require-directory/2.1.1:
-    dev: true
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
   /require-main-filename/1.0.1:
-    dev: true
     resolution:
       integrity: sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
-  /resolve/1.8.1:
+  /resolve-from/4.0.0:
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+  /resolve-url/0.2.1:
+    dev: true
+    resolution:
+      integrity: sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+  /resolve/1.10.0:
     dependencies:
       path-parse: 1.0.6
-    dev: true
     resolution:
-      integrity: sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==
+      integrity: sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==
   /restore-cursor/2.0.0:
     dependencies:
       onetime: 2.0.1
@@ -1973,48 +4463,26 @@ packages:
       node: '>=4'
     resolution:
       integrity: sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
-  /right-align/0.1.3:
-    dependencies:
-      align-text: 0.1.4
+  /ret/0.1.15:
     dev: true
     engines:
-      node: '>=0.10.0'
-    optional: true
+      node: '>=0.12'
     resolution:
-      integrity: sha1-YTObci/mo1FWiSENJOFMlhSGE+8=
-  /rimraf/2.6.2:
+      integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+  /rimraf/2.6.3:
     dependencies:
-      glob: 7.1.2
+      glob: 7.1.3
     dev: true
     hasBin: true
     resolution:
-      integrity: sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==
-  /rollup-plugin-commonjs/9.2.0:
-    dependencies:
-      estree-walker: 0.5.2
-      magic-string: 0.25.1
-      resolve: 1.8.1
-      rollup-pluginutils: 2.3.3
-    dev: true
-    peerDependencies:
-      rollup: '>=0.56.0'
-    resolution:
-      integrity: sha512-0RM5U4Vd6iHjL6rLvr3lKBwnPsaVml+qxOGaaNUWN1lSq6S33KhITOfHmvxV3z2vy9Mk4t0g4rNlVaJJsNQPWA==
-  /rollup-plugin-node-resolve/3.4.0:
-    dependencies:
-      builtin-modules: 2.0.0
-      is-module: 1.0.0
-      resolve: 1.8.1
-    dev: true
-    resolution:
-      integrity: sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg==
-  /rollup-pluginutils/2.3.3:
+      integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+  /ripemd160/2.0.2:
     dependencies:
-      estree-walker: 0.5.2
-      micromatch: 2.3.11
+      hash-base: 3.0.4
+      inherits: 2.0.3
     dev: true
     resolution:
-      integrity: sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==
+      integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
   /run-async/2.3.0:
     dependencies:
       is-promise: 2.1.0
@@ -2023,124 +4491,282 @@ packages:
       node: '>=0.12.0'
     resolution:
       integrity: sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
-  /rx-lite-aggregates/4.0.8:
+  /run-queue/1.0.3:
     dependencies:
-      rx-lite: 4.0.8
+      aproba: 1.2.0
     dev: true
     resolution:
-      integrity: sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=
-  /rx-lite/4.0.8:
+      integrity: sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
+  /rxjs/6.4.0:
+    dependencies:
+      tslib: 1.9.3
     dev: true
+    engines:
+      npm: '>=2.0.0'
     resolution:
-      integrity: sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=
+      integrity: sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==
   /safe-buffer/5.1.2:
-    dev: true
     resolution:
       integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+  /safe-regex/1.1.0:
+    dependencies:
+      ret: 0.1.15
+    dev: true
+    resolution:
+      integrity: sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
   /safer-buffer/2.1.2:
     dev: true
     resolution:
       integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-  /semver/5.5.0:
+  /schema-utils/0.4.7:
+    dependencies:
+      ajv: 6.10.0
+      ajv-keywords: 3.4.0_ajv@6.10.0
     dev: true
+    engines:
+      node: '>= 4'
+    resolution:
+      integrity: sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==
+  /semver/5.6.0:
     hasBin: true
     resolution:
-      integrity: sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
-  /set-blocking/2.0.0:
+      integrity: sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
+  /serialize-javascript/1.6.1:
     dev: true
+    resolution:
+      integrity: sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==
+  /set-blocking/2.0.0:
+    dev: false
     resolution:
       integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+  /set-value/0.4.3:
+    dependencies:
+      extend-shallow: 2.0.1
+      is-extendable: 0.1.1
+      is-plain-object: 2.0.4
+      to-object-path: 0.3.0
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-fbCPnT0i3H945Trzw79GZuzfzPE=
+  /set-value/2.0.0:
+    dependencies:
+      extend-shallow: 2.0.1
+      is-extendable: 0.1.1
+      is-plain-object: 2.0.4
+      split-string: 3.1.0
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==
+  /setimmediate/1.0.5:
+    dev: true
+    resolution:
+      integrity: sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+  /sha.js/2.4.11:
+    dependencies:
+      inherits: 2.0.3
+      safe-buffer: 5.1.2
+    dev: true
+    hasBin: true
+    resolution:
+      integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
   /shebang-command/1.2.0:
     dependencies:
       shebang-regex: 1.0.0
-    dev: true
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
   /shebang-regex/1.0.0:
-    dev: true
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
   /signal-exit/3.0.2:
+    resolution:
+      integrity: sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+  /slice-ansi/2.1.0:
+    dependencies:
+      ansi-styles: 3.2.1
+      astral-regex: 1.0.0
+      is-fullwidth-code-point: 2.0.0
+    dev: true
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+  /snapdragon-node/2.1.1:
+    dependencies:
+      define-property: 1.0.0
+      isobject: 3.0.1
+      snapdragon-util: 3.0.1
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+  /snapdragon-util/3.0.1:
+    dependencies:
+      kind-of: 3.2.2
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+  /snapdragon/0.8.2:
+    dependencies:
+      base: 0.11.2
+      debug: 2.6.9
+      define-property: 0.2.5
+      extend-shallow: 2.0.1
+      map-cache: 0.2.2
+      source-map: 0.5.7
+      source-map-resolve: 0.5.2
+      use: 3.1.1
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+  /source-list-map/2.0.1:
+    dev: true
+    resolution:
+      integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+  /source-map-resolve/0.5.2:
+    dependencies:
+      atob: 2.1.2
+      decode-uri-component: 0.2.0
+      resolve-url: 0.2.1
+      source-map-url: 0.4.0
+      urix: 0.1.0
+    dev: true
+    resolution:
+      integrity: sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
+  /source-map-url/0.4.0:
+    dev: true
+    resolution:
+      integrity: sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+  /source-map/0.5.7:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+  /source-map/0.6.1:
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+  /spdx-correct/3.1.0:
+    dependencies:
+      spdx-expression-parse: 3.0.0
+      spdx-license-ids: 3.0.3
+    resolution:
+      integrity: sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
+  /spdx-exceptions/2.2.0:
+    resolution:
+      integrity: sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
+  /spdx-expression-parse/3.0.0:
+    dependencies:
+      spdx-exceptions: 2.2.0
+      spdx-license-ids: 3.0.3
+    resolution:
+      integrity: sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
+  /spdx-license-ids/3.0.3:
+    resolution:
+      integrity: sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==
+  /split-string/3.1.0:
+    dependencies:
+      extend-shallow: 3.0.2
     dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+  /split/1.0.1:
+    dependencies:
+      through: 2.3.8
+    dev: false
+    resolution:
+      integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==
+  /split2/2.2.0:
+    dependencies:
+      through2: 2.0.5
+    dev: false
     resolution:
-      integrity: sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
-  /slash/1.0.0:
+      integrity: sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==
+  /sprintf-js/1.0.3:
     dev: true
-    engines:
-      node: '>=0.10.0'
     resolution:
-      integrity: sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
-  /sort-keys/2.0.0:
+      integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+  /ssri/5.3.0:
     dependencies:
-      is-plain-obj: 1.1.0
+      safe-buffer: 5.1.2
     dev: true
-    engines:
-      node: '>=4'
     resolution:
-      integrity: sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=
-  /source-map/0.4.4:
+      integrity: sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==
+  /standard-version/4.4.0:
     dependencies:
-      amdefine: 1.0.1
-    dev: true
+      chalk: 1.1.3
+      conventional-changelog: 1.1.24
+      conventional-recommended-bump: 1.2.1
+      dotgitignore: 1.0.3
+      figures: 1.7.0
+      fs-access: 1.0.1
+      semver: 5.6.0
+      yargs: 8.0.2
+    dev: false
     engines:
-      node: '>=0.8.0'
+      node: '>=4.0'
+    hasBin: true
     resolution:
-      integrity: sha1-66T12pwNyZneaAMti092FzZSA2s=
-  /source-map/0.5.7:
+      integrity: sha512-jJ8FZhnmh9xJRQLnaXiGRLaAUNItIH29lOQZGpL5fd4+jUHto9Ij6SPCYN86h6ZNNXkYq2TYiIVVF7gVyC+pcQ==
+  /static-extend/0.1.2:
+    dependencies:
+      define-property: 0.2.5
+      object-copy: 0.1.0
     dev: true
     engines:
       node: '>=0.10.0'
-    optional: true
     resolution:
-      integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
-  /sourcemap-codec/1.4.3:
-    dev: true
-    resolution:
-      integrity: sha512-vFrY/x/NdsD7Yc8mpTJXuao9S8lq08Z/kOITHz6b7YbfI9xL8Spe5EvSQUHOI7SbpY8bRPr0U3kKSsPuqEGSfA==
-  /spdx-correct/3.0.0:
+      integrity: sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+  /stream-browserify/2.0.2:
     dependencies:
-      spdx-expression-parse: 3.0.0
-      spdx-license-ids: 3.0.0
-    dev: true
-    resolution:
-      integrity: sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==
-  /spdx-exceptions/2.1.0:
+      inherits: 2.0.3
+      readable-stream: 2.3.6
     dev: true
     resolution:
-      integrity: sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==
-  /spdx-expression-parse/3.0.0:
+      integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+  /stream-each/1.2.3:
     dependencies:
-      spdx-exceptions: 2.1.0
-      spdx-license-ids: 3.0.0
-    dev: true
-    resolution:
-      integrity: sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
-  /spdx-license-ids/3.0.0:
+      end-of-stream: 1.4.1
+      stream-shift: 1.0.0
     dev: true
     resolution:
-      integrity: sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==
-  /split/1.0.1:
+      integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+  /stream-http/2.8.3:
     dependencies:
-      through: 2.3.8
+      builtin-status-codes: 3.0.0
+      inherits: 2.0.3
+      readable-stream: 2.3.6
+      to-arraybuffer: 1.0.1
+      xtend: 4.0.1
     dev: true
     resolution:
-      integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==
-  /split2/2.2.0:
-    dependencies:
-      through2: 2.0.3
+      integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
+  /stream-shift/1.0.0:
     dev: true
     resolution:
-      integrity: sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==
+      integrity: sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=
   /string-width/1.0.2:
     dependencies:
       code-point-at: 1.1.0
       is-fullwidth-code-point: 1.0.0
       strip-ansi: 3.0.1
-    dev: true
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
@@ -2149,21 +4775,34 @@ packages:
     dependencies:
       is-fullwidth-code-point: 2.0.0
       strip-ansi: 4.0.0
-    dev: true
     engines:
       node: '>=4'
     resolution:
       integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+  /string-width/3.0.0:
+    dependencies:
+      emoji-regex: 7.0.3
+      is-fullwidth-code-point: 2.0.0
+      strip-ansi: 5.0.0
+    dev: true
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==
   /string_decoder/1.1.1:
     dependencies:
       safe-buffer: 5.1.2
-    dev: true
     resolution:
       integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+  /string_decoder/1.2.0:
+    dependencies:
+      safe-buffer: 5.1.2
+    dev: true
+    resolution:
+      integrity: sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==
   /strip-ansi/3.0.1:
     dependencies:
       ansi-regex: 2.1.1
-    dev: true
     engines:
       node: '>=0.10.0'
     resolution:
@@ -2171,27 +4810,33 @@ packages:
   /strip-ansi/4.0.0:
     dependencies:
       ansi-regex: 3.0.0
-    dev: true
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+  /strip-ansi/5.0.0:
+    dependencies:
+      ansi-regex: 4.0.0
+    dev: true
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==
   /strip-bom/2.0.0:
     dependencies:
       is-utf8: 0.2.1
-    dev: true
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
   /strip-bom/3.0.0:
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
   /strip-eof/1.0.0:
-    dev: true
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
@@ -2199,14 +4844,14 @@ packages:
   /strip-indent/1.0.1:
     dependencies:
       get-stdin: 4.0.1
-    dev: true
+    dev: false
     engines:
       node: '>=0.10.0'
     hasBin: true
     resolution:
       integrity: sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
   /strip-indent/2.0.0:
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
@@ -2217,76 +4862,73 @@ packages:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=
-  /strong-log-transformer/1.0.6:
-    dependencies:
-      byline: 5.0.0
-      duplexer: 0.1.1
-      minimist: 0.1.0
-      moment: 2.22.2
-      through: 2.3.8
-    dev: true
-    hasBin: true
+  /supports-color/2.0.0:
+    engines:
+      node: '>=0.8.0'
     resolution:
-      integrity: sha1-9/uTdYpppXEUAYEnfuoMLrEwH6M=
-  /supports-color/5.4.0:
+      integrity: sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+  /supports-color/5.5.0:
     dependencies:
       has-flag: 3.0.0
     dev: true
     engines:
       node: '>=4'
     resolution:
-      integrity: sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==
-  /temp-dir/1.0.0:
+      integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+  /table/5.2.3:
+    dependencies:
+      ajv: 6.10.0
+      lodash: 4.17.11
+      slice-ansi: 2.1.0
+      string-width: 3.0.0
     dev: true
     engines:
-      node: '>=4'
+      node: '>=6.0.0'
     resolution:
-      integrity: sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=
-  /temp-write/3.4.0:
-    dependencies:
-      graceful-fs: 4.1.11
-      is-stream: 1.1.0
-      make-dir: 1.3.0
-      pify: 3.0.0
-      temp-dir: 1.0.0
-      uuid: 3.2.1
+      integrity: sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==
+  /tapable/1.1.1:
     dev: true
     engines:
-      node: '>=4'
+      node: '>=6'
     resolution:
-      integrity: sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI=
-  /tempfile/1.1.1:
+      integrity: sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==
+  /test-exclude/4.2.3:
     dependencies:
-      os-tmpdir: 1.0.2
-      uuid: 2.0.3
+      arrify: 1.0.1
+      micromatch: 2.3.11
+      object-assign: 4.1.1
+      read-pkg-up: 1.0.1
+      require-main-filename: 1.0.1
     dev: true
-    engines:
-      node: '>=0.10.0'
     resolution:
-      integrity: sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=
-  /text-extensions/1.7.0:
-    dev: true
+      integrity: sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==
+  /text-extensions/1.9.0:
+    dev: false
     engines:
       node: '>=0.10'
     resolution:
-      integrity: sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg==
-  /through/2.3.8:
+      integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==
+  /text-table/0.2.0:
     dev: true
+    resolution:
+      integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+  /through/2.3.8:
     resolution:
       integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
-  /through2/2.0.3:
+  /through2/2.0.5:
     dependencies:
       readable-stream: 2.3.6
       xtend: 4.0.1
-    dev: true
     resolution:
-      integrity: sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=
-  /timed-out/4.0.1:
+      integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+  /timers-browserify/2.0.10:
+    dependencies:
+      setimmediate: 1.0.5
     dev: true
     engines:
-      node: '>=0.10.0'
+      node: '>=0.6.0'
     resolution:
-      integrity: sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
+      integrity: sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==
   /tmp/0.0.33:
     dependencies:
       os-tmpdir: 1.0.2
@@ -2295,132 +4937,349 @@ packages:
       node: '>=0.6.0'
     resolution:
       integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
-  /trim-newlines/1.0.0:
+  /to-arraybuffer/1.0.1:
+    dev: true
+    resolution:
+      integrity: sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+  /to-fast-properties/1.0.3:
     dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
+  /to-fast-properties/2.0.0:
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+  /to-object-path/0.3.0:
+    dependencies:
+      kind-of: 3.2.2
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+  /to-regex-range/2.1.1:
+    dependencies:
+      is-number: 3.0.0
+      repeat-string: 1.6.1
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+  /to-regex/3.0.2:
+    dependencies:
+      define-property: 2.0.2
+      extend-shallow: 3.0.2
+      regex-not: 1.0.2
+      safe-regex: 1.1.0
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+  /trim-newlines/1.0.0:
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-WIeWa7WCpFA6QetST301ARgVphM=
   /trim-newlines/2.0.0:
-    dev: true
+    dev: false
     engines:
       node: '>=4'
     resolution:
       integrity: sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=
   /trim-off-newlines/1.0.1:
-    dev: true
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
       integrity: sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
-  /typedarray/0.0.6:
+  /trim-right/1.0.1:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
+  /tslib/1.9.3:
     dev: true
+    resolution:
+      integrity: sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
+  /tty-browserify/0.0.0:
+    dev: true
+    resolution:
+      integrity: sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+  /type-check/0.3.2:
+    dependencies:
+      prelude-ls: 1.1.2
+    dev: true
+    engines:
+      node: '>= 0.8.0'
+    resolution:
+      integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+  /typedarray/0.0.6:
     resolution:
       integrity: sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-  /uglify-js/2.8.29:
+  /uglify-es/3.3.9:
     dependencies:
-      source-map: 0.5.7
-      yargs: 3.10.0
+      commander: 2.13.0
+      source-map: 0.6.1
     dev: true
     engines:
       node: '>=0.8.0'
     hasBin: true
+    resolution:
+      integrity: sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==
+  /uglify-js/3.4.9:
+    dependencies:
+      commander: 2.17.1
+      source-map: 0.6.1
+    dev: false
+    engines:
+      node: '>=0.8.0'
+    hasBin: true
     optional: true
-    optionalDependencies:
-      uglify-to-browserify: 1.0.2
     resolution:
-      integrity: sha1-KcVzMUgFe7Th913zW3qcty5qWd0=
-  /uglify-to-browserify/1.0.2:
+      integrity: sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==
+  /uglifyjs-webpack-plugin/1.3.0_webpack@4.18.1:
+    dependencies:
+      cacache: 10.0.4
+      find-cache-dir: 1.0.0
+      schema-utils: 0.4.7
+      serialize-javascript: 1.6.1
+      source-map: 0.6.1
+      uglify-es: 3.3.9
+      webpack: 4.18.1_webpack@4.18.1
+      webpack-sources: 1.3.0
+      worker-farm: 1.6.0
     dev: true
-    optional: true
+    engines:
+      node: '>= 4.8 < 5.0.0 || >= 5.10'
+    peerDependencies:
+      webpack: ^2.0.0 || ^3.0.0 || ^4.0.0
+    resolution:
+      integrity: sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==
+  /unicode-canonical-property-names-ecmascript/1.0.4:
+    dev: true
+    engines:
+      node: '>=4'
     resolution:
-      integrity: sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
-  /universalify/0.1.1:
+      integrity: sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
+  /unicode-match-property-ecmascript/1.0.4:
+    dependencies:
+      unicode-canonical-property-names-ecmascript: 1.0.4
+      unicode-property-aliases-ecmascript: 1.0.5
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
+  /unicode-match-property-value-ecmascript/1.1.0:
     dev: true
+    engines:
+      node: '>=4'
     resolution:
-      integrity: sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=
-  /unzip-response/2.0.1:
+      integrity: sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==
+  /unicode-property-aliases-ecmascript/1.0.5:
     dev: true
     engines:
       node: '>=4'
     resolution:
-      integrity: sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=
-  /url-parse-lax/1.0.0:
+      integrity: sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==
+  /union-value/1.0.0:
     dependencies:
-      prepend-http: 1.0.4
+      arr-union: 3.1.0
+      get-value: 2.0.6
+      is-extendable: 0.1.1
+      set-value: 0.4.3
     dev: true
     engines:
       node: '>=0.10.0'
     resolution:
-      integrity: sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=
-  /util-deprecate/1.0.2:
+      integrity: sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=
+  /unique-filename/1.1.1:
+    dependencies:
+      unique-slug: 2.0.1
     dev: true
     resolution:
-      integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-  /uuid/2.0.3:
+      integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+  /unique-slug/2.0.1:
+    dependencies:
+      imurmurhash: 0.1.4
     dev: true
     resolution:
-      integrity: sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=
-  /uuid/3.2.1:
+      integrity: sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==
+  /unset-value/1.0.0:
+    dependencies:
+      has-value: 0.3.1
+      isobject: 3.0.1
     dev: true
-    hasBin: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+  /upath/1.1.0:
+    dev: true
+    engines:
+      node: '>=4'
     resolution:
-      integrity: sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==
-  /validate-npm-package-license/3.0.3:
+      integrity: sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==
+  /uri-js/4.2.2:
     dependencies:
-      spdx-correct: 3.0.0
-      spdx-expression-parse: 3.0.0
+      punycode: 2.1.1
+    dev: true
+    resolution:
+      integrity: sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+  /urix/0.1.0:
     dev: true
     resolution:
-      integrity: sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==
-  /wcwidth/1.0.1:
+      integrity: sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+  /url/0.11.0:
     dependencies:
-      defaults: 1.0.3
+      punycode: 1.3.2
+      querystring: 0.2.0
     dev: true
     resolution:
-      integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
-  /which-module/2.0.0:
+      integrity: sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+  /use/3.1.1:
     dev: true
+    engines:
+      node: '>=0.10.0'
     resolution:
-      integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
-  /which/1.3.1:
+      integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+  /util-deprecate/1.0.2:
+    resolution:
+      integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+  /util.promisify/1.0.0:
     dependencies:
-      isexe: 2.0.0
+      define-properties: 1.1.3
+      object.getownpropertydescriptors: 2.0.3
     dev: true
-    hasBin: true
     resolution:
-      integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
-  /wide-align/1.1.3:
+      integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==
+  /util/0.10.3:
     dependencies:
-      string-width: 2.1.1
+      inherits: 2.0.1
+    dev: true
+    resolution:
+      integrity: sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+  /util/0.11.1:
+    dependencies:
+      inherits: 2.0.3
     dev: true
     resolution:
-      integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
-  /window-size/0.1.0:
+      integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+  /validate-npm-package-license/3.0.4:
+    dependencies:
+      spdx-correct: 3.1.0
+      spdx-expression-parse: 3.0.0
+    resolution:
+      integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+  /vm-browserify/0.0.4:
+    dependencies:
+      indexof: 0.0.1
+    dev: true
+    resolution:
+      integrity: sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=
+  /vue-eslint-parser/5.0.0:
+    dependencies:
+      debug: 4.1.1
+      eslint-scope: 4.0.2
+      eslint-visitor-keys: 1.0.0
+      espree: 4.1.0
+      esquery: 1.0.1
+      lodash: 4.17.11
     dev: true
     engines:
-      node: '>= 0.8.0'
-    optional: true
+      node: '>=6.5'
+    peerDependencies:
+      eslint: ^5.0.0
+    resolution:
+      integrity: sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g==
+  /watchpack/1.6.0:
+    dependencies:
+      chokidar: 2.1.2
+      graceful-fs: 4.1.15
+      neo-async: 2.6.0
+    dev: true
+    resolution:
+      integrity: sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==
+  /webpack-sources/1.3.0:
+    dependencies:
+      source-list-map: 2.0.1
+      source-map: 0.6.1
+    dev: true
     resolution:
-      integrity: sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=
-  /wordwrap/0.0.2:
+      integrity: sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==
+  /webpack/4.18.1_webpack@4.18.1:
+    dependencies:
+      '@webassemblyjs/ast': 1.7.6
+      '@webassemblyjs/helper-module-context': 1.7.6
+      '@webassemblyjs/wasm-edit': 1.7.6
+      '@webassemblyjs/wasm-parser': 1.7.6
+      acorn: 5.7.3
+      acorn-dynamic-import: 3.0.0
+      ajv: 6.10.0
+      ajv-keywords: 3.4.0_ajv@6.10.0
+      chrome-trace-event: 1.0.0
+      enhanced-resolve: 4.1.0
+      eslint-scope: 4.0.2
+      json-parse-better-errors: 1.0.2
+      loader-runner: 2.4.0
+      loader-utils: 1.2.3
+      memory-fs: 0.4.1
+      micromatch: 3.1.10
+      mkdirp: 0.5.1
+      neo-async: 2.6.0
+      node-libs-browser: 2.2.0
+      schema-utils: 0.4.7
+      tapable: 1.1.1
+      uglifyjs-webpack-plugin: 1.3.0_webpack@4.18.1
+      watchpack: 1.6.0
+      webpack-sources: 1.3.0
     dev: true
     engines:
-      node: '>=0.4.0'
-    optional: true
+      node: '>=6.11.5'
+    hasBin: true
+    peerDependencies:
+      webpack: '*'
+    resolution:
+      integrity: sha512-YAKkdiasBy+XJqdxmr00NvL69I6TImnap/3+6YNEkS4lRMAfRCLEmtGWCIB0hGhb+qWDTdTV3C+zTPmctOhJ7Q==
+  /which-module/2.0.0:
+    dev: false
+    resolution:
+      integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+  /which/1.3.1:
+    dependencies:
+      isexe: 2.0.0
+    hasBin: true
     resolution:
-      integrity: sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
+      integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
   /wordwrap/0.0.3:
-    dev: true
+    dev: false
     engines:
       node: '>=0.4.0'
     resolution:
       integrity: sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
+  /wordwrap/1.0.0:
+    dev: true
+    resolution:
+      integrity: sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+  /worker-farm/1.6.0:
+    dependencies:
+      errno: 0.1.7
+    dev: true
+    resolution:
+      integrity: sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==
   /wrap-ansi/2.1.0:
     dependencies:
       string-width: 1.0.2
       strip-ansi: 3.0.1
-    dev: true
+    dev: false
     engines:
       node: '>=0.10.0'
     resolution:
@@ -2429,72 +5288,42 @@ packages:
     dev: true
     resolution:
       integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-  /write-file-atomic/2.3.0:
-    dependencies:
-      graceful-fs: 4.1.11
-      imurmurhash: 0.1.4
-      signal-exit: 3.0.2
-    dev: true
-    resolution:
-      integrity: sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==
-  /write-json-file/2.3.0:
-    dependencies:
-      detect-indent: 5.0.0
-      graceful-fs: 4.1.11
-      make-dir: 1.3.0
-      pify: 3.0.0
-      sort-keys: 2.0.0
-      write-file-atomic: 2.3.0
-    dev: true
-    engines:
-      node: '>=4'
-    resolution:
-      integrity: sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=
-  /write-pkg/3.1.0:
+  /write/1.0.3:
     dependencies:
-      sort-keys: 2.0.0
-      write-json-file: 2.3.0
+      mkdirp: 0.5.1
     dev: true
     engines:
       node: '>=4'
     resolution:
-      integrity: sha1-AwqZlMyZk9JbTnWp8aGSNgcpHOk=
+      integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
   /xtend/4.0.1:
-    dev: true
     engines:
       node: '>=0.4'
     resolution:
       integrity: sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
   /y18n/3.2.1:
-    dev: true
+    dev: false
     resolution:
       integrity: sha1-bRX7qITAhnnA136I53WegR4H+kE=
-  /yallist/2.1.2:
+  /y18n/4.0.0:
     dev: true
+    resolution:
+      integrity: sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+  /yallist/2.1.2:
     resolution:
       integrity: sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
   /yargs-parser/7.0.0:
     dependencies:
       camelcase: 4.1.0
-    dev: true
+    dev: false
     resolution:
       integrity: sha1-jQrELxbqVd69MyyvTEA4s+P139k=
-  /yargs/3.10.0:
-    dependencies:
-      camelcase: 1.2.1
-      cliui: 2.1.0
-      decamelize: 1.2.0
-      window-size: 0.1.0
-    dev: true
-    optional: true
-    resolution:
-      integrity: sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=
   /yargs/8.0.2:
     dependencies:
       camelcase: 4.1.0
       cliui: 3.2.0
       decamelize: 1.2.0
-      get-caller-file: 1.0.2
+      get-caller-file: 1.0.3
       os-locale: 2.1.0
       read-pkg-up: 2.0.0
       require-directory: 2.1.1
@@ -2504,13 +5333,18 @@ packages:
       which-module: 2.0.0
       y18n: 3.2.1
       yargs-parser: 7.0.0
-    dev: true
+    dev: false
     resolution:
       integrity: sha1-YpmpBVsc78lp/355wdkY3Osiw2A=
-registry: 'https://registry.npmjs.org/'
-shrinkwrapMinorVersion: 9
-shrinkwrapVersion: 3
+shrinkwrapVersion: 5
 specifiers:
-  lerna: ^2.11.0
-  rollup-plugin-commonjs: ^9.2.0
-  rollup-plugin-node-resolve: ^3.4.0
+  '@cypress/webpack-preprocessor': ^3.0.0
+  '@vue/eslint-config-prettier': ^4.0.0
+  '@vue/test-utils': ^1.0.0-beta.20
+  babel-core: 7.0.0-bridge.0
+  babel-eslint: ^10.0.1
+  babel-jest: ^23.6.0
+  eslint: ^5.8.0
+  eslint-plugin-vue: ^5.0.0-0
+  minimist: ^1.2.0
+  standard-version: ^4.4.0
diff --git a/tests/e2e/.eslintrc.js b/tests/e2e/.eslintrc.js
new file mode 100644
index 0000000..053c39f
--- /dev/null
+++ b/tests/e2e/.eslintrc.js
@@ -0,0 +1,10 @@
+module.exports = {
+  plugins: ["cypress"],
+  env: {
+    mocha: true,
+    "cypress/globals": true
+  },
+  rules: {
+    strict: "off"
+  }
+};
diff --git a/tests/e2e/plugins/index.js b/tests/e2e/plugins/index.js
new file mode 100644
index 0000000..0f8ca22
--- /dev/null
+++ b/tests/e2e/plugins/index.js
@@ -0,0 +1,21 @@
+// https://docs.cypress.io/guides/guides/plugins-guide.html
+/* eslint-disable import/no-extraneous-dependencies, global-require */
+const webpack = require("@cypress/webpack-preprocessor");
+
+module.exports = (on, config) => {
+  on(
+    "file:preprocessor",
+    webpack({
+      webpackOptions: require("@vue/cli-service/webpack.config"),
+      watchOptions: {}
+    })
+  );
+
+  return Object.assign({}, config, {
+    fixturesFolder: "tests/e2e/fixtures",
+    integrationFolder: "tests/e2e/specs",
+    screenshotsFolder: "tests/e2e/screenshots",
+    videosFolder: "tests/e2e/videos",
+    supportFile: "tests/e2e/support/index.js"
+  });
+};
diff --git a/tests/e2e/specs/test.js b/tests/e2e/specs/test.js
new file mode 100644
index 0000000..1d74984
--- /dev/null
+++ b/tests/e2e/specs/test.js
@@ -0,0 +1,8 @@
+// https://docs.cypress.io/api/introduction/api.html
+
+describe("My First Test", () => {
+  it("Visits the app root url", () => {
+    cy.visit("/");
+    cy.contains("h1", "Welcome to Your Vue.js App");
+  });
+});
diff --git a/tests/e2e/support/commands.js b/tests/e2e/support/commands.js
new file mode 100644
index 0000000..c1f5a77
--- /dev/null
+++ b/tests/e2e/support/commands.js
@@ -0,0 +1,25 @@
+// ***********************************************
+// This example commands.js shows you how to
+// create various custom commands and overwrite
+// existing commands.
+//
+// For more comprehensive examples of custom
+// commands please read more here:
+// https://on.cypress.io/custom-commands
+// ***********************************************
+//
+//
+// -- This is a parent command --
+// Cypress.Commands.add("login", (email, password) => { ... })
+//
+//
+// -- This is a child command --
+// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... })
+//
+//
+// -- This is a dual command --
+// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... })
+//
+//
+// -- This is will overwrite an existing command --
+// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
diff --git a/tests/e2e/support/index.js b/tests/e2e/support/index.js
new file mode 100644
index 0000000..d076cec
--- /dev/null
+++ b/tests/e2e/support/index.js
@@ -0,0 +1,20 @@
+// ***********************************************************
+// This example support/index.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+
+// Import commands.js using ES2015 syntax:
+import "./commands";
+
+// Alternatively you can use CommonJS syntax:
+// require('./commands')
diff --git a/tests/unit/.eslintrc.js b/tests/unit/.eslintrc.js
new file mode 100644
index 0000000..3600451
--- /dev/null
+++ b/tests/unit/.eslintrc.js
@@ -0,0 +1,5 @@
+module.exports = {
+  env: {
+    jest: true
+  }
+};
diff --git a/tests/unit/example.spec.js b/tests/unit/example.spec.js
new file mode 100644
index 0000000..a846fbd
--- /dev/null
+++ b/tests/unit/example.spec.js
@@ -0,0 +1,12 @@
+import { shallowMount } from "@vue/test-utils";
+import HelloWorld from "@/components/HelloWorld.vue";
+
+describe("HelloWorld.vue", () => {
+  it("renders props.msg when passed", () => {
+    const msg = "new message";
+    const wrapper = shallowMount(HelloWorld, {
+      propsData: { msg }
+    });
+    expect(wrapper.text()).toMatch(msg);
+  });
+});
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..8ff64ee
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,18 @@
+{
+  "compileOnSave": true,
+  "include": ["packages/**/*"],
+  "exclude": ["node_modules", "dist"],
+  "compilerOptions": {
+    "moduleResolution": "node",
+    "allowSyntheticDefaultImports": true,
+    "target": "esnext",
+    "module": "esnext",
+    "baseUrl": "./",
+    "noImplicitAny": false,
+    "checkJs": false,
+    "sourceMap": true,
+    "paths": {
+      "@vue-slides/*": ["packages/*"] 
+    }
+  }
+}
diff --git a/vscode/.vscode/extensions.json b/vscode/.vscode/extensions.json
new file mode 100644
index 0000000..0a18b9c
--- /dev/null
+++ b/vscode/.vscode/extensions.json
@@ -0,0 +1,7 @@
+{
+	// See http://go.microsoft.com/fwlink/?LinkId=827846
+	// for the documentation about the extensions.json format
+	"recommendations": [
+		"ms-vscode.vscode-typescript-tslint-plugin"
+	]
+}
\ No newline at end of file
diff --git a/vscode/.vscode/launch.json b/vscode/.vscode/launch.json
new file mode 100644
index 0000000..f3f71b4
--- /dev/null
+++ b/vscode/.vscode/launch.json
@@ -0,0 +1,30 @@
+// A launch configuration that launches the extension inside a new window
+// Use IntelliSense to learn about possible attributes.
+// Hover to view descriptions of existing attributes.
+// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+{
+  "version": "0.2.0",
+  "configurations": [
+    {
+      "name": "Run Extension",
+      "type": "extensionHost",
+      "request": "launch",
+      "runtimeExecutable": "${execPath}",
+      "args": ["--extensionDevelopmentPath=${workspaceFolder}"],
+      "outFiles": ["${workspaceFolder}/out/**/*.js"],
+      "preLaunchTask": "npm: watch"
+    },
+    {
+      "name": "Extension Tests",
+      "type": "extensionHost",
+      "request": "launch",
+      "runtimeExecutable": "${execPath}",
+      "args": [
+        "--extensionDevelopmentPath=${workspaceFolder}",
+        "--extensionTestsPath=${workspaceFolder}/out/test"
+      ],
+      "outFiles": ["${workspaceFolder}/out/test/**/*.js"],
+      "preLaunchTask": "npm: watch"
+    }
+  ]
+}
diff --git a/vscode/.vscode/settings.json b/vscode/.vscode/settings.json
new file mode 100644
index 0000000..30bf8c2
--- /dev/null
+++ b/vscode/.vscode/settings.json
@@ -0,0 +1,11 @@
+// Place your settings in this file to overwrite default and user settings.
+{
+    "files.exclude": {
+        "out": false // set this to true to hide the "out" folder with the compiled JS files
+    },
+    "search.exclude": {
+        "out": true // set this to false to include "out" folder in search results
+    },
+    // Turn off tsc task auto detection since we have the necessary tasks as npm scripts
+    "typescript.tsc.autoDetect": "off"
+}
\ No newline at end of file
diff --git a/vscode/.vscode/tasks.json b/vscode/.vscode/tasks.json
new file mode 100644
index 0000000..3b17e53
--- /dev/null
+++ b/vscode/.vscode/tasks.json
@@ -0,0 +1,20 @@
+// See https://go.microsoft.com/fwlink/?LinkId=733558
+// for the documentation about the tasks.json format
+{
+	"version": "2.0.0",
+	"tasks": [
+		{
+			"type": "npm",
+			"script": "watch",
+			"problemMatcher": "$tsc-watch",
+			"isBackground": true,
+			"presentation": {
+				"reveal": "never"
+			},
+			"group": {
+				"kind": "build",
+				"isDefault": true
+			}
+		}
+	]
+}
diff --git a/vscode/.vscodeignore b/vscode/.vscodeignore
new file mode 100644
index 0000000..f369b5e
--- /dev/null
+++ b/vscode/.vscodeignore
@@ -0,0 +1,4 @@
+.vscode/**
+.vscode-test/**
+.gitignore
+vsc-extension-quickstart.md
diff --git a/vscode/CHANGELOG.md b/vscode/CHANGELOG.md
new file mode 100644
index 0000000..db67276
--- /dev/null
+++ b/vscode/CHANGELOG.md
@@ -0,0 +1,9 @@
+# Change Log
+
+All notable changes to the "vue-slides" extension will be documented in this file.
+
+Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
+
+## [Unreleased]
+
+- Initial release
\ No newline at end of file
diff --git a/vscode/README.md b/vscode/README.md
new file mode 100644
index 0000000..be5c9d3
--- /dev/null
+++ b/vscode/README.md
@@ -0,0 +1,20 @@
+# VueSlides Language Support
+
+## Features
+
+- Syntax highlight in `.vue-slides` and `.slides` files.
+- Code folding in slides
+
+## Release Notes
+
+### 0.0.2
+
+Rename to Vue Slides.
+
+### 0.0.1
+
+Add logo image.
+
+### 0.0.0
+
+Initial release of VueSlides.
diff --git a/vscode/icon.png b/vscode/icon.png
new file mode 100644
index 0000000..f4f1fa3
Binary files /dev/null and b/vscode/icon.png differ
diff --git a/vscode/language-configuration.json b/vscode/language-configuration.json
new file mode 100644
index 0000000..7c3d52f
--- /dev/null
+++ b/vscode/language-configuration.json
@@ -0,0 +1,5 @@
+{
+  "comments": {
+    "blockComment": ["<!--", "-->"]
+  }
+}
diff --git a/vscode/out/extension.js b/vscode/out/extension.js
new file mode 100644
index 0000000..4245509
--- /dev/null
+++ b/vscode/out/extension.js
@@ -0,0 +1,68 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+// The module 'vscode' contains the VS Code extensibility API
+// Import the module and reference it with the alias vscode in your code below
+const vscode = require("vscode");
+const selector = {
+    scheme: 'file',
+    language: 'vue-slides'
+};
+const separatorCompletionItem = (() => {
+    const item = new vscode.CompletionItem('Insert new slide', vscode.CompletionItemKind.Snippet);
+    item.insertText = new vscode.SnippetString('\n<!-- slide: ${1:title} -->\n---\nlayout: ${2:default}\n---\n$0');
+    return item;
+})();
+// your extension is activated the very first time the command is executed
+function activate(context) {
+    vscode.languages.registerFoldingRangeProvider(selector, slideFoldingRangeProvider);
+    vscode.languages.registerCompletionItemProvider(selector, slideSeparatorProvider);
+}
+exports.activate = activate;
+// this method is called when your extension is deactivated
+function deactivate() { }
+exports.deactivate = deactivate;
+const slideSeparatorProvider = {
+    provideCompletionItems(document, position) {
+        return position.character === 0 ? [separatorCompletionItem] : [];
+    },
+    resolveCompletionItem(item) {
+        return item;
+    }
+};
+const slideFoldingRangeProvider = {
+    provideFoldingRanges(selector, context, token) {
+        return findFoldingRanges(selector.getText());
+    }
+};
+function findFoldingRanges(source) {
+    return __awaiter(this, void 0, void 0, function* () {
+        const RE_SLIDE = /<!-- slide(?:(.*?))? -->/gi;
+        const slides = [];
+        const lines = source.split(/\r?\n/);
+        let start = -1;
+        lines.forEach((line, index) => {
+            if (RE_SLIDE.test(line)) {
+                if (start < 0) {
+                    start = index;
+                }
+                else {
+                    slides.push(new vscode.FoldingRange(start, index - 1, vscode.FoldingRangeKind.Region));
+                    start = index;
+                }
+            }
+        });
+        if (start >= 0) {
+            slides.push(new vscode.FoldingRange(start, lines.length - 1, vscode.FoldingRangeKind.Region));
+        }
+        return slides;
+    });
+}
+//# sourceMappingURL=extension.js.map
\ No newline at end of file
diff --git a/vscode/out/extension.js.map b/vscode/out/extension.js.map
new file mode 100644
index 0000000..6da8fcc
--- /dev/null
+++ b/vscode/out/extension.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,6DAA6D;AAC7D,8EAA8E;AAC9E,iCAAgC;AAEhC,MAAM,QAAQ,GAAG;IACf,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,YAAY;CACvB,CAAA;AACD,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE;IACpC,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,cAAc,CACpC,kBAAkB,EAClB,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAClC,CAAA;IACF,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,kEAAkE,CAAC,CAAA;IAC7G,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,EAAE,CAAA;AACJ,0EAA0E;AAC1E,SAAgB,QAAQ,CAAC,OAAgC;IACvD,MAAM,CAAC,SAAS,CAAC,4BAA4B,CAC3C,QAAQ,EACR,yBAAyB,CAC1B,CAAA;IACD,MAAM,CAAC,SAAS,CAAC,8BAA8B,CAC7C,QAAQ,EACR,sBAAsB,CACvB,CAAA;AACH,CAAC;AATD,4BASC;AAED,2DAA2D;AAC3D,SAAgB,UAAU,KAAI,CAAC;AAA/B,gCAA+B;AAE/B,MAAM,sBAAsB,GAAkC;IAC5D,sBAAsB,CAAC,QAAQ,EAAE,QAAQ;QACvC,OAAO,QAAQ,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAClE,CAAC;IACD,qBAAqB,CAAC,IAAI;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA;AACD,MAAM,yBAAyB,GAAgC;IAC7D,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK;QAC3C,OAAO,iBAAiB,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IAC9C,CAAC;CACF,CAAA;AAED,SAAe,iBAAiB,CAAC,MAAc;;QAC7C,MAAM,QAAQ,GAAG,4BAA4B,CAAA;QAE7C,MAAM,MAAM,GAA0B,EAAE,CAAA;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAEnC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAA;QAEd,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC5B,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACvB,IAAI,KAAK,GAAG,CAAC,EAAE;oBACb,KAAK,GAAG,KAAK,CAAA;iBACd;qBAAM;oBACL,MAAM,CAAC,IAAI,CACT,IAAI,MAAM,CAAC,YAAY,CACrB,KAAK,EACL,KAAK,GAAG,CAAC,EACT,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAC/B,CACF,CAAA;oBACD,KAAK,GAAG,KAAK,CAAA;iBACd;aACF;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,KAAK,IAAI,CAAC,EAAE;YACd,MAAM,CAAC,IAAI,CACT,IAAI,MAAM,CAAC,YAAY,CACrB,KAAK,EACL,KAAK,CAAC,MAAM,GAAG,CAAC,EAChB,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAC/B,CACF,CAAA;SACF;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CAAA"}
\ No newline at end of file
diff --git a/vscode/package.json b/vscode/package.json
new file mode 100644
index 0000000..346f567
--- /dev/null
+++ b/vscode/package.json
@@ -0,0 +1,56 @@
+{
+  "name": "vue-slides",
+  "displayName": "VueSlides",
+  "description": "VueSlides Language Support",
+  "version": "0.0.2",
+  "engines": {
+    "vscode": "^1.32.0"
+  },
+  "categories": [
+    "Programming Languages"
+  ],
+  "activationEvents": [
+    "onLanguage:vue-slides"
+  ],
+  "main": "./out/extension.js",
+  "contributes": {
+    "languages": [
+      {
+        "id": "vue-slides",
+        "aliases": [
+          "VueSlides",
+          "vue-slides",
+          "vueslides"
+        ],
+        "extensions": [
+          ".vue-slides",
+          ".slides"
+        ],
+        "configuration": "./language-configuration.json"
+      }
+    ],
+    "grammars": [
+      {
+        "language": "vue-slides",
+        "scopeName": "source.vue-slides",
+        "path": "./syntaxes/vue-slides.tmLanguage.json"
+      }
+    ]
+  },
+  "publisher": "znck",
+  "icon": "icon.png",
+  "repository": "https://github.com/znck/vue-slides",
+  "scripts": {
+    "vscode:prepublish": "npm run compile",
+    "compile": "tsc -p ./",
+    "watch": "tsc -watch -p ./",
+    "postinstall": "node ./node_modules/vscode/bin/install",
+    "test": "npm run compile && node ./node_modules/vscode/bin/test"
+  },
+  "devDependencies": {
+    "typescript": "^3.3.1",
+    "vscode": "^1.1.28",
+    "tslint": "^5.12.1",
+    "@types/node": "^10.12.21"
+  }
+}
diff --git a/vscode/pnpm-lock.yaml b/vscode/pnpm-lock.yaml
new file mode 100644
index 0000000..6b2a241
--- /dev/null
+++ b/vscode/pnpm-lock.yaml
@@ -0,0 +1,795 @@
+devDependencies:
+  '@types/node': 10.14.4
+  tslint: 5.14.0
+  typescript: 3.3.4000
+  vscode: 1.1.33
+lockfileVersion: 5
+packages:
+  /@types/node/10.14.4:
+    dev: true
+    resolution:
+      integrity: sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==
+  /agent-base/4.2.1:
+    dependencies:
+      es6-promisify: 5.0.0
+    dev: true
+    engines:
+      node: '>= 4.0.0'
+    resolution:
+      integrity: sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
+  /ajv/6.10.0:
+    dependencies:
+      fast-deep-equal: 2.0.1
+      fast-json-stable-stringify: 2.0.0
+      json-schema-traverse: 0.4.1
+      uri-js: 4.2.2
+    dev: true
+    resolution:
+      integrity: sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==
+  /ansi-regex/2.1.1:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+  /ansi-styles/2.2.1:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+  /ansi-styles/3.2.1:
+    dependencies:
+      color-convert: 1.9.3
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+  /argparse/1.0.10:
+    dependencies:
+      sprintf-js: 1.0.3
+    dev: true
+    resolution:
+      integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+  /asn1/0.2.4:
+    dependencies:
+      safer-buffer: 2.1.2
+    dev: true
+    resolution:
+      integrity: sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+  /assert-plus/1.0.0:
+    dev: true
+    engines:
+      node: '>=0.8'
+    resolution:
+      integrity: sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+  /asynckit/0.4.0:
+    dev: true
+    resolution:
+      integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=
+  /aws-sign2/0.7.0:
+    dev: true
+    resolution:
+      integrity: sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+  /aws4/1.8.0:
+    dev: true
+    resolution:
+      integrity: sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
+  /babel-code-frame/6.26.0:
+    dependencies:
+      chalk: 1.1.3
+      esutils: 2.0.2
+      js-tokens: 3.0.2
+    dev: true
+    resolution:
+      integrity: sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
+  /balanced-match/1.0.0:
+    dev: true
+    resolution:
+      integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+  /bcrypt-pbkdf/1.0.2:
+    dependencies:
+      tweetnacl: 0.14.5
+    dev: true
+    resolution:
+      integrity: sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+  /brace-expansion/1.1.11:
+    dependencies:
+      balanced-match: 1.0.0
+      concat-map: 0.0.1
+    dev: true
+    resolution:
+      integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+  /browser-stdout/1.3.0:
+    dev: true
+    resolution:
+      integrity: sha1-81HTKWnTL6XXpVZxVCY9korjvR8=
+  /buffer-from/1.1.1:
+    dev: true
+    resolution:
+      integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+  /builtin-modules/1.1.1:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
+  /caseless/0.12.0:
+    dev: true
+    resolution:
+      integrity: sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+  /chalk/1.1.3:
+    dependencies:
+      ansi-styles: 2.2.1
+      escape-string-regexp: 1.0.5
+      has-ansi: 2.0.0
+      strip-ansi: 3.0.1
+      supports-color: 2.0.0
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+  /chalk/2.4.2:
+    dependencies:
+      ansi-styles: 3.2.1
+      escape-string-regexp: 1.0.5
+      supports-color: 5.5.0
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+  /color-convert/1.9.3:
+    dependencies:
+      color-name: 1.1.3
+    dev: true
+    resolution:
+      integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+  /color-name/1.1.3:
+    dev: true
+    resolution:
+      integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+  /combined-stream/1.0.7:
+    dependencies:
+      delayed-stream: 1.0.0
+    dev: true
+    engines:
+      node: '>= 0.8'
+    resolution:
+      integrity: sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==
+  /commander/2.11.0:
+    dev: true
+    resolution:
+      integrity: sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==
+  /commander/2.19.0:
+    dev: true
+    resolution:
+      integrity: sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
+  /concat-map/0.0.1:
+    dev: true
+    resolution:
+      integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+  /core-util-is/1.0.2:
+    dev: true
+    resolution:
+      integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+  /dashdash/1.14.1:
+    dependencies:
+      assert-plus: 1.0.0
+    dev: true
+    engines:
+      node: '>=0.10'
+    resolution:
+      integrity: sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+  /debug/3.1.0:
+    dependencies:
+      ms: 2.0.0
+    dev: true
+    resolution:
+      integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
+  /debug/3.2.6:
+    dependencies:
+      ms: 2.1.1
+    dev: true
+    resolution:
+      integrity: sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+  /delayed-stream/1.0.0:
+    dev: true
+    engines:
+      node: '>=0.4.0'
+    resolution:
+      integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+  /diff/3.3.1:
+    dev: true
+    engines:
+      node: '>=0.3.1'
+    resolution:
+      integrity: sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==
+  /diff/3.5.0:
+    dev: true
+    engines:
+      node: '>=0.3.1'
+    resolution:
+      integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
+  /ecc-jsbn/0.1.2:
+    dependencies:
+      jsbn: 0.1.1
+      safer-buffer: 2.1.2
+    dev: true
+    resolution:
+      integrity: sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+  /es6-promise/4.2.6:
+    dev: true
+    resolution:
+      integrity: sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==
+  /es6-promisify/5.0.0:
+    dependencies:
+      es6-promise: 4.2.6
+    dev: true
+    resolution:
+      integrity: sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
+  /escape-string-regexp/1.0.5:
+    dev: true
+    engines:
+      node: '>=0.8.0'
+    resolution:
+      integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+  /esprima/4.0.1:
+    dev: true
+    engines:
+      node: '>=4'
+    hasBin: true
+    resolution:
+      integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+  /esutils/2.0.2:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
+  /extend/3.0.2:
+    dev: true
+    resolution:
+      integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+  /extsprintf/1.3.0:
+    dev: true
+    engines:
+      '0': node >=0.6.0
+    resolution:
+      integrity: sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+  /extsprintf/1.4.0:
+    dev: true
+    engines:
+      '0': node >=0.6.0
+    resolution:
+      integrity: sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
+  /fast-deep-equal/2.0.1:
+    dev: true
+    resolution:
+      integrity: sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
+  /fast-json-stable-stringify/2.0.0:
+    dev: true
+    resolution:
+      integrity: sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
+  /forever-agent/0.6.1:
+    dev: true
+    resolution:
+      integrity: sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+  /form-data/2.3.3:
+    dependencies:
+      asynckit: 0.4.0
+      combined-stream: 1.0.7
+      mime-types: 2.1.22
+    dev: true
+    engines:
+      node: '>= 0.12'
+    resolution:
+      integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+  /fs.realpath/1.0.0:
+    dev: true
+    resolution:
+      integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+  /getpass/0.1.7:
+    dependencies:
+      assert-plus: 1.0.0
+    dev: true
+    resolution:
+      integrity: sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+  /glob/7.1.2:
+    dependencies:
+      fs.realpath: 1.0.0
+      inflight: 1.0.6
+      inherits: 2.0.3
+      minimatch: 3.0.4
+      once: 1.4.0
+      path-is-absolute: 1.0.1
+    dev: true
+    resolution:
+      integrity: sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
+  /glob/7.1.3:
+    dependencies:
+      fs.realpath: 1.0.0
+      inflight: 1.0.6
+      inherits: 2.0.3
+      minimatch: 3.0.4
+      once: 1.4.0
+      path-is-absolute: 1.0.1
+    dev: true
+    resolution:
+      integrity: sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
+  /growl/1.10.3:
+    dev: true
+    engines:
+      node: '>=4.x'
+    resolution:
+      integrity: sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==
+  /har-schema/2.0.0:
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+  /har-validator/5.1.3:
+    dependencies:
+      ajv: 6.10.0
+      har-schema: 2.0.0
+    dev: true
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
+  /has-ansi/2.0.0:
+    dependencies:
+      ansi-regex: 2.1.1
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+  /has-flag/2.0.0:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=
+  /has-flag/3.0.0:
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+  /he/1.1.1:
+    dev: true
+    hasBin: true
+    resolution:
+      integrity: sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
+  /http-proxy-agent/2.1.0:
+    dependencies:
+      agent-base: 4.2.1
+      debug: 3.1.0
+    dev: true
+    engines:
+      node: '>= 4.5.0'
+    resolution:
+      integrity: sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==
+  /http-signature/1.2.0:
+    dependencies:
+      assert-plus: 1.0.0
+      jsprim: 1.4.1
+      sshpk: 1.16.1
+    dev: true
+    engines:
+      node: '>=0.8'
+      npm: '>=1.3.7'
+    resolution:
+      integrity: sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+  /https-proxy-agent/2.2.1:
+    dependencies:
+      agent-base: 4.2.1
+      debug: 3.2.6
+    dev: true
+    engines:
+      node: '>= 4.5.0'
+    resolution:
+      integrity: sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==
+  /inflight/1.0.6:
+    dependencies:
+      once: 1.4.0
+      wrappy: 1.0.2
+    dev: true
+    resolution:
+      integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+  /inherits/2.0.3:
+    dev: true
+    resolution:
+      integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+  /is-typedarray/1.0.0:
+    dev: true
+    resolution:
+      integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+  /isstream/0.1.2:
+    dev: true
+    resolution:
+      integrity: sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+  /js-tokens/3.0.2:
+    dev: true
+    resolution:
+      integrity: sha1-mGbfOVECEw449/mWvOtlRDIJwls=
+  /js-yaml/3.13.0:
+    dependencies:
+      argparse: 1.0.10
+      esprima: 4.0.1
+    dev: true
+    hasBin: true
+    resolution:
+      integrity: sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==
+  /jsbn/0.1.1:
+    dev: true
+    resolution:
+      integrity: sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+  /json-schema-traverse/0.4.1:
+    dev: true
+    resolution:
+      integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+  /json-schema/0.2.3:
+    dev: true
+    resolution:
+      integrity: sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+  /json-stringify-safe/5.0.1:
+    dev: true
+    resolution:
+      integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+  /jsprim/1.4.1:
+    dependencies:
+      assert-plus: 1.0.0
+      extsprintf: 1.3.0
+      json-schema: 0.2.3
+      verror: 1.10.0
+    dev: true
+    engines:
+      '0': node >=0.6.0
+    resolution:
+      integrity: sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+  /mime-db/1.38.0:
+    dev: true
+    engines:
+      node: '>= 0.6'
+    resolution:
+      integrity: sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==
+  /mime-types/2.1.22:
+    dependencies:
+      mime-db: 1.38.0
+    dev: true
+    engines:
+      node: '>= 0.6'
+    resolution:
+      integrity: sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==
+  /minimatch/3.0.4:
+    dependencies:
+      brace-expansion: 1.1.11
+    dev: true
+    resolution:
+      integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+  /minimist/0.0.8:
+    dev: true
+    resolution:
+      integrity: sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+  /mkdirp/0.5.1:
+    dependencies:
+      minimist: 0.0.8
+    dev: true
+    hasBin: true
+    resolution:
+      integrity: sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+  /mocha/4.1.0:
+    dependencies:
+      browser-stdout: 1.3.0
+      commander: 2.11.0
+      debug: 3.1.0
+      diff: 3.3.1
+      escape-string-regexp: 1.0.5
+      glob: 7.1.2
+      growl: 1.10.3
+      he: 1.1.1
+      mkdirp: 0.5.1
+      supports-color: 4.4.0
+    dev: true
+    engines:
+      node: '>= 4.0.0'
+    hasBin: true
+    resolution:
+      integrity: sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==
+  /ms/2.0.0:
+    dev: true
+    resolution:
+      integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+  /ms/2.1.1:
+    dev: true
+    resolution:
+      integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+  /oauth-sign/0.9.0:
+    dev: true
+    resolution:
+      integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+  /once/1.4.0:
+    dependencies:
+      wrappy: 1.0.2
+    dev: true
+    resolution:
+      integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+  /path-is-absolute/1.0.1:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+  /path-parse/1.0.6:
+    dev: true
+    resolution:
+      integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+  /performance-now/2.1.0:
+    dev: true
+    resolution:
+      integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+  /psl/1.1.31:
+    dev: true
+    resolution:
+      integrity: sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==
+  /punycode/1.4.1:
+    dev: true
+    resolution:
+      integrity: sha1-wNWmOycYgArY4esPpSachN1BhF4=
+  /punycode/2.1.1:
+    dev: true
+    engines:
+      node: '>=6'
+    resolution:
+      integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+  /qs/6.5.2:
+    dev: true
+    engines:
+      node: '>=0.6'
+    resolution:
+      integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+  /querystringify/2.1.1:
+    dev: true
+    resolution:
+      integrity: sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
+  /request/2.88.0:
+    dependencies:
+      aws-sign2: 0.7.0
+      aws4: 1.8.0
+      caseless: 0.12.0
+      combined-stream: 1.0.7
+      extend: 3.0.2
+      forever-agent: 0.6.1
+      form-data: 2.3.3
+      har-validator: 5.1.3
+      http-signature: 1.2.0
+      is-typedarray: 1.0.0
+      isstream: 0.1.2
+      json-stringify-safe: 5.0.1
+      mime-types: 2.1.22
+      oauth-sign: 0.9.0
+      performance-now: 2.1.0
+      qs: 6.5.2
+      safe-buffer: 5.1.2
+      tough-cookie: 2.4.3
+      tunnel-agent: 0.6.0
+      uuid: 3.3.2
+    dev: true
+    engines:
+      node: '>= 4'
+    resolution:
+      integrity: sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
+  /requires-port/1.0.0:
+    dev: true
+    resolution:
+      integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
+  /resolve/1.10.0:
+    dependencies:
+      path-parse: 1.0.6
+    dev: true
+    resolution:
+      integrity: sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==
+  /safe-buffer/5.1.2:
+    dev: true
+    resolution:
+      integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+  /safer-buffer/2.1.2:
+    dev: true
+    resolution:
+      integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+  /semver/5.7.0:
+    dev: true
+    hasBin: true
+    resolution:
+      integrity: sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
+  /source-map-support/0.5.11:
+    dependencies:
+      buffer-from: 1.1.1
+      source-map: 0.6.1
+    dev: true
+    resolution:
+      integrity: sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==
+  /source-map/0.6.1:
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+  /sprintf-js/1.0.3:
+    dev: true
+    resolution:
+      integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+  /sshpk/1.16.1:
+    dependencies:
+      asn1: 0.2.4
+      assert-plus: 1.0.0
+      bcrypt-pbkdf: 1.0.2
+      dashdash: 1.14.1
+      ecc-jsbn: 0.1.2
+      getpass: 0.1.7
+      jsbn: 0.1.1
+      safer-buffer: 2.1.2
+      tweetnacl: 0.14.5
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    hasBin: true
+    resolution:
+      integrity: sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
+  /strip-ansi/3.0.1:
+    dependencies:
+      ansi-regex: 2.1.1
+    dev: true
+    engines:
+      node: '>=0.10.0'
+    resolution:
+      integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+  /supports-color/2.0.0:
+    dev: true
+    engines:
+      node: '>=0.8.0'
+    resolution:
+      integrity: sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+  /supports-color/4.4.0:
+    dependencies:
+      has-flag: 2.0.0
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==
+  /supports-color/5.5.0:
+    dependencies:
+      has-flag: 3.0.0
+    dev: true
+    engines:
+      node: '>=4'
+    resolution:
+      integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+  /tough-cookie/2.4.3:
+    dependencies:
+      psl: 1.1.31
+      punycode: 1.4.1
+    dev: true
+    engines:
+      node: '>=0.8'
+    resolution:
+      integrity: sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
+  /tslib/1.9.3:
+    dev: true
+    resolution:
+      integrity: sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
+  /tslint/5.14.0:
+    dependencies:
+      babel-code-frame: 6.26.0
+      builtin-modules: 1.1.1
+      chalk: 2.4.2
+      commander: 2.19.0
+      diff: 3.5.0
+      glob: 7.1.3
+      js-yaml: 3.13.0
+      minimatch: 3.0.4
+      mkdirp: 0.5.1
+      resolve: 1.10.0
+      semver: 5.7.0
+      tslib: 1.9.3
+      tsutils: 2.29.0
+    dev: true
+    engines:
+      node: '>=4.8.0'
+    hasBin: true
+    peerDependencies:
+      typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev'
+    resolution:
+      integrity: sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ==
+  /tsutils/2.29.0:
+    dependencies:
+      tslib: 1.9.3
+    dev: true
+    peerDependencies:
+      typescript: '>=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev'
+    resolution:
+      integrity: sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==
+  /tunnel-agent/0.6.0:
+    dependencies:
+      safe-buffer: 5.1.2
+    dev: true
+    resolution:
+      integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+  /tweetnacl/0.14.5:
+    dev: true
+    resolution:
+      integrity: sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+  /typescript/3.3.4000:
+    dev: true
+    engines:
+      node: '>=4.2.0'
+    hasBin: true
+    resolution:
+      integrity: sha512-jjOcCZvpkl2+z7JFn0yBOoLQyLoIkNZAs/fYJkUG6VKy6zLPHJGfQJYFHzibB6GJaF/8QrcECtlQ5cpvRHSMEA==
+  /uri-js/4.2.2:
+    dependencies:
+      punycode: 2.1.1
+    dev: true
+    resolution:
+      integrity: sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+  /url-parse/1.4.4:
+    dependencies:
+      querystringify: 2.1.1
+      requires-port: 1.0.0
+    dev: true
+    resolution:
+      integrity: sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==
+  /uuid/3.3.2:
+    dev: true
+    hasBin: true
+    resolution:
+      integrity: sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
+  /verror/1.10.0:
+    dependencies:
+      assert-plus: 1.0.0
+      core-util-is: 1.0.2
+      extsprintf: 1.4.0
+    dev: true
+    engines:
+      '0': node >=0.6.0
+    resolution:
+      integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+  /vscode-test/0.1.5:
+    dependencies:
+      http-proxy-agent: 2.1.0
+      https-proxy-agent: 2.2.1
+    dev: true
+    engines:
+      node: '>=8.9.3'
+    resolution:
+      integrity: sha512-s+lbF1Dtasc0yXVB9iQTexBe2JK6HJAUJe3fWezHKIjq+xRw5ZwCMEMBaonFIPy7s95qg2HPTRDR5W4h4kbxGw==
+  /vscode/1.1.33:
+    dependencies:
+      glob: 7.1.3
+      mocha: 4.1.0
+      request: 2.88.0
+      semver: 5.7.0
+      source-map-support: 0.5.11
+      url-parse: 1.4.4
+      vscode-test: 0.1.5
+    dev: true
+    engines:
+      node: '>=8.9.3'
+    hasBin: true
+    resolution:
+      integrity: sha512-sXedp2oF6y4ZvqrrFiZpeMzaCLSWV+PpYkIxjG/iYquNZ9KrLL2LujltGxPLvzn49xu2sZkyC+avVNFgcJD1Iw==
+  /wrappy/1.0.2:
+    dev: true
+    resolution:
+      integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+specifiers:
+  '@types/node': ^10.12.21
+  tslint: ^5.12.1
+  typescript: ^3.3.1
+  vscode: ^1.1.28
diff --git a/vscode/src/extension.ts b/vscode/src/extension.ts
new file mode 100644
index 0000000..c2c6f38
--- /dev/null
+++ b/vscode/src/extension.ts
@@ -0,0 +1,82 @@
+// The module 'vscode' contains the VS Code extensibility API
+// Import the module and reference it with the alias vscode in your code below
+import * as vscode from 'vscode'
+
+const selector = {
+  scheme: 'file',
+  language: 'vue-slides'
+}
+const separatorCompletionItem = (() => {
+  const item = new vscode.CompletionItem(
+    'Insert new slide',
+    vscode.CompletionItemKind.Snippet
+  )
+	item.insertText = new vscode.SnippetString('\n<!-- slide: ${1:title} -->\n---\nlayout: ${2:default}\n---\n$0')
+  return item
+})()
+// your extension is activated the very first time the command is executed
+export function activate(context: vscode.ExtensionContext) {
+  vscode.languages.registerFoldingRangeProvider(
+    selector,
+    slideFoldingRangeProvider
+  )
+  vscode.languages.registerCompletionItemProvider(
+    selector,
+    slideSeparatorProvider
+  )
+}
+
+// this method is called when your extension is deactivated
+export function deactivate() {}
+
+const slideSeparatorProvider: vscode.CompletionItemProvider = {
+  provideCompletionItems(document, position) {
+    return position.character === 0 ? [separatorCompletionItem] : []
+  },
+  resolveCompletionItem(item) {
+    return item
+  }
+}
+const slideFoldingRangeProvider: vscode.FoldingRangeProvider = {
+  provideFoldingRanges(selector, context, token) {
+    return findFoldingRanges(selector.getText())
+  }
+}
+
+async function findFoldingRanges(source: string) {
+  const RE_SLIDE = /<!-- slide(?:(.*?))? -->/gi
+
+  const slides: vscode.FoldingRange[] = []
+  const lines = source.split(/\r?\n/)
+
+  let start = -1
+
+  lines.forEach((line, index) => {
+    if (RE_SLIDE.test(line)) {
+      if (start < 0) {
+        start = index
+      } else {
+        slides.push(
+          new vscode.FoldingRange(
+            start,
+            index - 1,
+            vscode.FoldingRangeKind.Region
+          )
+        )
+        start = index
+      }
+    }
+  })
+
+  if (start >= 0) {
+    slides.push(
+      new vscode.FoldingRange(
+        start,
+        lines.length - 1,
+        vscode.FoldingRangeKind.Region
+      )
+    )
+  }
+
+  return slides
+}
diff --git a/vscode/syntaxes/vue-slides.tmLanguage.json b/vscode/syntaxes/vue-slides.tmLanguage.json
new file mode 100644
index 0000000..ad0a2b3
--- /dev/null
+++ b/vscode/syntaxes/vue-slides.tmLanguage.json
@@ -0,0 +1,58 @@
+{
+  "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
+  "name": "Vue Slides",
+  "patterns": [
+    {
+      "name": "meta.vue-slides",
+      "include": "#frontMatter"
+    },
+    {
+      "include": "#slide"
+    }
+  ],
+  "repository": {
+    "slide": {
+      "patterns": [
+        {
+          "name": "slide.vue-slides",
+          "begin": "<!-- (slide)(?::(.*?))? -->",
+          "end": "(?=<!-- slide(?::.*?)? -->|\\z)",
+          "patterns": [{ "include": "#markdown" }],
+          "beginCaptures": {
+            "0": {
+              "name": "comment.block.separator.slide.vue-slides"
+            },
+            "1": {
+              "name": "keyword.separator.slide.vue-slides"
+            },
+            "2": {
+              "name": "title.separator.slide.vue-slides"
+            }
+          }
+        }
+      ]
+    },
+    "frontMatter": {
+      "begin": "(^|\\A)-{3}\\s*$",
+      "contentName": "meta.embedded.block.frontmatter",
+      "patterns": [
+        {
+          "include": "source.yaml"
+        }
+      ],
+      "end": "(^|\\G)-{3}|\\.{3}\\s*$"
+    },
+    "markdown": {
+      "contentName": "meta.embedded.block.markdown",
+      "patterns": [
+        {
+          "include": "#frontMatter"
+        },
+        {
+          "include": "text.html.markdown"
+        }
+      ]
+    }
+  },
+  "scopeName": "source.vue-slides"
+}
diff --git a/vscode/tsconfig.json b/vscode/tsconfig.json
new file mode 100644
index 0000000..b65c745
--- /dev/null
+++ b/vscode/tsconfig.json
@@ -0,0 +1,21 @@
+{
+	"compilerOptions": {
+		"module": "commonjs",
+		"target": "es6",
+		"outDir": "out",
+		"lib": [
+			"es6"
+		],
+		"sourceMap": true,
+		"rootDir": "src",
+		"strict": true   /* enable all strict type-checking options */
+		/* Additional Checks */
+		// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
+		// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
+		// "noUnusedParameters": true,  /* Report errors on unused parameters. */
+	},
+	"exclude": [
+		"node_modules",
+		".vscode-test"
+	]
+}
diff --git a/vscode/tslint.json b/vscode/tslint.json
new file mode 100644
index 0000000..39c83c1
--- /dev/null
+++ b/vscode/tslint.json
@@ -0,0 +1,15 @@
+{
+	"rules": {
+		"no-string-throw": true,
+		"no-unused-expression": true,
+		"no-duplicate-variable": true,
+		"curly": true,
+		"class-name": true,
+		"semicolon": [
+			false,
+			"always"
+		],
+		"triple-equals": true
+	},
+	"defaultSeverity": "warning"
+}
diff --git a/vscode/vsc-extension-quickstart.md b/vscode/vsc-extension-quickstart.md
new file mode 100644
index 0000000..d29659d
--- /dev/null
+++ b/vscode/vsc-extension-quickstart.md
@@ -0,0 +1,35 @@
+# Welcome to your VS Code Extension
+
+## What's in the folder
+
+* This folder contains all of the files necessary for your extension.
+* `package.json` - this is the manifest file in which you declare your extension and command.
+  * The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin.
+* `src/extension.ts` - this is the main file where you will provide the implementation of your command.
+  * The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`.
+  * We pass the function containing the implementation of the command as the second parameter to `registerCommand`.
+
+## Get up and running straight away
+
+* Press `F5` to open a new window with your extension loaded.
+* Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`.
+* Set breakpoints in your code inside `src/extension.ts` to debug your extension.
+* Find output from your extension in the debug console.
+
+## Make changes
+
+* You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`.
+* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes.
+
+## Explore the API
+
+* You can open the full set of our API when you open the file `node_modules/vscode/vscode.d.ts`.
+
+## Run tests
+
+* Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Extension Tests`.
+* Press `F5` to run the tests in a new window with your extension loaded.
+* See the output of the test result in the debug console.
+* Make changes to `test/extension.test.ts` or create new test files inside the `test` folder.
+  * By convention, the test runner will only consider files matching the name pattern `**.test.ts`.
+  * You can create folders inside the `test` folder to structure your tests any way you want.
