From dcb7e1ecf479a72c904dd882c05f1c446dbe2fe4 Mon Sep 17 00:00:00 2001
From: scarlett <nia@netbsd.org>
Date: Tue, 4 Sep 2018 00:32:25 +0100
Subject: [PATCH 01/60] Add option for disabling counts (followers, statuses)
 in user profiles.

---
 src/components/settings/settings.js                    |  4 ++++
 src/components/settings/settings.vue                   |  4 ++++
 src/components/user_card_content/user_card_content.js  |  5 +++++
 src/components/user_card_content/user_card_content.vue | 10 +++++-----
 src/i18n/messages.js                                   |  1 +
 src/main.js                                            |  1 +
 src/modules/config.js                                  |  1 +
 7 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js
index de12894b..088e19d3 100644
--- a/src/components/settings/settings.js
+++ b/src/components/settings/settings.js
@@ -10,6 +10,7 @@ const settings = {
       hideAttachmentsLocal: this.$store.state.config.hideAttachments,
       hideAttachmentsInConvLocal: this.$store.state.config.hideAttachmentsInConv,
       hideNsfwLocal: this.$store.state.config.hideNsfw,
+      hideUserStatsLocal: this.$store.state.config.hideUserStats,
       notificationVisibilityLocal: this.$store.state.config.notificationVisibility,
       replyVisibilityLocal: this.$store.state.config.replyVisibility,
       loopVideoLocal: this.$store.state.config.loopVideo,
@@ -47,6 +48,9 @@ const settings = {
     hideAttachmentsInConvLocal (value) {
       this.$store.dispatch('setOption', { name: 'hideAttachmentsInConv', value })
     },
+    hideUserStatsLocal (value) {
+      this.$store.dispatch('setOption', { name: 'hideUserStats', value })
+    },
     hideNsfwLocal (value) {
       this.$store.dispatch('setOption', { name: 'hideNsfw', value })
     },
diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue
index c106b79c..2cf62200 100644
--- a/src/components/settings/settings.vue
+++ b/src/components/settings/settings.vue
@@ -122,6 +122,10 @@
               <i class="icon-down-open"/>
             </label>
           </div>
+          <div>
+            <input type="checkbox" id="hideUserStats" v-model="hideUserStatsLocal">
+            <label for="hideUserStats">{{$t('settings.hide_user_stats')}}</label>
+          </div>
         </div>
         <div class="setting-item">
           <p>{{$t('settings.filtering_explanation')}}</p>
diff --git a/src/components/user_card_content/user_card_content.js b/src/components/user_card_content/user_card_content.js
index 76a5577e..eefa65f3 100644
--- a/src/components/user_card_content/user_card_content.js
+++ b/src/components/user_card_content/user_card_content.js
@@ -3,6 +3,11 @@ import { hex2rgb } from '../../services/color_convert/color_convert.js'
 
 export default {
   props: [ 'user', 'switcher', 'selected', 'hideBio' ],
+  data () {
+    return {
+      hideUserStatsLocal: this.$store.state.config.hideUserStats
+    }
+  },
   computed: {
     headingStyle () {
       const color = this.$store.state.config.colors.bg
diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue
index 59358040..65fd26eb 100644
--- a/src/components/user_card_content/user_card_content.vue
+++ b/src/components/user_card_content/user_card_content.vue
@@ -17,7 +17,7 @@
           <div :title="user.name" class='user-name' v-else>{{user.name}}</div>
           <router-link class='user-screen-name':to="{ name: 'user-profile', params: { id: user.id } }">
             <span>@{{user.screen_name}}</span><span v-if="user.locked"><i class="icon icon-lock"></i></span>
-            <span class="dailyAvg">{{dailyAvg}} {{ $t('user_card.per_day') }}</span>
+            <span v-if="!hideUserStatsLocal" class="dailyAvg">{{dailyAvg}} {{ $t('user_card.per_day') }}</span>
           </router-link>
         </div>
       </div>
@@ -90,19 +90,19 @@
         </div>
       </div>
     </div>
-    <div class="panel-body profile-panel-body">
+    <div v-if="!hideUserStatsLocal || switcher" class="panel-body profile-panel-body">
       <div class="user-counts" :class="{clickable: switcher}">
         <div class="user-count" v-on:click.prevent="setProfileView('statuses')" :class="{selected: selected === 'statuses'}">
           <h5>{{ $t('user_card.statuses') }}</h5>
-          <span>{{user.statuses_count}} <br></span>
+          <span v-if="!hideUserStatsLocal">{{user.statuses_count}} <br></span>
         </div>
         <div class="user-count" v-on:click.prevent="setProfileView('friends')" :class="{selected: selected === 'friends'}">
           <h5>{{ $t('user_card.followees') }}</h5>
-          <span>{{user.friends_count}}</span>
+          <span v-if="!hideUserStatsLocal">{{user.friends_count}}</span>
         </div>
         <div class="user-count" v-on:click.prevent="setProfileView('followers')" :class="{selected: selected === 'followers'}">
           <h5>{{ $t('user_card.followers') }}</h5>
-          <span>{{user.followers_count}}</span>
+          <span v-if="!hideUserStatsLocal">{{user.followers_count}}</span>
         </div>
       </div>
       <p v-if="!hideBio && user.description_html" class="profile-bio" v-html="user.description_html"></p>
diff --git a/src/i18n/messages.js b/src/i18n/messages.js
index 42e7e9d4..42b1dd40 100644
--- a/src/i18n/messages.js
+++ b/src/i18n/messages.js
@@ -328,6 +328,7 @@ const en = {
     loop_video_silent_only: 'Loop only videos without sound (i.e. Mastodon\'s "gifs")',
     reply_link_preview: 'Enable reply-link preview on mouse hover',
     replies_in_timeline: 'Replies in timeline',
+    hide_user_stats: 'Hide user statistics (e.g. status and follower counts)',
     reply_visibility_all: 'Show all replies',
     reply_visibility_following: 'Only show replies directed at me or users I\'m following',
     reply_visibility_self: 'Only show replies directed at me',
diff --git a/src/main.js b/src/main.js
index debd8703..d05ecba8 100644
--- a/src/main.js
+++ b/src/main.js
@@ -48,6 +48,7 @@ const persistedStateOptions = {
     'config.collapseMessageWithSubject',
     'config.hideAttachments',
     'config.hideAttachmentsInConv',
+    'config.hideUserStats',
     'config.hideNsfw',
     'config.replyVisibility',
     'config.notificationVisibility',
diff --git a/src/modules/config.js b/src/modules/config.js
index 60a34bc1..24665e95 100644
--- a/src/modules/config.js
+++ b/src/modules/config.js
@@ -9,6 +9,7 @@ const defaultState = {
   collapseMessageWithSubject: false,
   hideAttachments: false,
   hideAttachmentsInConv: false,
+  hideUserStats: false,
   hideNsfw: true,
   loopVideo: true,
   loopVideoSilentOnly: true,

From bdcbd110e42a5deb46116f3ba631118143f71a69 Mon Sep 17 00:00:00 2001
From: scarlett <nia@netbsd.org>
Date: Tue, 4 Sep 2018 00:41:37 +0100
Subject: [PATCH 02/60] Add option for hiding post statistics (e.g. repeats,
 favs)

---
 src/components/favorite_button/favorite_button.js  | 1 +
 src/components/favorite_button/favorite_button.vue | 4 ++--
 src/components/retweet_button/retweet_button.js    | 1 +
 src/components/retweet_button/retweet_button.vue   | 4 ++--
 src/components/settings/settings.js                | 4 ++++
 src/components/settings/settings.vue               | 4 ++++
 src/i18n/messages.js                               | 1 +
 src/main.js                                        | 1 +
 src/modules/config.js                              | 1 +
 9 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/components/favorite_button/favorite_button.js b/src/components/favorite_button/favorite_button.js
index 1266be90..80893719 100644
--- a/src/components/favorite_button/favorite_button.js
+++ b/src/components/favorite_button/favorite_button.js
@@ -2,6 +2,7 @@ const FavoriteButton = {
   props: ['status', 'loggedIn'],
   data () {
     return {
+      hidePostStatsLocal: this.$store.state.config.hidePostStats,
       animated: false
     }
   },
diff --git a/src/components/favorite_button/favorite_button.vue b/src/components/favorite_button/favorite_button.vue
index 1e1a6970..71cb875e 100644
--- a/src/components/favorite_button/favorite_button.vue
+++ b/src/components/favorite_button/favorite_button.vue
@@ -1,11 +1,11 @@
 <template>
   <div v-if="loggedIn">
     <i :class='classes' class='favorite-button fav-active' @click.prevent='favorite()'/>
-    <span v-if='status.fave_num > 0'>{{status.fave_num}}</span>
+    <span v-if='!hidePostStatsLocal && status.fave_num > 0'>{{status.fave_num}}</span>
   </div>
   <div v-else>
     <i :class='classes' class='favorite-button'/>
-    <span v-if='status.fave_num > 0'>{{status.fave_num}}</span>
+    <span v-if='!hidePostStatsLocal && status.fave_num > 0'>{{status.fave_num}}</span>
   </div>
 </template>
 
diff --git a/src/components/retweet_button/retweet_button.js b/src/components/retweet_button/retweet_button.js
index cafa9cbc..ef2f271a 100644
--- a/src/components/retweet_button/retweet_button.js
+++ b/src/components/retweet_button/retweet_button.js
@@ -2,6 +2,7 @@ const RetweetButton = {
   props: ['status', 'loggedIn', 'visibility'],
   data () {
     return {
+      hidePostStatsLocal: this.$store.state.config.hidePostStats,
       animated: false
     }
   },
diff --git a/src/components/retweet_button/retweet_button.vue b/src/components/retweet_button/retweet_button.vue
index ee5722bd..5b1e64b8 100644
--- a/src/components/retweet_button/retweet_button.vue
+++ b/src/components/retweet_button/retweet_button.vue
@@ -2,7 +2,7 @@
   <div v-if="loggedIn">
     <template v-if="visibility !== 'private' && visibility !== 'direct'">
       <i :class='classes' class='icon-retweet rt-active' v-on:click.prevent='retweet()'></i>
-      <span v-if='status.repeat_num > 0'>{{status.repeat_num}}</span>
+      <span v-if='!hidePostStatsLocal && status.repeat_num > 0'>{{status.repeat_num}}</span>
     </template>
     <template v-else>
       <i :class='classes' class='icon-lock' :title="$t('timeline.no_retweet_hint')"></i>
@@ -10,7 +10,7 @@
   </div>
   <div v-else-if="!loggedIn">
     <i :class='classes' class='icon-retweet'></i>
-    <span v-if='status.repeat_num > 0'>{{status.repeat_num}}</span>
+    <span v-if='!hidePostStatsLocal && status.repeat_num > 0'>{{status.repeat_num}}</span>
   </div>
 </template>
 
diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js
index 088e19d3..1dd53ab2 100644
--- a/src/components/settings/settings.js
+++ b/src/components/settings/settings.js
@@ -10,6 +10,7 @@ const settings = {
       hideAttachmentsLocal: this.$store.state.config.hideAttachments,
       hideAttachmentsInConvLocal: this.$store.state.config.hideAttachmentsInConv,
       hideNsfwLocal: this.$store.state.config.hideNsfw,
+      hidePostStatsLocal: this.$store.state.config.hidePostStats,
       hideUserStatsLocal: this.$store.state.config.hideUserStats,
       notificationVisibilityLocal: this.$store.state.config.notificationVisibility,
       replyVisibilityLocal: this.$store.state.config.replyVisibility,
@@ -48,6 +49,9 @@ const settings = {
     hideAttachmentsInConvLocal (value) {
       this.$store.dispatch('setOption', { name: 'hideAttachmentsInConv', value })
     },
+    hidePostStatsLocal (value) {
+      this.$store.dispatch('setOption', { name: 'hidePostStats', value })
+    },
     hideUserStatsLocal (value) {
       this.$store.dispatch('setOption', { name: 'hideUserStats', value })
     },
diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue
index 2cf62200..18e8e244 100644
--- a/src/components/settings/settings.vue
+++ b/src/components/settings/settings.vue
@@ -122,6 +122,10 @@
               <i class="icon-down-open"/>
             </label>
           </div>
+          <div>
+            <input type="checkbox" id="hidePostStats" v-model="hidePostStatsLocal">
+            <label for="hidePostStats">{{$t('settings.hide_post_stats')}}</label>
+          </div>
           <div>
             <input type="checkbox" id="hideUserStats" v-model="hideUserStatsLocal">
             <label for="hideUserStats">{{$t('settings.hide_user_stats')}}</label>
diff --git a/src/i18n/messages.js b/src/i18n/messages.js
index 42b1dd40..56cc7b49 100644
--- a/src/i18n/messages.js
+++ b/src/i18n/messages.js
@@ -328,6 +328,7 @@ const en = {
     loop_video_silent_only: 'Loop only videos without sound (i.e. Mastodon\'s "gifs")',
     reply_link_preview: 'Enable reply-link preview on mouse hover',
     replies_in_timeline: 'Replies in timeline',
+    hide_post_stats: 'Hide post statistics (e.g. repeat and favorite counts)',
     hide_user_stats: 'Hide user statistics (e.g. status and follower counts)',
     reply_visibility_all: 'Show all replies',
     reply_visibility_following: 'Only show replies directed at me or users I\'m following',
diff --git a/src/main.js b/src/main.js
index d05ecba8..132029dc 100644
--- a/src/main.js
+++ b/src/main.js
@@ -48,6 +48,7 @@ const persistedStateOptions = {
     'config.collapseMessageWithSubject',
     'config.hideAttachments',
     'config.hideAttachmentsInConv',
+    'config.hidePostStats',
     'config.hideUserStats',
     'config.hideNsfw',
     'config.replyVisibility',
diff --git a/src/modules/config.js b/src/modules/config.js
index 24665e95..dae58eb1 100644
--- a/src/modules/config.js
+++ b/src/modules/config.js
@@ -9,6 +9,7 @@ const defaultState = {
   collapseMessageWithSubject: false,
   hideAttachments: false,
   hideAttachmentsInConv: false,
+  hidePostStats: false,
   hideUserStats: false,
   hideNsfw: true,
   loopVideo: true,

From 699ee0891ddb8d788cff77366ee8ac73eb4b02f9 Mon Sep 17 00:00:00 2001
From: scarlett <nia@netbsd.org>
Date: Tue, 4 Sep 2018 00:48:14 +0100
Subject: [PATCH 03/60] Changeable defaults for hideUserStats and hidePostStats

---
 src/main.js        | 4 ++++
 static/config.json | 4 +++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/main.js b/src/main.js
index 132029dc..c69ca6c3 100644
--- a/src/main.js
+++ b/src/main.js
@@ -123,6 +123,8 @@ window.fetch('/api/statusnet/config.json')
       var scopeOptionsEnabled = (config.scopeOptionsEnabled)
       var formattingOptionsEnabled = (config.formattingOptionsEnabled)
       var collapseMessageWithSubject = (config.collapseMessageWithSubject)
+      var hidePostStats = (config.hidePostStats)
+      var hideUserStats = (config.hideUserStats)
 
       store.dispatch('setOption', { name: 'theme', value: theme })
       store.dispatch('setOption', { name: 'background', value: background })
@@ -136,6 +138,8 @@ window.fetch('/api/statusnet/config.json')
       store.dispatch('setOption', { name: 'scopeOptionsEnabled', value: scopeOptionsEnabled })
       store.dispatch('setOption', { name: 'formattingOptionsEnabled', value: formattingOptionsEnabled })
       store.dispatch('setOption', { name: 'collapseMessageWithSubject', value: collapseMessageWithSubject })
+      store.dispatch('setOption', { name: 'hidePostStats', value: hidePostStats })
+      store.dispatch('setOption', { name: 'hideUserStats', value: hideUserStats })
       if (chatDisabled) {
         store.dispatch('disableChat')
       }
diff --git a/static/config.json b/static/config.json
index 144fe951..a6eace0f 100644
--- a/static/config.json
+++ b/static/config.json
@@ -10,5 +10,7 @@
   "showInstanceSpecificPanel": false,
   "scopeOptionsEnabled": false,
   "formattingOptionsEnabled": false,
-  "collapseMessageWithSubject": false
+  "collapseMessageWithSubject": false,
+  "hidePostStats": false,
+  "hideUserStats": false
 }

From 5a59eb4efab1aa54000a229694a958e3e1274e8d Mon Sep 17 00:00:00 2001
From: scarlett <nia@netbsd.org>
Date: Tue, 4 Sep 2018 01:10:22 +0100
Subject: [PATCH 04/60] Don't hide the bio.

---
 src/components/user_card_content/user_card_content.vue | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue
index 65fd26eb..84669d7f 100644
--- a/src/components/user_card_content/user_card_content.vue
+++ b/src/components/user_card_content/user_card_content.vue
@@ -90,8 +90,8 @@
         </div>
       </div>
     </div>
-    <div v-if="!hideUserStatsLocal || switcher" class="panel-body profile-panel-body">
-      <div class="user-counts" :class="{clickable: switcher}">
+    <div class="panel-body profile-panel-body">
+      <div v-if="!hideUserStatsLocal || switcher" class="user-counts" :class="{clickable: switcher}">
         <div class="user-count" v-on:click.prevent="setProfileView('statuses')" :class="{selected: selected === 'statuses'}">
           <h5>{{ $t('user_card.statuses') }}</h5>
           <span v-if="!hideUserStatsLocal">{{user.statuses_count}} <br></span>

From 8dc85b057e058a39f968fa188e0d77a5a9dd5ca6 Mon Sep 17 00:00:00 2001
From: scarlett <nia@netbsd.org>
Date: Tue, 4 Sep 2018 01:18:55 +0100
Subject: [PATCH 05/60] Don't only include whitespace conditionally, to fix the
 fade.

---
 src/components/user_card_content/user_card_content.vue | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue
index 84669d7f..9ce3ca19 100644
--- a/src/components/user_card_content/user_card_content.vue
+++ b/src/components/user_card_content/user_card_content.vue
@@ -94,7 +94,7 @@
       <div v-if="!hideUserStatsLocal || switcher" class="user-counts" :class="{clickable: switcher}">
         <div class="user-count" v-on:click.prevent="setProfileView('statuses')" :class="{selected: selected === 'statuses'}">
           <h5>{{ $t('user_card.statuses') }}</h5>
-          <span v-if="!hideUserStatsLocal">{{user.statuses_count}} <br></span>
+          <span v-if="!hideUserStatsLocal">{{user.statuses_count}}</span>
         </div>
         <div class="user-count" v-on:click.prevent="setProfileView('friends')" :class="{selected: selected === 'friends'}">
           <h5>{{ $t('user_card.followees') }}</h5>
@@ -105,6 +105,7 @@
           <span v-if="!hideUserStatsLocal">{{user.followers_count}}</span>
         </div>
       </div>
+      <br>
       <p v-if="!hideBio && user.description_html" class="profile-bio" v-html="user.description_html"></p>
       <p v-else-if="!hideBio" class="profile-bio">{{ user.description }}</p>
     </div>

From 145929207ef9204066b03ab104284168a054b5f0 Mon Sep 17 00:00:00 2001
From: scarlett <nia@netbsd.org>
Date: Tue, 4 Sep 2018 02:00:12 +0100
Subject: [PATCH 06/60] Revert "Don't only include whitespace conditionally, to
 fix the fade."

This reverts commit 8dc85b057e058a39f968fa188e0d77a5a9dd5ca6.
---
 src/components/user_card_content/user_card_content.vue | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue
index 9ce3ca19..84669d7f 100644
--- a/src/components/user_card_content/user_card_content.vue
+++ b/src/components/user_card_content/user_card_content.vue
@@ -94,7 +94,7 @@
       <div v-if="!hideUserStatsLocal || switcher" class="user-counts" :class="{clickable: switcher}">
         <div class="user-count" v-on:click.prevent="setProfileView('statuses')" :class="{selected: selected === 'statuses'}">
           <h5>{{ $t('user_card.statuses') }}</h5>
-          <span v-if="!hideUserStatsLocal">{{user.statuses_count}}</span>
+          <span v-if="!hideUserStatsLocal">{{user.statuses_count}} <br></span>
         </div>
         <div class="user-count" v-on:click.prevent="setProfileView('friends')" :class="{selected: selected === 'friends'}">
           <h5>{{ $t('user_card.followees') }}</h5>
@@ -105,7 +105,6 @@
           <span v-if="!hideUserStatsLocal">{{user.followers_count}}</span>
         </div>
       </div>
-      <br>
       <p v-if="!hideBio && user.description_html" class="profile-bio" v-html="user.description_html"></p>
       <p v-else-if="!hideBio" class="profile-bio">{{ user.description }}</p>
     </div>

From 11f1bac502c96f2d58274bb2a5dbb6a2930bcb61 Mon Sep 17 00:00:00 2001
From: Henry Jameson <me@hjkos.com>
Date: Tue, 25 Sep 2018 14:01:01 +0300
Subject: [PATCH 07/60] Less confusing description

---
 src/i18n/en.json | 2 +-
 src/i18n/ru.json | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/i18n/en.json b/src/i18n/en.json
index 2dc6493e..1f58c43f 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -130,7 +130,7 @@
     "notification_visibility_likes": "Likes",
     "notification_visibility_mentions": "Mentions",
     "notification_visibility_repeats": "Repeats",
-    "no_rich_text_description": "Disable rich text support",
+    "no_rich_text_description": "Strip rich text formatting from all posts",
     "nsfw_clickthrough": "Enable clickthrough NSFW attachment hiding",
     "panelRadius": "Panels",
     "pause_on_unfocused": "Pause streaming when tab is not focused",
diff --git a/src/i18n/ru.json b/src/i18n/ru.json
index 3a50369a..921bf67e 100644
--- a/src/i18n/ru.json
+++ b/src/i18n/ru.json
@@ -114,6 +114,7 @@
     "notification_visibility_likes": "Лайки",
     "notification_visibility_mentions": "Упоминания",
     "notification_visibility_repeats": "Повторы",
+    "no_rich_text_description": "Убрать форматирование из всех постов",
     "nsfw_clickthrough": "Включить скрытие NSFW вложений",
     "panelRadius": "Панели",
     "pause_on_unfocused": "Приостановить загрузку когда вкладка не в фокусе",

From 455cd0d0289c7633aca22ad6e8737d449e361fce Mon Sep 17 00:00:00 2001
From: Henry Jameson <me@hjkos.com>
Date: Tue, 25 Sep 2018 14:47:02 +0300
Subject: [PATCH 08/60] settings for scope/subject

---
 src/components/settings/settings.js  | 12 ++++++++++
 src/components/settings/settings.vue | 35 ++++++++++++++++++++++++++++
 src/i18n/en.json                     |  7 ++++++
 src/i18n/fr.json                     |  1 +
 src/modules/config.js                |  6 +++--
 src/modules/instance.js              |  2 ++
 static/config.json                   |  4 +++-
 7 files changed, 64 insertions(+), 3 deletions(-)

diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js
index a24bc265..a7c2c565 100644
--- a/src/components/settings/settings.js
+++ b/src/components/settings/settings.js
@@ -26,6 +26,12 @@ const settings = {
         ? instance.collapseMessageWithSubject
         : user.collapseMessageWithSubject,
       collapseMessageWithSubjectDefault: this.$t('settings.values.' + instance.collapseMessageWithSubject),
+      subjectLineBehaviorLocal: typeof user.subjectLineBehavior === 'undefined'
+        ? instance.subjectLineBehavior
+        : user.subjectLineBehavior,
+      subjectLineBehaviorDefault: instance.subjectLineBehavior,
+      scopeCopyLocal: user.scopeCopy,
+      scopeCopyDefault: this.$t('settings.values.' + instance.scopeCopy),
       stopGifs: user.stopGifs,
       loopSilentAvailable:
         // Firefox
@@ -99,6 +105,12 @@ const settings = {
     collapseMessageWithSubjectLocal (value) {
       this.$store.dispatch('setOption', { name: 'collapseMessageWithSubject', value })
     },
+    scopeCopyLocal (value) {
+      this.$store.dispatch('setOption', { name: 'scopeCopy', value })
+    },
+    subjectLineBehaviorLocal (value) {
+      this.$store.dispatch('setOption', { name: 'subjectLineBehavior', value })
+    },
     stopGifs (value) {
       this.$store.dispatch('setOption', { name: 'stopGifs', value })
     }
diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue
index 42c660a3..f9e7d711 100644
--- a/src/components/settings/settings.vue
+++ b/src/components/settings/settings.vue
@@ -53,6 +53,41 @@
             </li>
           </ul>
         </div>
+
+        <div class="setting-item">
+          <h2>{{$t('settings.composing')}}</h2>
+          <ul class="setting-list">
+            <li>
+              <input type="checkbox" id="scopeCopy" v-model="scopeCopyLocal">
+              <label for="scopeCopy">
+                {{$t('settings.scope_copy')}} {{$t('settings.instance_default', { value: scopeCopyDefault })}}
+              </label>
+            </li>
+            <li>
+              <div>
+                {{$t('settings.subject_line_behavior')}}
+                <label for="subjectLineBehavior" class="select">
+                  <select id="subjectLineBehavior" v-model="subjectLineBehaviorLocal">
+                    <option value="email">
+                      {{$t('settings.subject_line_email')}}
+                      {{subjectLineBehaviorLocal == 'email' ? $t('settings.instance_default_simple') : ''}}
+                    </option>
+                    <option value="masto">
+                      {{$t('settings.subject_line_mastodon')}}
+                      {{subjectLineBehaviorLocal == 'mastodon' ? $t('settings.instance_default_simple') : ''}}
+                    </option>
+                    <option value="noop">
+                      {{$t('settings.subject_line_noop')}}
+                      {{subjectLineBehaviorLocal == 'noop' ? $t('settings.instance_default_simple') : ''}}
+                    </option>
+                  </select>
+                  <i class="icon-down-open"/>
+                </label>
+              </div>
+            </li>
+          </ul>
+        </div>
+
         <div class="setting-item">
           <h2>{{$t('settings.attachments')}}</h2>
           <ul class="setting-list">
diff --git a/src/i18n/en.json b/src/i18n/en.json
index 2dc6493e..cd87240b 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -88,6 +88,7 @@
     "change_password_error": "There was an issue changing your password.",
     "changed_password": "Password changed successfully!",
     "collapse_subject": "Collapse posts with subjects",
+    "composing": "Composing",
     "confirm_new_password": "Confirm new password",
     "current_avatar": "Your current avatar",
     "current_password": "Current password",
@@ -115,6 +116,7 @@
     "import_theme": "Load preset",
     "inputRadius": "Input fields",
     "instance_default: (default": "{value})",
+    "instance_default_simple" : "(default)",
     "interfaceLanguage": "Interface language",
     "invalid_theme_imported": "The selected file is not a supported Pleroma theme. No changes to your theme were made.",
     "limited_availability": "Unavailable in your browser",
@@ -147,10 +149,15 @@
     "saving_err": "Error saving settings",
     "saving_ok": "Settings saved",
     "security_tab": "Security",
+    "scope_copy": "Copy scope when replying (DMs are always copied)",
     "set_new_avatar": "Set new avatar",
     "set_new_profile_background": "Set new profile background",
     "set_new_profile_banner": "Set new profile banner",
     "settings": "Settings",
+    "subject_line_behavior": "Copy subject when replying",
+    "subject_line_email": "Like email: \"re: subject\"",
+    "subject_line_mastodon": "Like mastodon: copy as is",
+    "subject_line_noop": "Do not copy",
     "stop_gifs": "Play-on-hover GIFs",
     "streaming": "Enable automatic streaming of new posts when scrolled to the top",
     "text": "Text",
diff --git a/src/i18n/fr.json b/src/i18n/fr.json
index cf45d9af..b76db32a 100644
--- a/src/i18n/fr.json
+++ b/src/i18n/fr.json
@@ -115,6 +115,7 @@
     "import_theme": "Charger le thème",
     "inputRadius": "Champs de texte",
     "instance_default: (default": "{value})",
+    "instance_default_simple" : "(default)",
     "interfaceLanguage": "Langue de l'interface",
     "invalid_theme_imported": "Le fichier sélectionné n'est pas un thème Pleroma pris en charge. Aucun changement n'a été apporté à votre thème.",
     "limited_availability": "Non disponible dans votre navigateur",
diff --git a/src/modules/config.js b/src/modules/config.js
index 375d0167..0d36e9bf 100644
--- a/src/modules/config.js
+++ b/src/modules/config.js
@@ -5,7 +5,7 @@ const browserLocale = (window.navigator.language || 'en').split('-')[0]
 
 const defaultState = {
   colors: {},
-  collapseMessageWithSubject: false,
+  collapseMessageWithSubject: undefined, // instance default
   hideAttachments: false,
   hideAttachmentsInConv: false,
   hideNsfw: true,
@@ -25,7 +25,9 @@ const defaultState = {
   },
   muteWords: [],
   highlight: {},
-  interfaceLanguage: browserLocale
+  interfaceLanguage: browserLocale,
+  scopeCopy: undefined, // instance default
+  subjectLineBehavior: undefined // instance default
 }
 
 const config = {
diff --git a/src/modules/instance.js b/src/modules/instance.js
index cb724821..0e67e4d1 100644
--- a/src/modules/instance.js
+++ b/src/modules/instance.js
@@ -19,6 +19,8 @@ const defaultState = {
   formattingOptionsEnabled: false,
   collapseMessageWithSubject: false,
   disableChat: false,
+  scopeCopy: false,
+  subjectLineBehavior: 'email',
 
   // Nasty stuff
   pleromaBackend: true,
diff --git a/static/config.json b/static/config.json
index 144fe951..988d1cf4 100644
--- a/static/config.json
+++ b/static/config.json
@@ -10,5 +10,7 @@
   "showInstanceSpecificPanel": false,
   "scopeOptionsEnabled": false,
   "formattingOptionsEnabled": false,
-  "collapseMessageWithSubject": false
+  "collapseMessageWithSubject": false,
+  "scopeCopy": false,
+  "subjectLineBehavior": "email"
 }

From ef968d8e1e4f3194a0856fd93bc03d8030112b12 Mon Sep 17 00:00:00 2001
From: Henry Jameson <me@hjkos.com>
Date: Tue, 25 Sep 2018 15:16:26 +0300
Subject: [PATCH 09/60] now it actually works

---
 src/components/post_status_form/post_status_form.js | 10 ++++++++--
 src/components/settings/settings.vue                |  6 +++---
 src/components/status/status.js                     | 10 ++++++++--
 src/components/status/status.vue                    |  2 +-
 src/modules/instance.js                             |  2 +-
 5 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js
index a84e764c..804c4bc2 100644
--- a/src/components/post_status_form/post_status_form.js
+++ b/src/components/post_status_form/post_status_form.js
@@ -24,7 +24,7 @@ const PostStatusForm = {
     'replyTo',
     'repliedUser',
     'attentions',
-    'messageScope',
+    'copyMessageScope',
     'subject'
   ],
   components: {
@@ -46,6 +46,12 @@ const PostStatusForm = {
       statusText = buildMentionsString({ user: this.repliedUser, attentions: this.attentions }, currentUser)
     }
 
+    console.log(this.copyMessageScope)
+    const scope = (this.copyMessageScope && this.$store.state.config.copyScope || this.copyMessageScope === 'direct')
+          ? this.copyMessageScope
+          : this.$store.state.users.currentUser.default_scope
+
+    console.log(this)
     return {
       dropFiles: [],
       submitDisabled: false,
@@ -58,7 +64,7 @@ const PostStatusForm = {
         contentType: 'text/plain',
         nsfw: false,
         files: [],
-        visibility: this.messageScope || this.$store.state.users.currentUser.default_scope
+        visibility: scope
       },
       caret: 0
     }
diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue
index f9e7d711..5a5b2fb4 100644
--- a/src/components/settings/settings.vue
+++ b/src/components/settings/settings.vue
@@ -70,15 +70,15 @@
                   <select id="subjectLineBehavior" v-model="subjectLineBehaviorLocal">
                     <option value="email">
                       {{$t('settings.subject_line_email')}}
-                      {{subjectLineBehaviorLocal == 'email' ? $t('settings.instance_default_simple') : ''}}
+                      {{subjectLineBehaviorDefault == 'email' ? $t('settings.instance_default_simple') : ''}}
                     </option>
                     <option value="masto">
                       {{$t('settings.subject_line_mastodon')}}
-                      {{subjectLineBehaviorLocal == 'mastodon' ? $t('settings.instance_default_simple') : ''}}
+                      {{subjectLineBehaviorDefault == 'mastodon' ? $t('settings.instance_default_simple') : ''}}
                     </option>
                     <option value="noop">
                       {{$t('settings.subject_line_noop')}}
-                      {{subjectLineBehaviorLocal == 'noop' ? $t('settings.instance_default_simple') : ''}}
+                      {{subjectLineBehaviorDefault == 'noop' ? $t('settings.instance_default_simple') : ''}}
                     </option>
                   </select>
                   <i class="icon-down-open"/>
diff --git a/src/components/status/status.js b/src/components/status/status.js
index 45f5ccac..38cfc5ae 100644
--- a/src/components/status/status.js
+++ b/src/components/status/status.js
@@ -174,10 +174,16 @@ const Status = {
       return true
     },
     replySubject () {
-      if (this.status.summary && !this.status.summary.match(/^re[: ]/i)) {
+      if (!this.status.summary) return '';
+      const behavior = this.$store.state.config.subjectLineBehavior
+      const startsWithRe = this.status.summary.match(/^re[: ]/i)
+      if (behavior !== 'noop' && startsWithRe || behavior === 'masto') {
+        return this.status.summary
+      } else if (behavior === 'email') {
         return 're: '.concat(this.status.summary)
+      } else if (behavior === 'noop') {
+        return ''
       }
-      return this.status.summary
     },
     attachmentSize () {
       if ((this.$store.state.config.hideAttachments && !this.inConversation) ||
diff --git a/src/components/status/status.vue b/src/components/status/status.vue
index eb521280..8087d392 100644
--- a/src/components/status/status.vue
+++ b/src/components/status/status.vue
@@ -106,7 +106,7 @@
       </div>
       <div class="container" v-if="replying">
         <div class="reply-left"/>
-        <post-status-form class="reply-body" :reply-to="status.id" :attentions="status.attentions" :repliedUser="status.user" :message-scope="status.visibility" :subject="replySubject" v-on:posted="toggleReplying"/>
+        <post-status-form class="reply-body" :reply-to="status.id" :attentions="status.attentions" :repliedUser="status.user" :copy-message-scope="status.visibility" :subject="replySubject" v-on:posted="toggleReplying"/>
       </div>
     </template>
   </div>
diff --git a/src/modules/instance.js b/src/modules/instance.js
index 0e67e4d1..58913060 100644
--- a/src/modules/instance.js
+++ b/src/modules/instance.js
@@ -19,7 +19,7 @@ const defaultState = {
   formattingOptionsEnabled: false,
   collapseMessageWithSubject: false,
   disableChat: false,
-  scopeCopy: false,
+  scopeCopy: true,
   subjectLineBehavior: 'email',
 
   // Nasty stuff

From d5e82625d3e14ed22224de871e732f8b6db9df59 Mon Sep 17 00:00:00 2001
From: Henry Jameson <me@hjkos.com>
Date: Tue, 25 Sep 2018 15:21:47 +0300
Subject: [PATCH 10/60] lint fix

---
 src/components/status/status.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/components/status/status.js b/src/components/status/status.js
index 38cfc5ae..9c224ce3 100644
--- a/src/components/status/status.js
+++ b/src/components/status/status.js
@@ -174,7 +174,7 @@ const Status = {
       return true
     },
     replySubject () {
-      if (!this.status.summary) return '';
+      if (!this.status.summary) return ''
       const behavior = this.$store.state.config.subjectLineBehavior
       const startsWithRe = this.status.summary.match(/^re[: ]/i)
       if (behavior !== 'noop' && startsWithRe || behavior === 'masto') {

From b66d7901f175fcc415f1979dc8fd776dcda9ba79 Mon Sep 17 00:00:00 2001
From: Henry Jameson <me@hjkos.com>
Date: Tue, 25 Sep 2018 16:31:06 +0300
Subject: [PATCH 11/60] forgot to actually handle the instance config. this
 part needs a rewrite...

---
 src/main.js | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/main.js b/src/main.js
index 367db881..76a32bf2 100644
--- a/src/main.js
+++ b/src/main.js
@@ -110,6 +110,8 @@ window.fetch('/api/statusnet/config.json')
         var scopeOptionsEnabled = (config.scopeOptionsEnabled)
         var formattingOptionsEnabled = (config.formattingOptionsEnabled)
         var collapseMessageWithSubject = (config.collapseMessageWithSubject)
+        var scopeCopy = (config.scopeCopy)
+        var subjectLineBehavior = (config.subjectLineBehavior)
 
         store.dispatch('setInstanceOption', { name: 'theme', value: theme })
         store.dispatch('setInstanceOption', { name: 'background', value: background })
@@ -122,6 +124,8 @@ window.fetch('/api/statusnet/config.json')
         store.dispatch('setInstanceOption', { name: 'scopeOptionsEnabled', value: scopeOptionsEnabled })
         store.dispatch('setInstanceOption', { name: 'formattingOptionsEnabled', value: formattingOptionsEnabled })
         store.dispatch('setInstanceOption', { name: 'collapseMessageWithSubject', value: collapseMessageWithSubject })
+        store.dispatch('setInstanceOption', { name: 'scopeCopy', value: scopeCopy })
+        store.dispatch('setInstanceOption', { name: 'subjectLineBehavior', value: subjectLineBehavior })
         if (chatDisabled) {
           store.dispatch('disableChat')
         }

From 0beba08618e39a1301a51fc5750f65f169baae29 Mon Sep 17 00:00:00 2001
From: fadelkon <fadelkon@posteo.net>
Date: Tue, 2 Oct 2018 20:31:02 +0200
Subject: [PATCH 12/60] Add placeholder catalan translation file to be able to
 see the work in progress in further commits

---
 src/i18n/ca.json | 199 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 199 insertions(+)
 create mode 100644 src/i18n/ca.json

diff --git a/src/i18n/ca.json b/src/i18n/ca.json
new file mode 100644
index 00000000..b3cb6598
--- /dev/null
+++ b/src/i18n/ca.json
@@ -0,0 +1,199 @@
+{
+  "chat": {
+    "title": "Chat"
+  },
+  "features_panel": {
+    "chat": "Chat",
+    "gopher": "Gopher",
+    "media_proxy": "Media proxy",
+    "scope_options": "Scope options",
+    "text_limit": "Text limit",
+    "title": "Features",
+    "who_to_follow": "Who to follow"
+  },
+  "finder": {
+    "error_fetching_user": "Error fetching user",
+    "find_user": "Find user"
+  },
+  "general": {
+    "apply": "Apply",
+    "submit": "Submit"
+  },
+  "login": {
+    "login": "Log in",
+    "logout": "Log out",
+    "password": "Password",
+    "placeholder": "e.g. lain",
+    "register": "Register",
+    "username": "Username"
+  },
+  "nav": {
+    "chat": "Local Chat",
+    "friend_requests": "Follow Requests",
+    "mentions": "Mentions",
+    "public_tl": "Public Timeline",
+    "timeline": "Timeline",
+    "twkn": "The Whole Known Network"
+  },
+  "notifications": {
+    "broken_favorite": "Unknown status, searching for it...",
+    "favorited_you": "favorited your status",
+    "followed_you": "followed you",
+    "load_older": "Load older notifications",
+    "notifications": "Notifications",
+    "read": "Read!",
+    "repeated_you": "repeated your status"
+  },
+  "post_status": {
+    "account_not_locked_warning": "Your account is not {0}. Anyone can follow you to view your follower-only posts.",
+    "account_not_locked_warning_link": "locked",
+    "attachments_sensitive": "Mark attachments as sensitive",
+    "content_type": {
+      "plain_text": "Plain text"
+    },
+    "content_warning": "Subject (optional)",
+    "default": "Just landed in L.A.",
+    "direct_warning": "This post will only be visible to all the mentioned users.",
+    "posting": "Posting",
+    "scope": {
+      "direct": "Direct - Post to mentioned users only",
+      "private": "Followers-only - Post to followers only",
+      "public": "Public - Post to public timelines",
+      "unlisted": "Unlisted - Do not post to public timelines"
+    }
+  },
+  "registration": {
+    "bio": "Bio",
+    "email": "Email",
+    "fullname": "Display name",
+    "password_confirm": "Password confirmation",
+    "registration": "Registration",
+    "token": "Invite token"
+  },
+  "settings": {
+    "attachmentRadius": "Attachments",
+    "attachments": "Attachments",
+    "autoload": "Enable automatic loading when scrolled to the bottom",
+    "avatar": "Avatar",
+    "avatarAltRadius": "Avatars (Notifications)",
+    "avatarRadius": "Avatars",
+    "background": "Background",
+    "bio": "Bio",
+    "btnRadius": "Buttons",
+    "cBlue": "Blue (Reply, follow)",
+    "cGreen": "Green (Retweet)",
+    "cOrange": "Orange (Favorite)",
+    "cRed": "Red (Cancel)",
+    "change_password": "Change Password",
+    "change_password_error": "There was an issue changing your password.",
+    "changed_password": "Password changed successfully!",
+    "collapse_subject": "Collapse posts with subjects",
+    "confirm_new_password": "Confirm new password",
+    "current_avatar": "Your current avatar",
+    "current_password": "Current password",
+    "current_profile_banner": "Your current profile banner",
+    "data_import_export_tab": "Data Import / Export",
+    "default_vis": "Default visibility scope",
+    "delete_account": "Delete Account",
+    "delete_account_description": "Permanently delete your account and all your messages.",
+    "delete_account_error": "There was an issue deleting your account. If this persists please contact your instance administrator.",
+    "delete_account_instructions": "Type your password in the input below to confirm account deletion.",
+    "export_theme": "Save preset",
+    "filtering": "Filtering",
+    "filtering_explanation": "All statuses containing these words will be muted, one per line",
+    "follow_export": "Follow export",
+    "follow_export_button": "Export your follows to a csv file",
+    "follow_export_processing": "Processing, you'll soon be asked to download your file",
+    "follow_import": "Follow import",
+    "follow_import_error": "Error importing followers",
+    "follows_imported": "Follows imported! Processing them will take a while.",
+    "foreground": "Foreground",
+    "general": "General",
+    "hide_attachments_in_convo": "Hide attachments in conversations",
+    "hide_attachments_in_tl": "Hide attachments in timeline",
+    "import_followers_from_a_csv_file": "Import follows from a csv file",
+    "import_theme": "Load preset",
+    "inputRadius": "Input fields",
+    "instance_default": "(default: {value})",
+    "interfaceLanguage": "Interface language",
+    "invalid_theme_imported": "The selected file is not a supported Pleroma theme. No changes to your theme were made.",
+    "limited_availability": "Unavailable in your browser",
+    "links": "Links",
+    "lock_account_description": "Restrict your account to approved followers only",
+    "loop_video": "Loop videos",
+    "loop_video_silent_only": "Loop only videos without sound (i.e. Mastodon's \"gifs\")",
+    "name": "Name",
+    "name_bio": "Name & Bio",
+    "new_password": "New password",
+    "notification_visibility": "Types of notifications to show",
+    "notification_visibility_follows": "Follows",
+    "notification_visibility_likes": "Likes",
+    "notification_visibility_mentions": "Mentions",
+    "notification_visibility_repeats": "Repeats",
+    "no_rich_text_description": "Strip rich text formatting from all posts",
+    "nsfw_clickthrough": "Enable clickthrough NSFW attachment hiding",
+    "panelRadius": "Panels",
+    "pause_on_unfocused": "Pause streaming when tab is not focused",
+    "presets": "Presets",
+    "profile_background": "Profile Background",
+    "profile_banner": "Profile Banner",
+    "profile_tab": "Profile",
+    "radii_help": "Set up interface edge rounding (in pixels)",
+    "replies_in_timeline": "Replies in timeline",
+    "reply_link_preview": "Enable reply-link preview on mouse hover",
+    "reply_visibility_all": "Show all replies",
+    "reply_visibility_following": "Only show replies directed at me or users I'm following",
+    "reply_visibility_self": "Only show replies directed at me",
+    "saving_err": "Error saving settings",
+    "saving_ok": "Settings saved",
+    "security_tab": "Security",
+    "set_new_avatar": "Set new avatar",
+    "set_new_profile_background": "Set new profile background",
+    "set_new_profile_banner": "Set new profile banner",
+    "settings": "Settings",
+    "stop_gifs": "Play-on-hover GIFs",
+    "streaming": "Enable automatic streaming of new posts when scrolled to the top",
+    "text": "Text",
+    "theme": "Theme",
+    "theme_help": "Use hex color codes (#rrggbb) to customize your color theme.",
+    "tooltipRadius": "Tooltips/alerts",
+    "user_settings": "User Settings",
+    "values": {
+      "false": "no",
+      "true": "yes"
+    }
+  },
+  "timeline": {
+    "collapse": "Collapse",
+    "conversation": "Conversation",
+    "error_fetching": "Error fetching updates",
+    "load_older": "Load older statuses",
+    "no_retweet_hint": "Post is marked as followers-only or direct and cannot be repeated",
+    "repeated": "repeated",
+    "show_new": "Show new",
+    "up_to_date": "Up-to-date"
+  },
+  "user_card": {
+    "approve": "Approve",
+    "block": "Block",
+    "blocked": "Blocked!",
+    "deny": "Deny",
+    "follow": "Follow",
+    "followees": "Following",
+    "followers": "Followers",
+    "following": "Following!",
+    "follows_you": "Follows you!",
+    "mute": "Mute",
+    "muted": "Muted",
+    "per_day": "per day",
+    "remote_follow": "Remote follow",
+    "statuses": "Statuses"
+  },
+  "user_profile": {
+    "timeline_title": "User Timeline"
+  },
+  "who_to_follow": {
+    "more": "More",
+    "who_to_follow": "Who to follow"
+  }
+}

From f8323b72aef2a4cbcb9edb162ea7f13ea56a3271 Mon Sep 17 00:00:00 2001
From: fadelkon <fadelkon@posteo.net>
Date: Tue, 2 Oct 2018 20:33:07 +0200
Subject: [PATCH 13/60] Translate some strings to catalan. Most part of block
 "settings" is not translated yet

---
 src/i18n/ca.json | 166 +++++++++++++++++++++++------------------------
 1 file changed, 83 insertions(+), 83 deletions(-)

diff --git a/src/i18n/ca.json b/src/i18n/ca.json
index b3cb6598..98e8fe41 100644
--- a/src/i18n/ca.json
+++ b/src/i18n/ca.json
@@ -1,90 +1,90 @@
 {
   "chat": {
-    "title": "Chat"
+    "title": "Xat"
   },
   "features_panel": {
-    "chat": "Chat",
+    "chat": "Xat",
     "gopher": "Gopher",
-    "media_proxy": "Media proxy",
-    "scope_options": "Scope options",
-    "text_limit": "Text limit",
-    "title": "Features",
-    "who_to_follow": "Who to follow"
+    "media_proxy": "Proxy per multimèdia",
+    "scope_options": "Opcions d'àbast",
+    "text_limit": "Límit de text",
+    "title": "Funcionalitats",
+    "who_to_follow": "A qui seguir"
   },
   "finder": {
-    "error_fetching_user": "Error fetching user",
+    "error_fetching_user": "Hi ha hagut un error en carregar l'usuari/a",
     "find_user": "Find user"
   },
   "general": {
-    "apply": "Apply",
-    "submit": "Submit"
+    "apply": "Aplica",
+    "submit": "Desa"
   },
   "login": {
-    "login": "Log in",
-    "logout": "Log out",
-    "password": "Password",
-    "placeholder": "e.g. lain",
-    "register": "Register",
-    "username": "Username"
+    "login": "Inicia sessió",
+    "logout": "Tanca la sessió",
+    "password": "Contrasenya",
+    "placeholder": "p.ex.: Maria",
+    "register": "Registra't",
+    "username": "Nom d'usuari/a"
   },
   "nav": {
-    "chat": "Local Chat",
+    "chat": "Xat local públic",
     "friend_requests": "Follow Requests",
-    "mentions": "Mentions",
-    "public_tl": "Public Timeline",
-    "timeline": "Timeline",
-    "twkn": "The Whole Known Network"
+    "mentions": "Mencions",
+    "public_tl": "Flux públic del node",
+    "timeline": "Flux personal",
+    "twkn": "Tota la xarxa coneguda"
   },
   "notifications": {
-    "broken_favorite": "Unknown status, searching for it...",
-    "favorited_you": "favorited your status",
-    "followed_you": "followed you",
-    "load_older": "Load older notifications",
-    "notifications": "Notifications",
+    "broken_favorite": "No es coneix aquest estat. S'està cercant.",
+    "favorited_you": "ha marcat un estat teu",
+    "followed_you": "ha començat a seguir-te",
+    "load_older": "Carrega més notificacions",
+    "notifications": "Notificacions",
     "read": "Read!",
-    "repeated_you": "repeated your status"
+    "repeated_you": "ha repetit el teu estat"
   },
   "post_status": {
-    "account_not_locked_warning": "Your account is not {0}. Anyone can follow you to view your follower-only posts.",
-    "account_not_locked_warning_link": "locked",
-    "attachments_sensitive": "Mark attachments as sensitive",
+    "account_not_locked_warning": "El teu compte no està {0}. Qualsevol persona pot seguir-te per llegir les teves entrades reservades només a seguidores.",
+    "account_not_locked_warning_link": "bloquejat",
+    "attachments_sensitive": "Marca l'adjunt com a delicat",
     "content_type": {
-      "plain_text": "Plain text"
+      "plain_text": "Text pla"
     },
-    "content_warning": "Subject (optional)",
-    "default": "Just landed in L.A.",
-    "direct_warning": "This post will only be visible to all the mentioned users.",
-    "posting": "Posting",
+    "content_warning": "Assumpte (opcional)",
+    "default": "Em sento",
+    "direct_warning": "Aquesta entrada només serà visible per les usuràries que etiquetis",
+    "posting": "Publicació",
     "scope": {
-      "direct": "Direct - Post to mentioned users only",
-      "private": "Followers-only - Post to followers only",
-      "public": "Public - Post to public timelines",
-      "unlisted": "Unlisted - Do not post to public timelines"
+      "direct": "Directa - Publica només per les usuàries etiquetades",
+      "private": "Només seguidors/es - Publica només per comptes que et segueixin",
+      "public": "Pública - Publica als fluxos públics",
+      "unlisted": "Silenciosa - No la mostris en fluxos públics"
     }
   },
   "registration": {
-    "bio": "Bio",
-    "email": "Email",
-    "fullname": "Display name",
-    "password_confirm": "Password confirmation",
-    "registration": "Registration",
-    "token": "Invite token"
+    "bio": "Sobre mi",
+    "email": "Correu",
+    "fullname": "Nom per mostrar",
+    "password_confirm": "Confirma la contrasenya",
+    "registration": "Registra't",
+    "token": "Codi d'invitació"
   },
   "settings": {
-    "attachmentRadius": "Attachments",
-    "attachments": "Attachments",
-    "autoload": "Enable automatic loading when scrolled to the bottom",
+    "attachmentRadius": "Adjunts",
+    "attachments": "Adjunts",
+    "autoload": "Recarrega automàticament en arribar a sota de tot.",
     "avatar": "Avatar",
-    "avatarAltRadius": "Avatars (Notifications)",
+    "avatarAltRadius": "Avatars (notificacions)",
     "avatarRadius": "Avatars",
-    "background": "Background",
-    "bio": "Bio",
-    "btnRadius": "Buttons",
-    "cBlue": "Blue (Reply, follow)",
-    "cGreen": "Green (Retweet)",
-    "cOrange": "Orange (Favorite)",
-    "cRed": "Red (Cancel)",
-    "change_password": "Change Password",
+    "background": "Imatge de fons",
+    "bio": "Sobre l'usuària",
+    "btnRadius": "Botons",
+    "cBlue": "Blau (Respon, segueix)",
+    "cGreen": "Verd (Republica)",
+    "cOrange": "Taronja (Marca com a preferit)",
+    "cRed": "Red (Canceŀla",
+    "change_password": "Chanvia la contrasenya",
     "change_password_error": "There was an issue changing your password.",
     "changed_password": "Password changed successfully!",
     "collapse_subject": "Collapse posts with subjects",
@@ -157,43 +157,43 @@
     "theme": "Theme",
     "theme_help": "Use hex color codes (#rrggbb) to customize your color theme.",
     "tooltipRadius": "Tooltips/alerts",
-    "user_settings": "User Settings",
+    "user_settings": "Configuració personal",
     "values": {
       "false": "no",
-      "true": "yes"
+      "true": "sí"
     }
   },
   "timeline": {
-    "collapse": "Collapse",
-    "conversation": "Conversation",
-    "error_fetching": "Error fetching updates",
-    "load_older": "Load older statuses",
-    "no_retweet_hint": "Post is marked as followers-only or direct and cannot be repeated",
-    "repeated": "repeated",
-    "show_new": "Show new",
-    "up_to_date": "Up-to-date"
+    "collapse": "Amaga",
+    "conversation": "Conversa",
+    "error_fetching": "S'ha produït un error en carregar els estats",
+    "load_older": "Carrera estats anteriors",
+    "no_retweet_hint": "L'entrada és només per a seguidores o \"directa\" i no es pot republicar",
+    "repeated": "repetit",
+    "show_new": "Mostra els nous",
+    "up_to_date": "Actualitzat"
   },
   "user_card": {
-    "approve": "Approve",
-    "block": "Block",
-    "blocked": "Blocked!",
-    "deny": "Deny",
-    "follow": "Follow",
-    "followees": "Following",
-    "followers": "Followers",
-    "following": "Following!",
-    "follows_you": "Follows you!",
-    "mute": "Mute",
-    "muted": "Muted",
-    "per_day": "per day",
-    "remote_follow": "Remote follow",
-    "statuses": "Statuses"
+    "approve": "Aprova",
+    "block": "Bloqueja",
+    "blocked": "Bloquejat!",
+    "deny": "Denega",
+    "follow": "Segueix",
+    "followees": "Segueixo",
+    "followers": "Seguidors/es",
+    "following": "Seguint!",
+    "follows_you": "Et segueix!",
+    "mute": "Silencia",
+    "muted": "Silenciat",
+    "per_day": "per dia",
+    "remote_follow": "Seguiment remot",
+    "statuses": "Estats"
   },
   "user_profile": {
-    "timeline_title": "User Timeline"
+    "timeline_title": "Flux personal"
   },
   "who_to_follow": {
     "more": "More",
-    "who_to_follow": "Who to follow"
+    "who_to_follow": "A qui seguir"
   }
 }

From 59dec1b43f5465f484a0afea95a411a705dcb29e Mon Sep 17 00:00:00 2001
From: fadelkon <fadelkon@posteo.net>
Date: Sat, 13 Oct 2018 18:17:00 +0200
Subject: [PATCH 14/60] =?UTF-8?q?Finish=20general=20and=20timeago=20catala?=
 =?UTF-8?q?n=20strings.=20Glossary:=20*=20bio:=20presentaci=C3=B3=20*=20ti?=
 =?UTF-8?q?meline:=20flux=20[d'entrades]=20*=20post/status:=20entrada=20*?=
 =?UTF-8?q?=20settings:=20configuraci=C3=B3=20*=20user:=20usuari/a=20*=20u?=
 =?UTF-8?q?sers:=20usu=C3=A0ries=20*=20background:=20fons=20de=20pantalla?=
 =?UTF-8?q?=20*=20banner:=20fons=20de=20perfil=20*=20follower:=20seguidor/?=
 =?UTF-8?q?a=20*=20follow:=20contacte/a=20qui=20segueixo=20*=20avatar:=20a?=
 =?UTF-8?q?vatar=20*=20[visibility]=20scope:=20abast=20de=20la=20publicaci?=
 =?UTF-8?q?=C3=B3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Translation based on https://www.softcatala.org/guia-estil-de-softcatala/convencions-de-format/ and http://www.termcat.cat/ca/Cercaterm/ .
---
 src/i18n/ca.json       | 170 ++++++++++++++++++++---------------------
 static/timeago-ca.json |  10 +++
 2 files changed, 95 insertions(+), 85 deletions(-)
 create mode 100644 static/timeago-ca.json

diff --git a/src/i18n/ca.json b/src/i18n/ca.json
index 98e8fe41..d4224691 100644
--- a/src/i18n/ca.json
+++ b/src/i18n/ca.json
@@ -6,13 +6,13 @@
     "chat": "Xat",
     "gopher": "Gopher",
     "media_proxy": "Proxy per multimèdia",
-    "scope_options": "Opcions d'àbast",
+    "scope_options": "Opcions d'abast i visibilitat",
     "text_limit": "Límit de text",
     "title": "Funcionalitats",
     "who_to_follow": "A qui seguir"
   },
   "finder": {
-    "error_fetching_user": "Hi ha hagut un error en carregar l'usuari/a",
+    "error_fetching_user": "No s'ha pogut carregar l'usuari/a",
     "find_user": "Find user"
   },
   "general": {
@@ -29,11 +29,11 @@
   },
   "nav": {
     "chat": "Xat local públic",
-    "friend_requests": "Follow Requests",
+    "friend_requests": "Soŀlicituds de connexió",
     "mentions": "Mencions",
     "public_tl": "Flux públic del node",
     "timeline": "Flux personal",
-    "twkn": "Tota la xarxa coneguda"
+    "twkn": "Flux de la xarxa coneguda"
   },
   "notifications": {
     "broken_favorite": "No es coneix aquest estat. S'està cercant.",
@@ -75,88 +75,88 @@
     "attachments": "Adjunts",
     "autoload": "Recarrega automàticament en arribar a sota de tot.",
     "avatar": "Avatar",
-    "avatarAltRadius": "Avatars (notificacions)",
+    "avatarAltRadius": "Avatars en les notificacions",
     "avatarRadius": "Avatars",
-    "background": "Imatge de fons",
-    "bio": "Sobre l'usuària",
+    "background": "Fons de pantalla",
+    "bio": "Sobre l'usuari/a",
     "btnRadius": "Botons",
-    "cBlue": "Blau (Respon, segueix)",
-    "cGreen": "Verd (Republica)",
-    "cOrange": "Taronja (Marca com a preferit)",
-    "cRed": "Red (Canceŀla",
-    "change_password": "Chanvia la contrasenya",
-    "change_password_error": "There was an issue changing your password.",
-    "changed_password": "Password changed successfully!",
-    "collapse_subject": "Collapse posts with subjects",
-    "confirm_new_password": "Confirm new password",
-    "current_avatar": "Your current avatar",
-    "current_password": "Current password",
-    "current_profile_banner": "Your current profile banner",
-    "data_import_export_tab": "Data Import / Export",
-    "default_vis": "Default visibility scope",
-    "delete_account": "Delete Account",
-    "delete_account_description": "Permanently delete your account and all your messages.",
-    "delete_account_error": "There was an issue deleting your account. If this persists please contact your instance administrator.",
-    "delete_account_instructions": "Type your password in the input below to confirm account deletion.",
-    "export_theme": "Save preset",
-    "filtering": "Filtering",
-    "filtering_explanation": "All statuses containing these words will be muted, one per line",
-    "follow_export": "Follow export",
-    "follow_export_button": "Export your follows to a csv file",
-    "follow_export_processing": "Processing, you'll soon be asked to download your file",
-    "follow_import": "Follow import",
-    "follow_import_error": "Error importing followers",
-    "follows_imported": "Follows imported! Processing them will take a while.",
-    "foreground": "Foreground",
+    "cBlue": "Blau (respon, segueix)",
+    "cGreen": "Verd (republica)",
+    "cOrange": "Taronja (marca com a preferit)",
+    "cRed": "Vermell (canceŀla)",
+    "change_password": "Canvia la contrasenya",
+    "change_password_error": "No s'ha pogut canviar la contrasenya",
+    "changed_password": "S'ha canviat la contrasenya",
+    "collapse_subject": "Replega les entrades amb títol",
+    "confirm_new_password": "Confirma la nova contrasenya",
+    "current_avatar": "L'avatar actual",
+    "current_password": "La contrasenya actual",
+    "current_profile_banner": "El fons de perfil actual",
+    "data_import_export_tab": "Importa o exporta dades",
+    "default_vis": "Abast per defecte de les entrades",
+    "delete_account": "Esborra el compte",
+    "delete_account_description": "Esborra permanentment el teu compte i tots els missatges",
+    "delete_account_error": "No s'ha pogut esborrar el compte. Si continua el problema, contacta amb l'administració del node",
+    "delete_account_instructions": "Confirma que vols esborrar el compte escrivint la teva contrasenya aquí sota",
+    "export_theme": "Desa el tema",
+    "filtering": "Filtres",
+    "filtering_explanation": "Es silenciaran totes les entrades que continguin aquestes paraules. Separa-les per línies",
+    "follow_export": "Exporta la llista de contactes",
+    "follow_export_button": "Exporta tots els comptes que segueixes a un fitxer CSV",
+    "follow_export_processing": "S'està processant la petició. Aviat podràs descarregar el fitxer",
+    "follow_import": "Importa els contactes",
+    "follow_import_error": "No s'ha pogut importar els contactes",
+    "follows_imported": "S'han importat els contactes. Trigaran una estoneta en ser processats.",
+    "foreground": "Primer pla",
     "general": "General",
-    "hide_attachments_in_convo": "Hide attachments in conversations",
-    "hide_attachments_in_tl": "Hide attachments in timeline",
-    "import_followers_from_a_csv_file": "Import follows from a csv file",
-    "import_theme": "Load preset",
-    "inputRadius": "Input fields",
+    "hide_attachments_in_convo": "Amaga els adjunts en les converses",
+    "hide_attachments_in_tl": "Amaga els adjunts en el flux d'entrades",
+    "import_followers_from_a_csv_file": "Importa els contactes des d'un fitxer CSV",
+    "import_theme": "Carrega un tema",
+    "inputRadius": "Caixes d'entrada de text",
     "instance_default": "(default: {value})",
-    "interfaceLanguage": "Interface language",
-    "invalid_theme_imported": "The selected file is not a supported Pleroma theme. No changes to your theme were made.",
-    "limited_availability": "Unavailable in your browser",
-    "links": "Links",
-    "lock_account_description": "Restrict your account to approved followers only",
-    "loop_video": "Loop videos",
-    "loop_video_silent_only": "Loop only videos without sound (i.e. Mastodon's \"gifs\")",
-    "name": "Name",
-    "name_bio": "Name & Bio",
-    "new_password": "New password",
-    "notification_visibility": "Types of notifications to show",
-    "notification_visibility_follows": "Follows",
-    "notification_visibility_likes": "Likes",
-    "notification_visibility_mentions": "Mentions",
-    "notification_visibility_repeats": "Repeats",
-    "no_rich_text_description": "Strip rich text formatting from all posts",
-    "nsfw_clickthrough": "Enable clickthrough NSFW attachment hiding",
-    "panelRadius": "Panels",
-    "pause_on_unfocused": "Pause streaming when tab is not focused",
-    "presets": "Presets",
-    "profile_background": "Profile Background",
-    "profile_banner": "Profile Banner",
-    "profile_tab": "Profile",
-    "radii_help": "Set up interface edge rounding (in pixels)",
+    "interfaceLanguage": "Llengua de la interfície",
+    "invalid_theme_imported": "No s'ha entès l'arxiu carregat perquè no és un tema vàlid de Pleroma. No s'ha fet cap canvi als temes actuals.",
+    "limited_availability": "No està disponible en aquest navegador",
+    "links": "Enllaços",
+    "lock_account_description": "Restringeix el teu compte només a seguidores aprovades.",
+    "loop_video": "Reprodueix els vídeos en bucle",
+    "loop_video_silent_only": "Reprodueix en bucles només els vídeos sense so (com els \"GIF\" de Mastodon)",
+    "name": "Nom",
+    "name_bio": "Nom i presentació",
+    "new_password": "Contrasenya nova",
+    "notification_visibility": "Notifica'm quan algú",
+    "notification_visibility_follows": "Comença a seguir-me",
+    "notification_visibility_likes": "Marca com a preferida una entrada meva",
+    "notification_visibility_mentions": "Em menciona",
+    "notification_visibility_repeats": "Republica una entrada meva",
+    "no_rich_text_description": "Neteja el formatat de text de totes les entrades",
+    "nsfw_clickthrough": "Amaga el contingut NSFW darrer d'una imatge clicable",
+    "panelRadius": "Panells",
+    "pause_on_unfocused": "Pausa la reproducció en continu quan la pestanya perdi el focus",
+    "presets": "Temes",
+    "profile_background": "Fons de pantalla",
+    "profile_banner": "Fons de perfil",
+    "profile_tab": "Perfil",
+    "radii_help": "Configura l'arrodoniment de les vores (en píxels)",
     "replies_in_timeline": "Replies in timeline",
-    "reply_link_preview": "Enable reply-link preview on mouse hover",
-    "reply_visibility_all": "Show all replies",
-    "reply_visibility_following": "Only show replies directed at me or users I'm following",
-    "reply_visibility_self": "Only show replies directed at me",
-    "saving_err": "Error saving settings",
-    "saving_ok": "Settings saved",
-    "security_tab": "Security",
-    "set_new_avatar": "Set new avatar",
-    "set_new_profile_background": "Set new profile background",
-    "set_new_profile_banner": "Set new profile banner",
-    "settings": "Settings",
-    "stop_gifs": "Play-on-hover GIFs",
-    "streaming": "Enable automatic streaming of new posts when scrolled to the top",
+    "reply_link_preview": "Mostra el missatge citat en passar el ratolí per sobre de l'enllaç de resposta",
+    "reply_visibility_all": "Mostra totes les respostes",
+    "reply_visibility_following": "Mostra només les respostes a entrades meves o d'usuàries que jo segueixo",
+    "reply_visibility_self": "Mostra només les respostes a entrades meves",
+    "saving_err": "No s'ha pogut desar la configuració",
+    "saving_ok": "S'ha desat la configuració",
+    "security_tab": "Seguretat",
+    "set_new_avatar": "Canvia l'avatar",
+    "set_new_profile_background": "Canvia el fons de pantalla",
+    "set_new_profile_banner": "Canvia el fons del perfil",
+    "settings": "Configuració",
+    "stop_gifs": "Anima els GIF només en passar-hi el ratolí per sobre",
+    "streaming": "Carrega automàticament entrades noves quan estigui a dalt de tot",
     "text": "Text",
-    "theme": "Theme",
-    "theme_help": "Use hex color codes (#rrggbb) to customize your color theme.",
-    "tooltipRadius": "Tooltips/alerts",
+    "theme": "Tema",
+    "theme_help": "Personalitza els colors del tema. Escriu-los en format RGB hexadecimal (#rrggbb)",
+    "tooltipRadius": "Missatges sobreposats",
     "user_settings": "Configuració personal",
     "values": {
       "false": "no",
@@ -164,12 +164,12 @@
     }
   },
   "timeline": {
-    "collapse": "Amaga",
+    "collapse": "Replega",
     "conversation": "Conversa",
-    "error_fetching": "S'ha produït un error en carregar els estats",
-    "load_older": "Carrera estats anteriors",
-    "no_retweet_hint": "L'entrada és només per a seguidores o \"directa\" i no es pot republicar",
-    "repeated": "repetit",
+    "error_fetching": "S'ha produït un error en carregar les entrades",
+    "load_older": "Carrega entrades anteriors",
+    "no_retweet_hint": "L'entrada és només per a seguidores o és \"directa\", i per tant no es pot republicar",
+    "repeated": "republicat",
     "show_new": "Mostra els nous",
     "up_to_date": "Actualitzat"
   },
diff --git a/static/timeago-ca.json b/static/timeago-ca.json
new file mode 100644
index 00000000..d6fca3be
--- /dev/null
+++ b/static/timeago-ca.json
@@ -0,0 +1,10 @@
+[
+  "ara mateix",
+  ["fa %ss",  "fa %ss"],
+  ["fa %smin","fa %smin"],
+  ["fa %sh",  "fa %sh"],
+  ["fa %sd",  "fa %sd"],
+  ["fa %sw",  "fa %sw"],
+  ["fa %smo", "fa %smo"],
+  ["fa %sy",  "fa %sy"]
+]

From 7c4790d1bc730ffaf5f36c2425516878cef544c9 Mon Sep 17 00:00:00 2001
From: morguldir <morguldir@protonmail.com>
Date: Sun, 14 Oct 2018 06:22:04 +0200
Subject: [PATCH 15/60] Update norwegian translation

---
 src/i18n/nb.json | 98 +++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 89 insertions(+), 9 deletions(-)

diff --git a/src/i18n/nb.json b/src/i18n/nb.json
index a95879b7..0f4dca58 100644
--- a/src/i18n/nb.json
+++ b/src/i18n/nb.json
@@ -1,6 +1,15 @@
 {
   "chat": {
-    "title": "Chat"
+    "title": "Nettprat"
+  },
+  "features_panel": {
+    "chat": "Nettprat",
+    "gopher": "Gopher",
+    "media_proxy": "Media proxy",
+    "scope_options": "Velg mottakere",
+    "text_limit": "Tekst-grense",
+    "title": "Egenskaper",
+    "who_to_follow": "Hvem å følge"
   },
   "finder": {
     "error_fetching_user": "Feil ved henting av bruker",
@@ -8,7 +17,7 @@
   },
   "general": {
     "apply": "Bruk",
-    "submit": "Legg ut"
+    "submit": "Send"
   },
   "login": {
     "login": "Logg inn",
@@ -19,29 +28,47 @@
     "username": "Brukernavn"
   },
   "nav": {
-    "chat": "Lokal Chat",
+    "chat": "Lokal nettprat",
+    "friend_requests": "Følgeforespørsler",
     "mentions": "Nevnt",
     "public_tl": "Offentlig Tidslinje",
     "timeline": "Tidslinje",
     "twkn": "Det hele kjente nettverket"
   },
   "notifications": {
+    "broken_favorite": "Ukjent status, leter etter den...",
     "favorited_you": "likte din status",
     "followed_you": "fulgte deg",
+    "load_older": "Last eldre varsler",
     "notifications": "Varslinger",
     "read": "Les!",
     "repeated_you": "Gjentok din status"
   },
   "post_status": {
+    "account_not_locked_warning": "Kontoen din er ikke {0}. Hvem som helst kan følge deg for å se dine statuser til følgere",
+    "account_not_locked_warning_link": "låst",
+    "attachments_sensitive": "Merk vedlegg som sensitive",
+    "content_type": {
+      "plain_text": "Klar tekst"
+    },
+    "content_warning": "Tema (valgfritt)",
     "default": "Landet akkurat i L.A.",
-    "posting": "Publiserer"
+    "direct_warning": "Denne statusen vil kun bli sett av nevnte brukere",
+    "posting": "Publiserer",
+    "scope": {
+      "direct": "Direkte, publiser bare til nevnte brukere",
+      "private": "Bare følgere, publiser bare til brukere som følger deg",
+      "public": "Offentlig, publiser til offentlige tidslinjer",
+      "unlisted": "Uoppført, ikke publiser til offentlige tidslinjer"
+    }
   },
   "registration": {
     "bio": "Biografi",
     "email": "Epost-adresse",
     "fullname": "Visningsnavn",
     "password_confirm": "Bekreft passord",
-    "registration": "Registrering"
+    "registration": "Registrering",
+    "token": "Invitasjons-bevis"
   },
   "settings": {
     "attachmentRadius": "Vedlegg",
@@ -57,27 +84,69 @@
     "cGreen": "Grønn (Gjenta)",
     "cOrange": "Oransje (Lik)",
     "cRed": "Rød (Avbryt)",
+    "change_password": "Endre passord",
+    "change_password_error": "Feil ved endring av passord",
+    "changed_password": "Passord endret",
+    "collapse_subject": "Sammenfold statuser med tema",
+    "confirm_new_password": "Bekreft nytt passord",
     "current_avatar": "Ditt nåværende profilbilde",
+    "current_password": "Nåværende passord",
     "current_profile_banner": "Din nåværende profil-banner",
+    "data_import_export_tab": "Data import / eksport",
+    "default_vis": "Standard visnings-omfang",
+    "delete_account": "Slett konto",
+    "delete_account_description": "Slett din konto og alle dine statuser",
+    "delete_account_error": "Det oppsto et problem ved sletting av kontoen din, hvis dette problemet forblir kontakt din administrator",
+    "delete_account_instructions": "Skriv inn ditt passord i feltet nedenfor for å bekrefte sletting av konto",
+    "export_theme": "Lagre tema",
     "filtering": "Filtrering",
     "filtering_explanation": "Alle statuser som inneholder disse ordene vil bli dempet, en kombinasjon av tegn per linje",
+    "follow_export": "Eksporter følginger",
+    "follow_export_button": "Eksporter følgingene dine til en .csv fil",
+    "follow_export_processing": "Jobber, du vil snart bli spurt om å laste ned filen din.",
     "follow_import": "Importer følginger",
     "follow_import_error": "Feil ved importering av følginger.",
-    "follows_imported": "Følginger imported! Det vil ta litt tid å behandle de.",
-    "foreground": "Framgrunn",
+    "follows_imported": "Følginger importert! Behandling vil ta litt tid.",
+    "foreground": "Forgrunn",
+    "general": "Generell",
     "hide_attachments_in_convo": "Gjem vedlegg i samtaler",
     "hide_attachments_in_tl": "Gjem vedlegg på tidslinje",
     "import_followers_from_a_csv_file": "Importer følginger fra en csv fil",
+    "import_theme": "Last tema",
+    "inputRadius": "Input felt",
+    "instance_default": "(standard: {value})",
+    "interfaceLanguage": "Grensesnitt-språk",
+    "invalid_theme_imported": "Den valgte filen er ikke ett støttet Pleroma-tema, ingen endringer til ditt tema ble gjort",
+    "limited_availability": "Ikke tilgjengelig i din nettleser",
     "links": "Linker",
+    "lock_account_description": "Begrens din konto til bare godkjente følgere",
+    "loop_video": "Gjenta videoer",
+    "loop_video_silent_only": "Gjenta bare videoer uten lyd, (for eksempel Mastodon sine \"gifs\")",
     "name": "Navn",
     "name_bio": "Navn & Biografi",
+    "new_password": "Nytt passord",
+    "notification_visibility": "Typer varsler som skal vises",
+    "notification_visibility_follows": "Følginger",
+    "notification_visibility_likes": "Likes",
+    "notification_visibility_mentions": "Nevnt",
+    "notification_visibility_repeats": "Gjentakelser",
+    "no_rich_text_description": "Fjern all formatering fra statuser",
     "nsfw_clickthrough": "Krev trykk for å vise statuser som kan være upassende",
     "panelRadius": "Panel",
-    "presets": "Forhåndsdefinerte fargekoder",
+    "pause_on_unfocused": "Stopp henting av poster når vinduet ikke er i fokus",
+    "presets": "Forhåndsdefinerte tema",
     "profile_background": "Profil-bakgrunn",
     "profile_banner": "Profil-banner",
+    "profile_tab": "Profil",
     "radii_help": "Bestem hvor runde hjørnene i brukergrensesnittet skal være (i piksler)",
+    "replies_in_timeline": "Svar på tidslinje",
     "reply_link_preview": "Vis en forhåndsvisning når du holder musen over svar til en status",
+    "reply_visibility_all": "Vis alle svar",
+    "reply_visibility_following": "Vis bare svar som er til meg eller folk jeg følger",
+    "reply_visibility_self": "Vis bare svar som er til meg",
+    "saving_err": "Feil ved lagring av innstillinger",
+    "saving_ok": "Innstillinger lagret",
+    "security_tab": "Sikkerhet",
     "set_new_avatar": "Rediger profilbilde",
     "set_new_profile_background": "Rediger profil-bakgrunn",
     "set_new_profile_banner": "Sett ny profil-banner",
@@ -88,20 +157,27 @@
     "theme": "Tema",
     "theme_help": "Bruk heksadesimale fargekoder (#rrggbb) til å endre farge-temaet ditt.",
     "tooltipRadius": "Verktøytips/advarsler",
-    "user_settings": "Brukerinstillinger"
+    "user_settings": "Brukerinstillinger",
+    "values": {
+      "false": "nei",
+      "true": "ja"
+    }
   },
   "timeline": {
     "collapse": "Sammenfold",
     "conversation": "Samtale",
     "error_fetching": "Feil ved henting av oppdateringer",
     "load_older": "Last eldre statuser",
+    "no_retweet_hint": "Status er markert som bare til følgere eller direkte og kan ikke gjentas",
     "repeated": "gjentok",
     "show_new": "Vis nye",
     "up_to_date": "Oppdatert"
   },
   "user_card": {
+    "approve": "Godkjenn",
     "block": "Blokker",
     "blocked": "Blokkert!",
+    "deny": "Avslå",
     "follow": "Følg",
     "followees": "Følger",
     "followers": "Følgere",
@@ -115,5 +191,9 @@
   },
   "user_profile": {
     "timeline_title": "Bruker-tidslinje"
+  },
+  "who_to_follow": {
+    "more": "Mer",
+    "who_to_follow": "Hvem å følge"
   }
 }

From 0c2f4b925ebda9ce9d172c9ec26e16d88bcff95f Mon Sep 17 00:00:00 2001
From: fadelkon <fadelkon@posteo.net>
Date: Sun, 14 Oct 2018 11:25:20 +0200
Subject: [PATCH 16/60] Add catalan require to messages.js

---
 src/i18n/messages.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/i18n/messages.js b/src/i18n/messages.js
index 3a2da643..6e304ccd 100644
--- a/src/i18n/messages.js
+++ b/src/i18n/messages.js
@@ -23,7 +23,8 @@ const messages = {
   pt: require('./pt.json'),
   ru: require('./ru.json'),
   nb: require('./nb.json'),
-  he: require('./he.json')
+  he: require('./he.json'),
+  ca: require('./ca.json')
 }
 
 export default messages

From 2bb663f0f6925082087ec08c4a28ab9e661bae96 Mon Sep 17 00:00:00 2001
From: scarlett <nia@netbsd.org>
Date: Tue, 16 Oct 2018 14:15:04 +0100
Subject: [PATCH 17/60] satisfy lint

---
 src/components/favorite_button/favorite_button.js | 2 +-
 src/components/retweet_button/retweet_button.js   | 2 +-
 src/components/settings/settings.js               | 4 ++--
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/components/favorite_button/favorite_button.js b/src/components/favorite_button/favorite_button.js
index 1621341e..a2b4cb65 100644
--- a/src/components/favorite_button/favorite_button.js
+++ b/src/components/favorite_button/favorite_button.js
@@ -2,7 +2,7 @@ const FavoriteButton = {
   props: ['status', 'loggedIn'],
   data () {
     return {
-      hidePostStatsLocal: typeof this.$store.state.config.hidePostStats == 'undefined'
+      hidePostStatsLocal: typeof this.$store.state.config.hidePostStats === 'undefined'
         ? this.$store.state.instance.hidePostStats
         : this.$store.state.config.hidePostStats,
       animated: false
diff --git a/src/components/retweet_button/retweet_button.js b/src/components/retweet_button/retweet_button.js
index 1527afc8..eb4e4b41 100644
--- a/src/components/retweet_button/retweet_button.js
+++ b/src/components/retweet_button/retweet_button.js
@@ -2,7 +2,7 @@ const RetweetButton = {
   props: ['status', 'loggedIn', 'visibility'],
   data () {
     return {
-      hidePostStatsLocal: typeof this.$store.state.config.hidePostStats == 'undefined'
+      hidePostStatsLocal: typeof this.$store.state.config.hidePostStats === 'undefined'
         ? this.$store.state.instance.hidePostStats
         : this.$store.state.config.hidePostStats,
       animated: false
diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js
index fe8a2d9e..67110841 100644
--- a/src/components/settings/settings.js
+++ b/src/components/settings/settings.js
@@ -16,11 +16,11 @@ const settings = {
       hidePostStatsLocal: typeof user.hidePostStats === 'undefined'
         ? instance.hidePostStats
         : user.hidePostStats,
-      hidePostStatsDefault : this.$t('settings.values.' + instance.hidePostStats),
+      hidePostStatsDefault: this.$t('settings.values.' + instance.hidePostStats),
       hideUserStatsLocal: typeof user.hideUserStats === 'undefined'
         ? instance.hideUserStats
         : user.hideUserStats,
-      hideUserStatsDefault : this.$t('settings.values.' + instance.hideUserStats),
+      hideUserStatsDefault: this.$t('settings.values.' + instance.hideUserStats),
       notificationVisibilityLocal: user.notificationVisibility,
       replyVisibilityLocal: user.replyVisibility,
       loopVideoLocal: user.loopVideo,

From bf3e3f8b9acf2d2bd3452894dac4df7ca6ce3605 Mon Sep 17 00:00:00 2001
From: fadelkon <fadelkon@posteo.net>
Date: Tue, 16 Oct 2018 18:11:49 +0200
Subject: [PATCH 18/60] Translate not only timeago prefix, but time units. Make
 consistent the translation for "bio" and add ellipsis to the default status
 text.

---
 src/i18n/ca.json       |  6 +++---
 static/timeago-ca.json | 14 +++++++-------
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/i18n/ca.json b/src/i18n/ca.json
index d4224691..fa517e22 100644
--- a/src/i18n/ca.json
+++ b/src/i18n/ca.json
@@ -52,7 +52,7 @@
       "plain_text": "Text pla"
     },
     "content_warning": "Assumpte (opcional)",
-    "default": "Em sento",
+    "default": "Em sento…",
     "direct_warning": "Aquesta entrada només serà visible per les usuràries que etiquetis",
     "posting": "Publicació",
     "scope": {
@@ -63,7 +63,7 @@
     }
   },
   "registration": {
-    "bio": "Sobre mi",
+    "bio": "Presentació",
     "email": "Correu",
     "fullname": "Nom per mostrar",
     "password_confirm": "Confirma la contrasenya",
@@ -78,7 +78,7 @@
     "avatarAltRadius": "Avatars en les notificacions",
     "avatarRadius": "Avatars",
     "background": "Fons de pantalla",
-    "bio": "Sobre l'usuari/a",
+    "bio": "Presentació",
     "btnRadius": "Botons",
     "cBlue": "Blau (respon, segueix)",
     "cGreen": "Verd (republica)",
diff --git a/static/timeago-ca.json b/static/timeago-ca.json
index d6fca3be..ef782caf 100644
--- a/static/timeago-ca.json
+++ b/static/timeago-ca.json
@@ -1,10 +1,10 @@
 [
   "ara mateix",
-  ["fa %ss",  "fa %ss"],
-  ["fa %smin","fa %smin"],
-  ["fa %sh",  "fa %sh"],
-  ["fa %sd",  "fa %sd"],
-  ["fa %sw",  "fa %sw"],
-  ["fa %smo", "fa %smo"],
-  ["fa %sy",  "fa %sy"]
+  ["fa %s s",     "fa %s s"],
+  ["fa %s min",   "fa %s min"],
+  ["fa %s h",     "fa %s h"],
+  ["fa %s dia",   "fa %s dies"],
+  ["fa %s setm.", "fa %s setm."],
+  ["fa %s mes",   "fa %s mesos"],
+  ["fa %s any",   "fa %s anys"]
 ]

From 373d6ca990843b07143a52005d32404dbcd0441d Mon Sep 17 00:00:00 2001
From: ButterflyOfFire <butterflyoffire+pleroma@protonmail.com>
Date: Sun, 21 Oct 2018 08:43:03 +0000
Subject: [PATCH 19/60] Adding arabic translation.

---
 src/i18n/ar.json | 201 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 201 insertions(+)
 create mode 100644 src/i18n/ar.json

diff --git a/src/i18n/ar.json b/src/i18n/ar.json
new file mode 100644
index 00000000..ac7d0f1a
--- /dev/null
+++ b/src/i18n/ar.json
@@ -0,0 +1,201 @@
+{
+    "chat": {
+        "title": "الدردشة"
+    },
+    "features_panel": {
+        "chat": "الدردشة",
+        "gopher": "غوفر",
+        "media_proxy": "بروكسي الوسائط",
+        "scope_options": "",
+        "text_limit": "الحد الأقصى للنص",
+        "title": "الميّزات",
+        "who_to_follow": "للمتابعة"
+    },
+    "finder": {
+        "error_fetching_user": "خطأ أثناء جلب صفحة المستخدم",
+        "find_user": "البحث عن مستخدِم"
+    },
+    "general": {
+        "apply": "تطبيق",
+        "submit": "إرسال"
+    },
+    "login": {
+        "login": "تسجيل الدخول",
+        "logout": "الخروج",
+        "password": "الكلمة السرية",
+        "placeholder": "مثال lain",
+        "register": "انشاء حساب",
+        "username": "إسم المستخدم"
+    },
+    "nav": {
+        "chat": "الدردشة المحلية",
+        "friend_requests": "طلبات المتابَعة",
+        "mentions": "الإشارات",
+        "public_tl": "الخيط الزمني العام",
+        "timeline": "الخيط الزمني",
+        "twkn": "كافة الشبكة المعروفة"
+    },
+    "notifications": {
+        "broken_favorite": "منشور مجهول، جارٍ البحث عنه…",
+        "favorited_you": "أعجِب بمنشورك",
+        "followed_you": "يُتابعك",
+        "load_older": "تحميل الإشعارات الأقدم",
+        "notifications": "الإخطارات",
+        "read": "مقروء!",
+        "repeated_you": "شارَك منشورك"
+    },
+    "post_status": {
+        "account_not_locked_warning": "",
+        "account_not_locked_warning_link": "مقفل",
+        "attachments_sensitive": "اعتبر المرفقات كلها كمحتوى حساس",
+        "content_type": {
+            "plain_text": "نص صافٍ"
+        },
+        "content_warning": "الموضوع (اختياري)",
+        "default": "وصلت للتوّ إلى لوس أنجلس.",
+        "direct_warning": "",
+        "posting": "النشر",
+        "scope": {
+            "direct": "",
+            "private": "",
+            "public": "علني - يُنشر على الخيوط الزمنية العمومية",
+            "unlisted": "غير مُدرَج - لا يُنشَر على الخيوط الزمنية العمومية"
+        }
+    },
+    "registration": {
+        "bio": "السيرة الذاتية",
+        "email": "عنوان البريد الإلكتروني",
+        "fullname": "الإسم المعروض",
+        "password_confirm": "تأكيد الكلمة السرية",
+        "registration": "التسجيل",
+        "token": "رمز الدعوة"
+    },
+    "settings": {
+        "attachmentRadius": "المُرفَقات",
+        "attachments": "المُرفَقات",
+        "autoload": "",
+        "avatar": "الصورة الرمزية",
+        "avatarAltRadius": "الصور الرمزية (الإشعارات)",
+        "avatarRadius": "الصور الرمزية",
+        "background": "الخلفية",
+        "bio": "السيرة الذاتية",
+        "btnRadius": "الأزرار",
+        "cBlue": "أزرق (الرد، المتابَعة)",
+        "cGreen": "أخضر (إعادة النشر)",
+        "cOrange": "برتقالي (مفضلة)",
+        "cRed": "أحمر (إلغاء)",
+        "change_password": "تغيير كلمة السر",
+        "change_password_error": "وقع هناك خلل أثناء تعديل كلمتك السرية.",
+        "changed_password": "تم تغيير كلمة المرور بنجاح!",
+        "collapse_subject": "",
+        "confirm_new_password": "تأكيد كلمة السر الجديدة",
+        "current_avatar": "صورتك الرمزية الحالية",
+        "current_password": "كلمة السر الحالية",
+        "current_profile_banner": "الرأسية الحالية لصفحتك الشخصية",
+        "data_import_export_tab": "تصدير واستيراد البيانات",
+        "default_vis": "أسلوب العرض الافتراضي",
+        "delete_account": "حذف الحساب",
+        "delete_account_description": "حذف حسابك و كافة منشوراتك نهائيًا.",
+        "delete_account_error": "",
+        "delete_account_instructions": "يُرجى إدخال كلمتك السرية أدناه لتأكيد عملية حذف الحساب.",
+        "export_theme": "حفظ النموذج",
+        "filtering": "التصفية",
+        "filtering_explanation": "سيتم إخفاء كافة المنشورات التي تحتوي على هذه الكلمات، كلمة واحدة في كل سطر",
+        "follow_export": "تصدير الاشتراكات",
+        "follow_export_button": "تصدير الاشتراكات كملف csv",
+        "follow_export_processing": "التصدير جارٍ، سوف يُطلَب منك تنزيل ملفك بعد حين",
+        "follow_import": "استيراد الاشتراكات",
+        "follow_import_error": "خطأ أثناء استيراد المتابِعين",
+        "follows_imported": "",
+        "foreground": "الأمامية",
+        "general": "الإعدادات العامة",
+        "hide_attachments_in_convo": "إخفاء المرفقات على المحادثات",
+        "hide_attachments_in_tl": "إخفاء المرفقات على الخيط الزمني",
+        "hide_post_stats": "",
+        "hide_user_stats": "",
+        "import_followers_from_a_csv_file": "",
+        "import_theme": "تحميل نموذج",
+        "inputRadius": "",
+        "instance_default": "",
+        "interfaceLanguage": "لغة الواجهة",
+        "invalid_theme_imported": "",
+        "limited_availability": "غير متوفر على متصفحك",
+        "links": "الروابط",
+        "lock_account_description": "",
+        "loop_video": "",
+        "loop_video_silent_only": "",
+        "name": "الاسم",
+        "name_bio": "الاسم والسيرة الذاتية",
+        "new_password": "كلمة السر الجديدة",
+        "no_rich_text_description": "",
+        "notification_visibility": "نوع الإشعارات التي تريد عرضها",
+        "notification_visibility_follows": "يتابع",
+        "notification_visibility_likes": "الإعجابات",
+        "notification_visibility_mentions": "الإشارات",
+        "notification_visibility_repeats": "",
+        "nsfw_clickthrough": "",
+        "panelRadius": "",
+        "pause_on_unfocused": "",
+        "presets": "النماذج",
+        "profile_background": "خلفية الصفحة الشخصية",
+        "profile_banner": "رأسية الصفحة الشخصية",
+        "profile_tab": "الملف الشخصي",
+        "radii_help": "",
+        "replies_in_timeline": "الردود على الخيط الزمني",
+        "reply_link_preview": "",
+        "reply_visibility_all": "عرض كافة الردود",
+        "reply_visibility_following": "",
+        "reply_visibility_self": "",
+        "saving_err": "خطأ أثناء حفظ الإعدادات",
+        "saving_ok": "تم حفظ الإعدادات",
+        "security_tab": "الأمان",
+        "set_new_avatar": "اختيار صورة رمزية جديدة",
+        "set_new_profile_background": "اختيار خلفية جديدة للملف الشخصي",
+        "set_new_profile_banner": "اختيار رأسية جديدة للصفحة الشخصية",
+        "settings": "الإعدادات",
+        "stop_gifs": "",
+        "streaming": "",
+        "text": "النص",
+        "theme": "المظهر",
+        "theme_help": "",
+        "tooltipRadius": "",
+        "user_settings": "إعدادات المستخدم",
+        "values": {
+            "false": "لا",
+            "true": "نعم"
+        }
+    },
+    "timeline": {
+        "collapse": "",
+        "conversation": "محادثة",
+        "error_fetching": "خطأ أثناء جلب التحديثات",
+        "load_older": "تحميل المنشورات القديمة",
+        "no_retweet_hint": "",
+        "repeated": "",
+        "show_new": "عرض الجديد",
+        "up_to_date": "تم تحديثه"
+    },
+    "user_card": {
+        "approve": "قبول",
+        "block": "حظر",
+        "blocked": "تم حظره!",
+        "deny": "رفض",
+        "follow": "اتبع",
+        "followees": "",
+        "followers": "مُتابِعون",
+        "following": "",
+        "follows_you": "يتابعك!",
+        "mute": "كتم",
+        "muted": "تم كتمه",
+        "per_day": "في اليوم",
+        "remote_follow": "مُتابَعة عن بُعد",
+        "statuses": "المنشورات"
+    },
+    "user_profile": {
+        "timeline_title": "الخيط الزمني للمستخدم"
+    },
+    "who_to_follow": {
+        "more": "المزيد",
+        "who_to_follow": "للمتابعة"
+    }
+}
\ No newline at end of file

From 131526373f4f18ee31701cc37e2dd100f8907b86 Mon Sep 17 00:00:00 2001
From: ButterflyOfFire <butterflyoffire+pleroma@protonmail.com>
Date: Sun, 21 Oct 2018 08:51:22 +0000
Subject: [PATCH 20/60] Adding arabic to messages.js

---
 src/i18n/messages.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/i18n/messages.js b/src/i18n/messages.js
index 3a2da643..36f4c98b 100644
--- a/src/i18n/messages.js
+++ b/src/i18n/messages.js
@@ -7,6 +7,7 @@
 // There's only problem that apostrophe character ' gets replaced by \\ so you have to fix it manually, sorry.
 
 const messages = {
+  ar: require('./ar.json'),
   de: require('./de.json'),
   fi: require('./fi.json'),
   en: require('./en.json'),

From d6ad08050ad0cfcf5ed4a94b5b2e8c66ef27ca0a Mon Sep 17 00:00:00 2001
From: scarlett <nia@netbsd.org>
Date: Sun, 21 Oct 2018 18:04:23 +0100
Subject: [PATCH 21/60] Fall back to instance settings consistently

---
 src/components/status/status.js | 15 +++++++++++----
 src/modules/config.js           |  1 -
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/components/status/status.js b/src/components/status/status.js
index 45f5ccac..f1afcac7 100644
--- a/src/components/status/status.js
+++ b/src/components/status/status.js
@@ -31,10 +31,17 @@ const Status = {
       preview: null,
       showPreview: false,
       showingTall: false,
-      expandingSubject: !this.$store.state.config.collapseMessageWithSubject
+      expandingSubject: typeof this.$store.state.config.collapseMessageWithSubject === 'undefined'
+        ? !this.$store.state.instance.collapseMessageWithSubject
+        : !this.$store.state.config.collapseMessageWithSubject
     }
   },
   computed: {
+    localCollapseSubjectDefault () {
+      return typeof this.$store.state.config.collapseMessageWithSubject === 'undefined'
+        ? this.$store.state.instance.collapseMessageWithSubject
+        : this.$store.state.config.collapseMessageWithSubject
+    },
     muteWords () {
       return this.$store.state.config.muteWords
     },
@@ -147,13 +154,13 @@ const Status = {
       return this.status.attentions.length > 0
     },
     hideSubjectStatus () {
-      if (this.tallStatus && !this.$store.state.config.collapseMessageWithSubject) {
+      if (this.tallStatus && !this.localCollapseSubjectDefault) {
         return false
       }
       return !this.expandingSubject && this.status.summary
     },
     hideTallStatus () {
-      if (this.status.summary && this.$store.state.config.collapseMessageWithSubject) {
+      if (this.status.summary && this.localCollapseSubjectDefault) {
         return false
       }
       if (this.showingTall) {
@@ -168,7 +175,7 @@ const Status = {
       if (!this.status.nsfw) {
         return false
       }
-      if (this.status.summary && this.$store.state.config.collapseMessageWithSubject) {
+      if (this.status.summary && this.localCollapseSubjectDefault) {
         return false
       }
       return true
diff --git a/src/modules/config.js b/src/modules/config.js
index 375d0167..1c04845a 100644
--- a/src/modules/config.js
+++ b/src/modules/config.js
@@ -5,7 +5,6 @@ const browserLocale = (window.navigator.language || 'en').split('-')[0]
 
 const defaultState = {
   colors: {},
-  collapseMessageWithSubject: false,
   hideAttachments: false,
   hideAttachmentsInConv: false,
   hideNsfw: true,

From c02a9089e13ee7acf5a56818ac807dcb813aa43a Mon Sep 17 00:00:00 2001
From: scarlett <nia@netbsd.org>
Date: Sun, 21 Oct 2018 19:42:38 +0100
Subject: [PATCH 22/60] explicitly set collapseMessageWithSubject to undefined

---
 src/modules/config.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/modules/config.js b/src/modules/config.js
index 1c04845a..522940f6 100644
--- a/src/modules/config.js
+++ b/src/modules/config.js
@@ -5,6 +5,7 @@ const browserLocale = (window.navigator.language || 'en').split('-')[0]
 
 const defaultState = {
   colors: {},
+  collapseMessageWithSubject: undefined,
   hideAttachments: false,
   hideAttachmentsInConv: false,
   hideNsfw: true,

From ec7b7ab49cfd831f581f94f102a1fc2d0be15550 Mon Sep 17 00:00:00 2001
From: fadelkon <fadelkon@posteo.net>
Date: Sun, 21 Oct 2018 22:18:38 +0200
Subject: [PATCH 23/60] Sort messages object by language code so that it's
 easier from the UI to browse them.

---
 src/i18n/messages.js | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/src/i18n/messages.js b/src/i18n/messages.js
index ff7e1c98..4cd3c4e2 100644
--- a/src/i18n/messages.js
+++ b/src/i18n/messages.js
@@ -1,5 +1,6 @@
 // When contributing, please sort JSON before committing so it would be easier to see what's missing and what's being added compared to English and other languages. It's not obligatory, but just an advice.
 // To sort json use jq https://stedolan.github.io/jq and invoke it like `jq -S . xx.json > xx.sorted.json`, AFAIK, there's no inplace edit option like in sed
+// Also, when adding a new language to "messages" variable, please do it alphabetically by language code so that users can search or check their custom language easily.
 
 // For anyone contributing to old huge messages.js and in need to quickly convert it to JSON
 // sed command for converting currently formatted JS to JSON:
@@ -8,24 +9,24 @@
 
 const messages = {
   ar: require('./ar.json'),
+  ca: require('./ca.json'),
   de: require('./de.json'),
-  fi: require('./fi.json'),
   en: require('./en.json'),
   eo: require('./eo.json'),
+  es: require('./es.json'),
   et: require('./et.json'),
-  hu: require('./hu.json'),
-  ro: require('./ro.json'),
-  ja: require('./ja.json'),
+  fi: require('./fi.json'),
   fr: require('./fr.json'),
+  he: require('./he.json'),
+  hu: require('./hu.json'),
   it: require('./it.json'),
+  ja: require('./ja.json'),
+  nb: require('./nb.json'),
   oc: require('./oc.json'),
   pl: require('./pl.json'),
-  es: require('./es.json'),
   pt: require('./pt.json'),
-  ru: require('./ru.json'),
-  nb: require('./nb.json'),
-  he: require('./he.json'),
-  ca: require('./ca.json')
+  ro: require('./ro.json'),
+  ru: require('./ru.json')
 }
 
 export default messages

From 8c585b0291ebc092bcac2c812fc802276183d2b8 Mon Sep 17 00:00:00 2001
From: Exilat <quentinantonin@free.fr>
Date: Tue, 23 Oct 2018 19:19:11 +0000
Subject: [PATCH 24/60] =?UTF-8?q?Update=20of=20the=20oc.json=20file=20Actu?=
 =?UTF-8?q?alizacion=20del=20fichi=C3=A8r=20oc.json?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/i18n/oc.json | 297 ++++++++++++++++++++++++++---------------------
 1 file changed, 165 insertions(+), 132 deletions(-)

diff --git a/src/i18n/oc.json b/src/i18n/oc.json
index 0f3320ca..788a2fac 100644
--- a/src/i18n/oc.json
+++ b/src/i18n/oc.json
@@ -1,134 +1,167 @@
 {
-  "chat": {
-    "title": "Messatjariá"
-  },
-  "finder": {
-    "error_fetching_user": "Error pendent la recèrca d’un utilizaire",
-    "find_user": "Cercar un utilizaire"
-  },
-  "general": {
-    "apply": "Aplicar",
-    "submit": "Mandar"
-  },
-  "login": {
-    "login": "Connexion",
-    "logout": "Desconnexion",
-    "password": "Senhal",
-    "placeholder": "e.g. lain",
-    "register": "Se marcar",
-    "username": "Nom d’utilizaire"
-  },
-  "nav": {
-    "chat": "Chat local",
-    "mentions": "Notificacions",
-    "public_tl": "Estatuts locals",
-    "timeline": "Flux d’actualitat",
-    "twkn": "Lo malhum conegut"
-  },
-  "notifications": {
-    "favorited_you": "a aimat vòstre estatut",
-    "followed_you": "vos a seguit",
-    "notifications": "Notficacions",
-    "read": "Legit!",
-    "repeated_you": "a repetit your vòstre estatut"
-  },
-  "post_status": {
-    "content_warning": "Avís de contengut (opcional)",
-    "default": "Escrivètz aquí vòstre estatut.",
-    "posting": "Mandadís"
-  },
-  "registration": {
-    "bio": "Biografia",
-    "email": "Adreça de corrièl",
-    "fullname": "Nom complèt",
-    "password_confirm": "Confirmar lo senhal",
-    "registration": "Inscripcion"
-  },
-  "settings": {
-    "attachmentRadius": "Pèças juntas",
-    "attachments": "Pèças juntas",
-    "autoload": "Activar lo cargament automatic un còp arribat al cap de la pagina",
-    "avatar": "Avatar",
-    "avatarAltRadius": "Avatars (Notificacions)",
-    "avatarRadius": "Avatars",
-    "background": "Rèire plan",
-    "bio": "Biografia",
-    "btnRadius": "Botons",
-    "cBlue": "Blau (Respondre, seguir)",
-    "cGreen": "Verd (Repartajar)",
-    "cOrange": "Irange (Aimar)",
-    "cRed": "Roge (Anullar)",
-    "change_password": "Cambiar lo senhal",
-    "change_password_error": "Una error s’es producha en cambiant lo senhal.",
-    "changed_password": "Senhal corrèctament cambiat",
-    "confirm_new_password": "Confirmatz lo nòu senhal",
-    "current_avatar": "Vòstre avatar actual",
-    "current_password": "Senhal actual",
-    "current_profile_banner": "Bandièra actuala del perfil",
-    "delete_account": "Suprimir lo compte",
-    "delete_account_description": "Suprimir vòstre compte e los messatges per sempre.",
-    "delete_account_error": "Una error s’es producha en suprimir lo compte. S’aquò ten d’arribar mercés de contactar vòstre administrador d’instància.",
-    "delete_account_instructions": "Picatz vòstre senhal dins lo camp tèxte çai-jos per confirmar la supression del compte.",
-    "filtering": "Filtre",
-    "filtering_explanation": "Totes los estatuts amb aqueles mots seràn en silenci, un mot per linha.",
-    "follow_export": "Exportar los abonaments",
-    "follow_export_button": "Exportar vòstres abonaments dins un fichièr csv",
-    "follow_export_processing": "Tractament, vos demandarem lèu de telecargar lo fichièr",
-    "follow_import": "Importar los abonaments",
-    "follow_import_error": "Error en important los seguidors",
-    "follows_imported": "Seguidors importats. Lo tractament pòt trigar una estona.",
-    "foreground": "Endavant",
-    "hide_attachments_in_convo": "Rescondre las pèças juntas dins las conversacions",
-    "hide_attachments_in_tl": "Rescondre las pèças juntas",
-    "import_followers_from_a_csv_file": "Importar los seguidors d’un fichièr csv",
-    "inputRadius": "Camps tèxte",
-    "links": "Ligams",
-    "name": "Nom",
-    "name_bio": "Nom & Bio",
-    "new_password": "Nòu senhal",
-    "nsfw_clickthrough": "Activar lo clic per mostrar los imatges marcats coma pels adults o sensibles",
-    "panelRadius": "Panèls",
-    "presets": "Pre-enregistrats",
-    "profile_background": "Imatge de fons",
-    "profile_banner": "Bandièra del perfil",
-    "radii_help": "Configurar los caires arredondits de l’interfàcia (en pixèls)",
-    "reply_link_preview": "Activar l’apercebut en passar la mirga",
-    "set_new_avatar": "Cambiar l’avatar",
-    "set_new_profile_background": "Cambiar l’imatge de fons",
-    "set_new_profile_banner": "Cambiar de bandièra",
-    "settings": "Paramètres",
-    "stop_gifs": "Lançar los GIFs al subrevòl",
-    "streaming": "Activar lo cargament automatic dels novèls estatus en anar amont",
-    "text": "Tèxte",
-    "theme": "Tèma",
-    "theme_help": "Emplegatz los còdis de color hex (#rrggbb) per personalizar vòstre tèma de color.",
-    "tooltipRadius": "Astúcias/Alèrta",
-    "user_settings": "Paramètres utilizaire"
-  },
-  "timeline": {
-    "collapse": "Tampar",
-    "conversation": "Conversacion",
-    "error_fetching": "Error en cercant de mesas a jorn",
-    "load_older": "Ne veire mai",
-    "repeated": "repetit",
-    "show_new": "Ne veire mai",
-    "up_to_date": "A jorn"
-  },
-  "user_card": {
-    "block": "Blocar",
-    "blocked": "Blocat",
-    "follow": "Seguir",
-    "followees": "Abonaments",
-    "followers": "Seguidors",
-    "following": "Seguit!",
-    "follows_you": "Vos sèc!",
-    "mute": "Amagar",
-    "muted": "Amagat",
-    "per_day": "per jorn",
-    "remote_follow": "Seguir a distància",
-    "statuses": "Estatuts"
-  },
-  "user_profile": {
-    "timeline_title": "Flux utilizaire"
-  }
+    "chat.title": "Messatjariá",
+    "finder.error_fetching_user": "Error pendent la recèrca d’un utilizaire",
+    "finder.find_user": "Cercar un utilizaire",
+    "general.apply": "Aplicar",
+    "general.submit": "Mandar",
+    "login.login": "Connexion",
+    "login.logout": "Desconnexion",
+    "login.password": "Senhal",
+    "login.placeholder": "e.g. lain",
+    "login.register": "Se marcar",
+    "login.username": "Nom d’utilizaire",
+    "nav.chat": "Chat local",
+    "nav.mentions": "Notificacions",
+    "nav.public_tl": "Estatuts locals",
+    "nav.timeline": "Flux d’actualitat",
+    "nav.twkn": "Lo malhum conegut",
+    "notifications.favorited_you": "a aimat vòstre estatut",
+    "notifications.followed_you": "vos a seguit",
+    "notifications.notifications": "Notficacions",
+    "notifications.read": "Legit !",
+    "notifications.repeated_you": "a repetit vòstre estatut",
+    "post_status.content_warning": "Avís de contengut (opcional)",
+    "post_status.default": "Escrivètz aquí vòstre estatut.",
+    "post_status.posting": "Mandadís",
+    "registration.bio": "Biografia",
+    "registration.email": "Adreça de corrièl",
+    "registration.fullname": "Nom complèt",
+    "registration.password_confirm": "Confirmar lo senhal",
+    "registration.registration": "Inscripcion",
+    "settings.attachmentRadius": "Pèças juntas",
+    "settings.attachments": "Pèças juntas",
+    "settings.autoload": "Activar lo cargament automatic un còp arribat al cap de la pagina",
+    "settings.avatar": "Avatar",
+    "settings.avatarAltRadius": "Avatars (Notificacions)",
+    "settings.avatarRadius": "Avatars",
+    "settings.background": "Rèire plan",
+    "settings.bio": "Biografia",
+    "settings.btnRadius": "Botons",
+    "settings.cBlue": "Blau (Respondre, seguir)",
+    "settings.cGreen": "Verd (Repartajar)",
+    "settings.cOrange": "Irange (Aimar)",
+    "settings.cRed": "Roge (Anullar)",
+    "settings.change_password": "Cambiar lo senhal",
+    "settings.change_password_error": "Una error s’es producha en cambiant lo senhal.",
+    "settings.changed_password": "Senhal corrèctament cambiat",
+    "settings.confirm_new_password": "Confirmatz lo nòu senhal",
+    "settings.current_avatar": "Vòstre avatar actual",
+    "settings.current_password": "Senhal actual",
+    "settings.current_profile_banner": "Bandièra actuala del perfil",
+    "settings.delete_account": "Suprimir lo compte",
+    "settings.delete_account_description": "Suprimir vòstre compte e los messatges per sempre.",
+    "settings.delete_account_error": "Una error s’es producha en suprimir lo compte. S’aquò ten d’arribar mercés de contactar vòstre administrador d’instància.",
+    "settings.delete_account_instructions": "Picatz vòstre senhal dins lo camp tèxte çai-jos per confirmar la supression del compte.",
+    "settings.filtering": "Filtre",
+    "settings.filtering_explanation": "Totes los estatuts amb aqueles mots seràn en silenci, un mot per linha",
+    "settings.follow_export": "Exportar los abonaments",
+    "settings.follow_export_button": "Exportar vòstres abonaments dins un fichièr csv",
+    "settings.follow_export_processing": "Tractament, vos demandarem lèu de telecargar lo fichièr",
+    "settings.follow_import": "Importar los abonaments",
+    "settings.follow_import_error": "Error en important los seguidors",
+    "settings.follows_imported": "Seguidors importats. Lo tractament pòt trigar una estona.",
+    "settings.foreground": "Endavant",
+    "settings.hide_attachments_in_convo": "Rescondre las pèças juntas dins las conversacions",
+    "settings.hide_attachments_in_tl": "Rescondre las pèças juntas",
+    "settings.import_followers_from_a_csv_file": "Importar los seguidors d’un fichièr csv",
+    "settings.inputRadius": "Camps tèxte",
+    "settings.links": "Ligams",
+    "settings.name": "Nom",
+    "settings.name_bio": "Nom & Bio",
+    "settings.new_password": "Nòu senhal",
+    "settings.nsfw_clickthrough": "Activar lo clic per mostrar los imatges marcats coma pels adults o sensibles",
+    "settings.panelRadius": "Panèls",
+    "settings.presets": "Pre-enregistrats",
+    "settings.profile_background": "Imatge de fons",
+    "settings.profile_banner": "Bandièra del perfil",
+    "settings.radii_help": "Configurar los caires arredondits de l’interfàcia (en pixèls)",
+    "settings.reply_link_preview": "Activar l’apercebut en passar la mirga",
+    "settings.set_new_avatar": "Cambiar l’avatar",
+    "settings.set_new_profile_background": "Cambiar l’imatge de fons",
+    "settings.set_new_profile_banner": "Cambiar de bandièra",
+    "settings.settings": "Paramètres",
+    "settings.stop_gifs": "Lançar los GIFs al subrevòl",
+    "settings.streaming": "Activar lo cargament automatic dels novèls estatus en anar amont",
+    "settings.text": "Tèxte",
+    "settings.theme": "Tèma",
+    "settings.theme_help": "Emplegatz los còdis de color hex (#rrggbb) per personalizar vòstre tèma de color.",
+    "settings.tooltipRadius": "Astúcias/Alèrta",
+    "settings.user_settings": "Paramètres utilizaire",
+    "timeline.collapse": "Tampar",
+    "timeline.conversation": "Conversacion",
+    "timeline.error_fetching": "Error en cercant de mesas a jorn",
+    "timeline.load_older": "Ne veire mai",
+    "timeline.repeated": "repetit",
+    "timeline.show_new": "Ne veire mai",
+    "timeline.up_to_date": "A jorn",
+    "user_card.block": "Blocar",
+    "user_card.blocked": "Blocat",
+    "user_card.follow": "Seguir",
+    "user_card.followees": "Abonaments",
+    "user_card.followers": "Seguidors",
+    "user_card.following": "Seguit !",
+    "user_card.follows_you": "Vos sèc !",
+    "user_card.mute": "Amagar",
+    "user_card.muted": "Amagat",
+    "user_card.per_day": "per jorn",
+    "user_card.remote_follow": "Seguir a distància",
+    "user_card.statuses": "Estatuts",
+    "user_profile.timeline_title": "Flux utilizaire",
+    "features_panel.chat": "Discutida",
+    "features_panel.gopher": "Gopher",
+    "features_panel.media_proxy": "Servidor mandatari dels mèdias",
+    "features_panel.scope_options": "Opcions d'encastres",
+    "features_panel.text_limit": "Limit de tèxte",
+    "features_panel.title": "Foncionalitats",
+    "features_panel.who_to_follow": "Qui seguir",
+    "nav.friend_requests": "Demandas d'abonament",
+    "notifications.broken_favorite": "Estatut desconegut, sèm a lo cercar...",
+    "notifications.load_older": "Cargar las notificaciones mai ancianas",
+    "post_status.account_not_locked_warning": "Vòstre compte es pas {0}. Qual que siá pòt vos seguir per veire vòstras publicacions destinadas pas qu'a vòstres seguidors.",
+    "post_status.account_not_locked_warning_link": "clavat",
+    "post_status.attachments_sensitive": "Marcar las pèças juntas coma sensiblas",
+    "post_status.content_type.plain_text": "Tèxte brut",
+    "post_status.direct_warning": "Aquesta publicacion serà pas que visibla pels utilizaires mencionats.",
+    "post_status.scope.direct": "Dirècte - Publicar pels utilizaires mencionats solament",
+    "post_status.scope.private": "Seguidors solament - Publicar pels sols seguidors",
+    "post_status.scope.public": "Public - Publicar pel flux d’actualitat public",
+    "post_status.scope.unlisted": "Pas listat - Publicar pas pel flux public",
+    "registration.token": "Geton de convidat",
+    "settings.collapse_subject": "Replegar las publicacions amb de subjèctes",
+    "settings.data_import_export_tab": "Importar / Exportar las donadas",
+    "settings.default_vis": "Nivèl de visibilitat per defaut",
+    "settings.export_theme": "Enregistrar la preconfiguracion",
+    "settings.general": "General",
+    "settings.hide_post_stats": "Amagar los estatistics de publicacion (ex. lo ombre de favorits)",
+    "settings.hide_user_stats": "Amagar las estatisticas de l’utilizaire (ex. lo nombre de seguidors)",
+    "settings.import_theme": "Cargar un tèma",
+    "settings.instance_default": "(defaut : {value})",
+    "settings.interfaceLanguage": "Lenga de l’interfàcia",
+    "settings.invalid_theme_imported": "Lo fichièr seleccionat es pas un tèma Pleroma valid. Cap de cambiament es estat fach a vòstre tèma.",
+    "settings.limited_availability": "Pas disponible per vòstre navigador",
+    "settings.lock_account_description": "Limitar vòstre compte als seguidors acceptats solament",
+    "settings.loop_video": "Bocla vidèo",
+    "settings.loop_video_silent_only": "Legir en bocla solament las vidèos sens son (coma los « Gifs » de Mastodon)",
+    "settings.notification_visibility": "Tipes de notificacion de mostrar",
+    "settings.notification_visibility_follows": "Abonaments",
+    "settings.notification_visibility_likes": "Aiman",
+    "settings.notification_visibility_mentions": "Mencions",
+    "settings.notification_visibility_repeats": "Repeticions",
+    "settings.no_rich_text_description": "Netejar lo format tèxte de totas las publicacions",
+    "settings.pause_on_unfocused": "Pausar la difusion quand l’onglet es pas seleccionat",
+    "settings.profile_tab": "Perfil",
+    "settings.replies_in_timeline": "Responsas del flux",
+    "settings.reply_visibility_all": "Mostrar totas las responsas",
+    "settings.reply_visibility_following": "Mostrar pas que las responsas que me son destinada a ieu o un utilizaire que seguissi",
+    "settings.reply_visibility_self": "Mostrar pas que las responsas que me son destinadas",
+    "settings.saving_err": "Error en enregistrant los paramètres",
+    "settings.saving_ok": "Paramètres enregistrats",
+    "settings.security_tab": "Seguretat",
+    "settings.values.false": "non",
+    "settings.values.true": "òc",
+    "timeline.no_retweet_hint": "La publicacion marcada coma pels seguidors solament o dirècte pòt pas èsser repetida",
+    "user_card.approve": "Validar",
+    "user_card.deny": "Refusar",
+    "who_to_follow.more": "Mai",
+    "who_to_follow.who_to_follow": "Qui seguir"
 }

From 68d90684c4bc4222921d5790c02f7d4fd82ab6c9 Mon Sep 17 00:00:00 2001
From: Exilat <quentinantonin@free.fr>
Date: Wed, 24 Oct 2018 05:50:49 +0000
Subject: [PATCH 25/60] Update oc.json

---
 src/i18n/oc.json | 366 ++++++++++++++++++++++++++---------------------
 1 file changed, 200 insertions(+), 166 deletions(-)

diff --git a/src/i18n/oc.json b/src/i18n/oc.json
index 788a2fac..9cb34fbf 100644
--- a/src/i18n/oc.json
+++ b/src/i18n/oc.json
@@ -1,167 +1,201 @@
 {
-    "chat.title": "Messatjariá",
-    "finder.error_fetching_user": "Error pendent la recèrca d’un utilizaire",
-    "finder.find_user": "Cercar un utilizaire",
-    "general.apply": "Aplicar",
-    "general.submit": "Mandar",
-    "login.login": "Connexion",
-    "login.logout": "Desconnexion",
-    "login.password": "Senhal",
-    "login.placeholder": "e.g. lain",
-    "login.register": "Se marcar",
-    "login.username": "Nom d’utilizaire",
-    "nav.chat": "Chat local",
-    "nav.mentions": "Notificacions",
-    "nav.public_tl": "Estatuts locals",
-    "nav.timeline": "Flux d’actualitat",
-    "nav.twkn": "Lo malhum conegut",
-    "notifications.favorited_you": "a aimat vòstre estatut",
-    "notifications.followed_you": "vos a seguit",
-    "notifications.notifications": "Notficacions",
-    "notifications.read": "Legit !",
-    "notifications.repeated_you": "a repetit vòstre estatut",
-    "post_status.content_warning": "Avís de contengut (opcional)",
-    "post_status.default": "Escrivètz aquí vòstre estatut.",
-    "post_status.posting": "Mandadís",
-    "registration.bio": "Biografia",
-    "registration.email": "Adreça de corrièl",
-    "registration.fullname": "Nom complèt",
-    "registration.password_confirm": "Confirmar lo senhal",
-    "registration.registration": "Inscripcion",
-    "settings.attachmentRadius": "Pèças juntas",
-    "settings.attachments": "Pèças juntas",
-    "settings.autoload": "Activar lo cargament automatic un còp arribat al cap de la pagina",
-    "settings.avatar": "Avatar",
-    "settings.avatarAltRadius": "Avatars (Notificacions)",
-    "settings.avatarRadius": "Avatars",
-    "settings.background": "Rèire plan",
-    "settings.bio": "Biografia",
-    "settings.btnRadius": "Botons",
-    "settings.cBlue": "Blau (Respondre, seguir)",
-    "settings.cGreen": "Verd (Repartajar)",
-    "settings.cOrange": "Irange (Aimar)",
-    "settings.cRed": "Roge (Anullar)",
-    "settings.change_password": "Cambiar lo senhal",
-    "settings.change_password_error": "Una error s’es producha en cambiant lo senhal.",
-    "settings.changed_password": "Senhal corrèctament cambiat",
-    "settings.confirm_new_password": "Confirmatz lo nòu senhal",
-    "settings.current_avatar": "Vòstre avatar actual",
-    "settings.current_password": "Senhal actual",
-    "settings.current_profile_banner": "Bandièra actuala del perfil",
-    "settings.delete_account": "Suprimir lo compte",
-    "settings.delete_account_description": "Suprimir vòstre compte e los messatges per sempre.",
-    "settings.delete_account_error": "Una error s’es producha en suprimir lo compte. S’aquò ten d’arribar mercés de contactar vòstre administrador d’instància.",
-    "settings.delete_account_instructions": "Picatz vòstre senhal dins lo camp tèxte çai-jos per confirmar la supression del compte.",
-    "settings.filtering": "Filtre",
-    "settings.filtering_explanation": "Totes los estatuts amb aqueles mots seràn en silenci, un mot per linha",
-    "settings.follow_export": "Exportar los abonaments",
-    "settings.follow_export_button": "Exportar vòstres abonaments dins un fichièr csv",
-    "settings.follow_export_processing": "Tractament, vos demandarem lèu de telecargar lo fichièr",
-    "settings.follow_import": "Importar los abonaments",
-    "settings.follow_import_error": "Error en important los seguidors",
-    "settings.follows_imported": "Seguidors importats. Lo tractament pòt trigar una estona.",
-    "settings.foreground": "Endavant",
-    "settings.hide_attachments_in_convo": "Rescondre las pèças juntas dins las conversacions",
-    "settings.hide_attachments_in_tl": "Rescondre las pèças juntas",
-    "settings.import_followers_from_a_csv_file": "Importar los seguidors d’un fichièr csv",
-    "settings.inputRadius": "Camps tèxte",
-    "settings.links": "Ligams",
-    "settings.name": "Nom",
-    "settings.name_bio": "Nom & Bio",
-    "settings.new_password": "Nòu senhal",
-    "settings.nsfw_clickthrough": "Activar lo clic per mostrar los imatges marcats coma pels adults o sensibles",
-    "settings.panelRadius": "Panèls",
-    "settings.presets": "Pre-enregistrats",
-    "settings.profile_background": "Imatge de fons",
-    "settings.profile_banner": "Bandièra del perfil",
-    "settings.radii_help": "Configurar los caires arredondits de l’interfàcia (en pixèls)",
-    "settings.reply_link_preview": "Activar l’apercebut en passar la mirga",
-    "settings.set_new_avatar": "Cambiar l’avatar",
-    "settings.set_new_profile_background": "Cambiar l’imatge de fons",
-    "settings.set_new_profile_banner": "Cambiar de bandièra",
-    "settings.settings": "Paramètres",
-    "settings.stop_gifs": "Lançar los GIFs al subrevòl",
-    "settings.streaming": "Activar lo cargament automatic dels novèls estatus en anar amont",
-    "settings.text": "Tèxte",
-    "settings.theme": "Tèma",
-    "settings.theme_help": "Emplegatz los còdis de color hex (#rrggbb) per personalizar vòstre tèma de color.",
-    "settings.tooltipRadius": "Astúcias/Alèrta",
-    "settings.user_settings": "Paramètres utilizaire",
-    "timeline.collapse": "Tampar",
-    "timeline.conversation": "Conversacion",
-    "timeline.error_fetching": "Error en cercant de mesas a jorn",
-    "timeline.load_older": "Ne veire mai",
-    "timeline.repeated": "repetit",
-    "timeline.show_new": "Ne veire mai",
-    "timeline.up_to_date": "A jorn",
-    "user_card.block": "Blocar",
-    "user_card.blocked": "Blocat",
-    "user_card.follow": "Seguir",
-    "user_card.followees": "Abonaments",
-    "user_card.followers": "Seguidors",
-    "user_card.following": "Seguit !",
-    "user_card.follows_you": "Vos sèc !",
-    "user_card.mute": "Amagar",
-    "user_card.muted": "Amagat",
-    "user_card.per_day": "per jorn",
-    "user_card.remote_follow": "Seguir a distància",
-    "user_card.statuses": "Estatuts",
-    "user_profile.timeline_title": "Flux utilizaire",
-    "features_panel.chat": "Discutida",
-    "features_panel.gopher": "Gopher",
-    "features_panel.media_proxy": "Servidor mandatari dels mèdias",
-    "features_panel.scope_options": "Opcions d'encastres",
-    "features_panel.text_limit": "Limit de tèxte",
-    "features_panel.title": "Foncionalitats",
-    "features_panel.who_to_follow": "Qui seguir",
-    "nav.friend_requests": "Demandas d'abonament",
-    "notifications.broken_favorite": "Estatut desconegut, sèm a lo cercar...",
-    "notifications.load_older": "Cargar las notificaciones mai ancianas",
-    "post_status.account_not_locked_warning": "Vòstre compte es pas {0}. Qual que siá pòt vos seguir per veire vòstras publicacions destinadas pas qu'a vòstres seguidors.",
-    "post_status.account_not_locked_warning_link": "clavat",
-    "post_status.attachments_sensitive": "Marcar las pèças juntas coma sensiblas",
-    "post_status.content_type.plain_text": "Tèxte brut",
-    "post_status.direct_warning": "Aquesta publicacion serà pas que visibla pels utilizaires mencionats.",
-    "post_status.scope.direct": "Dirècte - Publicar pels utilizaires mencionats solament",
-    "post_status.scope.private": "Seguidors solament - Publicar pels sols seguidors",
-    "post_status.scope.public": "Public - Publicar pel flux d’actualitat public",
-    "post_status.scope.unlisted": "Pas listat - Publicar pas pel flux public",
-    "registration.token": "Geton de convidat",
-    "settings.collapse_subject": "Replegar las publicacions amb de subjèctes",
-    "settings.data_import_export_tab": "Importar / Exportar las donadas",
-    "settings.default_vis": "Nivèl de visibilitat per defaut",
-    "settings.export_theme": "Enregistrar la preconfiguracion",
-    "settings.general": "General",
-    "settings.hide_post_stats": "Amagar los estatistics de publicacion (ex. lo ombre de favorits)",
-    "settings.hide_user_stats": "Amagar las estatisticas de l’utilizaire (ex. lo nombre de seguidors)",
-    "settings.import_theme": "Cargar un tèma",
-    "settings.instance_default": "(defaut : {value})",
-    "settings.interfaceLanguage": "Lenga de l’interfàcia",
-    "settings.invalid_theme_imported": "Lo fichièr seleccionat es pas un tèma Pleroma valid. Cap de cambiament es estat fach a vòstre tèma.",
-    "settings.limited_availability": "Pas disponible per vòstre navigador",
-    "settings.lock_account_description": "Limitar vòstre compte als seguidors acceptats solament",
-    "settings.loop_video": "Bocla vidèo",
-    "settings.loop_video_silent_only": "Legir en bocla solament las vidèos sens son (coma los « Gifs » de Mastodon)",
-    "settings.notification_visibility": "Tipes de notificacion de mostrar",
-    "settings.notification_visibility_follows": "Abonaments",
-    "settings.notification_visibility_likes": "Aiman",
-    "settings.notification_visibility_mentions": "Mencions",
-    "settings.notification_visibility_repeats": "Repeticions",
-    "settings.no_rich_text_description": "Netejar lo format tèxte de totas las publicacions",
-    "settings.pause_on_unfocused": "Pausar la difusion quand l’onglet es pas seleccionat",
-    "settings.profile_tab": "Perfil",
-    "settings.replies_in_timeline": "Responsas del flux",
-    "settings.reply_visibility_all": "Mostrar totas las responsas",
-    "settings.reply_visibility_following": "Mostrar pas que las responsas que me son destinada a ieu o un utilizaire que seguissi",
-    "settings.reply_visibility_self": "Mostrar pas que las responsas que me son destinadas",
-    "settings.saving_err": "Error en enregistrant los paramètres",
-    "settings.saving_ok": "Paramètres enregistrats",
-    "settings.security_tab": "Seguretat",
-    "settings.values.false": "non",
-    "settings.values.true": "òc",
-    "timeline.no_retweet_hint": "La publicacion marcada coma pels seguidors solament o dirècte pòt pas èsser repetida",
-    "user_card.approve": "Validar",
-    "user_card.deny": "Refusar",
-    "who_to_follow.more": "Mai",
-    "who_to_follow.who_to_follow": "Qui seguir"
-}
+       "chat": {
+              "title": "Messatjariá"
+       },
+       "features_panel": {
+              "chat": "Discutida",
+              "gopher": "Gopher",
+              "media_proxy": "Servidor mandatari dels mèdias",
+              "scope_options": "Opcions d'encastres",
+              "text_limit": "Limit de tèxte",
+              "title": "Foncionalitats",
+              "who_to_follow": "Qui seguir"
+       },
+       "finder": {
+              "error_fetching_user": "Error pendent la recèrca d’un utilizaire",
+              "find_user": "Cercar un utilizaire"
+       },
+       "general": {
+              "apply": "Aplicar",
+              "submit": "Mandar"
+       },
+       "login": {
+              "login": "Connexion",
+              "logout": "Desconnexion",
+              "password": "Senhal",
+              "placeholder": "e.g. lain",
+              "register": "Se marcar",
+              "username": "Nom d’utilizaire"
+       },
+       "nav": {
+              "chat": "Chat local",
+              "friend_requests": "Demandas d'abonament",
+              "mentions": "Notificacions",
+              "public_tl": "Estatuts locals",
+              "timeline": "Flux d’actualitat",
+              "twkn": "Lo malhum conegut"
+       },
+       "notifications": {
+              "broken_favorite": "Estatut desconegut, sèm a lo cercar...",
+              "favorited_you": "a aimat vòstre estatut",
+              "followed_you": "vos a seguit",
+              "load_older": "Cargar las notificaciones mai ancianas",
+              "notifications": "Notficacions",
+              "read": "Legit !",
+              "repeated_you": "a repetit vòstre estatut"
+       },
+       "post_status": {
+              "account_not_locked_warning": "Vòstre compte es pas {0}. Qual que siá pòt vos seguir per veire vòstras publicacions destinadas pas qu'a vòstres seguidors.",
+              "account_not_locked_warning_link": "clavat",
+              "attachments_sensitive": "Marcar las pèças juntas coma sensiblas",
+              "content_type": {
+                     "plain_text": "Tèxte brut"
+              },
+              "content_warning": "Avís de contengut (opcional)",
+              "default": "Escrivètz aquí vòstre estatut.",
+              "direct_warning": "Aquesta publicacion serà pas que visibla pels utilizaires mencionats.",
+              "posting": "Mandadís",
+              "scope": {
+                     "direct": "Dirècte - Publicar pels utilizaires mencionats solament",
+                     "private": "Seguidors solament - Publicar pels sols seguidors",
+                     "public": "Public - Publicar pel flux d’actualitat public",
+                     "unlisted": "Pas listat - Publicar pas pel flux public"
+              }
+       },
+       "registration": {
+              "bio": "Biografia",
+              "email": "Adreça de corrièl",
+              "fullname": "Nom complèt",
+              "password_confirm": "Confirmar lo senhal",
+              "registration": "Inscripcion",
+              "token": "Geton de convidat"
+       },
+       "settings": {
+              "attachmentRadius": "Pèças juntas",
+              "attachments": "Pèças juntas",
+              "autoload": "Activar lo cargament automatic un còp arribat al cap de la pagina",
+              "avatar": "Avatar",
+              "avatarAltRadius": "Avatars (Notificacions)",
+              "avatarRadius": "Avatars",
+              "background": "Rèire plan",
+              "bio": "Biografia",
+              "btnRadius": "Botons",
+              "cBlue": "Blau (Respondre, seguir)",
+              "cGreen": "Verd (Repartajar)",
+              "cOrange": "Irange (Aimar)",
+              "cRed": "Roge (Anullar)",
+              "change_password": "Cambiar lo senhal",
+              "change_password_error": "Una error s’es producha en cambiant lo senhal.",
+              "changed_password": "Senhal corrèctament cambiat !",
+              "collapse_subject": "Replegar las publicacions amb de subjèctes",
+              "confirm_new_password": "Confirmatz lo nòu senhal",
+              "current_avatar": "Vòstre avatar actual",
+              "current_password": "Senhal actual",
+              "current_profile_banner": "Bandièra actuala del perfil",
+              "data_import_export_tab": "Importar / Exportar las donadas",
+              "default_vis": "Nivèl de visibilitat per defaut",
+              "delete_account": "Suprimir lo compte",
+              "delete_account_description": "Suprimir vòstre compte e los messatges per sempre.",
+              "delete_account_error": "Una error s’es producha en suprimir lo compte. S’aquò ten d’arribar mercés de contactar vòstre administrador d’instància.",
+              "delete_account_instructions": "Picatz vòstre senhal dins lo camp tèxte çai-jos per confirmar la supression del compte.",
+              "export_theme": "Enregistrar la preconfiguracion",
+              "filtering": "Filtre",
+              "filtering_explanation": "Totes los estatuts amb aqueles mots seràn en silenci, un mot per linha",
+              "follow_export": "Exportar los abonaments",
+              "follow_export_button": "Exportar vòstres abonaments dins un fichièr csv",
+              "follow_export_processing": "Tractament, vos demandarem lèu de telecargar lo fichièr",
+              "follow_import": "Importar los abonaments",
+              "follow_import_error": "Error en important los seguidors",
+              "follows_imported": "Seguidors importats. Lo tractament pòt trigar una estona.",
+              "foreground": "Endavant",
+              "general": "General",
+              "hide_attachments_in_convo": "Rescondre las pèças juntas dins las conversacions",
+              "hide_attachments_in_tl": "Rescondre las pèças juntas",
+              "hide_post_stats": "Amagar los estatistics de publicacion (ex. lo ombre de favorits)",
+              "hide_user_stats": "Amagar las estatisticas de l’utilizaire (ex. lo nombre de seguidors)",
+              "import_followers_from_a_csv_file": "Importar los seguidors d’un fichièr csv",
+              "import_theme": "Cargar un tèma",
+              "inputRadius": "Camps tèxte",
+              "instance_default": "(defaut : {value})",
+              "interfaceLanguage": "Lenga de l’interfàcia",
+              "invalid_theme_imported": "Lo fichièr seleccionat es pas un tèma Pleroma valid. Cap de cambiament es estat fach a vòstre tèma.",
+              "limited_availability": "Pas disponible per vòstre navigador",
+              "links": "Ligams",
+              "lock_account_description": "Limitar vòstre compte als seguidors acceptats solament",
+              "loop_video": "Bocla vidèo",
+              "loop_video_silent_only": "Legir en bocla solament las vidèos sens son (coma los « Gifs » de Mastodon)",
+              "name": "Nom",
+              "name_bio": "Nom & Bio",
+              "new_password": "Nòu senhal",
+              "no_rich_text_description": "Netejar lo format tèxte de totas las publicacions",
+              "notification_visibility": "Tipes de notificacion de mostrar",
+              "notification_visibility_follows": "Abonaments",
+              "notification_visibility_likes": "Aiman",
+              "notification_visibility_mentions": "Mencions",
+              "notification_visibility_repeats": "Repeticions",
+              "nsfw_clickthrough": "Activar lo clic per mostrar los imatges marcats coma pels adults o sensibles",
+              "panelRadius": "Panèls",
+              "pause_on_unfocused": "Pausar la difusion quand l’onglet es pas seleccionat",
+              "presets": "Pre-enregistrats",
+              "profile_background": "Imatge de fons",
+              "profile_banner": "Bandièra del perfil",
+              "profile_tab": "Perfil",
+              "radii_help": "Configurar los caires arredondits de l’interfàcia (en pixèls)",
+              "replies_in_timeline": "Responsas del flux",
+              "reply_link_preview": "Activar l’apercebut en passar la mirga",
+              "reply_visibility_all": "Mostrar totas las responsas",
+              "reply_visibility_following": "Mostrar pas que las responsas que me son destinada a ieu o un utilizaire que seguissi",
+              "reply_visibility_self": "Mostrar pas que las responsas que me son destinadas",
+              "saving_err": "Error en enregistrant los paramètres",
+              "saving_ok": "Paramètres enregistrats",
+              "security_tab": "Seguretat",
+              "set_new_avatar": "Cambiar l’avatar",
+              "set_new_profile_background": "Cambiar l’imatge de fons",
+              "set_new_profile_banner": "Cambiar de bandièra",
+              "settings": "Paramètres",
+              "stop_gifs": "Lançar los GIFs al subrevòl",
+              "streaming": "Activar lo cargament automatic dels novèls estatus en anar amont",
+              "text": "Tèxte",
+              "theme": "Tèma",
+              "theme_help": "Emplegatz los còdis de color hex (#rrggbb) per personalizar vòstre tèma de color.",
+              "tooltipRadius": "Astúcias/Alèrta",
+              "user_settings": "Paramètres utilizaire",
+              "values": {
+                     "false": "non",
+                     "true": "òc"
+              }
+       },
+       "timeline": {
+              "collapse": "Tampar",
+              "conversation": "Conversacion",
+              "error_fetching": "Error en cercant de mesas a jorn",
+              "load_older": "Ne veire mai",
+              "no_retweet_hint": "La publicacion marcada coma pels seguidors solament o dirècte pòt pas èsser repetida",
+              "repeated": "repetit",
+              "show_new": "Ne veire mai",
+              "up_to_date": "A jorn"
+       },
+       "user_card": {
+              "approve": "Validar",
+              "block": "Blocar",
+              "blocked": "Blocat !",
+              "deny": "Refusar",
+              "follow": "Seguir",
+              "followees": "Abonaments",
+              "followers": "Seguidors",
+              "following": "Seguit !",
+              "follows_you": "Vos sèc !",
+              "mute": "Amagar",
+              "muted": "Amagat",
+              "per_day": "per jorn",
+              "remote_follow": "Seguir a distància",
+              "statuses": "Estatuts"
+       },
+       "user_profile": {
+              "timeline_title": "Flux utilizaire"
+       },
+       "who_to_follow": {
+              "more": "Mai",
+              "who_to_follow": "Qui seguir"
+       }
+}
\ No newline at end of file

From d1614c432f8a6e352972740cfed7a394a24ce66d Mon Sep 17 00:00:00 2001
From: Exilat <quentinantonin@free.fr>
Date: Thu, 25 Oct 2018 05:54:35 +0000
Subject: [PATCH 26/60] Update oc.json

---
 src/i18n/oc.json | 398 +++++++++++++++++++++++------------------------
 1 file changed, 199 insertions(+), 199 deletions(-)

diff --git a/src/i18n/oc.json b/src/i18n/oc.json
index 9cb34fbf..2ce666c6 100644
--- a/src/i18n/oc.json
+++ b/src/i18n/oc.json
@@ -1,201 +1,201 @@
 {
-       "chat": {
-              "title": "Messatjariá"
-       },
-       "features_panel": {
-              "chat": "Discutida",
-              "gopher": "Gopher",
-              "media_proxy": "Servidor mandatari dels mèdias",
-              "scope_options": "Opcions d'encastres",
-              "text_limit": "Limit de tèxte",
-              "title": "Foncionalitats",
-              "who_to_follow": "Qui seguir"
-       },
-       "finder": {
-              "error_fetching_user": "Error pendent la recèrca d’un utilizaire",
-              "find_user": "Cercar un utilizaire"
-       },
-       "general": {
-              "apply": "Aplicar",
-              "submit": "Mandar"
-       },
-       "login": {
-              "login": "Connexion",
-              "logout": "Desconnexion",
-              "password": "Senhal",
-              "placeholder": "e.g. lain",
-              "register": "Se marcar",
-              "username": "Nom d’utilizaire"
-       },
-       "nav": {
-              "chat": "Chat local",
-              "friend_requests": "Demandas d'abonament",
-              "mentions": "Notificacions",
-              "public_tl": "Estatuts locals",
-              "timeline": "Flux d’actualitat",
-              "twkn": "Lo malhum conegut"
-       },
-       "notifications": {
-              "broken_favorite": "Estatut desconegut, sèm a lo cercar...",
-              "favorited_you": "a aimat vòstre estatut",
-              "followed_you": "vos a seguit",
-              "load_older": "Cargar las notificaciones mai ancianas",
-              "notifications": "Notficacions",
-              "read": "Legit !",
-              "repeated_you": "a repetit vòstre estatut"
-       },
-       "post_status": {
-              "account_not_locked_warning": "Vòstre compte es pas {0}. Qual que siá pòt vos seguir per veire vòstras publicacions destinadas pas qu'a vòstres seguidors.",
-              "account_not_locked_warning_link": "clavat",
-              "attachments_sensitive": "Marcar las pèças juntas coma sensiblas",
-              "content_type": {
-                     "plain_text": "Tèxte brut"
-              },
-              "content_warning": "Avís de contengut (opcional)",
-              "default": "Escrivètz aquí vòstre estatut.",
-              "direct_warning": "Aquesta publicacion serà pas que visibla pels utilizaires mencionats.",
-              "posting": "Mandadís",
-              "scope": {
-                     "direct": "Dirècte - Publicar pels utilizaires mencionats solament",
-                     "private": "Seguidors solament - Publicar pels sols seguidors",
-                     "public": "Public - Publicar pel flux d’actualitat public",
-                     "unlisted": "Pas listat - Publicar pas pel flux public"
-              }
-       },
-       "registration": {
-              "bio": "Biografia",
-              "email": "Adreça de corrièl",
-              "fullname": "Nom complèt",
-              "password_confirm": "Confirmar lo senhal",
-              "registration": "Inscripcion",
-              "token": "Geton de convidat"
-       },
-       "settings": {
-              "attachmentRadius": "Pèças juntas",
-              "attachments": "Pèças juntas",
-              "autoload": "Activar lo cargament automatic un còp arribat al cap de la pagina",
-              "avatar": "Avatar",
-              "avatarAltRadius": "Avatars (Notificacions)",
-              "avatarRadius": "Avatars",
-              "background": "Rèire plan",
-              "bio": "Biografia",
-              "btnRadius": "Botons",
-              "cBlue": "Blau (Respondre, seguir)",
-              "cGreen": "Verd (Repartajar)",
-              "cOrange": "Irange (Aimar)",
-              "cRed": "Roge (Anullar)",
-              "change_password": "Cambiar lo senhal",
-              "change_password_error": "Una error s’es producha en cambiant lo senhal.",
-              "changed_password": "Senhal corrèctament cambiat !",
-              "collapse_subject": "Replegar las publicacions amb de subjèctes",
-              "confirm_new_password": "Confirmatz lo nòu senhal",
-              "current_avatar": "Vòstre avatar actual",
-              "current_password": "Senhal actual",
-              "current_profile_banner": "Bandièra actuala del perfil",
-              "data_import_export_tab": "Importar / Exportar las donadas",
-              "default_vis": "Nivèl de visibilitat per defaut",
-              "delete_account": "Suprimir lo compte",
-              "delete_account_description": "Suprimir vòstre compte e los messatges per sempre.",
-              "delete_account_error": "Una error s’es producha en suprimir lo compte. S’aquò ten d’arribar mercés de contactar vòstre administrador d’instància.",
-              "delete_account_instructions": "Picatz vòstre senhal dins lo camp tèxte çai-jos per confirmar la supression del compte.",
-              "export_theme": "Enregistrar la preconfiguracion",
-              "filtering": "Filtre",
-              "filtering_explanation": "Totes los estatuts amb aqueles mots seràn en silenci, un mot per linha",
-              "follow_export": "Exportar los abonaments",
-              "follow_export_button": "Exportar vòstres abonaments dins un fichièr csv",
-              "follow_export_processing": "Tractament, vos demandarem lèu de telecargar lo fichièr",
-              "follow_import": "Importar los abonaments",
-              "follow_import_error": "Error en important los seguidors",
-              "follows_imported": "Seguidors importats. Lo tractament pòt trigar una estona.",
-              "foreground": "Endavant",
-              "general": "General",
-              "hide_attachments_in_convo": "Rescondre las pèças juntas dins las conversacions",
-              "hide_attachments_in_tl": "Rescondre las pèças juntas",
-              "hide_post_stats": "Amagar los estatistics de publicacion (ex. lo ombre de favorits)",
-              "hide_user_stats": "Amagar las estatisticas de l’utilizaire (ex. lo nombre de seguidors)",
-              "import_followers_from_a_csv_file": "Importar los seguidors d’un fichièr csv",
-              "import_theme": "Cargar un tèma",
-              "inputRadius": "Camps tèxte",
-              "instance_default": "(defaut : {value})",
-              "interfaceLanguage": "Lenga de l’interfàcia",
-              "invalid_theme_imported": "Lo fichièr seleccionat es pas un tèma Pleroma valid. Cap de cambiament es estat fach a vòstre tèma.",
-              "limited_availability": "Pas disponible per vòstre navigador",
-              "links": "Ligams",
-              "lock_account_description": "Limitar vòstre compte als seguidors acceptats solament",
-              "loop_video": "Bocla vidèo",
-              "loop_video_silent_only": "Legir en bocla solament las vidèos sens son (coma los « Gifs » de Mastodon)",
-              "name": "Nom",
-              "name_bio": "Nom & Bio",
-              "new_password": "Nòu senhal",
-              "no_rich_text_description": "Netejar lo format tèxte de totas las publicacions",
-              "notification_visibility": "Tipes de notificacion de mostrar",
-              "notification_visibility_follows": "Abonaments",
-              "notification_visibility_likes": "Aiman",
-              "notification_visibility_mentions": "Mencions",
-              "notification_visibility_repeats": "Repeticions",
-              "nsfw_clickthrough": "Activar lo clic per mostrar los imatges marcats coma pels adults o sensibles",
-              "panelRadius": "Panèls",
-              "pause_on_unfocused": "Pausar la difusion quand l’onglet es pas seleccionat",
-              "presets": "Pre-enregistrats",
-              "profile_background": "Imatge de fons",
-              "profile_banner": "Bandièra del perfil",
-              "profile_tab": "Perfil",
-              "radii_help": "Configurar los caires arredondits de l’interfàcia (en pixèls)",
-              "replies_in_timeline": "Responsas del flux",
-              "reply_link_preview": "Activar l’apercebut en passar la mirga",
-              "reply_visibility_all": "Mostrar totas las responsas",
-              "reply_visibility_following": "Mostrar pas que las responsas que me son destinada a ieu o un utilizaire que seguissi",
-              "reply_visibility_self": "Mostrar pas que las responsas que me son destinadas",
-              "saving_err": "Error en enregistrant los paramètres",
-              "saving_ok": "Paramètres enregistrats",
-              "security_tab": "Seguretat",
-              "set_new_avatar": "Cambiar l’avatar",
-              "set_new_profile_background": "Cambiar l’imatge de fons",
-              "set_new_profile_banner": "Cambiar de bandièra",
-              "settings": "Paramètres",
-              "stop_gifs": "Lançar los GIFs al subrevòl",
-              "streaming": "Activar lo cargament automatic dels novèls estatus en anar amont",
-              "text": "Tèxte",
-              "theme": "Tèma",
-              "theme_help": "Emplegatz los còdis de color hex (#rrggbb) per personalizar vòstre tèma de color.",
-              "tooltipRadius": "Astúcias/Alèrta",
-              "user_settings": "Paramètres utilizaire",
-              "values": {
-                     "false": "non",
-                     "true": "òc"
-              }
-       },
-       "timeline": {
-              "collapse": "Tampar",
-              "conversation": "Conversacion",
-              "error_fetching": "Error en cercant de mesas a jorn",
-              "load_older": "Ne veire mai",
-              "no_retweet_hint": "La publicacion marcada coma pels seguidors solament o dirècte pòt pas èsser repetida",
-              "repeated": "repetit",
-              "show_new": "Ne veire mai",
-              "up_to_date": "A jorn"
-       },
-       "user_card": {
-              "approve": "Validar",
-              "block": "Blocar",
-              "blocked": "Blocat !",
-              "deny": "Refusar",
-              "follow": "Seguir",
-              "followees": "Abonaments",
-              "followers": "Seguidors",
-              "following": "Seguit !",
-              "follows_you": "Vos sèc !",
-              "mute": "Amagar",
-              "muted": "Amagat",
-              "per_day": "per jorn",
-              "remote_follow": "Seguir a distància",
-              "statuses": "Estatuts"
-       },
-       "user_profile": {
-              "timeline_title": "Flux utilizaire"
-       },
-       "who_to_follow": {
-              "more": "Mai",
-              "who_to_follow": "Qui seguir"
-       }
+  "chat": {
+    "title": "Messatjariá"
+  },
+  "finder": {
+    "error_fetching_user": "Error pendent la recèrca d’un utilizaire",
+    "find_user": "Cercar un utilizaire"
+  },
+  "general": {
+    "apply": "Aplicar",
+    "submit": "Mandar"
+  },
+  "login": {
+    "login": "Connexion",
+    "logout": "Desconnexion",
+    "password": "Senhal",
+    "placeholder": "e.g. lain",
+    "register": "Se marcar",
+    "username": "Nom d’utilizaire"
+  },
+  "nav": {
+    "chat": "Chat local",
+    "mentions": "Notificacions",
+    "public_tl": "Estatuts locals",
+    "timeline": "Flux d’actualitat",
+    "twkn": "Lo malhum conegut",
+    "friend_requests": "Demandas d'abonament"
+  },
+  "notifications": {
+    "favorited_you": "a aimat vòstre estatut",
+    "followed_you": "vos a seguit",
+    "notifications": "Notficacions",
+    "read": "Legit !",
+    "repeated_you": "a repetit vòstre estatut",
+    "broken_favorite": "Estatut desconegut, sèm a lo cercar...",
+    "load_older": "Cargar las notificaciones mai ancianas"
+  },
+  "post_status": {
+    "content_warning": "Avís de contengut (opcional)",
+    "default": "Escrivètz aquí vòstre estatut.",
+    "posting": "Mandadís",
+    "account_not_locked_warning": "Vòstre compte es pas {0}. Qual que siá pòt vos seguir per veire vòstras publicacions destinadas pas qu'a vòstres seguidors.",
+    "account_not_locked_warning_link": "clavat",
+    "attachments_sensitive": "Marcar las pèças juntas coma sensiblas",
+    "content_type": {
+      "plain_text": "Tèxte brut"
+    },
+    "direct_warning": "Aquesta publicacion serà pas que visibla pels utilizaires mencionats.",
+    "scope": {
+      "direct": "Dirècte - Publicar pels utilizaires mencionats solament",
+      "private": "Seguidors solament - Publicar pels sols seguidors",
+      "public": "Public - Publicar pel flux d’actualitat public",
+      "unlisted": "Pas listat - Publicar pas pel flux public"
+    }
+  },
+  "registration": {
+    "bio": "Biografia",
+    "email": "Adreça de corrièl",
+    "fullname": "Nom complèt",
+    "password_confirm": "Confirmar lo senhal",
+    "registration": "Inscripcion",
+    "token": "Geton de convidat"
+  },
+  "settings": {
+    "attachmentRadius": "Pèças juntas",
+    "attachments": "Pèças juntas",
+    "autoload": "Activar lo cargament automatic un còp arribat al cap de la pagina",
+    "avatar": "Avatar",
+    "avatarAltRadius": "Avatars (Notificacions)",
+    "avatarRadius": "Avatars",
+    "background": "Rèire plan",
+    "bio": "Biografia",
+    "btnRadius": "Botons",
+    "cBlue": "Blau (Respondre, seguir)",
+    "cGreen": "Verd (Repartajar)",
+    "cOrange": "Irange (Aimar)",
+    "cRed": "Roge (Anullar)",
+    "change_password": "Cambiar lo senhal",
+    "change_password_error": "Una error s’es producha en cambiant lo senhal.",
+    "changed_password": "Senhal corrèctament cambiat !",
+    "confirm_new_password": "Confirmatz lo nòu senhal",
+    "current_avatar": "Vòstre avatar actual",
+    "current_password": "Senhal actual",
+    "current_profile_banner": "Bandièra actuala del perfil",
+    "delete_account": "Suprimir lo compte",
+    "delete_account_description": "Suprimir vòstre compte e los messatges per sempre.",
+    "delete_account_error": "Una error s’es producha en suprimir lo compte. S’aquò ten d’arribar mercés de contactar vòstre administrador d’instància.",
+    "delete_account_instructions": "Picatz vòstre senhal dins lo camp tèxte çai-jos per confirmar la supression del compte.",
+    "filtering": "Filtre",
+    "filtering_explanation": "Totes los estatuts amb aqueles mots seràn en silenci, un mot per linha",
+    "follow_export": "Exportar los abonaments",
+    "follow_export_button": "Exportar vòstres abonaments dins un fichièr csv",
+    "follow_export_processing": "Tractament, vos demandarem lèu de telecargar lo fichièr",
+    "follow_import": "Importar los abonaments",
+    "follow_import_error": "Error en important los seguidors",
+    "follows_imported": "Seguidors importats. Lo tractament pòt trigar una estona.",
+    "foreground": "Endavant",
+    "hide_attachments_in_convo": "Rescondre las pèças juntas dins las conversacions",
+    "hide_attachments_in_tl": "Rescondre las pèças juntas",
+    "import_followers_from_a_csv_file": "Importar los seguidors d’un fichièr csv",
+    "inputRadius": "Camps tèxte",
+    "links": "Ligams",
+    "name": "Nom",
+    "name_bio": "Nom & Bio",
+    "new_password": "Nòu senhal",
+    "nsfw_clickthrough": "Activar lo clic per mostrar los imatges marcats coma pels adults o sensibles",
+    "panelRadius": "Panèls",
+    "presets": "Pre-enregistrats",
+    "profile_background": "Imatge de fons",
+    "profile_banner": "Bandièra del perfil",
+    "radii_help": "Configurar los caires arredondits de l’interfàcia (en pixèls)",
+    "reply_link_preview": "Activar l’apercebut en passar la mirga",
+    "set_new_avatar": "Cambiar l’avatar",
+    "set_new_profile_background": "Cambiar l’imatge de fons",
+    "set_new_profile_banner": "Cambiar de bandièra",
+    "settings": "Paramètres",
+    "stop_gifs": "Lançar los GIFs al subrevòl",
+    "streaming": "Activar lo cargament automatic dels novèls estatus en anar amont",
+    "text": "Tèxte",
+    "theme": "Tèma",
+    "theme_help": "Emplegatz los còdis de color hex (#rrggbb) per personalizar vòstre tèma de color.",
+    "tooltipRadius": "Astúcias/Alèrta",
+    "user_settings": "Paramètres utilizaire",
+    "collapse_subject": "Replegar las publicacions amb de subjèctes",
+    "data_import_export_tab": "Importar / Exportar las donadas",
+    "default_vis": "Nivèl de visibilitat per defaut",
+    "export_theme": "Enregistrar la preconfiguracion",
+    "general": "General",
+    "hide_post_stats": "Amagar los estatistics de publicacion (ex. lo ombre de favorits)",
+    "hide_user_stats": "Amagar las estatisticas de l’utilizaire (ex. lo nombre de seguidors)",
+    "import_theme": "Cargar un tèma",
+    "instance_default": "(defaut : {value})",
+    "interfaceLanguage": "Lenga de l’interfàcia",
+    "invalid_theme_imported": "Lo fichièr seleccionat es pas un tèma Pleroma valid. Cap de cambiament es estat fach a vòstre tèma.",
+    "limited_availability": "Pas disponible per vòstre navigador",
+    "lock_account_description": "Limitar vòstre compte als seguidors acceptats solament",
+    "loop_video": "Bocla vidèo",
+    "loop_video_silent_only": "Legir en bocla solament las vidèos sens son (coma los « Gifs » de Mastodon)",
+    "notification_visibility": "Tipes de notificacion de mostrar",
+    "notification_visibility_follows": "Abonaments",
+    "notification_visibility_likes": "Aiman",
+    "notification_visibility_mentions": "Mencions",
+    "notification_visibility_repeats": "Repeticions",
+    "no_rich_text_description": "Netejar lo format tèxte de totas las publicacions",
+    "pause_on_unfocused": "Pausar la difusion quand l’onglet es pas seleccionat",
+    "profile_tab": "Perfil",
+    "replies_in_timeline": "Responsas del flux",
+    "reply_visibility_all": "Mostrar totas las responsas",
+    "reply_visibility_following": "Mostrar pas que las responsas que me son destinada a ieu o un utilizaire que seguissi",
+    "reply_visibility_self": "Mostrar pas que las responsas que me son destinadas",
+    "saving_err": "Error en enregistrant los paramètres",
+    "saving_ok": "Paramètres enregistrats",
+    "security_tab": "Seguretat",
+    "values": {
+      "false": "non",
+      "true": "òc"
+    }
+  },
+  "timeline": {
+    "collapse": "Tampar",
+    "conversation": "Conversacion",
+    "error_fetching": "Error en cercant de mesas a jorn",
+    "load_older": "Ne veire mai",
+    "repeated": "repetit",
+    "show_new": "Ne veire mai",
+    "up_to_date": "A jorn",
+    "no_retweet_hint": "La publicacion marcada coma pels seguidors solament o dirècte pòt pas èsser repetida"
+  },
+  "user_card": {
+    "block": "Blocar",
+    "blocked": "Blocat !",
+    "follow": "Seguir",
+    "followees": "Abonaments",
+    "followers": "Seguidors",
+    "following": "Seguit !",
+    "follows_you": "Vos sèc !",
+    "mute": "Amagar",
+    "muted": "Amagat",
+    "per_day": "per jorn",
+    "remote_follow": "Seguir a distància",
+    "statuses": "Estatuts",
+    "approve": "Validar",
+    "deny": "Refusar"
+  },
+  "user_profile": {
+    "timeline_title": "Flux utilizaire"
+  },
+  "features_panel": {
+    "chat": "Discutida",
+    "gopher": "Gopher",
+    "media_proxy": "Servidor mandatari dels mèdias",
+    "scope_options": "Opcions d'encastres",
+    "text_limit": "Limit de tèxte",
+    "title": "Foncionalitats",
+    "who_to_follow": "Qui seguir"
+  },
+  "who_to_follow": {
+    "more": "Mai",
+    "who_to_follow": "Qui seguir"
+  }
 }
\ No newline at end of file

From c61e658c1d5b91fddc1851f99191a166c4b8057a Mon Sep 17 00:00:00 2001
From: silkevicious <silkevicious@tuta.io>
Date: Thu, 25 Oct 2018 09:36:15 +0000
Subject: [PATCH 27/60] Updated italian translation

---
 src/i18n/it.json | 182 ++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 163 insertions(+), 19 deletions(-)

diff --git a/src/i18n/it.json b/src/i18n/it.json
index c61e8c71..8f69e7c1 100644
--- a/src/i18n/it.json
+++ b/src/i18n/it.json
@@ -1,47 +1,129 @@
 {
   "general": {
-    "submit": "Invia"
+    "submit": "Invia",
+    "apply": "Applica"
   },
   "nav": {
     "mentions": "Menzioni",
     "public_tl": "Sequenza temporale pubblica",
     "timeline": "Sequenza temporale",
-    "twkn": "L'intiera rete conosciuta"
+    "twkn": "L'intera rete conosciuta",
+    "chat": "Chat Locale",
+    "friend_requests": "Richieste di Seguirti"
   },
   "notifications": {
-    "followed_you": "ti ha seguito",
+    "followed_you": "ti segue",
     "notifications": "Notifiche",
-    "read": "Leggi!"
+    "read": "Leggi!",
+    "broken_favorite": "Stato sconosciuto, lo sto cercando...",
+    "favorited_you": "ha messo mi piace al tuo stato",
+    "load_older": "Carica notifiche più vecchie",
+    "repeated_you": "ha condiviso il tuo stato"
   },
   "settings": {
     "attachments": "Allegati",
-    "autoload": "Abilita caricamento automatico quando si raggiunge il fondo schermo",
+    "autoload": "Abilita caricamento automatico quando si raggiunge fondo pagina",
     "avatar": "Avatar",
     "bio": "Introduzione",
-    "current_avatar": "Il tuo attuale avatar",
-    "current_profile_banner": "Sfondo attuale",
+    "current_avatar": "Il tuo avatar attuale",
+    "current_profile_banner": "Il tuo banner attuale",
     "filtering": "Filtri",
-    "filtering_explanation": "Filtra via le notifiche che contengono le seguenti parole (inserisci rigo per rigo le parole di innesco)",
+    "filtering_explanation": "Tutti i post contenenti queste parole saranno silenziati, uno per linea",
     "hide_attachments_in_convo": "Nascondi gli allegati presenti nelle conversazioni",
     "hide_attachments_in_tl": "Nascondi gli allegati presenti nella sequenza temporale",
     "name": "Nome",
     "name_bio": "Nome & Introduzione",
-    "nsfw_clickthrough": "Abilita la trasparenza degli allegati NSFW",
+    "nsfw_clickthrough": "Abilita il click per visualizzare gli allegati segnati come NSFW",
     "profile_background": "Sfondo della tua pagina",
-    "profile_banner": "Sfondo del tuo profilo",
-    "reply_link_preview": "Ability il reply-link preview al passaggio del mouse",
+    "profile_banner": "Banner del tuo profilo",
+    "reply_link_preview": "Abilita il link per la risposta al passaggio del mouse",
     "set_new_avatar": "Scegli un nuovo avatar",
     "set_new_profile_background": "Scegli un nuovo sfondo per la tua pagina",
-    "set_new_profile_banner": "Scegli un nuovo sfondo per il tuo profilo",
-    "settings": "Settaggi",
+    "set_new_profile_banner": "Scegli un nuovo banner per il tuo profilo",
+    "settings": "Impostazioni",
     "theme": "Tema",
-    "user_settings": "Configurazione dell'utente"
+    "user_settings": "Impostazioni Utente",
+    "attachmentRadius": "Allegati",
+    "avatarAltRadius": "Avatar (Notifiche)",
+    "avatarRadius": "Avatar",
+    "background": "Sfondo",
+    "btnRadius": "Pulsanti",
+    "cBlue": "Blu (Rispondere, seguire)",
+    "cGreen": "Verde (Condividi)",
+    "cOrange": "Arancio (Mi piace)",
+    "cRed": "Rosso (Annulla)",
+    "change_password": "Cambia Password",
+    "change_password_error": "C'è stato un problema durante il cambiamento della password.",
+    "changed_password": "Password cambiata correttamente!",
+    "collapse_subject": "Riduci post che hanno un oggetto",
+    "confirm_new_password": "Conferma la nuova password",
+    "current_password": "Password attuale",
+    "data_import_export_tab": "Importa / Esporta Dati",
+    "default_vis": "Visibilità predefinita dei post",
+    "delete_account": "Elimina Account",
+    "delete_account_description": "Elimina definitivamente il tuo account e tutti i tuoi messaggi.",
+    "delete_account_error": "C'è stato un problema durante l'eliminazione del tuo account. Se il problema persiste contatta l'amministratore della tua istanza.",
+    "delete_account_instructions": "Digita la tua password nel campo sottostante per confermare l'eliminazione dell'account.",
+    "export_theme": "Salva settaggi",
+    "follow_export": "Esporta la lista di chi segui",
+    "follow_export_button": "Esporta la lista di chi segui in un file csv",
+    "follow_export_processing": "Sto elaborando, presto ti sarà chiesto di scaricare il tuo file",
+    "follow_import": "Importa la lista di chi segui",
+    "follow_import_error": "Errore nell'importazione della lista di chi segui",
+    "follows_imported": "Importazione riuscita! L'elaborazione richiederà un po' di tempo.",
+    "foreground": "In primo piano",
+    "general": "Generale",
+    "hide_post_stats": "Nascondi statistiche dei post (es. il numero di mi piace)",
+    "hide_user_stats": "Nascondi statistiche dell'utente (es. il numero di chi ti segue)",
+    "import_followers_from_a_csv_file": "Importa una lista di chi segui da un file csv",
+    "import_theme": "Carica settaggi",
+    "inputRadius": "Campi di testo",
+    "instance_default": "(predefinito: {value})",
+    "interfaceLanguage": "Linguaggio dell'interfaccia",
+    "invalid_theme_imported": "Il file selezionato non è un file di tema per Pleroma supportato. Il tuo tema non è stato modificato.",
+    "limited_availability": "Non disponibile nel tuo browser",
+    "links": "Collegamenti",
+    "lock_account_description": "Limita il tuo account solo per contatti approvati",
+    "loop_video": "Riproduci video in ciclo continuo",
+    "loop_video_silent_only": "Riproduci solo video senza audio in ciclo continuo (es. le gif di Mastodon)",
+    "new_password": "Nuova password",
+    "notification_visibility": "Tipi di notifiche da mostrare",
+    "notification_visibility_follows": "Nuove persone ti seguono",
+    "notification_visibility_likes": "Mi piace",
+    "notification_visibility_mentions": "Menzioni",
+    "notification_visibility_repeats": "Condivisioni",
+    "no_rich_text_description": "Togli la formattazione del testo da tutti i post",
+    "panelRadius": "Pannelli",
+    "pause_on_unfocused": "Metti in pausa l'aggiornamento continuo quando la scheda non è in primo piano",
+    "presets": "Valori predefiniti",
+    "profile_tab": "Profilo",
+    "radii_help": "Imposta l'arrotondamento dei bordi (in pixel)",
+    "replies_in_timeline": "Risposte nella sequenza temporale",
+    "reply_visibility_all": "Mostra tutte le risposte",
+    "reply_visibility_following": "Mostra solo le risposte dirette a me o agli utenti che seguo",
+    "reply_visibility_self": "Mostra solo risposte dirette a me",
+    "saving_err": "Errore nel salvataggio delle impostazioni",
+    "saving_ok": "Impostazioni salvate",
+    "security_tab": "Sicurezza",
+    "stop_gifs": "Riproduci GIF al passaggio del cursore del mouse",
+    "streaming": "Abilita aggiornamento automatico dei nuovi post quando si è in alto alla pagina",
+    "text": "Testo",
+    "theme_help": "Usa codici colore esadecimali (#rrggbb) per personalizzare il tuo schema di colori.",
+    "tooltipRadius": "Descrizioni/avvisi",
+    "values": {
+      "false": "no",
+      "true": "si"
+    }
   },
   "timeline": {
-    "error_fetching": "Errori nel prelievo aggiornamenti",
+    "error_fetching": "Errore nel prelievo aggiornamenti",
     "load_older": "Carica messaggi più vecchi",
     "show_new": "Mostra nuovi",
-    "up_to_date": "Aggiornato"
+    "up_to_date": "Aggiornato",
+    "collapse": "Riduci",
+    "conversation": "Conversazione",
+    "no_retweet_hint": "La visibilità del post è impostata solo per chi ti segue o messaggio diretto e non può essere condiviso",
+    "repeated": "condiviso"
   },
   "user_card": {
     "follow": "Segui",
@@ -49,9 +131,71 @@
     "followers": "Chi ti segue",
     "following": "Lo stai seguendo!",
     "follows_you": "Ti segue!",
-    "mute": "Ammutolisci",
-    "muted": "Ammutoliti",
+    "mute": "Silenzia",
+    "muted": "Silenziato",
     "per_day": "al giorno",
-    "statuses": "Messaggi"
+    "statuses": "Messaggi",
+    "approve": "Approva",
+    "block": "Blocca",
+    "blocked": "Bloccato!",
+    "deny": "Nega",
+    "remote_follow": "Segui da remoto"
+  },
+  "chat": {
+    "title": "Chat"
+  },
+  "features_panel": {
+    "chat": "Chat",
+    "gopher": "Gopher",
+    "media_proxy": "Media proxy",
+    "scope_options": "Opzioni di visibilità",
+    "text_limit": "Lunghezza limite",
+    "title": "Caratteristiche",
+    "who_to_follow": "Chi seguire"
+  },
+  "finder": {
+    "error_fetching_user": "Errore nel recupero dell'utente",
+    "find_user": "Trova utente"
+  },
+  "login": {
+    "login": "Accedi",
+    "logout": "Disconnettiti",
+    "password": "Password",
+    "placeholder": "es. lain",
+    "register": "Registrati",
+    "username": "Nome utente"
+  },
+  "post_status": {
+    "account_not_locked_warning": "Il tuo account non è {0}. Chiunque può seguirti e vedere i tuoi post riservati a chi ti segue.",
+    "account_not_locked_warning_link": "bloccato",
+    "attachments_sensitive": "Segna allegati come sensibili",
+    "content_type": {
+      "plain_text": "Testo normale"
+    },
+    "content_warning": "Oggetto (facoltativo)",
+    "default": "Appena atterrato in L.A.",
+    "direct_warning": "Questo post sarà visibile solo dagli utenti menzionati.",
+    "posting": "Pubblica",
+    "scope": {
+      "direct": "Diretto - Pubblicato solo per gli utenti menzionati",
+      "private": "Solo per chi ti segue - Visibile solo da chi ti segue",
+      "public": "Pubblico - Visibile sulla sequenza temporale pubblica",
+      "unlisted": "Non elencato - Non visibile sulla sequenza temporale pubblica"
+    }
+  },
+  "registration": {
+    "bio": "Introduzione",
+    "email": "Email",
+    "fullname": "Nome visualizzato",
+    "password_confirm": "Conferma password",
+    "registration": "Registrazione",
+    "token": "Codice d'invito"
+  },
+  "user_profile": {
+    "timeline_title": "Sequenza Temporale dell'Utente"
+  },
+  "who_to_follow": {
+    "more": "Più",
+    "who_to_follow": "Chi seguire"
   }
 }

From 0a261d2a7d04e457b53885bca1c6c87fe953db9b Mon Sep 17 00:00:00 2001
From: Exilat <quentinantonin@free.fr>
Date: Thu, 25 Oct 2018 17:19:31 +0000
Subject: [PATCH 28/60] Adds Occitan locale

---
 static/timeago-oc.json | 10 ++++++++++
 1 file changed, 10 insertions(+)
 create mode 100644 static/timeago-oc.json

diff --git a/static/timeago-oc.json b/static/timeago-oc.json
new file mode 100644
index 00000000..7e439871
--- /dev/null
+++ b/static/timeago-oc.json
@@ -0,0 +1,10 @@
+[
+  "ara meteis",
+  ["fa %s s",     "fa %s s"],
+  ["fa %s min",   "fa %s min"],
+  ["fa %s h",     "fa %s h"],
+  ["fa %s dia",   "fa %s jorns"],
+  ["fa %s setm.", "fa %s setm."],
+  ["fa %s mes",   "fa %s meses"],
+  ["fa %s any",   "fa %s ans"]
+]

From 01aba3f9c6fa89106cf5b6322b7919f26e92b21d Mon Sep 17 00:00:00 2001
From: Hakaba Hitoyo <hakabahitoyo@example.com>
Date: Fri, 26 Oct 2018 10:13:53 +0900
Subject: [PATCH 29/60] adapt to destructive change of api

---
 src/main.js | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/main.js b/src/main.js
index 1b1780df..53cee313 100644
--- a/src/main.js
+++ b/src/main.js
@@ -217,9 +217,20 @@ window.fetch('/nodeinfo/2.0.json')
   .then((res) => res.json())
   .then((data) => {
     const metadata = data.metadata
-    store.dispatch('setInstanceOption', { name: 'mediaProxyAvailable', value: data.metadata.mediaProxy })
-    store.dispatch('setInstanceOption', { name: 'chatAvailable', value: data.metadata.chat })
-    store.dispatch('setInstanceOption', { name: 'gopherAvailable', value: data.metadata.gopher })
+
+    const features = metadata.features
+    store.dispatch('setInstanceOption', {
+      name: 'mediaProxyAvailable',
+      value: features.findIndex((element, index, array) => (element === 'media_proxy')) >= 0
+    })
+    store.dispatch('setInstanceOption', {
+      name: 'chatAvailable',
+      value: features.findIndex((element, index, array) => (element === 'chat')) >= 0
+    })
+    store.dispatch('setInstanceOption', {
+      name: 'gopherAvailable',
+      value: features.findIndex((element, index, array) => (element === 'gopher')) >= 0
+    })
 
     const suggestions = metadata.suggestions
     store.dispatch('setInstanceOption', { name: 'suggestionsEnabled', value: suggestions.enabled })

From 630c6e3e4417be8d79bf3ade011f07d78bf99b44 Mon Sep 17 00:00:00 2001
From: hakabahitoyo <hakabahitoyo@example.com>
Date: Fri, 26 Oct 2018 15:08:51 +0900
Subject: [PATCH 30/60] simplify code

---
 src/main.js | 15 +++------------
 1 file changed, 3 insertions(+), 12 deletions(-)

diff --git a/src/main.js b/src/main.js
index 53cee313..b71ae4cb 100644
--- a/src/main.js
+++ b/src/main.js
@@ -219,18 +219,9 @@ window.fetch('/nodeinfo/2.0.json')
     const metadata = data.metadata
 
     const features = metadata.features
-    store.dispatch('setInstanceOption', {
-      name: 'mediaProxyAvailable',
-      value: features.findIndex((element, index, array) => (element === 'media_proxy')) >= 0
-    })
-    store.dispatch('setInstanceOption', {
-      name: 'chatAvailable',
-      value: features.findIndex((element, index, array) => (element === 'chat')) >= 0
-    })
-    store.dispatch('setInstanceOption', {
-      name: 'gopherAvailable',
-      value: features.findIndex((element, index, array) => (element === 'gopher')) >= 0
-    })
+    store.dispatch('setInstanceOption', { name: 'mediaProxyAvailable', value: features.includes('media_proxy') })
+    store.dispatch('setInstanceOption', { name: 'chatAvailable', value: features.includes('chat') })
+    store.dispatch('setInstanceOption', { name: 'gopherAvailable', value: features.includes('gopher') })
 
     const suggestions = metadata.suggestions
     store.dispatch('setInstanceOption', { name: 'suggestionsEnabled', value: suggestions.enabled })

From 9af204b293a9c1b15e472423a4badff505fd662a Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Fri, 26 Oct 2018 15:16:23 +0200
Subject: [PATCH 31/60] Move login to oauth.

---
 src/boot/after_store.js                       | 172 +++
 src/components/login_form/login_form.js       |   8 +
 src/components/login_form/login_form.vue      |  18 +-
 .../oauth_callback/oauth_callback.js          |  20 +
 .../oauth_callback/oauth_callback.vue         |   5 +
 src/lib/persisted_state.js                    |  56 +-
 src/main.js                                   | 211 +---
 src/modules/oauth.js                          |  18 +
 src/modules/users.js                          |  10 +-
 src/services/api/api.service.js               |  16 +-
 src/services/new_api/oauth.js                 |  64 ++
 yarn.lock                                     | 977 ++++++++++++++++++
 12 files changed, 1332 insertions(+), 243 deletions(-)
 create mode 100644 src/boot/after_store.js
 create mode 100644 src/components/oauth_callback/oauth_callback.js
 create mode 100644 src/components/oauth_callback/oauth_callback.vue
 create mode 100644 src/modules/oauth.js
 create mode 100644 src/services/new_api/oauth.js

diff --git a/src/boot/after_store.js b/src/boot/after_store.js
new file mode 100644
index 00000000..ca255b5d
--- /dev/null
+++ b/src/boot/after_store.js
@@ -0,0 +1,172 @@
+import Vue from 'vue'
+import VueRouter from 'vue-router'
+
+import App from '../App.vue'
+import PublicTimeline from '../components/public_timeline/public_timeline.vue'
+import PublicAndExternalTimeline from '../components/public_and_external_timeline/public_and_external_timeline.vue'
+import FriendsTimeline from '../components/friends_timeline/friends_timeline.vue'
+import TagTimeline from '../components/tag_timeline/tag_timeline.vue'
+import ConversationPage from '../components/conversation-page/conversation-page.vue'
+import Mentions from '../components/mentions/mentions.vue'
+import UserProfile from '../components/user_profile/user_profile.vue'
+import Settings from '../components/settings/settings.vue'
+import Registration from '../components/registration/registration.vue'
+import UserSettings from '../components/user_settings/user_settings.vue'
+import FollowRequests from '../components/follow_requests/follow_requests.vue'
+import OAuthCallback from '../components/oauth_callback/oauth_callback.vue'
+
+const afterStoreSetup = ({store, i18n}) => {
+  window.fetch('/api/statusnet/config.json')
+    .then((res) => res.json())
+    .then((data) => {
+      const {name, closed: registrationClosed, textlimit, server} = data.site
+
+      store.dispatch('setInstanceOption', { name: 'name', value: name })
+      store.dispatch('setInstanceOption', { name: 'registrationOpen', value: (registrationClosed === '0') })
+      store.dispatch('setInstanceOption', { name: 'textlimit', value: parseInt(textlimit) })
+      store.dispatch('setInstanceOption', { name: 'server', value: server })
+
+      var apiConfig = data.site.pleromafe
+
+      window.fetch('/static/config.json')
+        .then((res) => res.json())
+        .catch((err) => {
+          console.warn('Failed to load static/config.json, continuing without it.')
+          console.warn(err)
+          return {}
+        })
+        .then((staticConfig) => {
+          // This takes static config and overrides properties that are present in apiConfig
+          var config = Object.assign({}, staticConfig, apiConfig)
+
+          var theme = (config.theme)
+          var background = (config.background)
+          var hidePostStats = (config.hidePostStats)
+          var hideUserStats = (config.hideUserStats)
+          var logo = (config.logo)
+          var logoMask = (typeof config.logoMask === 'undefined' ? true : config.logoMask)
+          var logoMargin = (typeof config.logoMargin === 'undefined' ? 0 : config.logoMargin)
+          var redirectRootNoLogin = (config.redirectRootNoLogin)
+          var redirectRootLogin = (config.redirectRootLogin)
+          var chatDisabled = (config.chatDisabled)
+          var showInstanceSpecificPanel = (config.showInstanceSpecificPanel)
+          var scopeOptionsEnabled = (config.scopeOptionsEnabled)
+          var formattingOptionsEnabled = (config.formattingOptionsEnabled)
+          var collapseMessageWithSubject = (config.collapseMessageWithSubject)
+
+          store.dispatch('setInstanceOption', { name: 'theme', value: theme })
+          store.dispatch('setInstanceOption', { name: 'background', value: background })
+          store.dispatch('setInstanceOption', { name: 'hidePostStats', value: hidePostStats })
+          store.dispatch('setInstanceOption', { name: 'hideUserStats', value: hideUserStats })
+          store.dispatch('setInstanceOption', { name: 'logo', value: logo })
+          store.dispatch('setInstanceOption', { name: 'logoMask', value: logoMask })
+          store.dispatch('setInstanceOption', { name: 'logoMargin', value: logoMargin })
+          store.dispatch('setInstanceOption', { name: 'redirectRootNoLogin', value: redirectRootNoLogin })
+          store.dispatch('setInstanceOption', { name: 'redirectRootLogin', value: redirectRootLogin })
+          store.dispatch('setInstanceOption', { name: 'showInstanceSpecificPanel', value: showInstanceSpecificPanel })
+          store.dispatch('setInstanceOption', { name: 'scopeOptionsEnabled', value: scopeOptionsEnabled })
+          store.dispatch('setInstanceOption', { name: 'formattingOptionsEnabled', value: formattingOptionsEnabled })
+          store.dispatch('setInstanceOption', { name: 'collapseMessageWithSubject', value: collapseMessageWithSubject })
+          if (chatDisabled) {
+            store.dispatch('disableChat')
+          }
+
+          const routes = [
+            { name: 'root',
+              path: '/',
+              redirect: to => {
+                return (store.state.users.currentUser
+                        ? store.state.instance.redirectRootLogin
+                        : store.state.instance.redirectRootNoLogin) || '/main/all'
+              }},
+            { path: '/main/all', component: PublicAndExternalTimeline },
+            { path: '/main/public', component: PublicTimeline },
+            { path: '/main/friends', component: FriendsTimeline },
+            { path: '/tag/:tag', component: TagTimeline },
+            { name: 'conversation', path: '/notice/:id', component: ConversationPage, meta: { dontScroll: true } },
+            { name: 'user-profile', path: '/users/:id', component: UserProfile },
+            { name: 'mentions', path: '/:username/mentions', component: Mentions },
+            { name: 'settings', path: '/settings', component: Settings },
+            { name: 'registration', path: '/registration', component: Registration },
+            { name: 'registration', path: '/registration/:token', component: Registration },
+            { name: 'friend-requests', path: '/friend-requests', component: FollowRequests },
+            { name: 'user-settings', path: '/user-settings', component: UserSettings },
+            { name: 'ouath-callback', path: '/oauth-callback', component: OAuthCallback, props: (route) => ({ code: route.query.code }) }
+          ]
+
+          const router = new VueRouter({
+            mode: 'history',
+            routes,
+            scrollBehavior: (to, from, savedPosition) => {
+              if (to.matched.some(m => m.meta.dontScroll)) {
+                return false
+              }
+              return savedPosition || { x: 0, y: 0 }
+            }
+          })
+
+          /* eslint-disable no-new */
+          new Vue({
+            router,
+            store,
+            i18n,
+            el: '#app',
+            render: h => h(App)
+          })
+        })
+    })
+
+  window.fetch('/static/terms-of-service.html')
+    .then((res) => res.text())
+    .then((html) => {
+      store.dispatch('setInstanceOption', { name: 'tos', value: html })
+    })
+
+  window.fetch('/api/pleroma/emoji.json')
+    .then(
+      (res) => res.json()
+        .then(
+          (values) => {
+            const emoji = Object.keys(values).map((key) => {
+              return { shortcode: key, image_url: values[key] }
+            })
+            store.dispatch('setInstanceOption', { name: 'customEmoji', value: emoji })
+            store.dispatch('setInstanceOption', { name: 'pleromaBackend', value: true })
+          },
+          (failure) => {
+            store.dispatch('setInstanceOption', { name: 'pleromaBackend', value: false })
+          }
+        ),
+      (error) => console.log(error)
+    )
+
+  window.fetch('/static/emoji.json')
+    .then((res) => res.json())
+    .then((values) => {
+      const emoji = Object.keys(values).map((key) => {
+        return { shortcode: key, image_url: false, 'utf': values[key] }
+      })
+      store.dispatch('setInstanceOption', { name: 'emoji', value: emoji })
+    })
+
+  window.fetch('/instance/panel.html')
+    .then((res) => res.text())
+    .then((html) => {
+      store.dispatch('setInstanceOption', { name: 'instanceSpecificPanelContent', value: html })
+    })
+
+  window.fetch('/nodeinfo/2.0.json')
+    .then((res) => res.json())
+    .then((data) => {
+      const metadata = data.metadata
+      store.dispatch('setInstanceOption', { name: 'mediaProxyAvailable', value: data.metadata.mediaProxy })
+      store.dispatch('setInstanceOption', { name: 'chatAvailable', value: data.metadata.chat })
+      store.dispatch('setInstanceOption', { name: 'gopherAvailable', value: data.metadata.gopher })
+
+      const suggestions = metadata.suggestions
+      store.dispatch('setInstanceOption', { name: 'suggestionsEnabled', value: suggestions.enabled })
+      store.dispatch('setInstanceOption', { name: 'suggestionsWeb', value: suggestions.web })
+    })
+}
+
+export default afterStoreSetup
diff --git a/src/components/login_form/login_form.js b/src/components/login_form/login_form.js
index 4405fb92..b1899666 100644
--- a/src/components/login_form/login_form.js
+++ b/src/components/login_form/login_form.js
@@ -1,3 +1,4 @@
+import oauthApi from "../../services/new_api/oauth.js";
 const LoginForm = {
   data: () => ({
     user: {},
@@ -8,6 +9,13 @@ const LoginForm = {
     registrationOpen () { return this.$store.state.instance.registrationOpen }
   },
   methods: {
+    oAuthLogin () {
+      oauthApi.login({
+        oauth: this.$store.state.oauth,
+        instance: this.$store.state.instance.server,
+        commit: this.$store.commit
+      });
+    },
     submit () {
       this.$store.dispatch('loginUser', this.user).then(
         () => {},
diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue
index b7fed48a..aaaca777 100644
--- a/src/components/login_form/login_form.vue
+++ b/src/components/login_form/login_form.vue
@@ -5,23 +5,9 @@
       {{$t('login.login')}}
     </div>
     <div class="panel-body">
-      <form v-on:submit.prevent='submit(user)' class='login-form'>
+      <form v-on:submit.prevent='oAuthLogin'  class="login-form">
         <div class='form-group'>
-          <label for='username'>{{$t('login.username')}}</label>
-          <input :disabled="loggingIn" v-model='user.username' class='form-control' id='username' v-bind:placeholder="$t('login.placeholder')">
-        </div>
-        <div class='form-group'>
-          <label for='password'>{{$t('login.password')}}</label>
-          <input :disabled="loggingIn" v-model='user.password' class='form-control' id='password' type='password'>
-        </div>
-        <div class='form-group'>
-          <div class='login-bottom'>
-            <div><router-link :to="{name: 'registration'}" v-if='registrationOpen' class='register'>{{$t('login.register')}}</router-link></div>
-            <button :disabled="loggingIn" type='submit' class='btn btn-default'>{{$t('login.login')}}</button>
-          </div>
-        </div>
-        <div v-if="authError" class='form-group'>
-          <div class='alert error'>{{authError}}</div>
+          <button class="btn btn-default">Login with OAuth</button>
         </div>
       </form>
     </div>
diff --git a/src/components/oauth_callback/oauth_callback.js b/src/components/oauth_callback/oauth_callback.js
new file mode 100644
index 00000000..60a15412
--- /dev/null
+++ b/src/components/oauth_callback/oauth_callback.js
@@ -0,0 +1,20 @@
+import oauth from '../../services/new_api/oauth.js'
+
+const oac = {
+  props: ['code'],
+  mounted () {
+    if (this.code) {
+      oauth.getToken({
+        app: this.$store.state.oauth,
+        instance: this.$store.state.instance.server,
+        code: this.code
+      }).then((result) => {
+        this.$store.commit("setToken", result.access_token)
+        this.$store.dispatch("loginUser", result.access_token)
+        this.$router.push('/main/friends')
+      })
+    }
+  }
+}
+
+export default oac
diff --git a/src/components/oauth_callback/oauth_callback.vue b/src/components/oauth_callback/oauth_callback.vue
new file mode 100644
index 00000000..9c806916
--- /dev/null
+++ b/src/components/oauth_callback/oauth_callback.vue
@@ -0,0 +1,5 @@
+<template>
+  <h1>...</h1>
+</template>
+
+<script src="./oauth_callback.js"></script>
diff --git a/src/lib/persisted_state.js b/src/lib/persisted_state.js
index 006107e2..002f92b4 100644
--- a/src/lib/persisted_state.js
+++ b/src/lib/persisted_state.js
@@ -17,7 +17,9 @@ const saveImmedeatelyActions = [
   'clearCurrentUser',
   'setCurrentUser',
   'setHighlight',
-  'setOption'
+  'setOption',
+  'setClientData',
+  'setToken'
 ]
 
 const defaultStorage = (() => {
@@ -43,8 +45,8 @@ export default function createPersistedState ({
   storage = defaultStorage,
   subscriber = store => handler => store.subscribe(handler)
 } = {}) {
-  return store => {
-    getState(key, storage).then((savedState) => {
+  return getState(key, storage).then((savedState) => {
+    return store => {
       try {
         if (typeof savedState === 'object') {
           // build user cache
@@ -67,36 +69,36 @@ export default function createPersistedState ({
             value: store.state.config.customTheme
           })
         }
-        if (store.state.users.lastLoginName) {
-          store.dispatch('loginUser', {username: store.state.users.lastLoginName, password: 'xxx'})
+        if (store.state.oauth.token) {
+          console.log(store.state.oauth)
+          store.dispatch('loginUser', store.state.oauth.token)
         }
         loaded = true
       } catch (e) {
         console.log("Couldn't load state")
         loaded = true
       }
-    })
-
-    subscriber(store)((mutation, state) => {
-      try {
-        if (saveImmedeatelyActions.includes(mutation.type)) {
-          setState(key, reducer(state, paths), storage)
-            .then(success => {
-              if (typeof success !== 'undefined') {
-                if (mutation.type === 'setOption') {
-                  store.dispatch('settingsSaved', { success })
+      subscriber(store)((mutation, state) => {
+        try {
+          if (saveImmedeatelyActions.includes(mutation.type)) {
+            setState(key, reducer(state, paths), storage)
+              .then(success => {
+                if (typeof success !== 'undefined') {
+                  if (mutation.type === 'setOption') {
+                    store.dispatch('settingsSaved', { success })
+                  }
                 }
-              }
-            }, error => {
-              if (mutation.type === 'setOption') {
-                store.dispatch('settingsSaved', { error })
-              }
-            })
+              }, error => {
+                if (mutation.type === 'setOption') {
+                  store.dispatch('settingsSaved', { error })
+                }
+              })
+          }
+        } catch (e) {
+          console.log("Couldn't persist state:")
+          console.log(e)
         }
-      } catch (e) {
-        console.log("Couldn't persist state:")
-        console.log(e)
-      }
-    })
-  }
+      })
+    }
+  })
 }
diff --git a/src/main.js b/src/main.js
index 1b1780df..9f094ada 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1,18 +1,6 @@
 import Vue from 'vue'
 import VueRouter from 'vue-router'
 import Vuex from 'vuex'
-import App from './App.vue'
-import PublicTimeline from './components/public_timeline/public_timeline.vue'
-import PublicAndExternalTimeline from './components/public_and_external_timeline/public_and_external_timeline.vue'
-import FriendsTimeline from './components/friends_timeline/friends_timeline.vue'
-import TagTimeline from './components/tag_timeline/tag_timeline.vue'
-import ConversationPage from './components/conversation-page/conversation-page.vue'
-import Mentions from './components/mentions/mentions.vue'
-import UserProfile from './components/user_profile/user_profile.vue'
-import Settings from './components/settings/settings.vue'
-import Registration from './components/registration/registration.vue'
-import UserSettings from './components/user_settings/user_settings.vue'
-import FollowRequests from './components/follow_requests/follow_requests.vue'
 
 import interfaceModule from './modules/interface.js'
 import instanceModule from './modules/instance.js'
@@ -21,6 +9,7 @@ import usersModule from './modules/users.js'
 import apiModule from './modules/api.js'
 import configModule from './modules/config.js'
 import chatModule from './modules/chat.js'
+import oauthModule from './modules/oauth.js'
 
 import VueTimeago from 'vue-timeago'
 import VueI18n from 'vue-i18n'
@@ -31,6 +20,8 @@ import messages from './i18n/messages.js'
 
 import VueChatScroll from 'vue-chat-scroll'
 
+import afterStoreSetup from './boot/after_store.js'
+
 const currentLocale = (window.navigator.language || 'en').split('-')[0]
 
 Vue.use(Vuex)
@@ -45,29 +36,6 @@ Vue.use(VueTimeago, {
 Vue.use(VueI18n)
 Vue.use(VueChatScroll)
 
-const persistedStateOptions = {
-  paths: [
-    'config',
-    'users.lastLoginName',
-    'statuses.notifications.maxSavedId'
-  ]
-}
-
-const store = new Vuex.Store({
-  modules: {
-    interface: interfaceModule,
-    instance: instanceModule,
-    statuses: statusesModule,
-    users: usersModule,
-    api: apiModule,
-    config: configModule,
-    chat: chatModule
-  },
-  plugins: [createPersistedState(persistedStateOptions)],
-  strict: false // Socket modifies itself, let's ignore this for now.
-  // strict: process.env.NODE_ENV !== 'production'
-})
-
 const i18n = new VueI18n({
   // By default, use the browser locale, we will update it if neccessary
   locale: currentLocale,
@@ -75,153 +43,30 @@ const i18n = new VueI18n({
   messages
 })
 
-window.fetch('/api/statusnet/config.json')
-  .then((res) => res.json())
-  .then((data) => {
-    const {name, closed: registrationClosed, textlimit, server} = data.site
-
-    store.dispatch('setInstanceOption', { name: 'name', value: name })
-    store.dispatch('setInstanceOption', { name: 'registrationOpen', value: (registrationClosed === '0') })
-    store.dispatch('setInstanceOption', { name: 'textlimit', value: parseInt(textlimit) })
-    store.dispatch('setInstanceOption', { name: 'server', value: server })
-
-    var apiConfig = data.site.pleromafe
-
-    window.fetch('/static/config.json')
-      .then((res) => res.json())
-      .catch((err) => {
-        console.warn('Failed to load static/config.json, continuing without it.')
-        console.warn(err)
-        return {}
-      })
-      .then((staticConfig) => {
-        // This takes static config and overrides properties that are present in apiConfig
-        var config = Object.assign({}, staticConfig, apiConfig)
-
-        var theme = (config.theme)
-        var background = (config.background)
-        var hidePostStats = (config.hidePostStats)
-        var hideUserStats = (config.hideUserStats)
-        var logo = (config.logo)
-        var logoMask = (typeof config.logoMask === 'undefined' ? true : config.logoMask)
-        var logoMargin = (typeof config.logoMargin === 'undefined' ? 0 : config.logoMargin)
-        var redirectRootNoLogin = (config.redirectRootNoLogin)
-        var redirectRootLogin = (config.redirectRootLogin)
-        var chatDisabled = (config.chatDisabled)
-        var showInstanceSpecificPanel = (config.showInstanceSpecificPanel)
-        var scopeOptionsEnabled = (config.scopeOptionsEnabled)
-        var formattingOptionsEnabled = (config.formattingOptionsEnabled)
-        var collapseMessageWithSubject = (config.collapseMessageWithSubject)
-
-        store.dispatch('setInstanceOption', { name: 'theme', value: theme })
-        store.dispatch('setInstanceOption', { name: 'background', value: background })
-        store.dispatch('setInstanceOption', { name: 'hidePostStats', value: hidePostStats })
-        store.dispatch('setInstanceOption', { name: 'hideUserStats', value: hideUserStats })
-        store.dispatch('setInstanceOption', { name: 'logo', value: logo })
-        store.dispatch('setInstanceOption', { name: 'logoMask', value: logoMask })
-        store.dispatch('setInstanceOption', { name: 'logoMargin', value: logoMargin })
-        store.dispatch('setInstanceOption', { name: 'redirectRootNoLogin', value: redirectRootNoLogin })
-        store.dispatch('setInstanceOption', { name: 'redirectRootLogin', value: redirectRootLogin })
-        store.dispatch('setInstanceOption', { name: 'showInstanceSpecificPanel', value: showInstanceSpecificPanel })
-        store.dispatch('setInstanceOption', { name: 'scopeOptionsEnabled', value: scopeOptionsEnabled })
-        store.dispatch('setInstanceOption', { name: 'formattingOptionsEnabled', value: formattingOptionsEnabled })
-        store.dispatch('setInstanceOption', { name: 'collapseMessageWithSubject', value: collapseMessageWithSubject })
-        if (chatDisabled) {
-          store.dispatch('disableChat')
-        }
-
-        const routes = [
-          { name: 'root',
-            path: '/',
-            redirect: to => {
-              return (store.state.users.currentUser
-                      ? store.state.instance.redirectRootLogin
-                      : store.state.instance.redirectRootNoLogin) || '/main/all'
-            }},
-          { path: '/main/all', component: PublicAndExternalTimeline },
-          { path: '/main/public', component: PublicTimeline },
-          { path: '/main/friends', component: FriendsTimeline },
-          { path: '/tag/:tag', component: TagTimeline },
-          { name: 'conversation', path: '/notice/:id', component: ConversationPage, meta: { dontScroll: true } },
-          { name: 'user-profile', path: '/users/:id', component: UserProfile },
-          { name: 'mentions', path: '/:username/mentions', component: Mentions },
-          { name: 'settings', path: '/settings', component: Settings },
-          { name: 'registration', path: '/registration', component: Registration },
-          { name: 'registration', path: '/registration/:token', component: Registration },
-          { name: 'friend-requests', path: '/friend-requests', component: FollowRequests },
-          { name: 'user-settings', path: '/user-settings', component: UserSettings }
-        ]
-
-        const router = new VueRouter({
-          mode: 'history',
-          routes,
-          scrollBehavior: (to, from, savedPosition) => {
-            if (to.matched.some(m => m.meta.dontScroll)) {
-              return false
-            }
-            return savedPosition || { x: 0, y: 0 }
-          }
-        })
-
-        /* eslint-disable no-new */
-        new Vue({
-          router,
-          store,
-          i18n,
-          el: '#app',
-          render: h => h(App)
-        })
-      })
+const persistedStateOptions = {
+  paths: [
+    'config',
+    'users.lastLoginName',
+    'statuses.notifications.maxSavedId',
+    'oauth'
+  ]
+}
+createPersistedState(persistedStateOptions).then((persistedState) => {
+  const store = new Vuex.Store({
+    modules: {
+      interface: interfaceModule,
+      instance: instanceModule,
+      statuses: statusesModule,
+      users: usersModule,
+      api: apiModule,
+      config: configModule,
+      chat: chatModule,
+      oauth: oauthModule
+    },
+    plugins: [persistedState],
+    strict: false // Socket modifies itself, let's ignore this for now.
+    // strict: process.env.NODE_ENV !== 'production'
   })
 
-window.fetch('/static/terms-of-service.html')
-  .then((res) => res.text())
-  .then((html) => {
-    store.dispatch('setInstanceOption', { name: 'tos', value: html })
-  })
-
-window.fetch('/api/pleroma/emoji.json')
-  .then(
-    (res) => res.json()
-      .then(
-        (values) => {
-          const emoji = Object.keys(values).map((key) => {
-            return { shortcode: key, image_url: values[key] }
-          })
-          store.dispatch('setInstanceOption', { name: 'customEmoji', value: emoji })
-          store.dispatch('setInstanceOption', { name: 'pleromaBackend', value: true })
-        },
-        (failure) => {
-          store.dispatch('setInstanceOption', { name: 'pleromaBackend', value: false })
-        }
-      ),
-    (error) => console.log(error)
-  )
-
-window.fetch('/static/emoji.json')
-  .then((res) => res.json())
-  .then((values) => {
-    const emoji = Object.keys(values).map((key) => {
-      return { shortcode: key, image_url: false, 'utf': values[key] }
-    })
-    store.dispatch('setInstanceOption', { name: 'emoji', value: emoji })
-  })
-
-window.fetch('/instance/panel.html')
-  .then((res) => res.text())
-  .then((html) => {
-    store.dispatch('setInstanceOption', { name: 'instanceSpecificPanelContent', value: html })
-  })
-
-window.fetch('/nodeinfo/2.0.json')
-  .then((res) => res.json())
-  .then((data) => {
-    const metadata = data.metadata
-    store.dispatch('setInstanceOption', { name: 'mediaProxyAvailable', value: data.metadata.mediaProxy })
-    store.dispatch('setInstanceOption', { name: 'chatAvailable', value: data.metadata.chat })
-    store.dispatch('setInstanceOption', { name: 'gopherAvailable', value: data.metadata.gopher })
-
-    const suggestions = metadata.suggestions
-    store.dispatch('setInstanceOption', { name: 'suggestionsEnabled', value: suggestions.enabled })
-    store.dispatch('setInstanceOption', { name: 'suggestionsWeb', value: suggestions.web })
-  })
+  afterStoreSetup({store, i18n})
+})
diff --git a/src/modules/oauth.js b/src/modules/oauth.js
new file mode 100644
index 00000000..144ff830
--- /dev/null
+++ b/src/modules/oauth.js
@@ -0,0 +1,18 @@
+const oauth = {
+  state: {
+    client_id: false,
+    client_secret: false,
+    token: false
+  },
+  mutations: {
+    setClientData (state, data) {
+      state.client_id = data.client_id
+      state.client_secret = data.client_secret
+    },
+    setToken (state, token) {
+      state.token = token
+    }
+  }
+}
+
+export default oauth
diff --git a/src/modules/users.js b/src/modules/users.js
index e90d6bb9..8630ee0d 100644
--- a/src/modules/users.js
+++ b/src/modules/users.js
@@ -82,24 +82,26 @@ const users = {
     },
     logout (store) {
       store.commit('clearCurrentUser')
+      store.commit('setToken', false)
       store.dispatch('stopFetching', 'friends')
       store.commit('setBackendInteractor', backendInteractorService())
     },
-    loginUser (store, userCredentials) {
+    loginUser (store, accessToken) {
       return new Promise((resolve, reject) => {
         const commit = store.commit
         commit('beginLogin')
-        store.rootState.api.backendInteractor.verifyCredentials(userCredentials)
+        store.rootState.api.backendInteractor.verifyCredentials(accessToken)
           .then((response) => {
             if (response.ok) {
               response.json()
                 .then((user) => {
-                  user.credentials = userCredentials
+                  // user.credentials = userCredentials
+                  user.credentials = accessToken
                   commit('setCurrentUser', user)
                   commit('addNewUsers', [user])
 
                   // Set our new backend interactor
-                  commit('setBackendInteractor', backendInteractorService(userCredentials))
+                  commit('setBackendInteractor', backendInteractorService(accessToken))
 
                   if (user.token) {
                     store.dispatch('initializeSocket', user.token)
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index ab746918..499e9b16 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -52,16 +52,6 @@ let fetch = (url, options) => {
   return oldfetch(fullUrl, options)
 }
 
-// from https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding
-let utoa = (str) => {
-  // first we use encodeURIComponent to get percent-encoded UTF-8,
-  // then we convert the percent encodings into raw bytes which
-  // can be fed into btoa.
-  return btoa(encodeURIComponent(str)
-              .replace(/%([0-9A-F]{2})/g,
-                       (match, p1) => { return String.fromCharCode('0x' + p1) }))
-}
-
 // Params
 // cropH
 // cropW
@@ -175,9 +165,9 @@ const register = (params) => {
   })
 }
 
-const authHeaders = (user) => {
-  if (user && user.username && user.password) {
-    return { 'Authorization': `Basic ${utoa(`${user.username}:${user.password}`)}` }
+const authHeaders = (accessToken) => {
+  if (accessToken) {
+    return { 'Authorization': `Bearer ${accessToken}` }
   } else {
     return { }
   }
diff --git a/src/services/new_api/oauth.js b/src/services/new_api/oauth.js
new file mode 100644
index 00000000..becee3d0
--- /dev/null
+++ b/src/services/new_api/oauth.js
@@ -0,0 +1,64 @@
+import {reduce} from 'lodash'
+
+const getOrCreateApp = ({oauth, instance}) => {
+  const url = `${instance}/api/v1/apps`
+  const form = new window.FormData()
+
+  form.append('client_name', `PleromaFE_${Math.random()}`)
+  form.append('redirect_uris', `${window.location.origin}/oauth-callback`)
+  form.append('scopes', 'read write follow')
+
+  return window.fetch(url, {
+    method: 'POST',
+    body: form
+  }).then((data) => data.json())
+}
+const login = (args) => {
+  getOrCreateApp(args).then((app) => {
+    args.commit('setClientData', app)
+
+    const data = {
+      response_type: 'code',
+      client_id: app.client_id,
+      redirect_uri: app.redirect_uri,
+      scope: 'read write follow'
+    }
+
+    const dataString = reduce(data, (acc, v, k) => {
+      const encoded = `${k}=${encodeURIComponent(v)}`
+      if (!acc) {
+        return encoded
+      } else {
+        return `${acc}&${encoded}`
+      }
+    }, false)
+
+    // Do the redirect...
+    const url = `${args.instance}/oauth/authorize?${dataString}`
+
+    window.location.href = url
+  })
+}
+
+const getToken = ({app, instance, code}) => {
+  const url = `${instance}/oauth/token`
+  const form = new window.FormData()
+
+  form.append('client_id', app.client_id)
+  form.append('client_secret', app.client_secret)
+  form.append('grant_type', 'authorization_code')
+  form.append('code', code)
+  form.append('redirect_uri', `${window.location.origin}/oauth-callback`)
+
+  return window.fetch(url, {
+    method: 'POST',
+    body: form
+  }).then((data) => data.json())
+}
+
+const oauth = {
+  login,
+  getToken
+}
+
+export default oauth
diff --git a/yarn.lock b/yarn.lock
index fdad8b49..5b36c3c5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5,10 +5,12 @@
 abbrev@1, abbrev@1.0.x:
   version "1.0.9"
   resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+  integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU=
 
 accepts@1.3.3:
   version "1.3.3"
   resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca"
+  integrity sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=
   dependencies:
     mime-types "~2.1.11"
     negotiator "0.6.1"
@@ -16,6 +18,7 @@ accepts@1.3.3:
 accepts@~1.3.4:
   version "1.3.4"
   resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f"
+  integrity sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=
   dependencies:
     mime-types "~2.1.16"
     negotiator "0.6.1"
@@ -23,24 +26,29 @@ accepts@~1.3.4:
 acorn-jsx@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
+  integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=
   dependencies:
     acorn "^3.0.4"
 
 acorn@^3.0.0, acorn@^3.0.4:
   version "3.3.0"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+  integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
 
 acorn@^5.4.0:
   version "5.4.1"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.4.1.tgz#fdc58d9d17f4a4e98d102ded826a9b9759125102"
+  integrity sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==
 
 after@0.8.2:
   version "0.8.2"
   resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
+  integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=
 
 agent-base@2:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7"
+  integrity sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=
   dependencies:
     extend "~3.0.0"
     semver "~5.0.1"
@@ -48,10 +56,12 @@ agent-base@2:
 ajv-keywords@^1.0.0:
   version "1.5.1"
   resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
+  integrity sha1-MU3QpLM2j609/NxU7eYXG4htrzw=
 
 ajv@^4.7.0, ajv@^4.9.1:
   version "4.11.8"
   resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
+  integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=
   dependencies:
     co "^4.6.0"
     json-stable-stringify "^1.0.1"
@@ -59,6 +69,7 @@ ajv@^4.7.0, ajv@^4.9.1:
 ajv@^5.1.0:
   version "5.5.2"
   resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
+  integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=
   dependencies:
     co "^4.6.0"
     fast-deep-equal "^1.0.0"
@@ -68,6 +79,7 @@ ajv@^5.1.0:
 align-text@^0.1.1, align-text@^0.1.3:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+  integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=
   dependencies:
     kind-of "^3.0.2"
     longest "^1.0.1"
@@ -76,44 +88,54 @@ align-text@^0.1.1, align-text@^0.1.3:
 alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+  integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
 
 amdefine@>=0.0.4:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+  integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
 
 ansi-escapes@^1.1.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
+  integrity sha1-06ioOzGapneTZisT52HHkRQiMG4=
 
 ansi-html@0.0.7:
   version "0.0.7"
   resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
+  integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4=
 
 ansi-regex@^2.0.0:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+  integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
 
 ansi-regex@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+  integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
 
 ansi-styles@^2.2.1:
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+  integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
 
 ansi-styles@^3.1.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88"
+  integrity sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==
   dependencies:
     color-convert "^1.9.0"
 
 ansi-styles@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178"
+  integrity sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=
 
 anymatch@^1.3.0:
   version "1.3.2"
   resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
+  integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==
   dependencies:
     micromatch "^2.1.5"
     normalize-path "^2.0.0"
@@ -121,10 +143,12 @@ anymatch@^1.3.0:
 aproba@^1.0.3:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+  integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
 
 are-we-there-yet@~1.1.2:
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
+  integrity sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=
   dependencies:
     delegates "^1.0.0"
     readable-stream "^2.0.6"
@@ -132,116 +156,142 @@ are-we-there-yet@~1.1.2:
 argparse@^1.0.7:
   version "1.0.9"
   resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
+  integrity sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=
   dependencies:
     sprintf-js "~1.0.2"
 
 arr-diff@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+  integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
   dependencies:
     arr-flatten "^1.0.1"
 
 arr-flatten@^1.0.1:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+  integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
 
 array-find-index@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+  integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
 
 array-flatten@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+  integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
 
 array-slice@^0.2.3:
   version "0.2.3"
   resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5"
+  integrity sha1-3Tz7gO15c6dRF82sabC5nshhhvU=
 
 array-union@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+  integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
   dependencies:
     array-uniq "^1.0.1"
 
 array-uniq@^1.0.1, array-uniq@^1.0.2:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+  integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
 
 array-unique@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+  integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
 
 arraybuffer.slice@0.0.6:
   version "0.0.6"
   resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca"
+  integrity sha1-8zshWfBTKj8xB6JywMz70a0peco=
 
 arrify@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+  integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
 
 asn1@~0.2.3:
   version "0.2.3"
   resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+  integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=
 
 assert-plus@1.0.0, assert-plus@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+  integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
 
 assert-plus@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+  integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ=
 
 assert@^1.1.1:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+  integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=
   dependencies:
     util "0.10.3"
 
 assertion-error@1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.0.tgz#c7f85438fdd466bc7ca16ab90c81513797a5d23b"
+  integrity sha1-x/hUOP3UZrx8oWq5DIFRN5el0js=
 
 assertion-error@^1.0.1:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
+  integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
 
 ast-types@0.x.x:
   version "0.10.1"
   resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd"
+  integrity sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==
 
 async-each@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+  integrity sha1-GdOGodntxufByF04iu28xW0zYC0=
 
 async-foreach@^0.1.3:
   version "0.1.3"
   resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
+  integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=
 
 async@1.x, async@^1.3.0, async@^1.4.0, async@^1.5.0:
   version "1.5.2"
   resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+  integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
 
 async@^0.9.0, async@~0.9.0:
   version "0.9.2"
   resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
+  integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=
 
 async@^2.0.1:
   version "2.6.0"
   resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
+  integrity sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==
   dependencies:
     lodash "^4.14.0"
 
 async@~0.2.6:
   version "0.2.10"
   resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
+  integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E=
 
 asynckit@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+  integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
 
 autoprefixer@^6.3.1, autoprefixer@^6.4.0:
   version "6.7.7"
   resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
+  integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=
   dependencies:
     browserslist "^1.7.6"
     caniuse-db "^1.0.30000634"
@@ -253,18 +303,22 @@ autoprefixer@^6.3.1, autoprefixer@^6.4.0:
 aws-sign2@~0.6.0:
   version "0.6.0"
   resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+  integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8=
 
 aws-sign2@~0.7.0:
   version "0.7.0"
   resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+  integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
 
 aws4@^1.2.1, aws4@^1.6.0:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
+  integrity sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=
 
 babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+  integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
   dependencies:
     chalk "^1.1.3"
     esutils "^2.0.2"
@@ -273,6 +327,7 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0, ba
 babel-core@^6.0.0, babel-core@^6.1.4, babel-core@^6.26.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8"
+  integrity sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=
   dependencies:
     babel-code-frame "^6.26.0"
     babel-generator "^6.26.0"
@@ -297,6 +352,7 @@ babel-core@^6.0.0, babel-core@^6.1.4, babel-core@^6.26.0:
 babel-eslint@^7.0.0:
   version "7.2.3"
   resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827"
+  integrity sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=
   dependencies:
     babel-code-frame "^6.22.0"
     babel-traverse "^6.23.1"
@@ -306,6 +362,7 @@ babel-eslint@^7.0.0:
 babel-generator@^6.26.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5"
+  integrity sha1-rBriAHC3n248odMmlhMFN3TyDcU=
   dependencies:
     babel-messages "^6.23.0"
     babel-runtime "^6.26.0"
@@ -319,6 +376,7 @@ babel-generator@^6.26.0:
 babel-helper-bindify-decorators@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330"
+  integrity sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=
   dependencies:
     babel-runtime "^6.22.0"
     babel-traverse "^6.24.1"
@@ -327,6 +385,7 @@ babel-helper-bindify-decorators@^6.24.1:
 babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
+  integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=
   dependencies:
     babel-helper-explode-assignable-expression "^6.24.1"
     babel-runtime "^6.22.0"
@@ -335,6 +394,7 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
 babel-helper-call-delegate@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
+  integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=
   dependencies:
     babel-helper-hoist-variables "^6.24.1"
     babel-runtime "^6.22.0"
@@ -344,6 +404,7 @@ babel-helper-call-delegate@^6.24.1:
 babel-helper-define-map@^6.24.1:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f"
+  integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=
   dependencies:
     babel-helper-function-name "^6.24.1"
     babel-runtime "^6.26.0"
@@ -353,6 +414,7 @@ babel-helper-define-map@^6.24.1:
 babel-helper-explode-assignable-expression@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa"
+  integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo=
   dependencies:
     babel-runtime "^6.22.0"
     babel-traverse "^6.24.1"
@@ -361,6 +423,7 @@ babel-helper-explode-assignable-expression@^6.24.1:
 babel-helper-explode-class@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb"
+  integrity sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=
   dependencies:
     babel-helper-bindify-decorators "^6.24.1"
     babel-runtime "^6.22.0"
@@ -370,6 +433,7 @@ babel-helper-explode-class@^6.24.1:
 babel-helper-function-name@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
+  integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=
   dependencies:
     babel-helper-get-function-arity "^6.24.1"
     babel-runtime "^6.22.0"
@@ -380,6 +444,7 @@ babel-helper-function-name@^6.24.1:
 babel-helper-get-function-arity@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
+  integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=
   dependencies:
     babel-runtime "^6.22.0"
     babel-types "^6.24.1"
@@ -387,6 +452,7 @@ babel-helper-get-function-arity@^6.24.1:
 babel-helper-hoist-variables@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
+  integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY=
   dependencies:
     babel-runtime "^6.22.0"
     babel-types "^6.24.1"
@@ -394,6 +460,7 @@ babel-helper-hoist-variables@^6.24.1:
 babel-helper-module-imports@^7.0.0-beta.3:
   version "7.0.0-beta.3"
   resolved "https://registry.yarnpkg.com/babel-helper-module-imports/-/babel-helper-module-imports-7.0.0-beta.3.tgz#e15764e3af9c8e11810c09f78f498a2bdc71585a"
+  integrity sha512-bdPrIXbUTYfREhRhjbN8SstwQaj0S4+rW4PKi1f2Wc5fizSh0hGYkfXUdiSSOgyTydm956tAyz4FrG61bqdQyw==
   dependencies:
     babel-types "7.0.0-beta.3"
     lodash "^4.2.0"
@@ -401,6 +468,7 @@ babel-helper-module-imports@^7.0.0-beta.3:
 babel-helper-optimise-call-expression@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
+  integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=
   dependencies:
     babel-runtime "^6.22.0"
     babel-types "^6.24.1"
@@ -408,6 +476,7 @@ babel-helper-optimise-call-expression@^6.24.1:
 babel-helper-regex@^6.24.1:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72"
+  integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=
   dependencies:
     babel-runtime "^6.26.0"
     babel-types "^6.26.0"
@@ -416,6 +485,7 @@ babel-helper-regex@^6.24.1:
 babel-helper-remap-async-to-generator@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b"
+  integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=
   dependencies:
     babel-helper-function-name "^6.24.1"
     babel-runtime "^6.22.0"
@@ -426,6 +496,7 @@ babel-helper-remap-async-to-generator@^6.24.1:
 babel-helper-replace-supers@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
+  integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo=
   dependencies:
     babel-helper-optimise-call-expression "^6.24.1"
     babel-messages "^6.23.0"
@@ -437,10 +508,12 @@ babel-helper-replace-supers@^6.24.1:
 babel-helper-vue-jsx-merge-props@^2.0.3:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz#22aebd3b33902328e513293a8e4992b384f9f1b6"
+  integrity sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==
 
 babel-helpers@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
+  integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=
   dependencies:
     babel-runtime "^6.22.0"
     babel-template "^6.24.1"
@@ -448,6 +521,7 @@ babel-helpers@^6.24.1:
 babel-loader@^6.0.0:
   version "6.4.1"
   resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.1.tgz#0b34112d5b0748a8dcdbf51acf6f9bd42d50b8ca"
+  integrity sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=
   dependencies:
     find-cache-dir "^0.1.1"
     loader-utils "^0.2.16"
@@ -457,22 +531,26 @@ babel-loader@^6.0.0:
 babel-messages@^6.23.0:
   version "6.23.0"
   resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+  integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-add-module-exports@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz#9ae9a1f4a8dc67f0cdec4f4aeda1e43a5ff65e25"
+  integrity sha1-mumh9KjcZ/DN7E9K7aHkOl/2XiU=
 
 babel-plugin-check-es2015-constants@^6.22.0:
   version "6.22.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
+  integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-lodash@^3.2.11:
   version "3.3.2"
   resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.3.2.tgz#da3a5b49ba27447f54463f6c4fa81396ccdd463f"
+  integrity sha512-lNsptTRfc0FTdW56O087EiKEADVEjJo2frDQ97olMjCKbRZfZPu7MvdyxnZLOoDpuTCtavN8/4Zk65x4gT+C3Q==
   dependencies:
     babel-helper-module-imports "^7.0.0-beta.3"
     babel-types "^6.26.0"
@@ -483,42 +561,52 @@ babel-plugin-lodash@^3.2.11:
 babel-plugin-syntax-async-functions@^6.8.0:
   version "6.13.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
+  integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=
 
 babel-plugin-syntax-async-generators@^6.5.0:
   version "6.13.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a"
+  integrity sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=
 
 babel-plugin-syntax-class-properties@^6.8.0:
   version "6.13.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de"
+  integrity sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=
 
 babel-plugin-syntax-decorators@^6.13.0:
   version "6.13.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b"
+  integrity sha1-MSVjtNvePMgGzuPkFszurd0RrAs=
 
 babel-plugin-syntax-dynamic-import@^6.18.0:
   version "6.18.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da"
+  integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=
 
 babel-plugin-syntax-exponentiation-operator@^6.8.0:
   version "6.13.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
+  integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=
 
 babel-plugin-syntax-jsx@^6.18.0:
   version "6.18.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
+  integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=
 
 babel-plugin-syntax-object-rest-spread@^6.8.0:
   version "6.13.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
+  integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=
 
 babel-plugin-syntax-trailing-function-commas@^6.22.0:
   version "6.22.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3"
+  integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=
 
 babel-plugin-transform-async-generator-functions@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db"
+  integrity sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=
   dependencies:
     babel-helper-remap-async-to-generator "^6.24.1"
     babel-plugin-syntax-async-generators "^6.5.0"
@@ -527,6 +615,7 @@ babel-plugin-transform-async-generator-functions@^6.24.1:
 babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
+  integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=
   dependencies:
     babel-helper-remap-async-to-generator "^6.24.1"
     babel-plugin-syntax-async-functions "^6.8.0"
@@ -535,6 +624,7 @@ babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-
 babel-plugin-transform-class-properties@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac"
+  integrity sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=
   dependencies:
     babel-helper-function-name "^6.24.1"
     babel-plugin-syntax-class-properties "^6.8.0"
@@ -544,6 +634,7 @@ babel-plugin-transform-class-properties@^6.24.1:
 babel-plugin-transform-decorators@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d"
+  integrity sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=
   dependencies:
     babel-helper-explode-class "^6.24.1"
     babel-plugin-syntax-decorators "^6.13.0"
@@ -554,18 +645,21 @@ babel-plugin-transform-decorators@^6.24.1:
 babel-plugin-transform-es2015-arrow-functions@^6.22.0:
   version "6.22.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
+  integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-transform-es2015-block-scoped-functions@^6.22.0:
   version "6.22.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
+  integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es2015-block-scoping@^6.24.1:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f"
+  integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=
   dependencies:
     babel-runtime "^6.26.0"
     babel-template "^6.26.0"
@@ -576,6 +670,7 @@ babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es20
 babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-classes@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
+  integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=
   dependencies:
     babel-helper-define-map "^6.24.1"
     babel-helper-function-name "^6.24.1"
@@ -590,6 +685,7 @@ babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-cla
 babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transform-es2015-computed-properties@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
+  integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=
   dependencies:
     babel-runtime "^6.22.0"
     babel-template "^6.24.1"
@@ -597,12 +693,14 @@ babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transfor
 babel-plugin-transform-es2015-destructuring@^6.22.0, babel-plugin-transform-es2015-destructuring@^6.23.0:
   version "6.23.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
+  integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-transform-es2015-duplicate-keys@^6.22.0, babel-plugin-transform-es2015-duplicate-keys@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e"
+  integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4=
   dependencies:
     babel-runtime "^6.22.0"
     babel-types "^6.24.1"
@@ -610,12 +708,14 @@ babel-plugin-transform-es2015-duplicate-keys@^6.22.0, babel-plugin-transform-es2
 babel-plugin-transform-es2015-for-of@^6.22.0, babel-plugin-transform-es2015-for-of@^6.23.0:
   version "6.23.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
+  integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es2015-function-name@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
+  integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=
   dependencies:
     babel-helper-function-name "^6.24.1"
     babel-runtime "^6.22.0"
@@ -624,12 +724,14 @@ babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es20
 babel-plugin-transform-es2015-literals@^6.22.0:
   version "6.22.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
+  integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154"
+  integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=
   dependencies:
     babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
     babel-runtime "^6.22.0"
@@ -638,6 +740,7 @@ babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015
 babel-plugin-transform-es2015-modules-commonjs@^6.23.0:
   version "6.26.2"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3"
+  integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==
   dependencies:
     babel-plugin-transform-strict-mode "^6.24.1"
     babel-runtime "^6.26.0"
@@ -647,6 +750,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.23.0:
 babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a"
+  integrity sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=
   dependencies:
     babel-plugin-transform-strict-mode "^6.24.1"
     babel-runtime "^6.26.0"
@@ -656,6 +760,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
 babel-plugin-transform-es2015-modules-systemjs@^6.23.0, babel-plugin-transform-es2015-modules-systemjs@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23"
+  integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=
   dependencies:
     babel-helper-hoist-variables "^6.24.1"
     babel-runtime "^6.22.0"
@@ -664,6 +769,7 @@ babel-plugin-transform-es2015-modules-systemjs@^6.23.0, babel-plugin-transform-e
 babel-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015-modules-umd@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468"
+  integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg=
   dependencies:
     babel-plugin-transform-es2015-modules-amd "^6.24.1"
     babel-runtime "^6.22.0"
@@ -672,6 +778,7 @@ babel-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015
 babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es2015-object-super@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d"
+  integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40=
   dependencies:
     babel-helper-replace-supers "^6.24.1"
     babel-runtime "^6.22.0"
@@ -679,6 +786,7 @@ babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es201
 babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015-parameters@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
+  integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=
   dependencies:
     babel-helper-call-delegate "^6.24.1"
     babel-helper-get-function-arity "^6.24.1"
@@ -690,6 +798,7 @@ babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015-
 babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transform-es2015-shorthand-properties@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
+  integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=
   dependencies:
     babel-runtime "^6.22.0"
     babel-types "^6.24.1"
@@ -697,12 +806,14 @@ babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transfo
 babel-plugin-transform-es2015-spread@^6.22.0:
   version "6.22.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
+  integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-transform-es2015-sticky-regex@^6.22.0, babel-plugin-transform-es2015-sticky-regex@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"
+  integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw=
   dependencies:
     babel-helper-regex "^6.24.1"
     babel-runtime "^6.22.0"
@@ -711,18 +822,21 @@ babel-plugin-transform-es2015-sticky-regex@^6.22.0, babel-plugin-transform-es201
 babel-plugin-transform-es2015-template-literals@^6.22.0:
   version "6.22.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
+  integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-transform-es2015-typeof-symbol@^6.22.0, babel-plugin-transform-es2015-typeof-symbol@^6.23.0:
   version "6.23.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
+  integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es2015-unicode-regex@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9"
+  integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek=
   dependencies:
     babel-helper-regex "^6.24.1"
     babel-runtime "^6.22.0"
@@ -731,6 +845,7 @@ babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es20
 babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
+  integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=
   dependencies:
     babel-helper-builder-binary-assignment-operator-visitor "^6.24.1"
     babel-plugin-syntax-exponentiation-operator "^6.8.0"
@@ -739,6 +854,7 @@ babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-e
 babel-plugin-transform-object-rest-spread@^6.22.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06"
+  integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=
   dependencies:
     babel-plugin-syntax-object-rest-spread "^6.8.0"
     babel-runtime "^6.26.0"
@@ -746,18 +862,21 @@ babel-plugin-transform-object-rest-spread@^6.22.0:
 babel-plugin-transform-regenerator@^6.22.0, babel-plugin-transform-regenerator@^6.24.1:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
+  integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=
   dependencies:
     regenerator-transform "^0.10.0"
 
 babel-plugin-transform-runtime@^6.0.0:
   version "6.23.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee"
+  integrity sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=
   dependencies:
     babel-runtime "^6.22.0"
 
 babel-plugin-transform-strict-mode@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
+  integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=
   dependencies:
     babel-runtime "^6.22.0"
     babel-types "^6.24.1"
@@ -765,12 +884,14 @@ babel-plugin-transform-strict-mode@^6.24.1:
 babel-plugin-transform-vue-jsx@3:
   version "3.7.0"
   resolved "https://registry.yarnpkg.com/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-3.7.0.tgz#d40492e6692a36b594f7e9a1928f43e969740960"
+  integrity sha512-W39X07/n3oJMQd8tALBO+440NraGSF//Lo1ydd/9Nme3+QiRGFBb1Q39T9iixh0jZPPbfv3so18tNoIgLatymw==
   dependencies:
     esutils "^2.0.2"
 
 babel-preset-env@^1.7.0:
   version "1.7.0"
   resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a"
+  integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==
   dependencies:
     babel-plugin-check-es2015-constants "^6.22.0"
     babel-plugin-syntax-trailing-function-commas "^6.22.0"
@@ -806,6 +927,7 @@ babel-preset-env@^1.7.0:
 babel-preset-es2015@^6.0.0:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939"
+  integrity sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=
   dependencies:
     babel-plugin-check-es2015-constants "^6.22.0"
     babel-plugin-transform-es2015-arrow-functions "^6.22.0"
@@ -835,6 +957,7 @@ babel-preset-es2015@^6.0.0:
 babel-preset-stage-2@^6.0.0:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1"
+  integrity sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=
   dependencies:
     babel-plugin-syntax-dynamic-import "^6.18.0"
     babel-plugin-transform-class-properties "^6.24.1"
@@ -844,6 +967,7 @@ babel-preset-stage-2@^6.0.0:
 babel-preset-stage-3@^6.24.1:
   version "6.24.1"
   resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395"
+  integrity sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=
   dependencies:
     babel-plugin-syntax-trailing-function-commas "^6.22.0"
     babel-plugin-transform-async-generator-functions "^6.24.1"
@@ -854,6 +978,7 @@ babel-preset-stage-3@^6.24.1:
 babel-register@^6.0.0, babel-register@^6.26.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
+  integrity sha1-btAhFz4vy0htestFxgCahW9kcHE=
   dependencies:
     babel-core "^6.26.0"
     babel-runtime "^6.26.0"
@@ -866,6 +991,7 @@ babel-register@^6.0.0, babel-register@^6.26.0:
 babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+  integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
   dependencies:
     core-js "^2.4.0"
     regenerator-runtime "^0.11.0"
@@ -873,6 +999,7 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
 babel-template@^6.24.1, babel-template@^6.26.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
+  integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=
   dependencies:
     babel-runtime "^6.26.0"
     babel-traverse "^6.26.0"
@@ -883,6 +1010,7 @@ babel-template@^6.24.1, babel-template@^6.26.0:
 babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.26.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
+  integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=
   dependencies:
     babel-code-frame "^6.26.0"
     babel-messages "^6.23.0"
@@ -897,6 +1025,7 @@ babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.26.0:
 babel-types@7.0.0-beta.3:
   version "7.0.0-beta.3"
   resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-7.0.0-beta.3.tgz#cd927ca70e0ae8ab05f4aab83778cfb3e6eb20b4"
+  integrity sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==
   dependencies:
     esutils "^2.0.2"
     lodash "^4.2.0"
@@ -905,6 +1034,7 @@ babel-types@7.0.0-beta.3:
 babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.26.0:
   version "6.26.0"
   resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
+  integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
   dependencies:
     babel-runtime "^6.26.0"
     esutils "^2.0.2"
@@ -914,68 +1044,83 @@ babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.26
 babylon@^6.17.0, babylon@^6.18.0:
   version "6.18.0"
   resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+  integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
 
 backo2@1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
+  integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
 
 balanced-match@^0.4.2:
   version "0.4.2"
   resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+  integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=
 
 balanced-match@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+  integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
 
 base64-arraybuffer@0.1.5:
   version "0.1.5"
   resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
+  integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg=
 
 base64-js@^1.0.2:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886"
+  integrity sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==
 
 base64id@1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"
+  integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=
 
 bcrypt-pbkdf@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
+  integrity sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=
   dependencies:
     tweetnacl "^0.14.3"
 
 better-assert@~1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
+  integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=
   dependencies:
     callsite "1.0.0"
 
 big.js@^3.1.3:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
+  integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==
 
 binary-extensions@^1.0.0:
   version "1.11.0"
   resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"
+  integrity sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=
 
 blob@0.0.4:
   version "0.0.4"
   resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921"
+  integrity sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=
 
 block-stream@*:
   version "0.0.9"
   resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+  integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
   dependencies:
     inherits "~2.0.0"
 
 bluebird@^3.0.5, bluebird@^3.1.1, bluebird@^3.3.0, bluebird@^3.4.7:
   version "3.5.1"
   resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
+  integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==
 
 body-parser@1.18.2, body-parser@^1.16.1:
   version "1.18.2"
   resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454"
+  integrity sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=
   dependencies:
     bytes "3.0.0"
     content-type "~1.0.4"
@@ -991,28 +1136,33 @@ body-parser@1.18.2, body-parser@^1.16.1:
 boolbase@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+  integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
 
 boom@2.x.x:
   version "2.10.1"
   resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+  integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=
   dependencies:
     hoek "2.x.x"
 
 boom@4.x.x:
   version "4.3.1"
   resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31"
+  integrity sha1-T4owBctKfjiJ90kDD9JbluAdLjE=
   dependencies:
     hoek "4.x.x"
 
 boom@5.x.x:
   version "5.2.0"
   resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02"
+  integrity sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==
   dependencies:
     hoek "4.x.x"
 
 brace-expansion@^1.0.0, brace-expansion@^1.1.7:
   version "1.1.8"
   resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
+  integrity sha1-wHshHHyVLsH479Uad+8NHTmQopI=
   dependencies:
     balanced-match "^1.0.0"
     concat-map "0.0.1"
@@ -1020,12 +1170,14 @@ brace-expansion@^1.0.0, brace-expansion@^1.1.7:
 braces@^0.1.2:
   version "0.1.5"
   resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6"
+  integrity sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=
   dependencies:
     expand-range "^0.1.0"
 
 braces@^1.8.2:
   version "1.8.5"
   resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+  integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
   dependencies:
     expand-range "^1.8.1"
     preserve "^0.2.0"
@@ -1034,22 +1186,26 @@ braces@^1.8.2:
 browser-stdout@1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
+  integrity sha1-81HTKWnTL6XXpVZxVCY9korjvR8=
 
 browserify-aes@0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c"
+  integrity sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=
   dependencies:
     inherits "^2.0.1"
 
 browserify-zlib@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+  integrity sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=
   dependencies:
     pako "~0.2.0"
 
 browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
   version "1.7.7"
   resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
+  integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=
   dependencies:
     caniuse-db "^1.0.30000639"
     electron-to-chromium "^1.2.7"
@@ -1057,6 +1213,7 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
 browserslist@^3.2.6:
   version "3.2.8"
   resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6"
+  integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==
   dependencies:
     caniuse-lite "^1.0.30000844"
     electron-to-chromium "^1.3.47"
@@ -1064,6 +1221,7 @@ browserslist@^3.2.6:
 buffer@^4.9.0:
   version "4.9.1"
   resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+  integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
   dependencies:
     base64-js "^1.0.2"
     ieee754 "^1.1.4"
@@ -1072,32 +1230,39 @@ buffer@^4.9.0:
 builtin-modules@^1.0.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+  integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
 
 builtin-status-codes@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+  integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
 
 bytes@3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+  integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
 
 caller-path@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+  integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
   dependencies:
     callsites "^0.2.0"
 
 callsite@1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
+  integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA=
 
 callsites@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+  integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
 
 camel-case@3.0.x:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
+  integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=
   dependencies:
     no-case "^2.2.0"
     upper-case "^1.1.1"
@@ -1105,6 +1270,7 @@ camel-case@3.0.x:
 camelcase-keys@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+  integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
   dependencies:
     camelcase "^2.0.0"
     map-obj "^1.0.0"
@@ -1112,18 +1278,22 @@ camelcase-keys@^2.0.0:
 camelcase@^1.0.2:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+  integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
 
 camelcase@^2.0.0:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+  integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
 
 camelcase@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
+  integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo=
 
 caniuse-api@^1.5.2:
   version "1.6.1"
   resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
+  integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=
   dependencies:
     browserslist "^1.3.6"
     caniuse-db "^1.0.30000529"
@@ -1133,18 +1303,22 @@ caniuse-api@^1.5.2:
 caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
   version "1.0.30000801"
   resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000801.tgz#a1d49def94c4e5aca5ccf1d58812e4668fac19d4"
+  integrity sha1-odSd75TE5aylzPHViBLkZo+sGdQ=
 
 caniuse-lite@^1.0.30000844:
   version "1.0.30000878"
   resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000878.tgz#c644c39588dd42d3498e952234c372e5a40a4123"
+  integrity sha512-/dCGTdLCnjVJno1mFRn7Y6eit3AYaeFzSrMQHCoK0LEQaWl5snuLex1Ky4b8/Qu2ig5NgTX4cJx65hH9546puA==
 
 caseless@~0.12.0:
   version "0.12.0"
   resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+  integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
 
 center-align@^0.1.1:
   version "0.1.3"
   resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+  integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60=
   dependencies:
     align-text "^0.1.3"
     lazy-cache "^1.0.3"
@@ -1152,6 +1326,7 @@ center-align@^0.1.1:
 chai-nightwatch@~0.1.x:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/chai-nightwatch/-/chai-nightwatch-0.1.1.tgz#1ca56de768d3c0868fe7fc2f4d32c2fe894e6be9"
+  integrity sha1-HKVt52jTwIaP5/wvTTLC/olOa+k=
   dependencies:
     assertion-error "1.0.0"
     deep-eql "0.1.3"
@@ -1159,6 +1334,7 @@ chai-nightwatch@~0.1.x:
 chai@^3.5.0:
   version "3.5.0"
   resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247"
+  integrity sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=
   dependencies:
     assertion-error "^1.0.1"
     deep-eql "^0.1.3"
@@ -1167,6 +1343,7 @@ chai@^3.5.0:
 chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+  integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
   dependencies:
     ansi-styles "^2.2.1"
     escape-string-regexp "^1.0.2"
@@ -1177,6 +1354,7 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
 chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
+  integrity sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==
   dependencies:
     ansi-styles "^3.1.0"
     escape-string-regexp "^1.0.5"
@@ -1185,6 +1363,7 @@ chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0:
 chalk@~0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f"
+  integrity sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=
   dependencies:
     ansi-styles "~1.0.0"
     has-color "~0.1.0"
@@ -1193,6 +1372,7 @@ chalk@~0.4.0:
 chokidar@^1.0.0, chokidar@^1.4.1:
   version "1.7.0"
   resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
+  integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=
   dependencies:
     anymatch "^1.3.0"
     async-each "^1.0.0"
@@ -1208,6 +1388,7 @@ chokidar@^1.0.0, chokidar@^1.4.1:
 chromedriver@^2.21.2:
   version "2.35.0"
   resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-2.35.0.tgz#c103ba2fb3d1671f666058159f5cbaa816902e4d"
+  integrity sha512-zqvC/HKybRxiM68GzByvUaXxTmNCmpETvLQIM92IEdrQxPnONKt3ZdTsiwxmGrL2ZIDbr9OEHJljmhZZMEsFPw==
   dependencies:
     del "^3.0.0"
     extract-zip "^1.6.5"
@@ -1218,36 +1399,43 @@ chromedriver@^2.21.2:
 circular-json@^0.3.1:
   version "0.3.3"
   resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
+  integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==
 
 clap@^1.0.9:
   version "1.2.3"
   resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
+  integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==
   dependencies:
     chalk "^1.1.3"
 
 clean-css@4.1.x:
   version "4.1.9"
   resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301"
+  integrity sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=
   dependencies:
     source-map "0.5.x"
 
 cli-cursor@^1.0.1, cli-cursor@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
+  integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=
   dependencies:
     restore-cursor "^1.0.1"
 
 cli-spinners@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.2.0.tgz#85078737913b880f6ec9ffe7b65e83ec7776284f"
+  integrity sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8=
 
 cli-width@^2.0.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
+  integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
 
 cliui@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+  integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=
   dependencies:
     center-align "^0.1.1"
     right-align "^0.1.1"
@@ -1256,6 +1444,7 @@ cliui@^2.1.0:
 cliui@^3.2.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+  integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
   dependencies:
     string-width "^1.0.1"
     strip-ansi "^3.0.1"
@@ -1264,44 +1453,53 @@ cliui@^3.2.0:
 clone@^1.0.2:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f"
+  integrity sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=
 
 co@^4.6.0:
   version "4.6.0"
   resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+  integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
 
 co@~3.0.6:
   version "3.0.6"
   resolved "https://registry.yarnpkg.com/co/-/co-3.0.6.tgz#1445f226c5eb956138e68c9ac30167ea7d2e6bda"
+  integrity sha1-FEXyJsXrlWE45oyawwFn6n0ua9o=
 
 coa@~1.0.1:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
+  integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=
   dependencies:
     q "^1.1.2"
 
 code-point-at@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+  integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
 
 color-convert@^1.3.0, color-convert@^1.9.0:
   version "1.9.1"
   resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
+  integrity sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==
   dependencies:
     color-name "^1.1.1"
 
 color-name@^1.0.0, color-name@^1.1.1:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+  integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
 
 color-string@^0.3.0:
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
+  integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=
   dependencies:
     color-name "^1.0.0"
 
 color@^0.11.0:
   version "0.11.4"
   resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
+  integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=
   dependencies:
     clone "^1.0.2"
     color-convert "^1.3.0"
@@ -1310,6 +1508,7 @@ color@^0.11.0:
 colormin@^1.0.5:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
+  integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=
   dependencies:
     color "^0.11.0"
     css-color-names "0.0.4"
@@ -1318,64 +1517,78 @@ colormin@^1.0.5:
 colors@^1.1.0, colors@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
+  integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM=
 
 colors@~0.6.0:
   version "0.6.2"
   resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc"
+  integrity sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=
 
 combine-lists@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6"
+  integrity sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=
   dependencies:
     lodash "^4.5.0"
 
 combined-stream@^1.0.5, combined-stream@~1.0.5:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+  integrity sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=
   dependencies:
     delayed-stream "~1.0.0"
 
 commander@2.12.x:
   version "2.12.2"
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555"
+  integrity sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==
 
 commander@2.9.0:
   version "2.9.0"
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
+  integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=
   dependencies:
     graceful-readlink ">= 1.0.0"
 
 commander@^2.9.0, commander@~2.13.0:
   version "2.13.0"
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
+  integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==
 
 commondir@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+  integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
 
 component-bind@1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
+  integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=
 
 component-emitter@1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3"
+  integrity sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=
 
 component-emitter@1.2.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+  integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
 
 component-inherit@0.0.3:
   version "0.0.3"
   resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
+  integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=
 
 concat-map@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
 
 concat-stream@1.6.0, concat-stream@^1.5.2:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+  integrity sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=
   dependencies:
     inherits "^2.0.3"
     readable-stream "^2.2.2"
@@ -1384,6 +1597,7 @@ concat-stream@1.6.0, concat-stream@^1.5.2:
 config-chain@~1.1.5:
   version "1.1.11"
   resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2"
+  integrity sha1-q6CXR9++TD5w52am5BWG4YWfxvI=
   dependencies:
     ini "^1.3.4"
     proto-list "~1.2.1"
@@ -1391,10 +1605,12 @@ config-chain@~1.1.5:
 connect-history-api-fallback@^1.1.0:
   version "1.5.0"
   resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a"
+  integrity sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=
 
 connect@^3.6.0:
   version "3.6.5"
   resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.5.tgz#fb8dde7ba0763877d0ec9df9dac0b4b40e72c7da"
+  integrity sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=
   dependencies:
     debug "2.6.9"
     finalhandler "1.0.6"
@@ -1404,54 +1620,66 @@ connect@^3.6.0:
 console-browserify@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+  integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
   dependencies:
     date-now "^0.1.4"
 
 console-control-strings@^1.0.0, console-control-strings@~1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+  integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
 
 consolidate@^0.14.0:
   version "0.14.5"
   resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.14.5.tgz#5a25047bc76f73072667c8cb52c989888f494c63"
+  integrity sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=
   dependencies:
     bluebird "^3.1.1"
 
 constants-browserify@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+  integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
 
 content-disposition@0.5.2:
   version "0.5.2"
   resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
+  integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ=
 
 content-type@~1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+  integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
 
 convert-source-map@^1.5.0:
   version "1.5.1"
   resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5"
+  integrity sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=
 
 cookie-signature@1.0.6:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+  integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
 
 cookie@0.3.1:
   version "0.3.1"
   resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+  integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
 
 core-js@^2.2.0, core-js@^2.4.0, core-js@^2.5.0:
   version "2.5.3"
   resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e"
+  integrity sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=
 
 core-util-is@1.0.2, core-util-is@~1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+  integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
 
 cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
   version "2.2.2"
   resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892"
+  integrity sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==
   dependencies:
     is-directory "^0.3.1"
     js-yaml "^3.4.3"
@@ -1464,6 +1692,7 @@ cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
 cross-spawn@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
+  integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI=
   dependencies:
     lru-cache "^4.0.1"
     which "^1.2.9"
@@ -1471,6 +1700,7 @@ cross-spawn@^3.0.0:
 cross-spawn@^4.0.2:
   version "4.0.2"
   resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
+  integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=
   dependencies:
     lru-cache "^4.0.1"
     which "^1.2.9"
@@ -1478,18 +1708,21 @@ cross-spawn@^4.0.2:
 cryptiles@2.x.x:
   version "2.0.5"
   resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+  integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=
   dependencies:
     boom "2.x.x"
 
 cryptiles@3.x.x:
   version "3.1.2"
   resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"
+  integrity sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=
   dependencies:
     boom "5.x.x"
 
 crypto-browserify@3.3.0:
   version "3.3.0"
   resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c"
+  integrity sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=
   dependencies:
     browserify-aes "0.4.0"
     pbkdf2-compat "2.0.1"
@@ -1499,10 +1732,12 @@ crypto-browserify@3.3.0:
 css-color-names@0.0.4:
   version "0.0.4"
   resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
+  integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=
 
 css-loader@^0.25.0:
   version "0.25.0"
   resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.25.0.tgz#c3febc8ce28f4c83576b6b13707f47f90c390223"
+  integrity sha1-w/68jOKPTINXa2sTcH9H+Qw5AiM=
   dependencies:
     babel-code-frame "^6.11.0"
     css-selector-tokenizer "^0.6.0"
@@ -1520,6 +1755,7 @@ css-loader@^0.25.0:
 css-select@^1.1.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+  integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
   dependencies:
     boolbase "~1.0.0"
     css-what "2.1"
@@ -1529,6 +1765,7 @@ css-select@^1.1.0:
 css-selector-tokenizer@^0.6.0:
   version "0.6.0"
   resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152"
+  integrity sha1-ZEX1gseTDSQdzFAHpD1vy48HMVI=
   dependencies:
     cssesc "^0.1.0"
     fastparse "^1.1.1"
@@ -1537,6 +1774,7 @@ css-selector-tokenizer@^0.6.0:
 css-selector-tokenizer@^0.7.0:
   version "0.7.0"
   resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86"
+  integrity sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=
   dependencies:
     cssesc "^0.1.0"
     fastparse "^1.1.1"
@@ -1545,14 +1783,17 @@ css-selector-tokenizer@^0.7.0:
 css-what@2.1:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
+  integrity sha1-lGfQMsOM+u+58teVASUwYvh/ob0=
 
 cssesc@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
+  integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=
 
 "cssnano@>=2.6.1 <4":
   version "3.10.0"
   resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
+  integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=
   dependencies:
     autoprefixer "^6.3.1"
     decamelize "^1.1.2"
@@ -1590,6 +1831,7 @@ cssesc@^0.1.0:
 csso@~2.3.1:
   version "2.3.2"
   resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
+  integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=
   dependencies:
     clap "^1.0.9"
     source-map "^0.5.3"
@@ -1597,36 +1839,43 @@ csso@~2.3.1:
 currently-unhandled@^0.4.1:
   version "0.4.1"
   resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+  integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
   dependencies:
     array-find-index "^1.0.1"
 
 custom-event@~1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425"
+  integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=
 
 d@1:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
+  integrity sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=
   dependencies:
     es5-ext "^0.10.9"
 
 dashdash@^1.12.0:
   version "1.14.1"
   resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+  integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
   dependencies:
     assert-plus "^1.0.0"
 
 data-uri-to-buffer@1:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835"
+  integrity sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==
 
 date-now@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+  integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
 
 dateformat@^1.0.6:
   version "1.0.12"
   resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9"
+  integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=
   dependencies:
     get-stdin "^4.0.1"
     meow "^3.3.0"
@@ -1634,56 +1883,67 @@ dateformat@^1.0.6:
 de-indent@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
+  integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
 
 debug@2, debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.6.8:
   version "2.6.9"
   resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
   dependencies:
     ms "2.0.0"
 
 debug@2.2.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+  integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=
   dependencies:
     ms "0.7.1"
 
 debug@2.3.3:
   version "2.3.3"
   resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c"
+  integrity sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=
   dependencies:
     ms "0.7.2"
 
 debug@2.6.8:
   version "2.6.8"
   resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
+  integrity sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=
   dependencies:
     ms "2.0.0"
 
 decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+  integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
 
 deep-eql@0.1.3, deep-eql@^0.1.3:
   version "0.1.3"
   resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2"
+  integrity sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=
   dependencies:
     type-detect "0.1.1"
 
 deep-extend@~0.4.0:
   version "0.4.2"
   resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
+  integrity sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=
 
 deep-is@~0.1.3:
   version "0.1.3"
   resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+  integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
 
 defined@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+  integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
 
 degenerator@~1.0.2:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095"
+  integrity sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=
   dependencies:
     ast-types "0.x.x"
     escodegen "1.x.x"
@@ -1692,6 +1952,7 @@ degenerator@~1.0.2:
 del@^2.0.2:
   version "2.2.2"
   resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
+  integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=
   dependencies:
     globby "^5.0.0"
     is-path-cwd "^1.0.0"
@@ -1704,6 +1965,7 @@ del@^2.0.2:
 del@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
+  integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=
   dependencies:
     globby "^6.1.0"
     is-path-cwd "^1.0.0"
@@ -1715,64 +1977,78 @@ del@^3.0.0:
 delayed-stream@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+  integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
 
 delegates@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+  integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
 
 depd@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
+  integrity sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=
 
 depd@~1.1.1:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+  integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
 
 destroy@~1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+  integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
 
 detect-indent@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+  integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
   dependencies:
     repeating "^2.0.0"
 
 detect-libc@^1.0.2:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+  integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
 
 di@^0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c"
+  integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=
 
 diff@1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf"
+  integrity sha1-fyjS657nsVqX79ic5j3P2qPMur8=
 
 diff@3.2.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9"
+  integrity sha1-yc45Okt8vQsFinJck98pkCeGj/k=
 
 diff@^3.0.1:
   version "3.4.0"
   resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c"
+  integrity sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==
 
 doctrine@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+  integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
   dependencies:
     esutils "^2.0.2"
 
 dom-converter@~0.1:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b"
+  integrity sha1-pF71cnuJDJv/5tfIduexnLDhfzs=
   dependencies:
     utila "~0.3"
 
 dom-serialize@^2.2.0:
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b"
+  integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=
   dependencies:
     custom-event "~1.0.0"
     ent "~2.2.0"
@@ -1782,6 +2058,7 @@ dom-serialize@^2.2.0:
 dom-serializer@0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
+  integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=
   dependencies:
     domelementtype "~1.1.1"
     entities "~1.1.1"
@@ -1789,36 +2066,43 @@ dom-serializer@0:
 domain-browser@^1.1.1:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+  integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
 
 domelementtype@1, domelementtype@^1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
+  integrity sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=
 
 domelementtype@~1.1.1:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
+  integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=
 
 domhandler@2.1:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594"
+  integrity sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=
   dependencies:
     domelementtype "1"
 
 domhandler@^2.3.0:
   version "2.4.1"
   resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259"
+  integrity sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=
   dependencies:
     domelementtype "1"
 
 domutils@1.1:
   version "1.1.6"
   resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485"
+  integrity sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=
   dependencies:
     domelementtype "1"
 
 domutils@1.5.1:
   version "1.5.1"
   resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+  integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
   dependencies:
     dom-serializer "0"
     domelementtype "1"
@@ -1826,6 +2110,7 @@ domutils@1.5.1:
 domutils@^1.5.1:
   version "1.6.2"
   resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff"
+  integrity sha1-GVjMC0yUJuntNn+xyOhUiRsPo/8=
   dependencies:
     dom-serializer "0"
     domelementtype "1"
@@ -1833,12 +2118,14 @@ domutils@^1.5.1:
 ecc-jsbn@~0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+  integrity sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=
   dependencies:
     jsbn "~0.1.0"
 
 editorconfig@^0.13.2:
   version "0.13.3"
   resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.13.3.tgz#e5219e587951d60958fd94ea9a9a008cdeff1b34"
+  integrity sha512-WkjsUNVCu+ITKDj73QDvi0trvpdDWdkDyHybDGSXPfekLCqwmpD7CP7iPbvBgosNuLcI96XTDwNa75JyFl7tEQ==
   dependencies:
     bluebird "^3.0.5"
     commander "^2.9.0"
@@ -1849,30 +2136,37 @@ editorconfig@^0.13.2:
 ee-first@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+  integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
 
 ejs@2.5.7:
   version "2.5.7"
   resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a"
+  integrity sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=
 
 electron-to-chromium@^1.2.7:
   version "1.3.32"
   resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.32.tgz#11d0684c0840e003c4be8928f8ac5f35dbc2b4e6"
+  integrity sha1-EdBoTAhA4APEvoko+KxfNdvCtOY=
 
 electron-to-chromium@^1.3.47:
   version "1.3.61"
   resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.61.tgz#a8ac295b28d0f03d85e37326fd16b6b6b17a1795"
+  integrity sha512-XjTdsm6x71Y48lF9EEvGciwXD70b20g0t+3YbrE+0fPFutqV08DSNrZXkoXAp3QuzX7TpL/OW+/VsNoR9GkuNg==
 
 emojis-list@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+  integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
 
 encodeurl@~1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+  integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
 
 engine.io-client@1.8.3:
   version "1.8.3"
   resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.3.tgz#1798ed93451246453d4c6f635d7a201fe940d5ab"
+  integrity sha1-F5jtk0USRkU9TG9jXXogH+lA1as=
   dependencies:
     component-emitter "1.2.1"
     component-inherit "0.0.3"
@@ -1890,6 +2184,7 @@ engine.io-client@1.8.3:
 engine.io-parser@1.3.2:
   version "1.3.2"
   resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz#937b079f0007d0893ec56d46cb220b8cb435220a"
+  integrity sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=
   dependencies:
     after "0.8.2"
     arraybuffer.slice "0.0.6"
@@ -1901,6 +2196,7 @@ engine.io-parser@1.3.2:
 engine.io@1.8.3:
   version "1.8.3"
   resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.3.tgz#8de7f97895d20d39b85f88eeee777b2bd42b13d4"
+  integrity sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=
   dependencies:
     accepts "1.3.3"
     base64id "1.0.0"
@@ -1912,6 +2208,7 @@ engine.io@1.8.3:
 enhanced-resolve@~0.9.0:
   version "0.9.1"
   resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e"
+  integrity sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=
   dependencies:
     graceful-fs "^4.1.2"
     memory-fs "^0.2.0"
@@ -1920,26 +2217,31 @@ enhanced-resolve@~0.9.0:
 ent@~2.2.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
+  integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0=
 
 entities@^1.1.1, entities@~1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
+  integrity sha1-blwtClYhtdra7O+AuQ7ftc13cvA=
 
 errno@^0.1.3:
   version "0.1.6"
   resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.6.tgz#c386ce8a6283f14fc09563b71560908c9bf53026"
+  integrity sha512-IsORQDpaaSwcDP4ZZnHxgE85werpo34VYn1Ud3mq+eUsF593faR8oCZNXrROVkpFu2TsbrNhHin0aUrTsQ9vNw==
   dependencies:
     prr "~1.0.1"
 
 error-ex@^1.2.0:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
+  integrity sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=
   dependencies:
     is-arrayish "^0.2.1"
 
 es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
   version "0.10.38"
   resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.38.tgz#fa7d40d65bbc9bb8a67e1d3f9cc656a00530eed3"
+  integrity sha512-jCMyePo7AXbUESwbl8Qi01VSH2piY9s/a3rSU/5w/MlTIx8HPL1xn2InGN8ejt/xulcJgnTO7vqNtOAxzYd2Kg==
   dependencies:
     es6-iterator "~2.0.3"
     es6-symbol "~3.1.1"
@@ -1947,6 +2249,7 @@ es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
 es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
+  integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
   dependencies:
     d "1"
     es5-ext "^0.10.35"
@@ -1955,6 +2258,7 @@ es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3:
 es6-map@^0.1.3:
   version "0.1.5"
   resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
+  integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=
   dependencies:
     d "1"
     es5-ext "~0.10.14"
@@ -1966,10 +2270,12 @@ es6-map@^0.1.3:
 es6-promise@^4.0.3:
   version "4.2.4"
   resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29"
+  integrity sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==
 
 es6-set@~0.1.5:
   version "0.1.5"
   resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
+  integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=
   dependencies:
     d "1"
     es5-ext "~0.10.14"
@@ -1980,6 +2286,7 @@ es6-set@~0.1.5:
 es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
+  integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=
   dependencies:
     d "1"
     es5-ext "~0.10.14"
@@ -1987,6 +2294,7 @@ es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
 es6-weak-map@^2.0.1:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
+  integrity sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=
   dependencies:
     d "1"
     es5-ext "^0.10.14"
@@ -1996,14 +2304,17 @@ es6-weak-map@^2.0.1:
 escape-html@~1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+  integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
 
 escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+  integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
 
 escodegen@1.8.x:
   version "1.8.1"
   resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
+  integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=
   dependencies:
     esprima "^2.7.1"
     estraverse "^1.9.1"
@@ -2015,6 +2326,7 @@ escodegen@1.8.x:
 escodegen@1.x.x, escodegen@^1.6.1:
   version "1.9.0"
   resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852"
+  integrity sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==
   dependencies:
     esprima "^3.1.3"
     estraverse "^4.2.0"
@@ -2026,6 +2338,7 @@ escodegen@1.x.x, escodegen@^1.6.1:
 escope@^3.6.0:
   version "3.6.0"
   resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
+  integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=
   dependencies:
     es6-map "^0.1.3"
     es6-weak-map "^2.0.1"
@@ -2035,10 +2348,12 @@ escope@^3.6.0:
 eslint-config-standard@^6.1.0:
   version "6.2.1"
   resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-6.2.1.tgz#d3a68aafc7191639e7ee441e7348739026354292"
+  integrity sha1-06aKr8cZFjnn7kQec0hzkCY1QpI=
 
 eslint-friendly-formatter@^2.0.5:
   version "2.0.7"
   resolved "https://registry.yarnpkg.com/eslint-friendly-formatter/-/eslint-friendly-formatter-2.0.7.tgz#657f95a19af4989636afebb1cc9de6cebbd088ee"
+  integrity sha1-ZX+VoZr0mJY2r+uxzJ3mzrvQiO4=
   dependencies:
     chalk "^1.0.0"
     extend "^3.0.0"
@@ -2048,6 +2363,7 @@ eslint-friendly-formatter@^2.0.5:
 eslint-loader@^1.5.0:
   version "1.9.0"
   resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.9.0.tgz#7e1be9feddca328d3dcfaef1ad49d5beffe83a13"
+  integrity sha512-40aN976qSNPyb9ejTqjEthZITpls1SVKtwguahmH1dzGCwQU/vySE+xX33VZmD8csU0ahVNCtFlsPgKqRBiqgg==
   dependencies:
     loader-fs-cache "^1.0.0"
     loader-utils "^1.0.2"
@@ -2058,20 +2374,24 @@ eslint-loader@^1.5.0:
 eslint-plugin-html@^1.5.5:
   version "1.7.0"
   resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-1.7.0.tgz#2a5b03884d8d56adf9ad9864e9c036480fb629c9"
+  integrity sha1-KlsDiE2NVq35rZhk6cA2SA+2Kck=
   dependencies:
     htmlparser2 "^3.8.2"
 
 eslint-plugin-promise@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-2.0.1.tgz#a9759cefa5e38ab11bb2ef65a04ef042309aa0a4"
+  integrity sha1-qXWc76XjirEbsu9loE7wQjCaoKQ=
 
 eslint-plugin-standard@^2.0.1:
   version "2.3.1"
   resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-2.3.1.tgz#6765bd2a6d9ecdc7bdf1b145ae4bb30e2b7b86f8"
+  integrity sha1-Z2W9Km2ezce98bFFrkuzDit7hvg=
 
 eslint@^3.7.1:
   version "3.19.0"
   resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc"
+  integrity sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=
   dependencies:
     babel-code-frame "^6.16.0"
     chalk "^1.1.3"
@@ -2112,6 +2432,7 @@ eslint@^3.7.1:
 espree@^3.4.0:
   version "3.5.3"
   resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.3.tgz#931e0af64e7fbbed26b050a29daad1fc64799fa6"
+  integrity sha512-Zy3tAJDORxQZLl2baguiRU1syPERAIg0L+JB2MWorORgTu/CplzvxS9WWA7Xh4+Q+eOQihNs/1o1Xep8cvCxWQ==
   dependencies:
     acorn "^5.4.0"
     acorn-jsx "^3.0.0"
@@ -2119,24 +2440,29 @@ espree@^3.4.0:
 esprima@2.7.x, esprima@^2.1.0, esprima@^2.6.0, esprima@^2.7.1:
   version "2.7.3"
   resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+  integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=
 
 esprima@3.x.x, esprima@^3.1.3:
   version "3.1.3"
   resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+  integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=
 
 esprima@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
+  integrity sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==
 
 esquery@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
+  integrity sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=
   dependencies:
     estraverse "^4.0.0"
 
 esrecurse@^4.1.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
+  integrity sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=
   dependencies:
     estraverse "^4.1.0"
     object-assign "^4.0.1"
@@ -2144,22 +2470,27 @@ esrecurse@^4.1.0:
 estraverse@^1.9.1:
   version "1.9.3"
   resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
+  integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=
 
 estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+  integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
 
 esutils@^2.0.2:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+  integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
 
 etag@~1.8.1:
   version "1.8.1"
   resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+  integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
 
 event-emitter@~0.3.5:
   version "0.3.5"
   resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
+  integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=
   dependencies:
     d "1"
     es5-ext "~0.10.14"
@@ -2167,22 +2498,27 @@ event-emitter@~0.3.5:
 eventemitter3@1.x.x:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
+  integrity sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=
 
 events@^1.0.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+  integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=
 
 eventsource-polyfill@^0.9.6:
   version "0.9.6"
   resolved "https://registry.yarnpkg.com/eventsource-polyfill/-/eventsource-polyfill-0.9.6.tgz#10e0d187f111b167f28fdab918843ce7d818f13c"
+  integrity sha1-EODRh/ERsWfyj9q5GIQ859gY8Tw=
 
 exit-hook@^1.0.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
+  integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=
 
 expand-braces@^0.1.1:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea"
+  integrity sha1-SIsdHSRRyz06axks/AMPRMWFX+o=
   dependencies:
     array-slice "^0.2.3"
     array-unique "^0.2.1"
@@ -2191,12 +2527,14 @@ expand-braces@^0.1.1:
 expand-brackets@^0.1.4:
   version "0.1.5"
   resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+  integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
   dependencies:
     is-posix-bracket "^0.1.0"
 
 expand-range@^0.1.0:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044"
+  integrity sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=
   dependencies:
     is-number "^0.1.1"
     repeat-string "^0.2.2"
@@ -2204,12 +2542,14 @@ expand-range@^0.1.0:
 expand-range@^1.8.1:
   version "1.8.2"
   resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+  integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
   dependencies:
     fill-range "^2.1.0"
 
 express@^4.13.3:
   version "4.16.2"
   resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c"
+  integrity sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=
   dependencies:
     accepts "~1.3.4"
     array-flatten "1.1.1"
@@ -2245,16 +2585,19 @@ express@^4.13.3:
 extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
+  integrity sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=
 
 extglob@^0.3.1:
   version "0.3.2"
   resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+  integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
   dependencies:
     is-extglob "^1.0.0"
 
 extract-text-webpack-plugin@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-1.0.1.tgz#c95bf3cbaac49dc96f1dc6e072549fbb654ccd2c"
+  integrity sha1-yVvzy6rEnclvHcbgclSfu2VMzSw=
   dependencies:
     async "^1.5.0"
     loader-utils "^0.2.3"
@@ -2263,6 +2606,7 @@ extract-text-webpack-plugin@^1.0.1:
 extract-zip@^1.6.5:
   version "1.6.6"
   resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.6.tgz#1290ede8d20d0872b429fd3f351ca128ec5ef85c"
+  integrity sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=
   dependencies:
     concat-stream "1.6.0"
     debug "2.6.9"
@@ -2272,32 +2616,39 @@ extract-zip@^1.6.5:
 extsprintf@1.3.0, extsprintf@^1.2.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+  integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
 
 fast-deep-equal@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
+  integrity sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=
 
 fast-json-stable-stringify@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
+  integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
 
 fast-levenshtein@~2.0.4:
   version "2.0.6"
   resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+  integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
 
 fastparse@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
+  integrity sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=
 
 fd-slicer@~1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"
+  integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=
   dependencies:
     pend "~1.2.0"
 
 figures@^1.3.5:
   version "1.7.0"
   resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+  integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=
   dependencies:
     escape-string-regexp "^1.0.5"
     object-assign "^4.1.0"
@@ -2305,6 +2656,7 @@ figures@^1.3.5:
 file-entry-cache@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
+  integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=
   dependencies:
     flat-cache "^1.2.1"
     object-assign "^4.0.1"
@@ -2312,20 +2664,24 @@ file-entry-cache@^2.0.0:
 file-loader@^0.9.0:
   version "0.9.0"
   resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.9.0.tgz#1d2daddd424ce6d1b07cfe3f79731bed3617ab42"
+  integrity sha1-HS2t3UJM5tGwfP4/eXMb7TYXq0I=
   dependencies:
     loader-utils "~0.2.5"
 
 file-uri-to-path@1:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+  integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
 
 filename-regex@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
+  integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=
 
 fill-range@^2.1.0:
   version "2.2.3"
   resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+  integrity sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=
   dependencies:
     is-number "^2.1.0"
     isobject "^2.0.0"
@@ -2336,6 +2692,7 @@ fill-range@^2.1.0:
 finalhandler@1.0.6:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.6.tgz#007aea33d1a4d3e42017f624848ad58d212f814f"
+  integrity sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=
   dependencies:
     debug "2.6.9"
     encodeurl "~1.0.1"
@@ -2348,6 +2705,7 @@ finalhandler@1.0.6:
 finalhandler@1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5"
+  integrity sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=
   dependencies:
     debug "2.6.9"
     encodeurl "~1.0.1"
@@ -2360,6 +2718,7 @@ finalhandler@1.1.0:
 find-cache-dir@^0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
+  integrity sha1-yN765XyKUqinhPnjHFfHQumToLk=
   dependencies:
     commondir "^1.0.1"
     mkdirp "^0.5.1"
@@ -2368,6 +2727,7 @@ find-cache-dir@^0.1.1:
 find-up@^1.0.0:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+  integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
   dependencies:
     path-exists "^2.0.0"
     pinkie-promise "^2.0.0"
@@ -2375,6 +2735,7 @@ find-up@^1.0.0:
 flat-cache@^1.2.1:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481"
+  integrity sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=
   dependencies:
     circular-json "^0.3.1"
     del "^2.0.2"
@@ -2384,24 +2745,29 @@ flat-cache@^1.2.1:
 flatten@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
+  integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=
 
 for-in@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+  integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
 
 for-own@^0.1.4:
   version "0.1.5"
   resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+  integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
   dependencies:
     for-in "^1.0.1"
 
 forever-agent@~0.6.1:
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+  integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
 
 form-data@~2.1.1:
   version "2.1.4"
   resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
+  integrity sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=
   dependencies:
     asynckit "^0.4.0"
     combined-stream "^1.0.5"
@@ -2410,6 +2776,7 @@ form-data@~2.1.1:
 form-data@~2.3.1:
   version "2.3.1"
   resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf"
+  integrity sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=
   dependencies:
     asynckit "^0.4.0"
     combined-stream "^1.0.5"
@@ -2418,20 +2785,24 @@ form-data@~2.3.1:
 formatio@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.1.1.tgz#5ed3ccd636551097383465d996199100e86161e9"
+  integrity sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=
   dependencies:
     samsam "~1.1"
 
 forwarded@~0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
+  integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
 
 fresh@0.5.2:
   version "0.5.2"
   resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+  integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
 
 fs-extra@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950"
+  integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=
   dependencies:
     graceful-fs "^4.1.2"
     jsonfile "^2.1.0"
@@ -2440,10 +2811,12 @@ fs-extra@^1.0.0:
 fs.realpath@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
 
 fsevents@^1.0.0:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8"
+  integrity sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==
   dependencies:
     nan "^2.3.0"
     node-pre-gyp "^0.6.39"
@@ -2451,6 +2824,7 @@ fsevents@^1.0.0:
 fstream-ignore@^1.0.5:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+  integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=
   dependencies:
     fstream "^1.0.0"
     inherits "2"
@@ -2459,6 +2833,7 @@ fstream-ignore@^1.0.5:
 fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
   version "1.0.11"
   resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
+  integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=
   dependencies:
     graceful-fs "^4.1.2"
     inherits "~2.0.0"
@@ -2468,6 +2843,7 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
 ftp@~0.3.10:
   version "0.3.10"
   resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d"
+  integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=
   dependencies:
     readable-stream "1.1.x"
     xregexp "2.0.0"
@@ -2475,10 +2851,12 @@ ftp@~0.3.10:
 function-bind@^1.0.2:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
 
 gauge@~2.7.3:
   version "2.7.4"
   resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+  integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
   dependencies:
     aproba "^1.0.3"
     console-control-strings "^1.0.0"
@@ -2492,30 +2870,36 @@ gauge@~2.7.3:
 gaze@^1.0.0:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105"
+  integrity sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=
   dependencies:
     globule "^1.0.0"
 
 generate-function@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
+  integrity sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=
 
 generate-object-property@^1.1.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+  integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=
   dependencies:
     is-property "^1.0.0"
 
 get-caller-file@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
+  integrity sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=
 
 get-stdin@^4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+  integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
 
 get-uri@2:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.1.tgz#dbdcacacd8c608a38316869368117697a1631c59"
+  integrity sha512-7aelVrYqCLuVjq2kEKRTH8fXPTC0xKTkM+G7UlFkEwCXY3sFbSxvY375JoFowOAYbkaU47SrBvOefUlLZZ+6QA==
   dependencies:
     data-uri-to-buffer "1"
     debug "2"
@@ -2527,12 +2911,14 @@ get-uri@2:
 getpass@^0.1.1:
   version "0.1.7"
   resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+  integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
   dependencies:
     assert-plus "^1.0.0"
 
 glob-base@^0.3.0:
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+  integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
   dependencies:
     glob-parent "^2.0.0"
     is-glob "^2.0.0"
@@ -2540,12 +2926,14 @@ glob-base@^0.3.0:
 glob-parent@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+  integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
   dependencies:
     is-glob "^2.0.0"
 
 glob@7.0.5:
   version "7.0.5"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95"
+  integrity sha1-tCAqaQmbu00pKnwblbZoK2fr3JU=
   dependencies:
     fs.realpath "^1.0.0"
     inflight "^1.0.4"
@@ -2557,6 +2945,7 @@ glob@7.0.5:
 glob@7.1.1:
   version "7.1.1"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+  integrity sha1-gFIR3wT6rxxjo2ADBs31reULLsg=
   dependencies:
     fs.realpath "^1.0.0"
     inflight "^1.0.4"
@@ -2568,6 +2957,7 @@ glob@7.1.1:
 glob@^5.0.15:
   version "5.0.15"
   resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
+  integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=
   dependencies:
     inflight "^1.0.4"
     inherits "2"
@@ -2578,6 +2968,7 @@ glob@^5.0.15:
 glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@~7.1.1:
   version "7.1.2"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
+  integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
   dependencies:
     fs.realpath "^1.0.0"
     inflight "^1.0.4"
@@ -2589,10 +2980,12 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@~7.1.1:
 globals@^9.14.0, globals@^9.18.0:
   version "9.18.0"
   resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
+  integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
 
 globby@^5.0.0:
   version "5.0.0"
   resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
+  integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=
   dependencies:
     array-union "^1.0.1"
     arrify "^1.0.0"
@@ -2604,6 +2997,7 @@ globby@^5.0.0:
 globby@^6.1.0:
   version "6.1.0"
   resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+  integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
   dependencies:
     array-union "^1.0.1"
     glob "^7.0.3"
@@ -2614,6 +3008,7 @@ globby@^6.1.0:
 globule@^1.0.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09"
+  integrity sha1-HcScaCLdnoovoAuiopUAboZkvQk=
   dependencies:
     glob "~7.1.1"
     lodash "~4.17.4"
@@ -2622,18 +3017,22 @@ globule@^1.0.0:
 graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
   version "4.1.11"
   resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+  integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=
 
 "graceful-readlink@>= 1.0.0":
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+  integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
 
 growl@1.9.2:
   version "1.9.2"
   resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f"
+  integrity sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=
 
 handlebars@^4.0.1:
   version "4.0.11"
   resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc"
+  integrity sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=
   dependencies:
     async "^1.4.0"
     optimist "^0.6.1"
@@ -2644,14 +3043,17 @@ handlebars@^4.0.1:
 har-schema@^1.0.5:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
+  integrity sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=
 
 har-schema@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+  integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
 
 har-validator@~4.2.1:
   version "4.2.1"
   resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
+  integrity sha1-M0gdDxu/9gDdID11gSpqX7oALio=
   dependencies:
     ajv "^4.9.1"
     har-schema "^1.0.5"
@@ -2659,6 +3061,7 @@ har-validator@~4.2.1:
 har-validator@~5.0.3:
   version "5.0.3"
   resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
+  integrity sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=
   dependencies:
     ajv "^5.1.0"
     har-schema "^2.0.0"
@@ -2666,48 +3069,58 @@ har-validator@~5.0.3:
 has-ansi@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+  integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
   dependencies:
     ansi-regex "^2.0.0"
 
 has-binary@0.1.7:
   version "0.1.7"
   resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c"
+  integrity sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=
   dependencies:
     isarray "0.0.1"
 
 has-color@~0.1.0:
   version "0.1.7"
   resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f"
+  integrity sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=
 
 has-cors@1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
+  integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=
 
 has-flag@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+  integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
 
 has-flag@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+  integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=
 
 has-unicode@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+  integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
 
 has@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
+  integrity sha1-hGFzP1OLCDfJNh45qauelwTcLyg=
   dependencies:
     function-bind "^1.0.2"
 
 hash-sum@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04"
+  integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=
 
 hasha@^2.2.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/hasha/-/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1"
+  integrity sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=
   dependencies:
     is-stream "^1.0.1"
     pinkie-promise "^2.0.0"
@@ -2715,6 +3128,7 @@ hasha@^2.2.0:
 hawk@3.1.3, hawk@~3.1.3:
   version "3.1.3"
   resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+  integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=
   dependencies:
     boom "2.x.x"
     cryptiles "2.x.x"
@@ -2724,6 +3138,7 @@ hawk@3.1.3, hawk@~3.1.3:
 hawk@~6.0.2:
   version "6.0.2"
   resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
+  integrity sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==
   dependencies:
     boom "4.x.x"
     cryptiles "3.x.x"
@@ -2733,18 +3148,22 @@ hawk@~6.0.2:
 he@1.1.1, he@1.1.x, he@^1.1.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
+  integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
 
 hoek@2.x.x:
   version "2.16.3"
   resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+  integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=
 
 hoek@4.x.x:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d"
+  integrity sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==
 
 home-or-tmp@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+  integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
   dependencies:
     os-homedir "^1.0.0"
     os-tmpdir "^1.0.1"
@@ -2752,18 +3171,22 @@ home-or-tmp@^2.0.0:
 hosted-git-info@^2.1.4:
   version "2.5.0"
   resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c"
+  integrity sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==
 
 html-comment-regex@^1.1.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
+  integrity sha1-ZouTd26q5V696POtRkswekljYl4=
 
 html-entities@^1.2.0:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
+  integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=
 
 html-minifier@^3.2.3:
   version "3.5.8"
   resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.8.tgz#5ccdb1f73a0d654e6090147511f6e6b2ee312700"
+  integrity sha512-WX7D6PB9PFq05fZ1/CyxPUuyqXed6vh2fGOM80+zJT5wAO93D/cUjLs0CcbBFjQmlwmCgRvl97RurtArIpOnkw==
   dependencies:
     camel-case "3.0.x"
     clean-css "4.1.x"
@@ -2777,6 +3200,7 @@ html-minifier@^3.2.3:
 html-webpack-plugin@^2.8.1:
   version "2.30.1"
   resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz#7f9c421b7ea91ec460f56527d78df484ee7537d5"
+  integrity sha1-f5xCG36pHsRg9WUn1430hO51N9U=
   dependencies:
     bluebird "^3.4.7"
     html-minifier "^3.2.3"
@@ -2788,6 +3212,7 @@ html-webpack-plugin@^2.8.1:
 htmlparser2@^3.8.2, htmlparser2@^3.9.0:
   version "3.9.2"
   resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338"
+  integrity sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=
   dependencies:
     domelementtype "^1.3.0"
     domhandler "^2.3.0"
@@ -2799,6 +3224,7 @@ htmlparser2@^3.8.2, htmlparser2@^3.9.0:
 htmlparser2@~3.3.0:
   version "3.3.0"
   resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe"
+  integrity sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=
   dependencies:
     domelementtype "1"
     domhandler "2.1"
@@ -2808,6 +3234,7 @@ htmlparser2@~3.3.0:
 http-errors@1.6.2, http-errors@~1.6.2:
   version "1.6.2"
   resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
+  integrity sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=
   dependencies:
     depd "1.1.1"
     inherits "2.0.3"
@@ -2817,6 +3244,7 @@ http-errors@1.6.2, http-errors@~1.6.2:
 http-proxy-agent@1:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz#cc1ce38e453bf984a0f7702d2dd59c73d081284a"
+  integrity sha1-zBzjjkU7+YSg93AtLdWcc9CBKEo=
   dependencies:
     agent-base "2"
     debug "2"
@@ -2825,6 +3253,7 @@ http-proxy-agent@1:
 http-proxy-middleware@^0.17.2:
   version "0.17.4"
   resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833"
+  integrity sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=
   dependencies:
     http-proxy "^1.16.2"
     is-glob "^3.1.0"
@@ -2834,6 +3263,7 @@ http-proxy-middleware@^0.17.2:
 http-proxy@^1.13.0, http-proxy@^1.16.2:
   version "1.16.2"
   resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742"
+  integrity sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=
   dependencies:
     eventemitter3 "1.x.x"
     requires-port "1.x.x"
@@ -2841,6 +3271,7 @@ http-proxy@^1.13.0, http-proxy@^1.16.2:
 http-signature@~1.1.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+  integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=
   dependencies:
     assert-plus "^0.2.0"
     jsprim "^1.2.2"
@@ -2849,6 +3280,7 @@ http-signature@~1.1.0:
 http-signature@~1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+  integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
   dependencies:
     assert-plus "^1.0.0"
     jsprim "^1.2.2"
@@ -2857,10 +3289,12 @@ http-signature@~1.2.0:
 https-browserify@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
+  integrity sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=
 
 https-proxy-agent@1:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6"
+  integrity sha1-NffabEjOTdv6JkiRrFk+5f+GceY=
   dependencies:
     agent-base "2"
     debug "2"
@@ -2869,48 +3303,59 @@ https-proxy-agent@1:
 iconv-lite@0.4.19:
   version "0.4.19"
   resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
+  integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==
 
 icss-replace-symbols@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
+  integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
 
 ieee754@^1.1.4:
   version "1.1.8"
   resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+  integrity sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=
 
 ignore@^3.2.0:
   version "3.3.7"
   resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021"
+  integrity sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==
 
 immediate@~3.0.5:
   version "3.0.6"
   resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
+  integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=
 
 imurmurhash@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+  integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
 
 in-publish@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51"
+  integrity sha1-4g/146KvwmkDILbcVSaCqcf631E=
 
 indent-string@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+  integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
   dependencies:
     repeating "^2.0.0"
 
 indexes-of@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
+  integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
 
 indexof@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+  integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
 
 inflight@^1.0.4:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+  integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
   dependencies:
     once "^1.3.0"
     wrappy "1"
@@ -2918,24 +3363,29 @@ inflight@^1.0.4:
 inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+  integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
 
 inherits@2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+  integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
 
 ini@^1.3.4, ini@~1.3.0:
   version "1.3.5"
   resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+  integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
 
 inject-loader@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/inject-loader/-/inject-loader-2.0.1.tgz#1a7b45d60a81610459ac76079c3ce2a654d0dfc7"
+  integrity sha1-GntF1gqBYQRZrHYHnDziplTQ38c=
   dependencies:
     loader-utils "^0.2.3"
 
 inquirer@^0.12.0:
   version "0.12.0"
   resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
+  integrity sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=
   dependencies:
     ansi-escapes "^1.1.0"
     ansi-regex "^2.0.0"
@@ -2954,114 +3404,138 @@ inquirer@^0.12.0:
 interpret@^0.6.4:
   version "0.6.6"
   resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b"
+  integrity sha1-/s16GOfOXKar+5U+H4YhOknxYls=
 
 interpret@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
+  integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=
 
 invariant@^2.2.2:
   version "2.2.2"
   resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+  integrity sha1-nh9WrArNtr8wMwbzOL47IErmA2A=
   dependencies:
     loose-envify "^1.0.0"
 
 invert-kv@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+  integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
 
 ip@1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/ip/-/ip-1.0.1.tgz#c7e356cdea225ae71b36d70f2e71a92ba4e42590"
+  integrity sha1-x+NWzeoiWucbNtcPLnGpK6TkJZA=
 
 ip@^1.1.4:
   version "1.1.5"
   resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+  integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
 
 ipaddr.js@1.5.2:
   version "1.5.2"
   resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0"
+  integrity sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=
 
 is-absolute-url@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
+  integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=
 
 is-arrayish@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+  integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
 
 is-binary-path@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+  integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
   dependencies:
     binary-extensions "^1.0.0"
 
 is-buffer@^1.1.5:
   version "1.1.6"
   resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+  integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
 
 is-builtin-module@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+  integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
   dependencies:
     builtin-modules "^1.0.0"
 
 is-directory@^0.3.1:
   version "0.3.1"
   resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+  integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
 
 is-dotfile@^1.0.0:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
+  integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=
 
 is-equal-shallow@^0.1.3:
   version "0.1.3"
   resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+  integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
   dependencies:
     is-primitive "^2.0.0"
 
 is-extendable@^0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+  integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
 
 is-extglob@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+  integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
 
 is-extglob@^2.1.0:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+  integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
 
 is-finite@^1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+  integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
   dependencies:
     number-is-nan "^1.0.0"
 
 is-fullwidth-code-point@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+  integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
   dependencies:
     number-is-nan "^1.0.0"
 
 is-fullwidth-code-point@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+  integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
 
 is-glob@^2.0.0, is-glob@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+  integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
   dependencies:
     is-extglob "^1.0.0"
 
 is-glob@^3.1.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+  integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
   dependencies:
     is-extglob "^2.1.0"
 
 is-my-json-valid@^2.10.0:
   version "2.17.1"
   resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz#3da98914a70a22f0a8563ef1511a246c6fc55471"
+  integrity sha512-Q2khNw+oBlWuaYvEEHtKSw/pCxD2L5Rc1C+UQme9X6JdRDh7m5D7HkozA0qa3DUkQ6VzCnEm8mVIQPyIRkI5sQ==
   dependencies:
     generate-function "^2.0.0"
     generate-object-property "^1.1.0"
@@ -3071,108 +3545,131 @@ is-my-json-valid@^2.10.0:
 is-number@^0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806"
+  integrity sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=
 
 is-number@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+  integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
   dependencies:
     kind-of "^3.0.2"
 
 is-number@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+  integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
   dependencies:
     kind-of "^3.0.2"
 
 is-path-cwd@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+  integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
 
 is-path-in-cwd@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
+  integrity sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=
   dependencies:
     is-path-inside "^1.0.0"
 
 is-path-inside@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
+  integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
   dependencies:
     path-is-inside "^1.0.1"
 
 is-plain-obj@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+  integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
 
 is-posix-bracket@^0.1.0:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+  integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
 
 is-primitive@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+  integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
 
 is-property@^1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+  integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=
 
 is-resolvable@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+  integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
 
 is-stream@^1.0.1:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+  integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
 
 is-svg@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
+  integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=
   dependencies:
     html-comment-regex "^1.1.0"
 
 is-typedarray@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+  integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
 
 is-utf8@^0.2.0:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+  integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
 
 isarray@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+  integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
 
 isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+  integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
 
 isbinaryfile@^3.0.0:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621"
+  integrity sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=
 
 isexe@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
 
 iso-639-1@^2.0.3:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/iso-639-1/-/iso-639-1-2.0.3.tgz#72dd3448ac5629c271628c5ac566369428d6ccd0"
+  integrity sha512-PZhOTDH05ZLJyCqxAH65EzGaLO801KCvoEahAFoiqlp2HmnGUm8sO19KwWPCiWd3odjmoYd9ytzk2WtVYgWyCg==
 
 isobject@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+  integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
   dependencies:
     isarray "1.0.0"
 
 isparta-loader@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/isparta-loader/-/isparta-loader-2.0.0.tgz#4425f496c93f765bbceb4dd938576da307566ed1"
+  integrity sha1-RCX0lsk/dlu8603ZOFdtowdWbtE=
   dependencies:
     isparta "4.x.x"
 
 isparta@4.x.x:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/isparta/-/isparta-4.0.0.tgz#1de91996f480b22dcb1aca8510255bae1574446e"
+  integrity sha1-HekZlvSAsi3LGsqFECVbrhV0RG4=
   dependencies:
     babel-core "^6.1.4"
     escodegen "^1.6.1"
@@ -3187,10 +3684,12 @@ isparta@4.x.x:
 isstream@~0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+  integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
 
 istanbul@^0.4.0:
   version "0.4.5"
   resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b"
+  integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=
   dependencies:
     abbrev "1.0.x"
     async "1.x"
@@ -3210,10 +3709,12 @@ istanbul@^0.4.0:
 js-base64@^2.1.8, js-base64@^2.1.9:
   version "2.4.3"
   resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582"
+  integrity sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==
 
 js-beautify@^1.6.3:
   version "1.7.5"
   resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.7.5.tgz#69d9651ef60dbb649f65527b53674950138a7919"
+  integrity sha512-9OhfAqGOrD7hoQBLJMTA+BKuKmoEtTJXzZ7WDF/9gvjtey1koVLuZqIY6c51aPDjbNdNtIXAkiWKVhziawE9Og==
   dependencies:
     config-chain "~1.1.5"
     editorconfig "^0.13.2"
@@ -3223,10 +3724,12 @@ js-beautify@^1.6.3:
 js-tokens@^3.0.0, js-tokens@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+  integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
 
 js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.5.1:
   version "3.10.0"
   resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
+  integrity sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==
   dependencies:
     argparse "^1.0.7"
     esprima "^4.0.0"
@@ -3234,6 +3737,7 @@ js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.5.1:
 js-yaml@~3.7.0:
   version "3.7.0"
   resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
+  integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=
   dependencies:
     argparse "^1.0.7"
     esprima "^2.6.0"
@@ -3241,62 +3745,76 @@ js-yaml@~3.7.0:
 jsbn@~0.1.0:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+  integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
 
 jsesc@^1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+  integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
 
 jsesc@~0.5.0:
   version "0.5.0"
   resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+  integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
 
 json-loader@^0.5.4:
   version "0.5.7"
   resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
+  integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==
 
 json-schema-traverse@^0.3.0:
   version "0.3.1"
   resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+  integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=
 
 json-schema@0.2.3:
   version "0.2.3"
   resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+  integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
 
 json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+  integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=
   dependencies:
     jsonify "~0.0.0"
 
 json-stringify-safe@~5.0.1:
   version "5.0.1"
   resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+  integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
 
 json3@3.3.2:
   version "3.3.2"
   resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
+  integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=
 
 json5@^0.5.0, json5@^0.5.1:
   version "0.5.1"
   resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+  integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
 
 jsonfile@^2.1.0:
   version "2.4.0"
   resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
+  integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug=
   optionalDependencies:
     graceful-fs "^4.1.6"
 
 jsonify@~0.0.0:
   version "0.0.0"
   resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+  integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
 
 jsonpointer@^4.0.0:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+  integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk=
 
 jsprim@^1.2.2:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+  integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
   dependencies:
     assert-plus "1.0.0"
     extsprintf "1.3.0"
@@ -3306,6 +3824,7 @@ jsprim@^1.2.2:
 karma-coverage@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.1.tgz#5aff8b39cf6994dc22de4c84362c76001b637cf6"
+  integrity sha1-Wv+LOc9plNwi3kyENix2ABtjfPY=
   dependencies:
     dateformat "^1.0.6"
     istanbul "^0.4.0"
@@ -3316,6 +3835,7 @@ karma-coverage@^1.1.1:
 karma-mocha-reporter@^2.2.1:
   version "2.2.5"
   resolved "https://registry.yarnpkg.com/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz#15120095e8ed819186e47a0b012f3cd741895560"
+  integrity sha1-FRIAlejtgZGG5HoLAS8810GJVWA=
   dependencies:
     chalk "^2.1.0"
     log-symbols "^2.1.0"
@@ -3324,12 +3844,14 @@ karma-mocha-reporter@^2.2.1:
 karma-mocha@^1.2.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-1.3.0.tgz#eeaac7ffc0e201eb63c467440d2b69c7cf3778bf"
+  integrity sha1-7qrH/8DiAetjxGdEDStpx883eL8=
   dependencies:
     minimist "1.2.0"
 
 karma-phantomjs-launcher@^1.0.0:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz#d23ca34801bda9863ad318e3bb4bd4062b13acd2"
+  integrity sha1-0jyjSAG9qYY60xjju0vUBisTrNI=
   dependencies:
     lodash "^4.0.1"
     phantomjs-prebuilt "^2.1.7"
@@ -3337,24 +3859,28 @@ karma-phantomjs-launcher@^1.0.0:
 karma-sinon-chai@^1.2.0:
   version "1.3.3"
   resolved "https://registry.yarnpkg.com/karma-sinon-chai/-/karma-sinon-chai-1.3.3.tgz#a597e5b4a1369fe7b3d7d76c09ed2061a38e747f"
+  integrity sha1-pZfltKE2n+ez19dsCe0gYaOOdH8=
   dependencies:
     lolex "^1.6.0"
 
 karma-sourcemap-loader@^0.3.7:
   version "0.3.7"
   resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8"
+  integrity sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=
   dependencies:
     graceful-fs "^4.1.2"
 
 karma-spec-reporter@0.0.26:
   version "0.0.26"
   resolved "https://registry.yarnpkg.com/karma-spec-reporter/-/karma-spec-reporter-0.0.26.tgz#bf5561377dce1b63cf2c975c1af3e35f199e2265"
+  integrity sha1-v1VhN33OG2PPLJdcGvPjXxmeImU=
   dependencies:
     colors "~0.6.0"
 
 karma-webpack@^1.7.0:
   version "1.8.1"
   resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-1.8.1.tgz#39d5fd2edeea3cc3ef5b405989b37d5b0e6a3b4e"
+  integrity sha1-OdX9Lt7qPMPvW0BZibN9Ww5qO04=
   dependencies:
     async "~0.9.0"
     loader-utils "^0.2.5"
@@ -3365,6 +3891,7 @@ karma-webpack@^1.7.0:
 karma@^1.3.0:
   version "1.7.1"
   resolved "https://registry.yarnpkg.com/karma/-/karma-1.7.1.tgz#85cc08e9e0a22d7ce9cca37c4a1be824f6a2b1ae"
+  integrity sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==
   dependencies:
     bluebird "^3.3.0"
     body-parser "^1.16.1"
@@ -3397,38 +3924,45 @@ karma@^1.3.0:
 kew@^0.7.0:
   version "0.7.0"
   resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b"
+  integrity sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=
 
 kind-of@^3.0.2:
   version "3.2.2"
   resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+  integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
   dependencies:
     is-buffer "^1.1.5"
 
 kind-of@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+  integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
   dependencies:
     is-buffer "^1.1.5"
 
 klaw@^1.0.0:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
+  integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk=
   optionalDependencies:
     graceful-fs "^4.1.9"
 
 lazy-cache@^1.0.3:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+  integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
 
 lcid@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+  integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=
   dependencies:
     invert-kv "^1.0.0"
 
 levn@^0.3.0, levn@~0.3.0:
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+  integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
   dependencies:
     prelude-ls "~1.1.2"
     type-check "~0.3.2"
@@ -3436,12 +3970,14 @@ levn@^0.3.0, levn@~0.3.0:
 lie@3.1.1:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e"
+  integrity sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=
   dependencies:
     immediate "~3.0.5"
 
 load-json-file@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+  integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
   dependencies:
     graceful-fs "^4.1.2"
     parse-json "^2.2.0"
@@ -3452,6 +3988,7 @@ load-json-file@^1.0.0:
 loader-fs-cache@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz#56e0bf08bd9708b26a765b68509840c8dec9fdbc"
+  integrity sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=
   dependencies:
     find-cache-dir "^0.1.1"
     mkdirp "0.5.1"
@@ -3459,6 +3996,7 @@ loader-fs-cache@^1.0.0:
 loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@^0.2.3, loader-utils@^0.2.5, loader-utils@~0.2.2, loader-utils@~0.2.5:
   version "0.2.17"
   resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
+  integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=
   dependencies:
     big.js "^3.1.3"
     emojis-list "^2.0.0"
@@ -3468,6 +4006,7 @@ loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@^
 loader-utils@^1.0.2, loader-utils@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd"
+  integrity sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=
   dependencies:
     big.js "^3.1.3"
     emojis-list "^2.0.0"
@@ -3476,20 +4015,24 @@ loader-utils@^1.0.2, loader-utils@^1.1.0:
 localforage@^1.5.0:
   version "1.5.6"
   resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.5.6.tgz#d034d15e5372ee97c64173e9a9aeb96815f5dd06"
+  integrity sha1-0DTRXlNy7pfGQXPpqa65aBX13QY=
   dependencies:
     lie "3.1.1"
 
 lodash._arraycopy@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1"
+  integrity sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=
 
 lodash._arrayeach@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e"
+  integrity sha1-urFWsqkNPxu9XGU0AzSeXlkz754=
 
 lodash._baseassign@^3.0.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
+  integrity sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=
   dependencies:
     lodash._basecopy "^3.0.0"
     lodash.keys "^3.0.0"
@@ -3497,6 +4040,7 @@ lodash._baseassign@^3.0.0:
 lodash._basecallback@^3.0.0:
   version "3.3.1"
   resolved "https://registry.yarnpkg.com/lodash._basecallback/-/lodash._basecallback-3.3.1.tgz#b7b2bb43dc2160424a21ccf26c57e443772a8e27"
+  integrity sha1-t7K7Q9whYEJKIczybFfkQ3cqjic=
   dependencies:
     lodash._baseisequal "^3.0.0"
     lodash._bindcallback "^3.0.0"
@@ -3506,6 +4050,7 @@ lodash._basecallback@^3.0.0:
 lodash._baseclone@^3.0.0:
   version "3.3.0"
   resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7"
+  integrity sha1-MDUZv2OT/n5C802LYw73eU41Qrc=
   dependencies:
     lodash._arraycopy "^3.0.0"
     lodash._arrayeach "^3.0.0"
@@ -3517,36 +4062,44 @@ lodash._baseclone@^3.0.0:
 lodash._baseclone@^4.0.0:
   version "4.5.7"
   resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-4.5.7.tgz#ce42ade08384ef5d62fa77c30f61a46e686f8434"
+  integrity sha1-zkKt4IOE711i+nfDD2GkbmhvhDQ=
 
 lodash._basecopy@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
+  integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=
 
 lodash._basecreate@^3.0.0:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821"
+  integrity sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=
 
 lodash._baseeach@^3.0.0:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/lodash._baseeach/-/lodash._baseeach-3.0.4.tgz#cf8706572ca144e8d9d75227c990da982f932af3"
+  integrity sha1-z4cGVyyhROjZ11InyZDamC+TKvM=
   dependencies:
     lodash.keys "^3.0.0"
 
 lodash._basefind@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/lodash._basefind/-/lodash._basefind-3.0.0.tgz#b2bba05cc645f972de2cf925fa2bf63a0f60c8ae"
+  integrity sha1-srugXMZF+XLeLPkl+iv2Og9gyK4=
 
 lodash._basefindindex@^3.0.0:
   version "3.6.0"
   resolved "https://registry.yarnpkg.com/lodash._basefindindex/-/lodash._basefindindex-3.6.0.tgz#f083360a1b022418ed81bc899beb312e21e74a4f"
+  integrity sha1-8IM2ChsCJBjtgbyJm+sxLiHnSk8=
 
 lodash._basefor@^3.0.0:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2"
+  integrity sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=
 
 lodash._baseisequal@^3.0.0:
   version "3.0.7"
   resolved "https://registry.yarnpkg.com/lodash._baseisequal/-/lodash._baseisequal-3.0.7.tgz#d8025f76339d29342767dcc887ce5cb95a5b51f1"
+  integrity sha1-2AJfdjOdKTQnZ9zIh85cuVpbUfE=
   dependencies:
     lodash.isarray "^3.0.0"
     lodash.istypedarray "^3.0.0"
@@ -3555,10 +4108,12 @@ lodash._baseisequal@^3.0.0:
 lodash._bindcallback@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
+  integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4=
 
 lodash._createassigner@^3.0.0:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11"
+  integrity sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=
   dependencies:
     lodash._bindcallback "^3.0.0"
     lodash._isiterateecall "^3.0.0"
@@ -3567,6 +4122,7 @@ lodash._createassigner@^3.0.0:
 lodash._createcompounder@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/lodash._createcompounder/-/lodash._createcompounder-3.0.0.tgz#5dd2cb55372d6e70e0e2392fb2304d6631091075"
+  integrity sha1-XdLLVTctbnDg4jkvsjBNZjEJEHU=
   dependencies:
     lodash.deburr "^3.0.0"
     lodash.words "^3.0.0"
@@ -3574,32 +4130,39 @@ lodash._createcompounder@^3.0.0:
 lodash._getnative@^3.0.0:
   version "3.9.1"
   resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
+  integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=
 
 lodash._isiterateecall@^3.0.0:
   version "3.0.9"
   resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
+  integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=
 
 lodash._root@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
+  integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=
 
 lodash._stack@^4.0.0:
   version "4.1.3"
   resolved "https://registry.yarnpkg.com/lodash._stack/-/lodash._stack-4.1.3.tgz#751aa76c1b964b047e76d14fc72a093fcb5e2dd0"
+  integrity sha1-dRqnbBuWSwR+dtFPxyoJP8teLdA=
 
 lodash.assign@^4.2.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
+  integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=
 
 lodash.camelcase@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-3.0.1.tgz#932c8b87f8a4377897c67197533282f97aeac298"
+  integrity sha1-kyyLh/ikN3iXxnGXUzKC+Xrqwpg=
   dependencies:
     lodash._createcompounder "^3.0.0"
 
 lodash.clone@3.0.3:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-3.0.3.tgz#84688c73d32b5a90ca25616963f189252a997043"
+  integrity sha1-hGiMc9MrWpDKJWFpY/GJJSqZcEM=
   dependencies:
     lodash._baseclone "^3.0.0"
     lodash._bindcallback "^3.0.0"
@@ -3608,10 +4171,12 @@ lodash.clone@3.0.3:
 lodash.clonedeep@^4.3.2, lodash.clonedeep@^4.5.0:
   version "4.5.0"
   resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+  integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
 
 lodash.create@3.1.1:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7"
+  integrity sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=
   dependencies:
     lodash._baseassign "^3.0.0"
     lodash._basecreate "^3.0.0"
@@ -3620,12 +4185,14 @@ lodash.create@3.1.1:
 lodash.deburr@^3.0.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-3.2.0.tgz#6da8f54334a366a7cf4c4c76ef8d80aa1b365ed5"
+  integrity sha1-baj1QzSjZqfPTEx2742Aqhs2XtU=
   dependencies:
     lodash._root "^3.0.0"
 
 lodash.defaultsdeep@4.3.2:
   version "4.3.2"
   resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.3.2.tgz#6c1a586e6c5647b0e64e2d798141b8836158be8a"
+  integrity sha1-bBpYbmxWR7DmTi15gUG4g2FYvoo=
   dependencies:
     lodash._baseclone "^4.0.0"
     lodash._stack "^4.0.0"
@@ -3637,10 +4204,12 @@ lodash.defaultsdeep@4.3.2:
 lodash.escaperegexp@^4.1.2:
   version "4.1.2"
   resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347"
+  integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=
 
 lodash.find@^3.2.1:
   version "3.2.1"
   resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-3.2.1.tgz#046e319f3ace912ac6c9246c7f683c5ec07b36ad"
+  integrity sha1-BG4xnzrOkSrGySRsf2g8XsB7Nq0=
   dependencies:
     lodash._basecallback "^3.0.0"
     lodash._baseeach "^3.0.0"
@@ -3652,18 +4221,22 @@ lodash.find@^3.2.1:
 lodash.isarguments@^3.0.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
+  integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=
 
 lodash.isarray@^3.0.0:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
+  integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=
 
 lodash.isequal@^4.2.0:
   version "4.5.0"
   resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+  integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA=
 
 lodash.isplainobject@^3.0.0, lodash.isplainobject@^3.2.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz#9a8238ae16b200432960cd7346512d0123fbf4c5"
+  integrity sha1-moI4rhayAEMpYM1zRlEtASP79MU=
   dependencies:
     lodash._basefor "^3.0.0"
     lodash.isarguments "^3.0.0"
@@ -3672,14 +4245,17 @@ lodash.isplainobject@^3.0.0, lodash.isplainobject@^3.2.0:
 lodash.isplainobject@^4.0.0:
   version "4.0.6"
   resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+  integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
 
 lodash.istypedarray@^3.0.0:
   version "3.0.6"
   resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62"
+  integrity sha1-yaR3SYYHUB2OhJTSg7h8OSgc72I=
 
 lodash.keys@^3.0.0:
   version "3.1.2"
   resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
+  integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=
   dependencies:
     lodash._getnative "^3.0.0"
     lodash.isarguments "^3.0.0"
@@ -3688,6 +4264,7 @@ lodash.keys@^3.0.0:
 lodash.keysin@^3.0.0:
   version "3.0.8"
   resolved "https://registry.yarnpkg.com/lodash.keysin/-/lodash.keysin-3.0.8.tgz#22c4493ebbedb1427962a54b445b2c8a767fb47f"
+  integrity sha1-IsRJPrvtsUJ5YqVLRFssinZ/tH8=
   dependencies:
     lodash.isarguments "^3.0.0"
     lodash.isarray "^3.0.0"
@@ -3695,14 +4272,17 @@ lodash.keysin@^3.0.0:
 lodash.keysin@^4.0.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/lodash.keysin/-/lodash.keysin-4.2.0.tgz#8cc3fb35c2d94acc443a1863e02fa40799ea6f28"
+  integrity sha1-jMP7NcLZSsxEOhhj4C+kB5nqbyg=
 
 lodash.memoize@^4.1.2:
   version "4.1.2"
   resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+  integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
 
 lodash.merge@^3.3.2:
   version "3.3.2"
   resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-3.3.2.tgz#0d90d93ed637b1878437bb3e21601260d7afe994"
+  integrity sha1-DZDZPtY3sYeEN7s+IWASYNev6ZQ=
   dependencies:
     lodash._arraycopy "^3.0.0"
     lodash._arrayeach "^3.0.0"
@@ -3719,24 +4299,29 @@ lodash.merge@^3.3.2:
 lodash.mergewith@^4.0.0, lodash.mergewith@^4.6.0:
   version "4.6.0"
   resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55"
+  integrity sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=
 
 lodash.pairs@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/lodash.pairs/-/lodash.pairs-3.0.1.tgz#bbe08d5786eeeaa09a15c91ebf0dcb7d2be326a9"
+  integrity sha1-u+CNV4bu6qCaFckevw3LfSvjJqk=
   dependencies:
     lodash.keys "^3.0.0"
 
 lodash.rest@^4.0.0:
   version "4.0.5"
   resolved "https://registry.yarnpkg.com/lodash.rest/-/lodash.rest-4.0.5.tgz#954ef75049262038c96d1fc98b28fdaf9f0772aa"
+  integrity sha1-lU73UEkmIDjJbR/Jiyj9r58Hcqo=
 
 lodash.restparam@^3.0.0:
   version "3.6.1"
   resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
+  integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=
 
 lodash.toplainobject@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz#28790ad942d293d78aa663a07ecf7f52ca04198d"
+  integrity sha1-KHkK2ULSk9eKpmOgfs9/UsoEGY0=
   dependencies:
     lodash._basecopy "^3.0.0"
     lodash.keysin "^3.0.0"
@@ -3744,36 +4329,43 @@ lodash.toplainobject@^3.0.0:
 lodash.uniq@^4.5.0:
   version "4.5.0"
   resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+  integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
 
 lodash.words@^3.0.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/lodash.words/-/lodash.words-3.2.0.tgz#4e2a8649bc08745b17c695b1a3ce8fee596623b3"
+  integrity sha1-TiqGSbwIdFsXxpWxo86P7llmI7M=
   dependencies:
     lodash._root "^3.0.0"
 
 lodash@^3.8.0:
   version "3.10.1"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
+  integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=
 
 lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.16.4, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0, lodash@~4.17.4:
   version "4.17.4"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+  integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=
 
 log-symbols@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
+  integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=
   dependencies:
     chalk "^1.0.0"
 
 log-symbols@^2.1.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
+  integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
   dependencies:
     chalk "^2.0.1"
 
 log4js@^0.6.31:
   version "0.6.38"
   resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd"
+  integrity sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=
   dependencies:
     readable-stream "~1.0.2"
     semver "~4.3.3"
@@ -3781,24 +4373,29 @@ log4js@^0.6.31:
 lolex@1.3.2:
   version "1.3.2"
   resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31"
+  integrity sha1-fD2mL/yzDw9agKJWbKJORdigHzE=
 
 lolex@^1.4.0, lolex@^1.6.0:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.6.0.tgz#3a9a0283452a47d7439e72731b9e07d7386e49f6"
+  integrity sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=
 
 longest@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+  integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
 
 loose-envify@^1.0.0:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
+  integrity sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=
   dependencies:
     js-tokens "^3.0.0"
 
 loud-rejection@^1.0.0:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+  integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
   dependencies:
     currently-unhandled "^0.4.1"
     signal-exit "^3.0.0"
@@ -3806,10 +4403,12 @@ loud-rejection@^1.0.0:
 lower-case@^1.1.1:
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
+  integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw=
 
 lru-cache@4.1.x, lru-cache@^4.0.1:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55"
+  integrity sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==
   dependencies:
     pseudomap "^1.0.2"
     yallist "^2.1.2"
@@ -3817,36 +4416,44 @@ lru-cache@4.1.x, lru-cache@^4.0.1:
 lru-cache@^3.2.0:
   version "3.2.0"
   resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee"
+  integrity sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=
   dependencies:
     pseudomap "^1.0.1"
 
 lru-cache@~2.6.5:
   version "2.6.5"
   resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.6.5.tgz#e56d6354148ede8d7707b58d143220fd08df0fd5"
+  integrity sha1-5W1jVBSO3o13B7WNFDIg/QjfD9U=
 
 macaddress@^0.2.8:
   version "0.2.8"
   resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
+  integrity sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=
 
 map-obj@^1.0.0, map-obj@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+  integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
 
 math-expression-evaluator@^1.2.14:
   version "1.2.17"
   resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
+  integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw=
 
 media-typer@0.3.0:
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+  integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
 
 memory-fs@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290"
+  integrity sha1-8rslNovBIeORwlIN6Slpyu4KApA=
 
 memory-fs@~0.3.0:
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20"
+  integrity sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=
   dependencies:
     errno "^0.1.3"
     readable-stream "^2.0.1"
@@ -3854,6 +4461,7 @@ memory-fs@~0.3.0:
 memory-fs@~0.4.1:
   version "0.4.1"
   resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+  integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
   dependencies:
     errno "^0.1.3"
     readable-stream "^2.0.1"
@@ -3861,6 +4469,7 @@ memory-fs@~0.4.1:
 meow@^3.3.0, meow@^3.7.0:
   version "3.7.0"
   resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+  integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
   dependencies:
     camelcase-keys "^2.0.0"
     decamelize "^1.1.2"
@@ -3876,14 +4485,17 @@ meow@^3.3.0, meow@^3.7.0:
 merge-descriptors@1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+  integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
 
 methods@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+  integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
 
 micromatch@^2.1.5, micromatch@^2.3.11:
   version "2.3.11"
   resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+  integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
   dependencies:
     arr-diff "^2.0.0"
     array-unique "^0.2.1"
@@ -3902,64 +4514,77 @@ micromatch@^2.1.5, micromatch@^2.3.11:
 mime-db@~1.30.0:
   version "1.30.0"
   resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
+  integrity sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=
 
 mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7:
   version "2.1.17"
   resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
+  integrity sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=
   dependencies:
     mime-db "~1.30.0"
 
 mime@1.3.x:
   version "1.3.6"
   resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0"
+  integrity sha1-WR2E02U6awtKO5343lqoEI5y5eA=
 
 mime@1.4.1:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
+  integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==
 
 mime@^1.3.4, mime@^1.5.0:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+  integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
 
 "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+  integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
   dependencies:
     brace-expansion "^1.1.7"
 
 minimatch@3.0.3:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+  integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=
   dependencies:
     brace-expansion "^1.0.0"
 
 minimist@0.0.8, minimist@~0.0.1:
   version "0.0.8"
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+  integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
 
 minimist@1.2.0, minimist@^1.1.3, minimist@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+  integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
 
 mkdirp@0.5.0:
   version "0.5.0"
   resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12"
+  integrity sha1-HXMHam35hs2TROFecfzAWkyavxI=
   dependencies:
     minimist "0.0.8"
 
 mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
   version "0.5.1"
   resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+  integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
   dependencies:
     minimist "0.0.8"
 
 mkpath@1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/mkpath/-/mkpath-1.0.0.tgz#ebb3a977e7af1c683ae6fda12b545a6ba6c5853d"
+  integrity sha1-67Opd+evHGg65v2hK1Raa6bFhT0=
 
 mocha-nightwatch@3.2.2:
   version "3.2.2"
   resolved "https://registry.yarnpkg.com/mocha-nightwatch/-/mocha-nightwatch-3.2.2.tgz#91bcb9b3bde057dd7677c78125e491e58d66647c"
+  integrity sha1-kby5s73gV912d8eBJeSR5Y1mZHw=
   dependencies:
     browser-stdout "1.3.0"
     commander "2.9.0"
@@ -3976,6 +4601,7 @@ mocha-nightwatch@3.2.2:
 mocha@^3.1.0:
   version "3.5.3"
   resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d"
+  integrity sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==
   dependencies:
     browser-stdout "1.3.0"
     commander "2.9.0"
@@ -3993,44 +4619,54 @@ mocha@^3.1.0:
 ms@0.7.1:
   version "0.7.1"
   resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+  integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=
 
 ms@0.7.2:
   version "0.7.2"
   resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
+  integrity sha1-riXPJRKziFodldfwN4aNhDESR2U=
 
 ms@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+  integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
 
 mute-stream@0.0.5:
   version "0.0.5"
   resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
+  integrity sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=
 
 nan@^2.3.0, nan@^2.3.2:
   version "2.8.0"
   resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a"
+  integrity sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=
 
 natural-compare@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+  integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
 
 ncname@1.0.x:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c"
+  integrity sha1-W1etGLHKCShk72Kwse2BlPODtxw=
   dependencies:
     xml-char-classes "^1.0.0"
 
 negotiator@0.6.1:
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
+  integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=
 
 netmask@~1.0.4:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35"
+  integrity sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=
 
 nightwatch@^0.9.8:
   version "0.9.19"
   resolved "https://registry.yarnpkg.com/nightwatch/-/nightwatch-0.9.19.tgz#4bd9757273d30b845f04847a98b71be9bb7c4b3b"
+  integrity sha1-S9l1cnPTC4RfBIR6mLcb6bt8Szs=
   dependencies:
     chai-nightwatch "~0.1.x"
     ejs "2.5.7"
@@ -4046,12 +4682,14 @@ nightwatch@^0.9.8:
 no-case@^2.2.0:
   version "2.3.2"
   resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
+  integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==
   dependencies:
     lower-case "^1.1.1"
 
 node-gyp@^3.3.1:
   version "3.6.2"
   resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60"
+  integrity sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=
   dependencies:
     fstream "^1.0.0"
     glob "^7.0.3"
@@ -4070,6 +4708,7 @@ node-gyp@^3.3.1:
 node-libs-browser@^0.7.0:
   version "0.7.0"
   resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.7.0.tgz#3e272c0819e308935e26674408d7af0e1491b83b"
+  integrity sha1-PicsCBnjCJNeJmdECNevDhSRuDs=
   dependencies:
     assert "^1.1.1"
     browserify-zlib "^0.1.4"
@@ -4098,6 +4737,7 @@ node-libs-browser@^0.7.0:
 node-pre-gyp@^0.6.39:
   version "0.6.39"
   resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
+  integrity sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ==
   dependencies:
     detect-libc "^1.0.2"
     hawk "3.1.3"
@@ -4114,6 +4754,7 @@ node-pre-gyp@^0.6.39:
 node-sass@^3.10.1:
   version "3.13.1"
   resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-3.13.1.tgz#7240fbbff2396304b4223527ed3020589c004fc2"
+  integrity sha1-ckD7v/I5YwS0IjUn7TAgWJwAT8I=
   dependencies:
     async-foreach "^0.1.3"
     chalk "^1.1.1"
@@ -4135,6 +4776,7 @@ node-sass@^3.10.1:
 nomnomnomnom@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/nomnomnomnom/-/nomnomnomnom-2.0.1.tgz#b2239f031c8d04da67e32836e1e3199e12f7a8e2"
+  integrity sha1-siOfAxyNBNpn4yg24eMZnhL3qOI=
   dependencies:
     chalk "~0.4.0"
     underscore "~1.6.0"
@@ -4142,12 +4784,14 @@ nomnomnomnom@^2.0.0:
 "nopt@2 || 3", nopt@3.x, nopt@~3.0.1:
   version "3.0.6"
   resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+  integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
   dependencies:
     abbrev "1"
 
 nopt@^4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+  integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
   dependencies:
     abbrev "1"
     osenv "^0.1.4"
@@ -4155,6 +4799,7 @@ nopt@^4.0.1:
 normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
   version "2.4.0"
   resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
+  integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==
   dependencies:
     hosted-git-info "^2.1.4"
     is-builtin-module "^1.0.0"
@@ -4164,16 +4809,19 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
 normalize-path@^2.0.0, normalize-path@^2.0.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+  integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
   dependencies:
     remove-trailing-separator "^1.0.1"
 
 normalize-range@^0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+  integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
 
 normalize-url@^1.4.0:
   version "1.9.1"
   resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
+  integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=
   dependencies:
     object-assign "^4.0.1"
     prepend-http "^1.0.0"
@@ -4183,6 +4831,7 @@ normalize-url@^1.4.0:
 "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2:
   version "4.1.2"
   resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+  integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
   dependencies:
     are-we-there-yet "~1.1.2"
     console-control-strings "~1.1.0"
@@ -4192,44 +4841,54 @@ normalize-url@^1.4.0:
 nth-check@~1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4"
+  integrity sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=
   dependencies:
     boolbase "~1.0.0"
 
 num2fraction@^1.2.2:
   version "1.2.2"
   resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+  integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
 
 number-is-nan@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+  integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
 
 oauth-sign@~0.8.1, oauth-sign@~0.8.2:
   version "0.8.2"
   resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+  integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=
 
 object-assign@4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
+  integrity sha1-ejs9DpgGPUP0wD8uiubNUahog6A=
 
 object-assign@^4.0.1, object-assign@^4.1.0:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+  integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
 
 object-component@0.0.3:
   version "0.0.3"
   resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
+  integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=
 
 object-hash@^1.1.4:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.2.0.tgz#e96af0e96981996a1d47f88ead8f74f1ebc4422b"
+  integrity sha512-smRWXzkvxw72VquyZ0wggySl7PFUtoDhvhpdwgESXxUrH7vVhhp9asfup1+rVLrhsl7L45Ee1Q/l5R2Ul4MwUg==
 
 object-path@^0.11.3:
   version "0.11.4"
   resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949"
+  integrity sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=
 
 object.omit@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+  integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
   dependencies:
     for-own "^0.1.4"
     is-extendable "^0.1.1"
@@ -4237,22 +4896,26 @@ object.omit@^2.0.0:
 on-finished@~2.3.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+  integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
   dependencies:
     ee-first "1.1.1"
 
 once@1.x, once@^1.3.0, once@^1.3.3:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
   dependencies:
     wrappy "1"
 
 onetime@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
+  integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=
 
 opn@^4.0.2:
   version "4.0.2"
   resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95"
+  integrity sha1-erwi5kTf9jsKltWrfyeQwPAavJU=
   dependencies:
     object-assign "^4.0.1"
     pinkie-promise "^2.0.0"
@@ -4260,6 +4923,7 @@ opn@^4.0.2:
 optimist@0.6.1, optimist@^0.6.1, optimist@~0.6.0:
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+  integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
   dependencies:
     minimist "~0.0.1"
     wordwrap "~0.0.2"
@@ -4267,6 +4931,7 @@ optimist@0.6.1, optimist@^0.6.1, optimist@~0.6.0:
 optionator@^0.8.1, optionator@^0.8.2:
   version "0.8.2"
   resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+  integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
   dependencies:
     deep-is "~0.1.3"
     fast-levenshtein "~2.0.4"
@@ -4278,10 +4943,12 @@ optionator@^0.8.1, optionator@^0.8.2:
 options@>=0.0.5:
   version "0.0.6"
   resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"
+  integrity sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=
 
 ora@^0.3.0:
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/ora/-/ora-0.3.0.tgz#367a078ad25cfb096da501115eb5b401e07d7495"
+  integrity sha1-NnoHitJc+wltpQERXrW0AeB9dJU=
   dependencies:
     chalk "^1.1.1"
     cli-cursor "^1.0.2"
@@ -4291,24 +4958,29 @@ ora@^0.3.0:
 os-browserify@^0.2.0:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f"
+  integrity sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=
 
 os-homedir@^1.0.0, os-homedir@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+  integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
 
 os-locale@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
+  integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=
   dependencies:
     lcid "^1.0.0"
 
 os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+  integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
 
 osenv@0, osenv@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
+  integrity sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=
   dependencies:
     os-homedir "^1.0.0"
     os-tmpdir "^1.0.0"
@@ -4316,10 +4988,12 @@ osenv@0, osenv@^0.1.4:
 p-map@^1.1.1:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+  integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==
 
 pac-proxy-agent@1:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-1.1.0.tgz#34a385dfdf61d2f0ecace08858c745d3e791fd4d"
+  integrity sha512-QBELCWyLYPgE2Gj+4wUEiMscHrQ8nRPBzYItQNOHWavwBt25ohZHQC4qnd5IszdVVrFbLsQ+dPkm6eqdjJAmwQ==
   dependencies:
     agent-base "2"
     debug "2"
@@ -4334,6 +5008,7 @@ pac-proxy-agent@1:
 pac-resolver@~2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-2.0.0.tgz#99b88d2f193fbdeefc1c9a529c1f3260ab5277cd"
+  integrity sha1-mbiNLxk/ve78HJpSnB8yYKtSd80=
   dependencies:
     co "~3.0.6"
     degenerator "~1.0.2"
@@ -4344,16 +5019,19 @@ pac-resolver@~2.0.0:
 pako@~0.2.0:
   version "0.2.9"
   resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+  integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=
 
 param-case@2.1.x:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
+  integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc=
   dependencies:
     no-case "^2.2.0"
 
 parse-glob@^3.0.4:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+  integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
   dependencies:
     glob-base "^0.3.0"
     is-dotfile "^1.0.0"
@@ -4363,56 +5041,67 @@ parse-glob@^3.0.4:
 parse-json@^2.2.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+  integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
   dependencies:
     error-ex "^1.2.0"
 
 parsejson@0.0.3:
   version "0.0.3"
   resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz#ab7e3759f209ece99437973f7d0f1f64ae0e64ab"
+  integrity sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=
   dependencies:
     better-assert "~1.0.0"
 
 parseqs@0.0.5:
   version "0.0.5"
   resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
+  integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=
   dependencies:
     better-assert "~1.0.0"
 
 parseuri@0.0.5:
   version "0.0.5"
   resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
+  integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=
   dependencies:
     better-assert "~1.0.0"
 
 parseurl@~1.3.2:
   version "1.3.2"
   resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
+  integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=
 
 path-browserify@0.0.0:
   version "0.0.0"
   resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
+  integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=
 
 path-exists@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+  integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
   dependencies:
     pinkie-promise "^2.0.0"
 
 path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
 
 path-is-inside@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+  integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
 
 path-to-regexp@0.1.7:
   version "0.1.7"
   resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+  integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
 
 path-type@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+  integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
   dependencies:
     graceful-fs "^4.1.2"
     pify "^2.0.0"
@@ -4421,22 +5110,27 @@ path-type@^1.0.0:
 pbkdf2-compat@2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288"
+  integrity sha1-tuDI+plJTZTgURV1gCpZpcFC8og=
 
 pend@~1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+  integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
 
 performance-now@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
+  integrity sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=
 
 performance-now@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+  integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
 
 phantomjs-prebuilt@^2.1.3, phantomjs-prebuilt@^2.1.7:
   version "2.1.16"
   resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz#efd212a4a3966d3647684ea8ba788549be2aefef"
+  integrity sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=
   dependencies:
     es6-promise "^4.0.3"
     extract-zip "^1.6.5"
@@ -4451,38 +5145,46 @@ phantomjs-prebuilt@^2.1.3, phantomjs-prebuilt@^2.1.7:
 phoenix@^1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/phoenix/-/phoenix-1.3.0.tgz#1df2c27f986ee295e37c9983ec28ebac1d7f4a3e"
+  integrity sha512-g1I6kJKTQx7wGsJCc2b1RfXeHUfITTV5kdqJPFoqmrGDfFEKQIrQkkBtv8QeJ0s1iN9+vvryrQLv+4SfmH/wqg==
 
 pify@^2.0.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+  integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
 
 pify@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+  integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
 
 pinkie-promise@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+  integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
   dependencies:
     pinkie "^2.0.0"
 
 pinkie@^2.0.0:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+  integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
 
 pkg-dir@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
+  integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q=
   dependencies:
     find-up "^1.0.0"
 
 pluralize@^1.2.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
+  integrity sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=
 
 postcss-calc@^5.2.0:
   version "5.3.1"
   resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
+  integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14=
   dependencies:
     postcss "^5.0.2"
     postcss-message-helpers "^2.0.0"
@@ -4491,6 +5193,7 @@ postcss-calc@^5.2.0:
 postcss-colormin@^2.1.8:
   version "2.2.2"
   resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"
+  integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=
   dependencies:
     colormin "^1.0.5"
     postcss "^5.0.13"
@@ -4499,6 +5202,7 @@ postcss-colormin@^2.1.8:
 postcss-convert-values@^2.3.4:
   version "2.6.1"
   resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
+  integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=
   dependencies:
     postcss "^5.0.11"
     postcss-value-parser "^3.1.2"
@@ -4506,30 +5210,35 @@ postcss-convert-values@^2.3.4:
 postcss-discard-comments@^2.0.4:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
+  integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=
   dependencies:
     postcss "^5.0.14"
 
 postcss-discard-duplicates@^2.0.1:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
+  integrity sha1-uavye4isGIFYpesSq8riAmO5GTI=
   dependencies:
     postcss "^5.0.4"
 
 postcss-discard-empty@^2.0.1:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
+  integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=
   dependencies:
     postcss "^5.0.14"
 
 postcss-discard-overridden@^0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
+  integrity sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=
   dependencies:
     postcss "^5.0.16"
 
 postcss-discard-unused@^2.2.1:
   version "2.2.3"
   resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
+  integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=
   dependencies:
     postcss "^5.0.14"
     uniqs "^2.0.0"
@@ -4537,6 +5246,7 @@ postcss-discard-unused@^2.2.1:
 postcss-filter-plugins@^2.0.0:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c"
+  integrity sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=
   dependencies:
     postcss "^5.0.4"
     uniqid "^4.0.0"
@@ -4544,6 +5254,7 @@ postcss-filter-plugins@^2.0.0:
 postcss-load-config@^1.1.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a"
+  integrity sha1-U56a/J3chiASHr+djDZz4M5Q0oo=
   dependencies:
     cosmiconfig "^2.1.0"
     object-assign "^4.1.0"
@@ -4553,6 +5264,7 @@ postcss-load-config@^1.1.0:
 postcss-load-options@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c"
+  integrity sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=
   dependencies:
     cosmiconfig "^2.1.0"
     object-assign "^4.1.0"
@@ -4560,6 +5272,7 @@ postcss-load-options@^1.2.0:
 postcss-load-plugins@^2.3.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92"
+  integrity sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=
   dependencies:
     cosmiconfig "^2.1.1"
     object-assign "^4.1.0"
@@ -4567,6 +5280,7 @@ postcss-load-plugins@^2.3.0:
 postcss-merge-idents@^2.1.5:
   version "2.1.7"
   resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270"
+  integrity sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=
   dependencies:
     has "^1.0.1"
     postcss "^5.0.10"
@@ -4575,12 +5289,14 @@ postcss-merge-idents@^2.1.5:
 postcss-merge-longhand@^2.0.1:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658"
+  integrity sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=
   dependencies:
     postcss "^5.0.4"
 
 postcss-merge-rules@^2.0.3:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
+  integrity sha1-0d9d+qexrMO+VT8OnhDofGG19yE=
   dependencies:
     browserslist "^1.5.2"
     caniuse-api "^1.5.2"
@@ -4591,10 +5307,12 @@ postcss-merge-rules@^2.0.3:
 postcss-message-helpers@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
+  integrity sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=
 
 postcss-minify-font-values@^1.0.2:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69"
+  integrity sha1-S1jttWZB66fIR0qzUmyv17vey2k=
   dependencies:
     object-assign "^4.0.1"
     postcss "^5.0.4"
@@ -4603,6 +5321,7 @@ postcss-minify-font-values@^1.0.2:
 postcss-minify-gradients@^1.0.1:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
+  integrity sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=
   dependencies:
     postcss "^5.0.12"
     postcss-value-parser "^3.3.0"
@@ -4610,6 +5329,7 @@ postcss-minify-gradients@^1.0.1:
 postcss-minify-params@^1.0.4:
   version "1.2.2"
   resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
+  integrity sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=
   dependencies:
     alphanum-sort "^1.0.1"
     postcss "^5.0.2"
@@ -4619,6 +5339,7 @@ postcss-minify-params@^1.0.4:
 postcss-minify-selectors@^2.0.4:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
+  integrity sha1-ssapjAByz5G5MtGkllCBFDEXNb8=
   dependencies:
     alphanum-sort "^1.0.2"
     has "^1.0.1"
@@ -4628,12 +5349,14 @@ postcss-minify-selectors@^2.0.4:
 postcss-modules-extract-imports@^1.0.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85"
+  integrity sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=
   dependencies:
     postcss "^6.0.1"
 
 postcss-modules-local-by-default@^1.0.1:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
+  integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=
   dependencies:
     css-selector-tokenizer "^0.7.0"
     postcss "^6.0.1"
@@ -4641,6 +5364,7 @@ postcss-modules-local-by-default@^1.0.1:
 postcss-modules-scope@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
+  integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A=
   dependencies:
     css-selector-tokenizer "^0.7.0"
     postcss "^6.0.1"
@@ -4648,6 +5372,7 @@ postcss-modules-scope@^1.0.0:
 postcss-modules-values@^1.1.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
+  integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=
   dependencies:
     icss-replace-symbols "^1.1.0"
     postcss "^6.0.1"
@@ -4655,12 +5380,14 @@ postcss-modules-values@^1.1.0:
 postcss-normalize-charset@^1.1.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"
+  integrity sha1-757nEhLX/nWceO0WL2HtYrXLk/E=
   dependencies:
     postcss "^5.0.5"
 
 postcss-normalize-url@^3.0.7:
   version "3.0.8"
   resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
+  integrity sha1-EI90s/L82viRov+j6kWSJ5/HgiI=
   dependencies:
     is-absolute-url "^2.0.0"
     normalize-url "^1.4.0"
@@ -4670,6 +5397,7 @@ postcss-normalize-url@^3.0.7:
 postcss-ordered-values@^2.1.0:
   version "2.2.3"
   resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
+  integrity sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=
   dependencies:
     postcss "^5.0.4"
     postcss-value-parser "^3.0.1"
@@ -4677,6 +5405,7 @@ postcss-ordered-values@^2.1.0:
 postcss-reduce-idents@^2.2.2:
   version "2.4.0"
   resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
+  integrity sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=
   dependencies:
     postcss "^5.0.4"
     postcss-value-parser "^3.0.2"
@@ -4684,12 +5413,14 @@ postcss-reduce-idents@^2.2.2:
 postcss-reduce-initial@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea"
+  integrity sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=
   dependencies:
     postcss "^5.0.4"
 
 postcss-reduce-transforms@^1.0.3:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
+  integrity sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=
   dependencies:
     has "^1.0.1"
     postcss "^5.0.8"
@@ -4698,6 +5429,7 @@ postcss-reduce-transforms@^1.0.3:
 postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
   version "2.2.3"
   resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
+  integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=
   dependencies:
     flatten "^1.0.2"
     indexes-of "^1.0.1"
@@ -4706,6 +5438,7 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
 postcss-svgo@^2.1.1:
   version "2.1.6"
   resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d"
+  integrity sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=
   dependencies:
     is-svg "^2.0.0"
     postcss "^5.0.14"
@@ -4715,6 +5448,7 @@ postcss-svgo@^2.1.1:
 postcss-unique-selectors@^2.0.2:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
+  integrity sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=
   dependencies:
     alphanum-sort "^1.0.1"
     postcss "^5.0.4"
@@ -4723,10 +5457,12 @@ postcss-unique-selectors@^2.0.2:
 postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
   version "3.3.0"
   resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"
+  integrity sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=
 
 postcss-zindex@^2.0.1:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
+  integrity sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=
   dependencies:
     has "^1.0.1"
     postcss "^5.0.4"
@@ -4735,6 +5471,7 @@ postcss-zindex@^2.0.1:
 postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.21, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16:
   version "5.2.18"
   resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
+  integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==
   dependencies:
     chalk "^1.1.3"
     js-base64 "^2.1.9"
@@ -4744,6 +5481,7 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0
 postcss@^6.0.1, postcss@^6.0.14:
   version "6.0.17"
   resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.17.tgz#e259a051ca513f81e9afd0c21f7f82eda50c65c5"
+  integrity sha512-Bl1nybsSzWYbP8O4gAVD8JIjZIul9hLNOPTGBIlVmZNUnNAGL+W0cpYWzVwfImZOwumct4c1SDvSbncVWKtXUw==
   dependencies:
     chalk "^2.3.0"
     source-map "^0.6.1"
@@ -4752,18 +5490,22 @@ postcss@^6.0.1, postcss@^6.0.14:
 prelude-ls@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+  integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
 
 prepend-http@^1.0.0:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+  integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
 
 preserve@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+  integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
 
 pretty-error@^2.0.2:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
+  integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=
   dependencies:
     renderkid "^2.0.1"
     utila "~0.4"
@@ -4771,26 +5513,32 @@ pretty-error@^2.0.2:
 private@^0.1.6, private@^0.1.7:
   version "0.1.8"
   resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+  integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
 
 process-nextick-args@~1.0.6:
   version "1.0.7"
   resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+  integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=
 
 process@^0.11.0:
   version "0.11.10"
   resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+  integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
 
 progress@^1.1.8:
   version "1.1.8"
   resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
+  integrity sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=
 
 proto-list@~1.2.1:
   version "1.2.4"
   resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+  integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=
 
 proxy-addr@~2.0.2:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec"
+  integrity sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=
   dependencies:
     forwarded "~0.1.2"
     ipaddr.js "1.5.2"
@@ -4798,6 +5546,7 @@ proxy-addr@~2.0.2:
 proxy-agent@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-2.0.0.tgz#57eb5347aa805d74ec681cb25649dba39c933499"
+  integrity sha1-V+tTR6qAXXTsaByyVknbo5yTNJk=
   dependencies:
     agent-base "2"
     debug "2"
@@ -4811,38 +5560,47 @@ proxy-agent@2.0.0:
 prr@~1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+  integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
 
 pseudomap@^1.0.1, pseudomap@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+  integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
 
 punycode@1.3.2:
   version "1.3.2"
   resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+  integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
 
 punycode@^1.2.4, punycode@^1.4.1:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+  integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
 
 q@1.4.1, q@^1.1.2:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e"
+  integrity sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=
 
 qjobs@^1.1.4:
   version "1.1.5"
   resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73"
+  integrity sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=
 
 qs@6.5.1, qs@~6.5.1:
   version "6.5.1"
   resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
+  integrity sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==
 
 qs@~6.4.0:
   version "6.4.0"
   resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
+  integrity sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=
 
 query-string@^4.1.0:
   version "4.3.4"
   resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
+  integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s=
   dependencies:
     object-assign "^4.1.0"
     strict-uri-encode "^1.0.0"
@@ -4850,14 +5608,17 @@ query-string@^4.1.0:
 querystring-es3@^0.2.0:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+  integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
 
 querystring@0.2.0, querystring@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+  integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
 
 randomatic@^1.1.3:
   version "1.1.7"
   resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
+  integrity sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==
   dependencies:
     is-number "^3.0.0"
     kind-of "^4.0.0"
@@ -4865,10 +5626,12 @@ randomatic@^1.1.3:
 range-parser@^1.0.3, range-parser@^1.2.0, range-parser@~1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
+  integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=
 
 raw-body@2, raw-body@2.3.2:
   version "2.3.2"
   resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89"
+  integrity sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=
   dependencies:
     bytes "3.0.0"
     http-errors "1.6.2"
@@ -4878,10 +5641,12 @@ raw-body@2, raw-body@2.3.2:
 raw-loader@^0.5.1:
   version "0.5.1"
   resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa"
+  integrity sha1-DD0L6u2KAclm2Xh793goElKpeao=
 
 rc@^1.1.7:
   version "1.2.5"
   resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd"
+  integrity sha1-J1zWh/bjs2zHVrqibf7oCnkDAf0=
   dependencies:
     deep-extend "~0.4.0"
     ini "~1.3.0"
@@ -4891,6 +5656,7 @@ rc@^1.1.7:
 read-pkg-up@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+  integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
   dependencies:
     find-up "^1.0.0"
     read-pkg "^1.0.0"
@@ -4898,6 +5664,7 @@ read-pkg-up@^1.0.1:
 read-pkg@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+  integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
   dependencies:
     load-json-file "^1.0.0"
     normalize-package-data "^2.3.2"
@@ -4906,6 +5673,7 @@ read-pkg@^1.0.0:
 readable-stream@1.0, readable-stream@~1.0.2:
   version "1.0.34"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+  integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
   dependencies:
     core-util-is "~1.0.0"
     inherits "~2.0.1"
@@ -4915,6 +5683,7 @@ readable-stream@1.0, readable-stream@~1.0.2:
 readable-stream@1.1.x:
   version "1.1.14"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
+  integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
   dependencies:
     core-util-is "~1.0.0"
     inherits "~2.0.1"
@@ -4924,6 +5693,7 @@ readable-stream@1.1.x:
 readable-stream@2, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.3.3:
   version "2.3.3"
   resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
+  integrity sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==
   dependencies:
     core-util-is "~1.0.0"
     inherits "~2.0.3"
@@ -4936,6 +5706,7 @@ readable-stream@2, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stre
 readdirp@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
+  integrity sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=
   dependencies:
     graceful-fs "^4.1.2"
     minimatch "^3.0.2"
@@ -4945,6 +5716,7 @@ readdirp@^2.0.0:
 readline2@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
+  integrity sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=
   dependencies:
     code-point-at "^1.0.0"
     is-fullwidth-code-point "^1.0.0"
@@ -4953,12 +5725,14 @@ readline2@^1.0.1:
 rechoir@^0.6.2:
   version "0.6.2"
   resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+  integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=
   dependencies:
     resolve "^1.1.6"
 
 redent@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+  integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
   dependencies:
     indent-string "^2.1.0"
     strip-indent "^1.0.1"
@@ -4966,6 +5740,7 @@ redent@^1.0.0:
 reduce-css-calc@^1.2.6:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
+  integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=
   dependencies:
     balanced-match "^0.4.2"
     math-expression-evaluator "^1.2.14"
@@ -4974,20 +5749,24 @@ reduce-css-calc@^1.2.6:
 reduce-function-call@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99"
+  integrity sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=
   dependencies:
     balanced-match "^0.4.2"
 
 regenerate@^1.2.1:
   version "1.3.3"
   resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f"
+  integrity sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==
 
 regenerator-runtime@^0.11.0:
   version "0.11.1"
   resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+  integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
 
 regenerator-transform@^0.10.0:
   version "0.10.1"
   resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
+  integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==
   dependencies:
     babel-runtime "^6.18.0"
     babel-types "^6.19.0"
@@ -4996,12 +5775,14 @@ regenerator-transform@^0.10.0:
 regex-cache@^0.4.2:
   version "0.4.4"
   resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
+  integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==
   dependencies:
     is-equal-shallow "^0.1.3"
 
 regexpu-core@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b"
+  integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=
   dependencies:
     regenerate "^1.2.1"
     regjsgen "^0.2.0"
@@ -5010,6 +5791,7 @@ regexpu-core@^1.0.0:
 regexpu-core@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
+  integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=
   dependencies:
     regenerate "^1.2.1"
     regjsgen "^0.2.0"
@@ -5018,24 +5800,29 @@ regexpu-core@^2.0.0:
 regjsgen@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
+  integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=
 
 regjsparser@^0.1.4:
   version "0.1.5"
   resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
+  integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=
   dependencies:
     jsesc "~0.5.0"
 
 relateurl@0.2.x:
   version "0.2.7"
   resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+  integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
 
 remove-trailing-separator@^1.0.1:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+  integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
 
 renderkid@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319"
+  integrity sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=
   dependencies:
     css-select "^1.1.0"
     dom-converter "~0.1"
@@ -5046,30 +5833,36 @@ renderkid@^2.0.1:
 repeat-element@^1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+  integrity sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=
 
 repeat-string@^0.2.2:
   version "0.2.2"
   resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae"
+  integrity sha1-x6jTI2BoNiBZp+RlH8aITosftK4=
 
 repeat-string@^1.5.2:
   version "1.6.1"
   resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+  integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
 
 repeating@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+  integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
   dependencies:
     is-finite "^1.0.0"
 
 request-progress@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08"
+  integrity sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=
   dependencies:
     throttleit "^1.0.0"
 
 request@2, request@^2.61.0, request@^2.81.0, request@^2.83.0:
   version "2.83.0"
   resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356"
+  integrity sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==
   dependencies:
     aws-sign2 "~0.7.0"
     aws4 "^1.6.0"
@@ -5097,6 +5890,7 @@ request@2, request@^2.61.0, request@^2.81.0, request@^2.83.0:
 request@2.81.0:
   version "2.81.0"
   resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
+  integrity sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=
   dependencies:
     aws-sign2 "~0.6.0"
     aws4 "^1.2.1"
@@ -5124,22 +5918,27 @@ request@2.81.0:
 require-directory@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+  integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
 
 require-from-string@^1.1.0:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418"
+  integrity sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=
 
 require-main-filename@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+  integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
 
 require-package-name@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9"
+  integrity sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk=
 
 require-uncached@^1.0.2:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+  integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=
   dependencies:
     caller-path "^0.1.0"
     resolve-from "^1.0.0"
@@ -5147,18 +5946,22 @@ require-uncached@^1.0.2:
 requires-port@1.x.x:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+  integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
 
 resolve-from@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+  integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=
 
 resolve@1.1.x, resolve@^1.1.6:
   version "1.1.7"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+  integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
 
 restore-cursor@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
+  integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=
   dependencies:
     exit-hook "^1.0.0"
     onetime "^1.0.0"
@@ -5166,40 +5969,48 @@ restore-cursor@^1.0.1:
 right-align@^0.1.1:
   version "0.1.3"
   resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+  integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8=
   dependencies:
     align-text "^0.1.1"
 
 rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.0, rimraf@^2.6.1:
   version "2.6.2"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
+  integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==
   dependencies:
     glob "^7.0.5"
 
 ripemd160@0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce"
+  integrity sha1-K/GYveFnys+lHAqSjoS2i74XH84=
 
 run-async@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
+  integrity sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=
   dependencies:
     once "^1.3.0"
 
 rx-lite@^3.1.2:
   version "3.1.2"
   resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
+  integrity sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=
 
 safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
   version "5.1.1"
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
+  integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==
 
 samsam@1.1.2, samsam@~1.1:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.2.tgz#bec11fdc83a9fda063401210e40176c3024d1567"
+  integrity sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc=
 
 sanitize-html@^1.13.0:
   version "1.17.0"
   resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.17.0.tgz#5c95e57044604d4797367efd9152acaf5b087bb4"
+  integrity sha512-5r265ukJgS+MXVMK0OxXLn7iBqRTIxYK0m6Bc+/gFhCY20Vr/KFp/ZTKu9hyB3tKkiGPiQ08aGDPUbjbBhRpXw==
   dependencies:
     chalk "^2.3.0"
     htmlparser2 "^3.9.0"
@@ -5213,6 +6024,7 @@ sanitize-html@^1.13.0:
 sass-graph@^2.1.1:
   version "2.2.4"
   resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49"
+  integrity sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=
   dependencies:
     glob "^7.0.0"
     lodash "^4.0.0"
@@ -5222,6 +6034,7 @@ sass-graph@^2.1.1:
 sass-loader@^4.0.2:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-4.1.1.tgz#79ef9468cf0bf646c29529e1f2cba6bd6e51c7bc"
+  integrity sha1-ee+UaM8L9kbClSnh8sumvW5Rx7w=
   dependencies:
     async "^2.0.1"
     loader-utils "^0.2.15"
@@ -5230,10 +6043,12 @@ sass-loader@^4.0.2:
 sax@~1.2.1:
   version "1.2.4"
   resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+  integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
 
 scss-tokenizer@^0.2.3:
   version "0.2.3"
   resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
+  integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE=
   dependencies:
     js-base64 "^2.1.8"
     source-map "^0.4.2"
@@ -5241,26 +6056,32 @@ scss-tokenizer@^0.2.3:
 selenium-server@2.53.1:
   version "2.53.1"
   resolved "https://registry.yarnpkg.com/selenium-server/-/selenium-server-2.53.1.tgz#d681528812f3c2e0531a6b7e613e23bb02cce8a6"
+  integrity sha1-1oFSiBLzwuBTGmt+YT4juwLM6KY=
 
 "semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0:
   version "5.5.0"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
+  integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
 
 semver@~4.3.3:
   version "4.3.6"
   resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
+  integrity sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=
 
 semver@~5.0.1:
   version "5.0.3"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a"
+  integrity sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=
 
 semver@~5.3.0:
   version "5.3.0"
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+  integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
 
 send@0.16.1:
   version "0.16.1"
   resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3"
+  integrity sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==
   dependencies:
     debug "2.6.9"
     depd "~1.1.1"
@@ -5279,6 +6100,7 @@ send@0.16.1:
 serve-static@1.13.1:
   version "1.13.1"
   resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719"
+  integrity sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==
   dependencies:
     encodeurl "~1.0.1"
     escape-html "~1.0.3"
@@ -5288,30 +6110,37 @@ serve-static@1.13.1:
 set-blocking@^2.0.0, set-blocking@~2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+  integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
 
 set-immediate-shim@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+  integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
 
 setimmediate@^1.0.4:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+  integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
 
 setprototypeof@1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
+  integrity sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=
 
 setprototypeof@1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+  integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
 
 sha.js@2.2.6:
   version "2.2.6"
   resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba"
+  integrity sha1-F93t3F9yL7ZlAWWIlUYZd4ZzFbo=
 
 shelljs@^0.7.4, shelljs@^0.7.5:
   version "0.7.8"
   resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3"
+  integrity sha1-3svPh0sNHl+3LhSxZKloMEjprLM=
   dependencies:
     glob "^7.0.0"
     interpret "^1.0.0"
@@ -5320,18 +6149,22 @@ shelljs@^0.7.4, shelljs@^0.7.5:
 sigmund@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
+  integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=
 
 signal-exit@^3.0.0:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+  integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
 
 sinon-chai@^2.8.0:
   version "2.14.0"
   resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-2.14.0.tgz#da7dd4cc83cd6a260b67cca0f7a9fdae26a1205d"
+  integrity sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ==
 
 sinon@^1.17.3:
   version "1.17.7"
   resolved "https://registry.yarnpkg.com/sinon/-/sinon-1.17.7.tgz#4542a4f49ba0c45c05eb2e9dd9d203e2b8efe0bf"
+  integrity sha1-RUKk9JugxFwF6y6d2dID4rjv4L8=
   dependencies:
     formatio "1.1.1"
     lolex "1.3.2"
@@ -5341,30 +6174,36 @@ sinon@^1.17.3:
 slash@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+  integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
 
 slice-ansi@0.0.4:
   version "0.0.4"
   resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+  integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=
 
 smart-buffer@^1.0.13:
   version "1.1.15"
   resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16"
+  integrity sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=
 
 sntp@1.x.x:
   version "1.0.9"
   resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+  integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=
   dependencies:
     hoek "2.x.x"
 
 sntp@2.x.x:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8"
+  integrity sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==
   dependencies:
     hoek "4.x.x"
 
 socket.io-adapter@0.5.0:
   version "0.5.0"
   resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz#cb6d4bb8bec81e1078b99677f9ced0046066bb8b"
+  integrity sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=
   dependencies:
     debug "2.3.3"
     socket.io-parser "2.3.1"
@@ -5372,6 +6211,7 @@ socket.io-adapter@0.5.0:
 socket.io-client@1.7.3:
   version "1.7.3"
   resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.3.tgz#b30e86aa10d5ef3546601c09cde4765e381da377"
+  integrity sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=
   dependencies:
     backo2 "1.0.2"
     component-bind "1.0.0"
@@ -5388,6 +6228,7 @@ socket.io-client@1.7.3:
 socket.io-parser@2.3.1:
   version "2.3.1"
   resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.1.tgz#dd532025103ce429697326befd64005fcfe5b4a0"
+  integrity sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=
   dependencies:
     component-emitter "1.1.2"
     debug "2.2.0"
@@ -5397,6 +6238,7 @@ socket.io-parser@2.3.1:
 socket.io@1.7.3:
   version "1.7.3"
   resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.3.tgz#b8af9caba00949e568e369f1327ea9be9ea2461b"
+  integrity sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=
   dependencies:
     debug "2.3.3"
     engine.io "1.8.3"
@@ -5409,6 +6251,7 @@ socket.io@1.7.3:
 socks-proxy-agent@2:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-2.1.1.tgz#86ebb07193258637870e13b7bd99f26c663df3d3"
+  integrity sha512-sFtmYqdUK5dAMh85H0LEVFUCO7OhJJe1/z2x/Z6mxp3s7/QPf1RkZmpZy+BpuU0bEjcV9npqKjq9Y3kwFUjnxw==
   dependencies:
     agent-base "2"
     extend "3"
@@ -5417,6 +6260,7 @@ socks-proxy-agent@2:
 socks@~1.1.5:
   version "1.1.10"
   resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a"
+  integrity sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=
   dependencies:
     ip "^1.1.4"
     smart-buffer "^1.0.13"
@@ -5424,66 +6268,79 @@ socks@~1.1.5:
 sort-keys@^1.0.0:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+  integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0=
   dependencies:
     is-plain-obj "^1.0.0"
 
 source-list-map@^0.1.4, source-list-map@~0.1.7:
   version "0.1.8"
   resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106"
+  integrity sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=
 
 source-map-support@^0.4.15:
   version "0.4.18"
   resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
+  integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==
   dependencies:
     source-map "^0.5.6"
 
 source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3, source-map@~0.5.6:
   version "0.5.7"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+  integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
 
 source-map@^0.1.41:
   version "0.1.43"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346"
+  integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=
   dependencies:
     amdefine ">=0.0.4"
 
 source-map@^0.4.2, source-map@^0.4.4, source-map@~0.4.1:
   version "0.4.4"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
+  integrity sha1-66T12pwNyZneaAMti092FzZSA2s=
   dependencies:
     amdefine ">=0.0.4"
 
 source-map@^0.6.1, source-map@~0.6.1:
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
 
 source-map@~0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
+  integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50=
   dependencies:
     amdefine ">=0.0.4"
 
 spdx-correct@~1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+  integrity sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=
   dependencies:
     spdx-license-ids "^1.0.2"
 
 spdx-expression-parse@~1.0.0:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+  integrity sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=
 
 spdx-license-ids@^1.0.2:
   version "1.2.2"
   resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+  integrity sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=
 
 sprintf-js@~1.0.2:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+  integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
 
 srcset@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/srcset/-/srcset-1.0.0.tgz#a5669de12b42f3b1d5e83ed03c71046fc48f41ef"
+  integrity sha1-pWad4StC87HV6D7QPHEEb8SPQe8=
   dependencies:
     array-uniq "^1.0.2"
     number-is-nan "^1.0.0"
@@ -5491,6 +6348,7 @@ srcset@^1.0.0:
 sshpk@^1.7.0:
   version "1.13.1"
   resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
+  integrity sha1-US322mKHFEMW3EwY/hzx2UBzm+M=
   dependencies:
     asn1 "~0.2.3"
     assert-plus "^1.0.0"
@@ -5505,10 +6363,12 @@ sshpk@^1.7.0:
 "statuses@>= 1.3.1 < 2", statuses@~1.3.1:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
+  integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=
 
 stream-browserify@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
+  integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=
   dependencies:
     inherits "~2.0.1"
     readable-stream "^2.0.2"
@@ -5516,6 +6376,7 @@ stream-browserify@^2.0.1:
 stream-http@^2.3.1:
   version "2.8.0"
   resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10"
+  integrity sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==
   dependencies:
     builtin-status-codes "^3.0.0"
     inherits "^2.0.1"
@@ -5526,10 +6387,12 @@ stream-http@^2.3.1:
 strict-uri-encode@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+  integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
 
 string-width@^1.0.1, string-width@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+  integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
   dependencies:
     code-point-at "^1.0.0"
     is-fullwidth-code-point "^1.0.0"
@@ -5538,6 +6401,7 @@ string-width@^1.0.1, string-width@^1.0.2:
 string-width@^2.0.0:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+  integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
   dependencies:
     is-fullwidth-code-point "^2.0.0"
     strip-ansi "^4.0.0"
@@ -5545,84 +6409,100 @@ string-width@^2.0.0:
 string_decoder@^0.10.25, string_decoder@~0.10.x:
   version "0.10.31"
   resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+  integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
 
 string_decoder@~1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
+  integrity sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==
   dependencies:
     safe-buffer "~5.1.0"
 
 stringstream@~0.0.4, stringstream@~0.0.5:
   version "0.0.5"
   resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+  integrity sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=
 
 strip-ansi@^3.0.0, strip-ansi@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+  integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
   dependencies:
     ansi-regex "^2.0.0"
 
 strip-ansi@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+  integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
   dependencies:
     ansi-regex "^3.0.0"
 
 strip-ansi@~0.1.0:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991"
+  integrity sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=
 
 strip-bom@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+  integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
   dependencies:
     is-utf8 "^0.2.0"
 
 strip-bom@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+  integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
 
 strip-indent@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+  integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
   dependencies:
     get-stdin "^4.0.1"
 
 strip-json-comments@~2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+  integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
 
 supports-color@3.1.2, supports-color@^3.1.0:
   version "3.1.2"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
+  integrity sha1-cqJiiU2dQIuVbKBf83su2KbiotU=
   dependencies:
     has-flag "^1.0.0"
 
 supports-color@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+  integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
 
 supports-color@^3.2.3:
   version "3.2.3"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+  integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=
   dependencies:
     has-flag "^1.0.0"
 
 supports-color@^4.0.0:
   version "4.5.0"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
+  integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=
   dependencies:
     has-flag "^2.0.0"
 
 supports-color@^5.1.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.1.0.tgz#058a021d1b619f7ddf3980d712ea3590ce7de3d5"
+  integrity sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==
   dependencies:
     has-flag "^2.0.0"
 
 svgo@^0.7.0:
   version "0.7.2"
   resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
+  integrity sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=
   dependencies:
     coa "~1.0.1"
     colors "~1.1.2"
@@ -5635,6 +6515,7 @@ svgo@^0.7.0:
 table@^3.7.8:
   version "3.8.3"
   resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
+  integrity sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=
   dependencies:
     ajv "^4.7.0"
     ajv-keywords "^1.0.0"
@@ -5646,10 +6527,12 @@ table@^3.7.8:
 tapable@^0.1.8, tapable@~0.1.8:
   version "0.1.10"
   resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4"
+  integrity sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=
 
 tar-pack@^3.4.0:
   version "3.4.1"
   resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f"
+  integrity sha512-PPRybI9+jM5tjtCbN2cxmmRU7YmqT3Zv/UDy48tAh2XRkLa9bAORtSWLkVc13+GJF+cdTh1yEnHEk3cpTaL5Kg==
   dependencies:
     debug "^2.2.0"
     fstream "^1.0.10"
@@ -5663,6 +6546,7 @@ tar-pack@^3.4.0:
 tar@^2.0.0, tar@^2.2.1:
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+  integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=
   dependencies:
     block-stream "*"
     fstream "^1.0.2"
@@ -5671,100 +6555,122 @@ tar@^2.0.0, tar@^2.2.1:
 text-table@^0.2.0, text-table@~0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+  integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
 
 throttleit@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
+  integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=
 
 through@^2.3.6:
   version "2.3.8"
   resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+  integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
 
 thunkify@~2.1.1:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d"
+  integrity sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=
 
 time-stamp@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357"
+  integrity sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=
 
 timers-browserify@^2.0.2:
   version "2.0.6"
   resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.6.tgz#241e76927d9ca05f4d959819022f5b3664b64bae"
+  integrity sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==
   dependencies:
     setimmediate "^1.0.4"
 
 tmp@0.0.31, tmp@0.0.x:
   version "0.0.31"
   resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7"
+  integrity sha1-jzirlDjhcxXl29izZX6L+yd65Kc=
   dependencies:
     os-tmpdir "~1.0.1"
 
 to-array@0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
+  integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA=
 
 to-arraybuffer@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+  integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
 
 to-fast-properties@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+  integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
 
 to-fast-properties@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+  integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
 
 toposort@^1.0.0:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec"
+  integrity sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=
 
 tough-cookie@~2.3.0, tough-cookie@~2.3.3:
   version "2.3.3"
   resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
+  integrity sha1-C2GKVWW23qkL80JdBNVe3EdadWE=
   dependencies:
     punycode "^1.4.1"
 
 trim-newlines@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+  integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
 
 trim-right@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+  integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
 
 tty-browserify@0.0.0:
   version "0.0.0"
   resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+  integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
 
 tunnel-agent@^0.6.0:
   version "0.6.0"
   resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+  integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
   dependencies:
     safe-buffer "^5.0.1"
 
 tweetnacl@^0.14.3, tweetnacl@~0.14.0:
   version "0.14.5"
   resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+  integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
 
 type-check@~0.3.2:
   version "0.3.2"
   resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+  integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
   dependencies:
     prelude-ls "~1.1.2"
 
 type-detect@0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822"
+  integrity sha1-C6XsKohWQORw6k6FBZcZANrFiCI=
 
 type-detect@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2"
+  integrity sha1-diIXzAbbJY7EiQihKY6LlRIejqI=
 
 type-is@~1.6.15:
   version "1.6.15"
   resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410"
+  integrity sha1-yrEPtJCeRByChC6v4a1kbIGARBA=
   dependencies:
     media-typer "0.3.0"
     mime-types "~2.1.15"
@@ -5772,10 +6678,12 @@ type-is@~1.6.15:
 typedarray@^0.0.6:
   version "0.0.6"
   resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+  integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
 
 uglify-js@3.3.x:
   version "3.3.9"
   resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.9.tgz#33869666c8ab7f7658ce3d22f0f1ced40097d33a"
+  integrity sha512-J2t8B5tj9JdPTW4+sNZXmiIWHzTvcoITkaqzTiilu/biZF/9crqf/Fi7k5hqbOmVRh9/hVNxAxBYIMF7N6SqMQ==
   dependencies:
     commander "~2.13.0"
     source-map "~0.6.1"
@@ -5783,6 +6691,7 @@ uglify-js@3.3.x:
 uglify-js@^2.6, uglify-js@~2.7.3:
   version "2.7.5"
   resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8"
+  integrity sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=
   dependencies:
     async "~0.2.6"
     source-map "~0.5.1"
@@ -5792,44 +6701,54 @@ uglify-js@^2.6, uglify-js@~2.7.3:
 uglify-to-browserify@~1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+  integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
 
 uid-number@^0.0.6:
   version "0.0.6"
   resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+  integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=
 
 ultron@1.0.x:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
+  integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=
 
 underscore@~1.6.0:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8"
+  integrity sha1-izixDKze9jM3uLJOT/htRa6lKag=
 
 uniq@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+  integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
 
 uniqid@^4.0.0:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1"
+  integrity sha1-iSIN32t1GuUrX3JISGNShZa7hME=
   dependencies:
     macaddress "^0.2.8"
 
 uniqs@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
+  integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI=
 
 unpipe@1.0.0, unpipe@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+  integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
 
 upper-case@^1.1.1:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
+  integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=
 
 url-loader@^0.5.7:
   version "0.5.9"
   resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.9.tgz#cc8fea82c7b906e7777019250869e569e995c295"
+  integrity sha512-B7QYFyvv+fOBqBVeefsxv6koWWtjmHaMFT6KZWti4KRw8YUD/hOU+3AECvXuzyVawIBx3z7zQRejXCDSO5kk1Q==
   dependencies:
     loader-utils "^1.0.2"
     mime "1.3.x"
@@ -5837,6 +6756,7 @@ url-loader@^0.5.7:
 url@^0.11.0:
   version "0.11.0"
   resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+  integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
   dependencies:
     punycode "1.3.2"
     querystring "0.2.0"
@@ -5844,12 +6764,14 @@ url@^0.11.0:
 user-home@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
+  integrity sha1-nHC/2Babwdy/SGBODwS4tJzenp8=
   dependencies:
     os-homedir "^1.0.0"
 
 useragent@^2.1.12:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972"
+  integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==
   dependencies:
     lru-cache "4.1.x"
     tmp "0.0.x"
@@ -5857,32 +6779,39 @@ useragent@^2.1.12:
 util-deprecate@~1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+  integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
 
 util@0.10.3, "util@>=0.10.3 <1", util@^0.10.3:
   version "0.10.3"
   resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+  integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
   dependencies:
     inherits "2.0.1"
 
 utila@~0.3:
   version "0.3.3"
   resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226"
+  integrity sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=
 
 utila@~0.4:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+  integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=
 
 utils-merge@1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+  integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
 
 uuid@^3.0.0, uuid@^3.1.0:
   version "3.2.1"
   resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
+  integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==
 
 validate-npm-package-license@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+  integrity sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=
   dependencies:
     spdx-correct "~1.0.0"
     spdx-expression-parse "~1.0.0"
@@ -5890,14 +6819,17 @@ validate-npm-package-license@^3.0.1:
 vary@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+  integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
 
 vendors@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22"
+  integrity sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=
 
 verror@1.10.0:
   version "1.10.0"
   resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+  integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
   dependencies:
     assert-plus "^1.0.0"
     core-util-is "1.0.2"
@@ -5906,30 +6838,36 @@ verror@1.10.0:
 vm-browserify@0.0.4:
   version "0.0.4"
   resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
+  integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=
   dependencies:
     indexof "0.0.1"
 
 void-elements@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
+  integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=
 
 vue-chat-scroll@^1.2.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/vue-chat-scroll/-/vue-chat-scroll-1.2.1.tgz#54f123004b887d91f2f7fb69b9bebdf6f61ea9b4"
+  integrity sha512-TjW4Fy2sCl/ODYV3VHeWEqNbUtChn0AxLaxe3SQa02qJ4OZNe3jNrRH3LNuAFizsL5hL8ZbSGwGHo8Mz5kzOrA==
   dependencies:
     vue "^2.1.10"
 
 vue-hot-reload-api@^2.0.11:
   version "2.2.4"
   resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.2.4.tgz#683bd1d026c0d3b3c937d5875679e9a87ec6cd8f"
+  integrity sha512-e+ThJMYmZg4D9UnrLcr6LQxGu6YlcxkrmZGPCyIN4malcNhdeGGKxmFuM5y6ICMJJxQywLfT8MM1rYZr4LpeLw==
 
 vue-i18n@^7.3.2:
   version "7.4.2"
   resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-7.4.2.tgz#ef954f80898bb3609f132f77d51a7053379e03b2"
+  integrity sha512-RFUM24Qa6PpJMmoV5IEGIv5GaZ7v0EE2rTXco2lanbyC52qLszh+NFgzhfbwCZgpf94+Sih+oHOAh/YMbGvofg==
 
 vue-loader@^11.1.0:
   version "11.3.4"
   resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-11.3.4.tgz#65e10a44ce092d906e14bbc72981dec99eb090d2"
+  integrity sha1-ZeEKRM4JLZBuFLvHKYHeyZ6wkNI=
   dependencies:
     consolidate "^0.14.0"
     hash-sum "^1.0.2"
@@ -5947,10 +6885,12 @@ vue-loader@^11.1.0:
 vue-router@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.0.1.tgz#d9b05ad9c7420ba0f626d6500d693e60092cc1e9"
+  integrity sha512-vLLoY452L+JBpALMP5UHum9+7nzR9PeIBCghU9ZtJ1eWm6ieUI8Zb/DI3MYxH32bxkjzYV1LRjNv4qr8d+uX/w==
 
 vue-style-loader@^2.0.0:
   version "2.0.5"
   resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-2.0.5.tgz#f0efac992febe3f12e493e334edb13cd235a3d22"
+  integrity sha1-8O+smS/r4/EuST4zTtsTzSNaPSI=
   dependencies:
     hash-sum "^1.0.2"
     loader-utils "^1.0.2"
@@ -5958,6 +6898,7 @@ vue-style-loader@^2.0.0:
 vue-template-compiler@^2.3.4:
   version "2.5.13"
   resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.13.tgz#12a2aa0ecd6158ac5e5f14d294b0993f399c3d38"
+  integrity sha512-15HWSgIxrGUcV0v7QRen2Y3fQsbgxXwMvjT/5XKMO0ANmaCcNh7y2OeIDTAuSGeosjb9+E1Pn2PHZ61VQWEgBQ==
   dependencies:
     de-indent "^1.0.2"
     he "^1.1.0"
@@ -5965,22 +6906,27 @@ vue-template-compiler@^2.3.4:
 vue-template-es2015-compiler@^1.2.2:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz#dc42697133302ce3017524356a6c61b7b69b4a18"
+  integrity sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==
 
 vue-timeago@^3.1.2:
   version "3.4.2"
   resolved "https://registry.yarnpkg.com/vue-timeago/-/vue-timeago-3.4.2.tgz#291c99370975b0a6f7b65f8745fba878fb545fd8"
+  integrity sha512-cxax7OO9cLRsfMCppbkPU5HgiTnb/r3rnGrbbWBoEw6/8jSF5WuRoVgWKL1xHu1p1uSu2jmNsysaoMYe6qE4Bw==
 
 vue@^2.1.10, vue@^2.5.13:
   version "2.5.13"
   resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.13.tgz#95bd31e20efcf7a7f39239c9aa6787ce8cf578e1"
+  integrity sha512-3D+lY7HTkKbtswDM4BBHgqyq+qo8IAEE8lz8va1dz3LLmttjgo0FxairO4r1iN2OBqk8o1FyL4hvzzTFEdQSEw==
 
 vuex@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.0.1.tgz#e761352ebe0af537d4bb755a9b9dc4be3df7efd2"
+  integrity sha512-wLoqz0B7DSZtgbWL1ShIBBCjv22GV5U+vcBFox658g6V0s4wZV9P4YjCNyoHSyIBpj1f29JBoNQIqD82cR4O3w==
 
 watchpack@^0.2.1:
   version "0.2.9"
   resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b"
+  integrity sha1-Yuqkq15bo1/fwBgnVibjwPXj+ws=
   dependencies:
     async "^0.9.0"
     chokidar "^1.0.0"
@@ -5989,6 +6935,7 @@ watchpack@^0.2.1:
 webpack-core@~0.6.9:
   version "0.6.9"
   resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2"
+  integrity sha1-/FcViMhVjad76e+23r3Fo7FyvcI=
   dependencies:
     source-list-map "~0.1.7"
     source-map "~0.4.1"
@@ -5996,6 +6943,7 @@ webpack-core@~0.6.9:
 webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.8.3:
   version "1.12.2"
   resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e"
+  integrity sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==
   dependencies:
     memory-fs "~0.4.1"
     mime "^1.5.0"
@@ -6006,6 +6954,7 @@ webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.8.3:
 webpack-hot-middleware@^2.12.2:
   version "2.21.0"
   resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.21.0.tgz#7b3c113a7a4b301c91e0749573c7aab28b414b52"
+  integrity sha512-P6xiOLy10QlSVSO7GanU9PLxN6zLLQ7RG16MPTvmFwf2KUG7jMp6m+fmdgsR7xoaVVLA7OlX3YO6JjoZEKjCuA==
   dependencies:
     ansi-html "0.0.7"
     html-entities "^1.2.0"
@@ -6015,6 +6964,7 @@ webpack-hot-middleware@^2.12.2:
 webpack-merge@^0.14.1:
   version "0.14.1"
   resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-0.14.1.tgz#d6bfe6d9360a024e1e7f8e6383ae735f1737cd23"
+  integrity sha1-1r/m2TYKAk4ef45jg65zXxc3zSM=
   dependencies:
     lodash.find "^3.2.1"
     lodash.isequal "^4.2.0"
@@ -6024,6 +6974,7 @@ webpack-merge@^0.14.1:
 webpack-sources@^0.1.0:
   version "0.1.5"
   resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.5.tgz#aa1f3abf0f0d74db7111c40e500b84f966640750"
+  integrity sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=
   dependencies:
     source-list-map "~0.1.7"
     source-map "~0.5.3"
@@ -6031,6 +6982,7 @@ webpack-sources@^0.1.0:
 webpack@^1.13.2:
   version "1.15.0"
   resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.15.0.tgz#4ff31f53db03339e55164a9d468ee0324968fe98"
+  integrity sha1-T/MfU9sDM55VFkqdRo7gMklo/pg=
   dependencies:
     acorn "^3.0.0"
     async "^1.3.0"
@@ -6051,46 +7003,56 @@ webpack@^1.13.2:
 whatwg-fetch@^2.0.3:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
+  integrity sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=
 
 whet.extend@~0.9.9:
   version "0.9.9"
   resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
+  integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=
 
 which-module@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
+  integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=
 
 which@1, which@^1.0.9, which@^1.1.1, which@^1.2.10, which@^1.2.9:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
+  integrity sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==
   dependencies:
     isexe "^2.0.0"
 
 wide-align@^1.1.0:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
+  integrity sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==
   dependencies:
     string-width "^1.0.2"
 
 window-size@0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+  integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=
 
 wordwrap@0.0.2:
   version "0.0.2"
   resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+  integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
 
 wordwrap@^1.0.0, wordwrap@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+  integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
 
 wordwrap@~0.0.2:
   version "0.0.3"
   resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+  integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
 
 wrap-ansi@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+  integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
   dependencies:
     string-width "^1.0.1"
     strip-ansi "^3.0.1"
@@ -6098,16 +7060,19 @@ wrap-ansi@^2.0.0:
 wrappy@1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+  integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
 
 write@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
+  integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=
   dependencies:
     mkdirp "^0.5.1"
 
 ws@1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.2.tgz#8a244fa052401e08c9886cf44a85189e1fd4067f"
+  integrity sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=
   dependencies:
     options ">=0.0.5"
     ultron "1.0.x"
@@ -6115,40 +7080,49 @@ ws@1.1.2:
 wtf-8@1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a"
+  integrity sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=
 
 xml-char-classes@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d"
+  integrity sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=
 
 xmlhttprequest-ssl@1.5.3:
   version "1.5.3"
   resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d"
+  integrity sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=
 
 xregexp@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"
+  integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=
 
 xtend@^4.0.0:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+  integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
 
 y18n@^3.2.1:
   version "3.2.1"
   resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+  integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
 
 yallist@^2.1.2:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+  integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
 
 yargs-parser@^5.0.0:
   version "5.0.0"
   resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
+  integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=
   dependencies:
     camelcase "^3.0.0"
 
 yargs@^7.0.0:
   version "7.1.0"
   resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"
+  integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=
   dependencies:
     camelcase "^3.0.0"
     cliui "^3.2.0"
@@ -6167,6 +7141,7 @@ yargs@^7.0.0:
 yargs@~3.10.0:
   version "3.10.0"
   resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+  integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=
   dependencies:
     camelcase "^1.0.2"
     cliui "^2.1.0"
@@ -6176,9 +7151,11 @@ yargs@~3.10.0:
 yauzl@2.4.1:
   version "2.4.1"
   resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005"
+  integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=
   dependencies:
     fd-slicer "~1.0.1"
 
 yeast@0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
+  integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=

From 60b3e4f40f122f2dfea3f4fc0360673169cd6f99 Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Fri, 26 Oct 2018 15:20:39 +0200
Subject: [PATCH 32/60] Fix linting.

---
 src/components/login_form/login_form.js         | 4 ++--
 src/components/oauth_callback/oauth_callback.js | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/components/login_form/login_form.js b/src/components/login_form/login_form.js
index b1899666..ffdd5504 100644
--- a/src/components/login_form/login_form.js
+++ b/src/components/login_form/login_form.js
@@ -1,4 +1,4 @@
-import oauthApi from "../../services/new_api/oauth.js";
+import oauthApi from '../../services/new_api/oauth.js'
 const LoginForm = {
   data: () => ({
     user: {},
@@ -14,7 +14,7 @@ const LoginForm = {
         oauth: this.$store.state.oauth,
         instance: this.$store.state.instance.server,
         commit: this.$store.commit
-      });
+      })
     },
     submit () {
       this.$store.dispatch('loginUser', this.user).then(
diff --git a/src/components/oauth_callback/oauth_callback.js b/src/components/oauth_callback/oauth_callback.js
index 60a15412..7a5132ad 100644
--- a/src/components/oauth_callback/oauth_callback.js
+++ b/src/components/oauth_callback/oauth_callback.js
@@ -9,8 +9,8 @@ const oac = {
         instance: this.$store.state.instance.server,
         code: this.code
       }).then((result) => {
-        this.$store.commit("setToken", result.access_token)
-        this.$store.dispatch("loginUser", result.access_token)
+        this.$store.commit('setToken', result.access_token)
+        this.$store.dispatch('loginUser', result.access_token)
         this.$router.push('/main/friends')
       })
     }

From 0aa5fe9d0de46b3e5f01860692f0d87132b6f9a4 Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Fri, 26 Oct 2018 16:05:27 +0200
Subject: [PATCH 33/60] Remove gonsole.logg :DD

---
 src/lib/persisted_state.js | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/lib/persisted_state.js b/src/lib/persisted_state.js
index 002f92b4..32fc93c6 100644
--- a/src/lib/persisted_state.js
+++ b/src/lib/persisted_state.js
@@ -70,7 +70,6 @@ export default function createPersistedState ({
           })
         }
         if (store.state.oauth.token) {
-          console.log(store.state.oauth)
           store.dispatch('loginUser', store.state.oauth.token)
         }
         loaded = true

From 6dd675566ed2af047e12ee6d6b4308860e708809 Mon Sep 17 00:00:00 2001
From: Exilat <quentinantonin@free.fr>
Date: Sun, 28 Oct 2018 12:38:40 +0000
Subject: [PATCH 34/60] Copy-Paste too fast from the Catalan file apparently.
 Now it's in good Occitan.

---
 static/timeago-oc.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/static/timeago-oc.json b/static/timeago-oc.json
index 7e439871..a6b3932f 100644
--- a/static/timeago-oc.json
+++ b/static/timeago-oc.json
@@ -3,8 +3,8 @@
   ["fa %s s",     "fa %s s"],
   ["fa %s min",   "fa %s min"],
   ["fa %s h",     "fa %s h"],
-  ["fa %s dia",   "fa %s jorns"],
+  ["fa %s jorn",   "fa %s jorns"],
   ["fa %s setm.", "fa %s setm."],
   ["fa %s mes",   "fa %s meses"],
-  ["fa %s any",   "fa %s ans"]
+  ["fa %s an",   "fa %s ans"]
 ]

From 4f258b4940c68722c3c7f5127c4abc083ffd936d Mon Sep 17 00:00:00 2001
From: dgold <dgold@ascraeus.org>
Date: Fri, 2 Nov 2018 20:08:11 +0000
Subject: [PATCH 35/60] Added Irish (Gaeilge) Language

All translations checked with tearma.ie & acmhainn.ie for language use
and technical accuracy.
---
 src/i18n/ga.json       | 201 +++++++++++++++++++++++++++++++++++++++++
 src/i18n/messages.js   |   1 +
 static/timeago-ga.json |  10 ++
 3 files changed, 212 insertions(+)
 create mode 100644 src/i18n/ga.json
 create mode 100644 static/timeago-ga.json

diff --git a/src/i18n/ga.json b/src/i18n/ga.json
new file mode 100644
index 00000000..64461202
--- /dev/null
+++ b/src/i18n/ga.json
@@ -0,0 +1,201 @@
+{
+  "chat": {
+    "title": "Comhrá"
+  },
+  "features_panel": {
+    "chat": "Comhrá",
+    "gopher": "Gófar",
+    "media_proxy": "Seachfhreastalaí meáin",
+    "scope_options": "Rogha scóip",
+    "text_limit": "Teorainn Téacs",
+    "title": "Gnéithe",
+    "who_to_follow": "Daoine le leanúint"
+  },
+  "finder": {
+    "error_fetching_user": "Earráid a aimsiú d'úsáideoir",
+    "find_user": "Aimsigh úsáideoir"
+  },
+  "general": {
+    "apply": "Feidhmigh",
+    "submit": "Deimhnigh"
+  },
+  "login": {
+    "login": "Logáil isteach",
+    "logout": "Logáil amach",
+    "password": "Pasfhocal",
+    "placeholder": "m.sh. Daire",
+    "register": "Clárú",
+    "username": "Ainm Úsáideora"
+  },
+  "nav": {
+    "chat": "Comhrá Áitiúil",
+    "friend_requests": "Iarratas ar Cairdeas",
+    "mentions": "Tagairt",
+    "public_tl": "Amlíne Poiblí",
+    "timeline": "Amlíne",
+    "twkn": "An Líonra Iomlán"
+  },
+  "notifications": {
+    "broken_favorite": "Post anaithnid. Cuardach dó...",
+    "favorited_you": "toghadh le do phost",
+    "followed_you": "lean tú",
+    "load_older": "Luchtaigh fógraí aosta",
+    "notifications": "Fógraí",
+    "read": "Léigh!",
+    "repeated_you": "athphostáil tú"
+  },
+  "post_status": {
+    "account_not_locked_warning": "Níl do chuntas {0}. Is féidir le duine ar bith a leanúint leat chun do phoist leantacha amháin a fheiceáil.",
+    "account_not_locked_warning_link": "faoi glas",
+    "attachments_sensitive": "Marcáil ceangaltán mar íogair",
+    "content_type": {
+      "plain_text": "Gnáth-théacs"
+    },
+    "content_warning": "Teideal (roghnach)",
+    "default": "Lá iontach anseo i nGaillimh",
+    "direct_warning": "Ní bheidh an post seo le feiceáil ach amháin do na húsáideoirí atá luaite.",
+    "posting": "Post nua",
+    "scope": {
+      "direct": "Díreach - Post chuig úsáideoirí luaite amháin",
+      "private": "Leanúna amháin - Post chuig lucht leanúna amháin",
+      "public": "Poiblí - Post chuig amlínte poiblí",
+      "unlisted": "Neamhliostaithe - Ná cuir post chuig amlínte poiblí"
+    }
+  },
+  "registration": {
+    "bio": "Scéal saoil",
+    "email": "Ríomhphost",
+    "fullname": "Ainm taispeána'",
+    "password_confirm": "Deimhnigh do pasfhocal",
+    "registration": "Clárú",
+    "token": "Cód cuireadh"
+  },
+  "settings": {
+    "attachmentRadius": "Ceangaltáin",
+    "attachments": "Ceangaltáin",
+    "autoload": "Cumasaigh luchtú uathoibríoch nuair a scrollaítear go bun",
+    "avatar": "Phictúir phrófíle",
+    "avatarAltRadius": "Phictúirí phrófíle (Fograí)",
+    "avatarRadius": "Phictúirí phrófíle",
+    "background": "Cúlra",
+    "bio": "Scéal saoil",
+    "btnRadius": "Cnaipí",
+    "cBlue": "Gorm (Freagra, lean)",
+    "cGreen": "Glas (Athphóstail)",
+    "cOrange": "Oráiste (Cosúil)",
+    "cRed": "Dearg (Cealaigh)",
+    "change_password": "Athraigh do pasfhocal",
+    "change_password_error": "Bhí fadhb ann ag athrú do pasfhocail",
+    "changed_password": "Athraigh an pasfhocal go rathúil!",
+    "collapse_subject": "Poist a chosc le teidil",
+    "confirm_new_password": "Deimhnigh do pasfhocal nua",
+    "current_avatar": "Phictúir phrófíle",
+    "current_password": "Pasfhocal reatha",
+    "current_profile_banner": "Phictúir ceanntáisc",
+    "data_import_export_tab": "Iompórtáil / Easpórtáil Sonraí",
+    "default_vis": "Scóip infheicthe réamhshocraithe",
+    "delete_account": "Scrios cuntas",
+    "delete_account_description": "Do chuntas agus do chuid teachtaireachtaí go léir a scriosadh go buan.",
+    "delete_account_error": "Bhí fadhb ann a scriosadh do chuntas. Má leanann sé seo, téigh i dteagmháil le do riarthóir.",
+    "delete_account_instructions": "Scríobh do phasfhocal san ionchur thíos chun deimhniú a scriosadh.",
+    "export_theme": "Sábháil Téama",
+    "filtering": "Scagadh",
+    "filtering_explanation": "Beidh gach post ina bhfuil na focail seo i bhfolach, ceann in aghaidh an líne",
+    "follow_export": "Easpórtáil do leanann",
+    "follow_export_button": "Easpórtáil do leanann chuig comhad csv",
+    "follow_export_processing": "Próiseáil. Iarrtar ort go luath an comhad a íoslódáil.",
+    "follow_import": "Iompórtáil do leanann",
+    "follow_import_error": "Earráid agus do leanann a iompórtáil",
+    "follows_imported": "Do leanann iompórtáil! Tógfaidh an próiseas iad le tamall.",
+    "foreground": "Tulra",
+    "general": "Ginearálta",
+    "hide_attachments_in_convo": "Folaigh ceangaltáin i comhráite",
+    "hide_attachments_in_tl": "Folaigh ceangaltáin sa amlíne",
+    "hide_post_stats": "Folaigh staitisticí na bpost (m.sh. líon na n-athrá)",
+    "hide_user_stats": "Folaigh na staitisticí úsáideora (m.sh. líon na leantóiri)",
+    "import_followers_from_a_csv_file": "Iompórtáil leanann ó chomhad csv",
+    "import_theme": "Luchtaigh Téama",
+    "inputRadius": "Limistéar iontrála",
+    "instance_default": "(Réamhshocrú: {value})",
+    "interfaceLanguage": "Teanga comhéadain",
+    "invalid_theme_imported": "Ní téama bailí é an comhad dícheangailte. Níor rinneadh aon athruithe.",
+    "limited_availability": "Níl sé ar fáil i do bhrabhsálaí",
+    "links": "Naisc",
+    "lock_account_description": "Srian a chur ar do chuntas le lucht leanúna ceadaithe amháin",
+    "loop_video": "Lúb físeáin",
+    "loop_video_silent_only": "Lúb físeáin amháin gan fuaim (i.e. Mastodon's \"gifs\")",
+    "name": "Ainm",
+    "name_bio": "Ainm ⁊ Scéal",
+    "new_password": "Pasfhocal nua'",
+    "notification_visibility": "Cineálacha fógraí a thaispeáint",
+    "notification_visibility_follows": "Leana",
+    "notification_visibility_likes": "Thaithin",
+    "notification_visibility_mentions": "Tagairt",
+    "notification_visibility_repeats": "Atphostáil",
+    "no_rich_text_description": "Bain formáidiú téacs saibhir ó gach post",
+    "nsfw_clickthrough": "Cumasaigh an ceangaltán NSFW cliceáil ar an gcnaipe",
+    "panelRadius": "Painéil",
+    "pause_on_unfocused": "Sruthú ar sos nuair a bhíonn an fócas caillte",
+    "presets": "Réamhshocruithe",
+    "profile_background": "Cúlra Próifíl",
+    "profile_banner": "Phictúir Ceanntáisc",
+    "profile_tab": "Próifíl",
+    "radii_help": "Cruinniú imeall comhéadan a chumrú (i bpicteilíní)",
+    "replies_in_timeline": "Freagraí sa amlíne",
+    "reply_link_preview": "Cumasaigh réamhamharc nasc freagartha ar chlár na luiche",
+    "reply_visibility_all": "Taispeáin gach freagra",
+    "reply_visibility_following": "Taispeáin freagraí amháin atá dírithe ar mise nó ar úsáideoirí atá mé ag leanúint",
+    "reply_visibility_self": "Taispeáin freagraí amháin atá dírithe ar mise",
+    "saving_err": "Earráid socruithe a shábháil",
+    "saving_ok": "Socruithe sábháilte",
+    "security_tab": "Slándáil",
+    "set_new_avatar": "Athraigh do phictúir phrófíle",
+    "set_new_profile_background": "Athraigh do cúlra próifíl",
+    "set_new_profile_banner": "Athraigh do phictúir ceanntáisc",
+    "settings": "Socruithe",
+    "stop_gifs": "Seinn GIFs ar an scáileán",
+    "streaming": "Cumasaigh post nua a shruthú uathoibríoch nuair a scrollaítear go barr an leathanaigh",
+    "text": "Téacs",
+    "theme": "Téama",
+    "theme_help": "Úsáid cód daith hex (#rrggbb) chun do schéim a saincheapadh",
+    "tooltipRadius": "Bileoga eolais",
+    "user_settings": "Socruithe úsáideora",
+    "values": {
+      "false": "níl",
+      "true": "tá"
+    }
+  },
+  "timeline": {
+    "collapse": "Folaigh",
+    "conversation": "Cómhra",
+    "error_fetching": "Earráid a thabhairt cothrom le dáta",
+    "load_older": "Luchtaigh níos mó",
+    "no_retweet_hint": "Tá an post seo marcáilte mar lucht leanúna amháin nó díreach agus ní féidir é a athphostáil",
+    "repeated": "athphostáil",
+    "show_new": "Taispeáin nua",
+    "up_to_date": "Nuashonraithe"
+  },
+  "user_card": {
+    "approve": "Údaraigh",
+    "block": "Cosc",
+    "blocked": "Cuireadh coisc!",
+    "deny": "Diúltaigh",
+    "follow": "Lean",
+    "followees": "Leantóirí",
+    "followers": "Á Leanúint",
+    "following": "Á Leanúint",
+    "follows_you": "Leanann tú",
+    "mute": "Cuir i mód ciúin",
+    "muted": "Mód ciúin",
+    "per_day": "laethúil",
+    "remote_follow": "Leaníunt iargúlta",
+    "statuses": "Poist"
+  },
+  "user_profile": {
+    "timeline_title": "Amlíne úsáideora"
+  },
+  "who_to_follow": {
+    "more": "Feach uile",
+    "who_to_follow": "Daoine le leanúint"
+  }
+}
diff --git a/src/i18n/messages.js b/src/i18n/messages.js
index 4cd3c4e2..18308a72 100644
--- a/src/i18n/messages.js
+++ b/src/i18n/messages.js
@@ -17,6 +17,7 @@ const messages = {
   et: require('./et.json'),
   fi: require('./fi.json'),
   fr: require('./fr.json'),
+  ga: require('./ga.json'),
   he: require('./he.json'),
   hu: require('./hu.json'),
   it: require('./it.json'),
diff --git a/static/timeago-ga.json b/static/timeago-ga.json
new file mode 100644
index 00000000..bdb7b6c4
--- /dev/null
+++ b/static/timeago-ga.json
@@ -0,0 +1,10 @@
+[
+  "Anois",
+  ["%s s", "%s s"],
+  ["%s n", "%s nóimeád"],
+  ["%s u", "%s uair"],
+  ["%s l", "%s lá"],
+  ["%s se", "%s seachtaine"],
+  ["%s m", "%s mí"],
+  ["%s b", "%s bliainta"]
+]
\ No newline at end of file

From b6cd4ff32a8abe569fc945d13eb98992b708103c Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Tue, 6 Nov 2018 21:47:11 +0100
Subject: [PATCH 36/60] Fix typo.

---
 src/boot/after_store.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/boot/after_store.js b/src/boot/after_store.js
index 58361578..65d1ea02 100644
--- a/src/boot/after_store.js
+++ b/src/boot/after_store.js
@@ -91,7 +91,7 @@ const afterStoreSetup = ({store, i18n}) => {
             { name: 'registration', path: '/registration/:token', component: Registration },
             { name: 'friend-requests', path: '/friend-requests', component: FollowRequests },
             { name: 'user-settings', path: '/user-settings', component: UserSettings },
-            { name: 'ouath-callback', path: '/oauth-callback', component: OAuthCallback, props: (route) => ({ code: route.query.code }) }
+            { name: 'oauth-callback', path: '/oauth-callback', component: OAuthCallback, props: (route) => ({ code: route.query.code }) }
           ]
 
           const router = new VueRouter({

From 4d9680e79734c38cbc0343053523fbdccb002f6e Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Tue, 6 Nov 2018 21:48:05 +0100
Subject: [PATCH 37/60] Re-activate registration, use oauth password flow to
 fetch token.

---
 src/components/login_form/login_form.vue    |  5 ++++-
 src/components/registration/registration.js | 21 ++++++++++++++++++---
 src/services/new_api/oauth.js               | 20 +++++++++++++++++++-
 3 files changed, 41 insertions(+), 5 deletions(-)

diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue
index aaaca777..db389716 100644
--- a/src/components/login_form/login_form.vue
+++ b/src/components/login_form/login_form.vue
@@ -7,7 +7,10 @@
     <div class="panel-body">
       <form v-on:submit.prevent='oAuthLogin'  class="login-form">
         <div class='form-group'>
-          <button class="btn btn-default">Login with OAuth</button>
+          <div class='login-bottom'>
+            <div><router-link :to="{name: 'registration'}" v-if='registrationOpen' class='register'>{{$t('login.register')}}</router-link></div>
+            <button :disabled="loggingIn" type='submit' class='btn btn-default'>{{$t('login.login')}}</button>
+          </div>
         </div>
       </form>
     </div>
diff --git a/src/components/registration/registration.js b/src/components/registration/registration.js
index 8f59878d..cdcc33c9 100644
--- a/src/components/registration/registration.js
+++ b/src/components/registration/registration.js
@@ -1,3 +1,5 @@
+import oauthApi from '../../services/new_api/oauth.js'
+
 const registration = {
   data: () => ({
     user: {},
@@ -25,9 +27,22 @@ const registration = {
       this.$store.state.api.backendInteractor.register(this.user).then(
         (response) => {
           if (response.ok) {
-            this.$store.dispatch('loginUser', this.user)
-            this.$router.push('/main/all')
-            this.registering = false
+            const data = {
+              oauth: this.$store.state.oauth,
+              instance: this.$store.state.instance.server
+            }
+            oauthApi.getOrCreateApp(data).then((app) => {
+              oauthApi.getTokenWithCredentials(
+                {app,
+                 instance: data.instance,
+                 username: this.user.username,
+                 password: this.user.password})
+                .then((result) => {
+                  this.$store.commit('setToken', result.access_token)
+                  this.$store.dispatch('loginUser', result.access_token)
+                  this.$router.push('/main/friends')
+                })
+            })
           } else {
             this.registering = false
             response.json().then((data) => {
diff --git a/src/services/new_api/oauth.js b/src/services/new_api/oauth.js
index becee3d0..9e656507 100644
--- a/src/services/new_api/oauth.js
+++ b/src/services/new_api/oauth.js
@@ -40,6 +40,22 @@ const login = (args) => {
   })
 }
 
+const getTokenWithCredentials = ({app, instance, username, password}) => {
+  const url = `${instance}/oauth/token`
+  const form = new window.FormData()
+
+  form.append('client_id', app.client_id)
+  form.append('client_secret', app.client_secret)
+  form.append('grant_type', 'password')
+  form.append('username', username)
+  form.append('password', password)
+
+  return window.fetch(url, {
+    method: 'POST',
+    body: form
+  }).then((data) => data.json())
+}
+
 const getToken = ({app, instance, code}) => {
   const url = `${instance}/oauth/token`
   const form = new window.FormData()
@@ -58,7 +74,9 @@ const getToken = ({app, instance, code}) => {
 
 const oauth = {
   login,
-  getToken
+  getToken,
+  getTokenWithCredentials,
+  getOrCreateApp
 }
 
 export default oauth

From bcbaf5d7ee970a1bd35e05ad12f4dfbb00f4282e Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Tue, 6 Nov 2018 21:51:22 +0100
Subject: [PATCH 38/60] Linting.

---
 src/components/registration/registration.js | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/components/registration/registration.js b/src/components/registration/registration.js
index cdcc33c9..f7f8a720 100644
--- a/src/components/registration/registration.js
+++ b/src/components/registration/registration.js
@@ -33,10 +33,11 @@ const registration = {
             }
             oauthApi.getOrCreateApp(data).then((app) => {
               oauthApi.getTokenWithCredentials(
-                {app,
-                 instance: data.instance,
-                 username: this.user.username,
-                 password: this.user.password})
+                {
+                  app,
+                  instance: data.instance,
+                  username: this.user.username,
+                  password: this.user.password})
                 .then((result) => {
                   this.$store.commit('setToken', result.access_token)
                   this.$store.dispatch('loginUser', result.access_token)

From 50264410f541c8f9f3416bd0027fc199cb96e424 Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Wed, 7 Nov 2018 16:56:12 +0100
Subject: [PATCH 39/60] Add login form back in.

---
 README.md                                |  6 ++++++
 src/boot/after_store.js                  |  2 ++
 src/components/login_form/login_form.js  | 26 ++++++++++++++++--------
 src/components/login_form/login_form.vue | 19 ++++++++++++++++-
 src/modules/instance.js                  |  1 +
 static/config.json                       |  3 ++-
 6 files changed, 47 insertions(+), 10 deletions(-)

diff --git a/README.md b/README.md
index 5a3e2a4b..b6e5a586 100644
--- a/README.md
+++ b/README.md
@@ -32,3 +32,9 @@ npm run unit
 # Configuration
 
 Edit config.json for configuration. scopeOptionsEnabled gives you input fields for CWs and the scope settings.
+
+## Options
+
+### Login methods
+
+```loginMethod``` can be set to either ```password``` (the default) or ```token```, which will use the full oauth redirection flow, which is useful for SSO situations.
diff --git a/src/boot/after_store.js b/src/boot/after_store.js
index 65d1ea02..6b8aef7f 100644
--- a/src/boot/after_store.js
+++ b/src/boot/after_store.js
@@ -53,6 +53,7 @@ const afterStoreSetup = ({store, i18n}) => {
           var scopeOptionsEnabled = (config.scopeOptionsEnabled)
           var formattingOptionsEnabled = (config.formattingOptionsEnabled)
           var collapseMessageWithSubject = (config.collapseMessageWithSubject)
+          var loginMethod = (config.loginMethod)
 
           store.dispatch('setInstanceOption', { name: 'theme', value: theme })
           store.dispatch('setInstanceOption', { name: 'background', value: background })
@@ -67,6 +68,7 @@ const afterStoreSetup = ({store, i18n}) => {
           store.dispatch('setInstanceOption', { name: 'scopeOptionsEnabled', value: scopeOptionsEnabled })
           store.dispatch('setInstanceOption', { name: 'formattingOptionsEnabled', value: formattingOptionsEnabled })
           store.dispatch('setInstanceOption', { name: 'collapseMessageWithSubject', value: collapseMessageWithSubject })
+          store.dispatch('setInstanceOption', { name: 'loginMethod', value: loginMethod })
           if (chatDisabled) {
             store.dispatch('disableChat')
           }
diff --git a/src/components/login_form/login_form.js b/src/components/login_form/login_form.js
index ffdd5504..49868aed 100644
--- a/src/components/login_form/login_form.js
+++ b/src/components/login_form/login_form.js
@@ -5,6 +5,7 @@ const LoginForm = {
     authError: false
   }),
   computed: {
+    loginMethod () { return this.$store.state.instance.loginMethod },
     loggingIn () { return this.$store.state.users.loggingIn },
     registrationOpen () { return this.$store.state.instance.registrationOpen }
   },
@@ -17,14 +18,23 @@ const LoginForm = {
       })
     },
     submit () {
-      this.$store.dispatch('loginUser', this.user).then(
-        () => {},
-        (error) => {
-          this.authError = error
-          this.user.username = ''
-          this.user.password = ''
-        }
-      )
+      const data = {
+        oauth: this.$store.state.oauth,
+        instance: this.$store.state.instance.server
+      }
+      oauthApi.getOrCreateApp(data).then((app) => {
+        oauthApi.getTokenWithCredentials(
+          {
+            app,
+            instance: data.instance,
+            username: this.user.username,
+            password: this.user.password})
+          .then((result) => {
+            this.$store.commit('setToken', result.access_token)
+            this.$store.dispatch('loginUser', result.access_token)
+            this.$router.push('/main/friends')
+          })
+      })
     }
   }
 }
diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue
index db389716..8a5174d7 100644
--- a/src/components/login_form/login_form.vue
+++ b/src/components/login_form/login_form.vue
@@ -5,7 +5,24 @@
       {{$t('login.login')}}
     </div>
     <div class="panel-body">
-      <form v-on:submit.prevent='oAuthLogin'  class="login-form">
+      <form v-if="loginMethod == 'password'" v-on:submit.prevent='submit(user)' class='login-form'>
+        <div class='form-group'>
+          <label for='username'>{{$t('login.username')}}</label>
+          <input :disabled="loggingIn" v-model='user.username' class='form-control' id='username' v-bind:placeholder="$t('login.placeholder')">
+        </div>
+        <div class='form-group'>
+          <label for='password'>{{$t('login.password')}}</label>
+          <input :disabled="loggingIn" v-model='user.password' class='form-control' id='password' type='password'>
+        </div>
+        <div class='form-group'>
+          <div class='login-bottom'>
+            <div><router-link :to="{name: 'registration'}" v-if='registrationOpen' class='register'>{{$t('login.register')}}</router-link></div>
+            <button :disabled="loggingIn" type='submit' class='btn btn-default'>{{$t('login.login')}}</button>
+          </div>
+        </div>
+      </form>
+
+      <form v-if="loginMethod == 'token'" v-on:submit.prevent='oAuthLogin'  class="login-form">
         <div class='form-group'>
           <div class='login-bottom'>
             <div><router-link :to="{name: 'registration'}" v-if='registrationOpen' class='register'>{{$t('login.register')}}</router-link></div>
diff --git a/src/modules/instance.js b/src/modules/instance.js
index d61ca842..8b2c03d2 100644
--- a/src/modules/instance.js
+++ b/src/modules/instance.js
@@ -21,6 +21,7 @@ const defaultState = {
   hidePostStats: false,
   hideUserStats: false,
   disableChat: false,
+  loginMethod: 'password',
 
   // Nasty stuff
   pleromaBackend: true,
diff --git a/static/config.json b/static/config.json
index a6eace0f..69a70741 100644
--- a/static/config.json
+++ b/static/config.json
@@ -12,5 +12,6 @@
   "formattingOptionsEnabled": false,
   "collapseMessageWithSubject": false,
   "hidePostStats": false,
-  "hideUserStats": false
+  "hideUserStats": false,
+  "loginMethod": "password"
 }

From 6f668df6976d7210a9768931b5f4b58994289479 Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Wed, 7 Nov 2018 17:20:33 +0100
Subject: [PATCH 40/60] Count spoiler text in the character count. Fixes #135.

---
 src/components/post_status_form/post_status_form.js | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js
index a84e764c..af7d8810 100644
--- a/src/components/post_status_form/post_status_form.js
+++ b/src/components/post_status_form/post_status_form.js
@@ -53,7 +53,7 @@ const PostStatusForm = {
       posting: false,
       highlighted: 0,
       newStatus: {
-        spoilerText: this.subject,
+        spoilerText: this.subject || '',
         status: statusText,
         contentType: 'text/plain',
         nsfw: false,
@@ -128,6 +128,9 @@ const PostStatusForm = {
     statusLength () {
       return this.newStatus.status.length
     },
+    spoilerTextLength () {
+      return this.newStatus.spoilerText.length
+    },
     statusLengthLimit () {
       return this.$store.state.instance.textlimit
     },
@@ -135,10 +138,10 @@ const PostStatusForm = {
       return this.statusLengthLimit > 0
     },
     charactersLeft () {
-      return this.statusLengthLimit - this.statusLength
+      return this.statusLengthLimit - (this.statusLength + this.spoilerTextLength)
     },
     isOverLengthLimit () {
-      return this.hasStatusLengthLimit && (this.statusLength > this.statusLengthLimit)
+      return this.hasStatusLengthLimit && (this.charactersLeft < 0)
     },
     scopeOptionsEnabled () {
       return this.$store.state.instance.scopeOptionsEnabled

From a04795d723e695a23eb15c1abb7b7a5407d4686b Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Thu, 8 Nov 2018 16:12:05 +0100
Subject: [PATCH 41/60] Display OAuth login on login form button.

---
 src/components/login_form/login_form.vue | 2 +-
 src/i18n/de.json                         | 1 +
 src/i18n/en.json                         | 1 +
 3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue
index 8a5174d7..0c0dcdcd 100644
--- a/src/components/login_form/login_form.vue
+++ b/src/components/login_form/login_form.vue
@@ -26,7 +26,7 @@
         <div class='form-group'>
           <div class='login-bottom'>
             <div><router-link :to="{name: 'registration'}" v-if='registrationOpen' class='register'>{{$t('login.register')}}</router-link></div>
-            <button :disabled="loggingIn" type='submit' class='btn btn-default'>{{$t('login.login')}}</button>
+            <button :disabled="loggingIn" type='submit' class='btn btn-default'>{{$t('login.login_token')}}</button>
           </div>
         </div>
       </form>
diff --git a/src/i18n/de.json b/src/i18n/de.json
index 4e742bad..2cbd3e51 100644
--- a/src/i18n/de.json
+++ b/src/i18n/de.json
@@ -12,6 +12,7 @@
   },
   "login": {
     "login": "Anmelden",
+    "login_token": "Mit OAuth anmelden",
     "logout": "Abmelden",
     "password": "Passwort",
     "placeholder": "z.B. lain",
diff --git a/src/i18n/en.json b/src/i18n/en.json
index 8963e479..d10fa620 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -21,6 +21,7 @@
   },
   "login": {
     "login": "Log in",
+    "login_token": "Log in with OAuth",
     "logout": "Log out",
     "password": "Password",
     "placeholder": "e.g. lain",

From 1de382f0265c61b7747795783ffb5185270cd3b1 Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Thu, 8 Nov 2018 19:27:19 +0100
Subject: [PATCH 42/60] Put oauth text into description.

---
 src/components/login_form/login_form.vue | 5 ++++-
 src/i18n/de.json                         | 2 +-
 src/i18n/en.json                         | 2 +-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue
index 0c0dcdcd..12971882 100644
--- a/src/components/login_form/login_form.vue
+++ b/src/components/login_form/login_form.vue
@@ -23,10 +23,13 @@
       </form>
 
       <form v-if="loginMethod == 'token'" v-on:submit.prevent='oAuthLogin'  class="login-form">
+        <div class="form-group">
+          <p>{{$t('login.description')}}</p>
+        </div>
         <div class='form-group'>
           <div class='login-bottom'>
             <div><router-link :to="{name: 'registration'}" v-if='registrationOpen' class='register'>{{$t('login.register')}}</router-link></div>
-            <button :disabled="loggingIn" type='submit' class='btn btn-default'>{{$t('login.login_token')}}</button>
+            <button :disabled="loggingIn" type='submit' class='btn btn-default'>{{$t('login.login')}}</button>
           </div>
         </div>
       </form>
diff --git a/src/i18n/de.json b/src/i18n/de.json
index 2cbd3e51..49179423 100644
--- a/src/i18n/de.json
+++ b/src/i18n/de.json
@@ -12,7 +12,7 @@
   },
   "login": {
     "login": "Anmelden",
-    "login_token": "Mit OAuth anmelden",
+    "description": "Mit OAuth anmelden",
     "logout": "Abmelden",
     "password": "Passwort",
     "placeholder": "z.B. lain",
diff --git a/src/i18n/en.json b/src/i18n/en.json
index d10fa620..036231bf 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -21,7 +21,7 @@
   },
   "login": {
     "login": "Log in",
-    "login_token": "Log in with OAuth",
+    "description": "Log in with OAuth",
     "logout": "Log out",
     "password": "Password",
     "placeholder": "e.g. lain",

From 2c2c4452b93efa53ff03e871e525b3a096855063 Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Thu, 8 Nov 2018 19:34:59 +0100
Subject: [PATCH 43/60] Fix posting.

---
 src/components/post_status_form/post_status_form.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js
index af7d8810..c0e34d72 100644
--- a/src/components/post_status_form/post_status_form.js
+++ b/src/components/post_status_form/post_status_form.js
@@ -226,6 +226,7 @@ const PostStatusForm = {
         if (!data.error) {
           this.newStatus = {
             status: '',
+            spoilerText: '',
             files: [],
             visibility: newStatus.visibility,
             contentType: newStatus.contentType

From e1d21512a9c841c1623f1cdf6ffabadc86a1b21f Mon Sep 17 00:00:00 2001
From: Nebula <starmancer@protonmail.com>
Date: Fri, 9 Nov 2018 05:42:32 +0000
Subject: [PATCH 44/60] Add Chinese language

---
 src/i18n/messages.js |   3 +-
 src/i18n/zh-CN.json  | 201 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 203 insertions(+), 1 deletion(-)
 create mode 100644 src/i18n/zh-CN.json

diff --git a/src/i18n/messages.js b/src/i18n/messages.js
index 4cd3c4e2..17a7faa7 100644
--- a/src/i18n/messages.js
+++ b/src/i18n/messages.js
@@ -26,7 +26,8 @@ const messages = {
   pl: require('./pl.json'),
   pt: require('./pt.json'),
   ro: require('./ro.json'),
-  ru: require('./ru.json')
+  ru: require('./ru.json'),
+  'zh-CN': require('./zh-CN.json')
 }
 
 export default messages
diff --git a/src/i18n/zh-CN.json b/src/i18n/zh-CN.json
new file mode 100644
index 00000000..f30cfe0b
--- /dev/null
+++ b/src/i18n/zh-CN.json
@@ -0,0 +1,201 @@
+{
+  "chat": {
+    "title": "聊天"
+  },
+  "features_panel": {
+    "chat": "聊天",
+    "gopher": "Gopher",
+    "media_proxy": "媒体代理",
+    "scope_options": "可见范围设置",
+    "text_limit": "文本长度限制",
+    "title": "功能",
+    "who_to_follow": "推荐关注"
+  },
+  "finder": {
+    "error_fetching_user": "获取用户时发生错误",
+    "find_user": "寻找用户"
+  },
+  "general": {
+    "apply": "应用",
+    "submit": "提交"
+  },
+  "login": {
+    "login": "登录",
+    "logout": "登出",
+    "password": "密码",
+    "placeholder": "例如:lain",
+    "register": "注册",
+    "username": "用户名"
+  },
+  "nav": {
+    "chat": "本地聊天",
+    "friend_requests": "关注请求",
+    "mentions": "提及",
+    "public_tl": "公共时间线",
+    "timeline": "时间线",
+    "twkn": "所有已知网络"
+  },
+  "notifications": {
+    "broken_favorite": "未知的状态,正在搜索中...",
+    "favorited_you": "收藏了你的状态",
+    "followed_you": "关注了你",
+    "load_older": "加载更早的通知",
+    "notifications": "通知",
+    "read": "Read!",
+    "repeated_you": "转发了你的状态"
+  },
+  "post_status": {
+    "account_not_locked_warning": "你的帐号没有 {0}。任何人都可以关注你并浏览你的上锁内容。",
+    "account_not_locked_warning_link": "上锁",
+    "attachments_sensitive": "标记附件为敏感内容",
+    "content_type": {
+      "plain_text": "纯文本"
+    },
+    "content_warning": "主题(可选)",
+    "default": "刚刚抵达上海",
+    "direct_warning": "本条内容只有被提及的用户能够看到。",
+    "posting": "发送",
+    "scope": {
+      "direct": "私信 - 只发送给被提及的用户",
+      "private": "仅关注者 - 只有关注了你的人能看到",
+      "public": "公共 - 发送到公共时间轴",
+      "unlisted": "不公开 - 所有人可见,但不会发送到公共时间轴"
+    }
+  },
+  "registration": {
+    "bio": "简介",
+    "email": "电子邮箱",
+    "fullname": "全名",
+    "password_confirm": "确认密码",
+    "registration": "注册",
+    "token": "邀请码"
+  },
+  "settings": {
+    "attachmentRadius": "附件",
+    "attachments": "附件",
+    "autoload": "启用滚动到底部时自动加载",
+    "avatar": "头像",
+    "avatarAltRadius": "头像(通知)",
+    "avatarRadius": "头像",
+    "background": "背景",
+    "bio": "简介",
+    "btnRadius": "按钮",
+    "cBlue": "蓝色(回复,关注)",
+    "cGreen": "绿色(转发)",
+    "cOrange": "橙色(收藏)",
+    "cRed": "红色(取消)",
+    "change_password": "修改密码",
+    "change_password_error": "修改密码的时候出了点问题。",
+    "changed_password": "成功修改了密码!",
+    "collapse_subject": "折叠带主题的内容",
+    "confirm_new_password": "确认新密码",
+    "current_avatar": "当前头像",
+    "current_password": "当前密码",
+    "current_profile_banner": "您当前的横幅图片",
+    "data_import_export_tab": "数据导入/导出",
+    "default_vis": "默认可见范围",
+    "delete_account": "删除账户",
+    "delete_account_description": "永久删除你的帐号和所有消息。",
+    "delete_account_error": "删除账户时发生错误,如果一直删除不了,请联系实例管理员。",
+    "delete_account_instructions": "在下面输入你的密码来确认删除账户",
+    "export_theme": "Save preset",
+    "filtering": "过滤器",
+    "filtering_explanation": "所有包含以下词汇的图片都会被隐藏,一行一个",
+    "follow_export": "导出关注",
+    "follow_export_button": "将关注导出成 csv 文件",
+    "follow_export_processing": "正在处理,过一会儿就可以下载你的文件了",
+    "follow_import": "导入关注",
+    "follow_import_error": "导入关注时错误",
+    "follows_imported": "关注已导入!尚需要一些时间来处理。",
+    "foreground": "前景",
+    "general": "通用",
+    "hide_attachments_in_convo": "在对话中隐藏附件",
+    "hide_attachments_in_tl": "在时间线上隐藏附件",
+    "hide_post_stats": "隐藏推文相关的统计数据(例如:收藏的次数)",
+    "hide_user_stats": "隐藏用户的统计数据(例如:关注者的数量)",
+    "import_followers_from_a_csv_file": "从 csv 文件中导入关注",
+    "import_theme": "加载预置主题",
+    "inputRadius": "输入框",
+    "instance_default": "(默认:{value})",
+    "interfaceLanguage": "界面语言",
+    "invalid_theme_imported": "你所选择的主题文件不被 Pleroma 支持,因此主题未被修改。",
+    "limited_availability": "在你的浏览器中无法使用",
+    "links": "链接",
+    "lock_account_description": "你需要手动审核关注请求",
+    "loop_video": "循环视频",
+    "loop_video_silent_only": "只循环没有声音的视频(例如:Mastodon 里的“GIF”)",
+    "name": "名字",
+    "name_bio": "名字及简介",
+    "new_password": "新密码",
+    "notification_visibility": "要显示的通知类型",
+    "notification_visibility_follows": "关注",
+    "notification_visibility_likes": "点赞",
+    "notification_visibility_mentions": "提及",
+    "notification_visibility_repeats": "转发",
+    "no_rich_text_description": "不显示富文本格式",
+    "nsfw_clickthrough": "将不和谐附件隐藏,点击才能打开",
+    "panelRadius": "面板",
+    "pause_on_unfocused": "在离开页面时暂停时间线推送",
+    "presets": "Presets",
+    "profile_background": "个人资料背景图",
+    "profile_banner": "横幅图片",
+    "profile_tab": "个人资料",
+    "radii_help": "设置界面边缘圆角 (单位:像素)",
+    "replies_in_timeline": "时间线中的回复",
+    "reply_link_preview": "启用鼠标悬停时预览回复链接",
+    "reply_visibility_all": "显示所有回复",
+    "reply_visibility_following": "只显示发送给我的回复或者发送给我关注的用户的回复",
+    "reply_visibility_self": "只显示发送给我的回复",
+    "saving_err": "保存设置时发生错误",
+    "saving_ok": "设置已保存",
+    "security_tab": "安全",
+    "set_new_avatar": "设置新头像",
+    "set_new_profile_background": "设置新的个人资料背景",
+    "set_new_profile_banner": "设置新的横幅图片",
+    "settings": "设置",
+    "stop_gifs": "鼠标悬停时播放GIF",
+    "streaming": "开启滚动到顶部时的自动推送",
+    "text": "文本",
+    "theme": "主题",
+    "theme_help": "使用十六进制代码(#rrggbb)来设置主题颜色。",
+    "tooltipRadius": "提醒",
+    "user_settings": "用户设置",
+    "values": {
+      "false": "否",
+      "true": "是"
+    }
+  },
+  "timeline": {
+    "collapse": "折叠",
+    "conversation": "对话",
+    "error_fetching": "获取更新时发生错误",
+    "load_older": "加载更早的状态",
+    "no_retweet_hint": "这条内容仅关注者可见,或者是私信,因此不能转发。",
+    "repeated": "已转发",
+    "show_new": "显示新内容",
+    "up_to_date": "已是最新"
+  },
+  "user_card": {
+    "approve": "允许",
+    "block": "屏蔽",
+    "blocked": "已屏蔽!",
+    "deny": "拒绝",
+    "follow": "关注",
+    "followees": "正在关注",
+    "followers": "关注者",
+    "following": "正在关注!",
+    "follows_you": "关注了你!",
+    "mute": "隐藏",
+    "muted": "已隐藏",
+    "per_day": "每天",
+    "remote_follow": "跨站关注",
+    "statuses": "状态"
+  },
+  "user_profile": {
+    "timeline_title": "用户时间线"
+  },
+  "who_to_follow": {
+    "more": "更多",
+    "who_to_follow": "推荐关注"
+  }
+}
\ No newline at end of file

From 819e9ce6a304e2391c23f523b080d3d9b3263baa Mon Sep 17 00:00:00 2001
From: Starmancer <starmancer@protonmail.com>
Date: Fri, 9 Nov 2018 14:15:55 +0800
Subject: [PATCH 45/60] update Chinese translation

---
 src/i18n/messages.js             |  2 +-
 src/i18n/{zh-CN.json => zh.json} | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)
 rename src/i18n/{zh-CN.json => zh.json} (96%)

diff --git a/src/i18n/messages.js b/src/i18n/messages.js
index 17a7faa7..75801e08 100644
--- a/src/i18n/messages.js
+++ b/src/i18n/messages.js
@@ -27,7 +27,7 @@ const messages = {
   pt: require('./pt.json'),
   ro: require('./ro.json'),
   ru: require('./ru.json'),
-  'zh-CN': require('./zh-CN.json')
+  zh: require('./zh.json')
 }
 
 export default messages
diff --git a/src/i18n/zh-CN.json b/src/i18n/zh.json
similarity index 96%
rename from src/i18n/zh-CN.json
rename to src/i18n/zh.json
index f30cfe0b..a1c8ff0e 100644
--- a/src/i18n/zh-CN.json
+++ b/src/i18n/zh.json
@@ -98,9 +98,9 @@
     "delete_account_description": "永久删除你的帐号和所有消息。",
     "delete_account_error": "删除账户时发生错误,如果一直删除不了,请联系实例管理员。",
     "delete_account_instructions": "在下面输入你的密码来确认删除账户",
-    "export_theme": "Save preset",
+    "export_theme": "保存预置主题",
     "filtering": "过滤器",
-    "filtering_explanation": "所有包含以下词汇的图片都会被隐藏,一行一个",
+    "filtering_explanation": "所有包含以下词汇的内容都会被隐藏,一行一个",
     "follow_export": "导出关注",
     "follow_export_button": "将关注导出成 csv 文件",
     "follow_export_processing": "正在处理,过一会儿就可以下载你的文件了",
@@ -136,15 +136,15 @@
     "nsfw_clickthrough": "将不和谐附件隐藏,点击才能打开",
     "panelRadius": "面板",
     "pause_on_unfocused": "在离开页面时暂停时间线推送",
-    "presets": "Presets",
+    "presets": "预置",
     "profile_background": "个人资料背景图",
     "profile_banner": "横幅图片",
     "profile_tab": "个人资料",
-    "radii_help": "设置界面边缘圆角 (单位:像素)",
+    "radii_help": "设置界面边缘的圆角 (单位:像素)",
     "replies_in_timeline": "时间线中的回复",
     "reply_link_preview": "启用鼠标悬停时预览回复链接",
     "reply_visibility_all": "显示所有回复",
-    "reply_visibility_following": "只显示发送给我的回复或者发送给我关注的用户的回复",
+    "reply_visibility_following": "只显示发送给我的回复/发送给我关注的用户的回复",
     "reply_visibility_self": "只显示发送给我的回复",
     "saving_err": "保存设置时发生错误",
     "saving_ok": "设置已保存",
@@ -198,4 +198,4 @@
     "more": "更多",
     "who_to_follow": "推荐关注"
   }
-}
\ No newline at end of file
+}

From 4c5073a66c609af5cadad6985195748b19e4afdf Mon Sep 17 00:00:00 2001
From: Starmancer <starmancer@protonmail.com>
Date: Fri, 9 Nov 2018 14:29:14 +0800
Subject: [PATCH 46/60] minor modification of Chinese translation

---
 src/i18n/zh.json | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/i18n/zh.json b/src/i18n/zh.json
index a1c8ff0e..7ad23c57 100644
--- a/src/i18n/zh.json
+++ b/src/i18n/zh.json
@@ -41,7 +41,7 @@
     "followed_you": "关注了你",
     "load_older": "加载更早的通知",
     "notifications": "通知",
-    "read": "Read!",
+    "read": "阅读!",
     "repeated_you": "转发了你的状态"
   },
   "post_status": {
@@ -73,7 +73,7 @@
   "settings": {
     "attachmentRadius": "附件",
     "attachments": "附件",
-    "autoload": "启用滚动到底部时自动加载",
+    "autoload": "启用滚动到底部时的自动加载",
     "avatar": "头像",
     "avatarAltRadius": "头像(通知)",
     "avatarRadius": "头像",
@@ -98,7 +98,7 @@
     "delete_account_description": "永久删除你的帐号和所有消息。",
     "delete_account_error": "删除账户时发生错误,如果一直删除不了,请联系实例管理员。",
     "delete_account_instructions": "在下面输入你的密码来确认删除账户",
-    "export_theme": "保存预置主题",
+    "export_theme": "导出预置主题",
     "filtering": "过滤器",
     "filtering_explanation": "所有包含以下词汇的内容都会被隐藏,一行一个",
     "follow_export": "导出关注",
@@ -114,12 +114,12 @@
     "hide_post_stats": "隐藏推文相关的统计数据(例如:收藏的次数)",
     "hide_user_stats": "隐藏用户的统计数据(例如:关注者的数量)",
     "import_followers_from_a_csv_file": "从 csv 文件中导入关注",
-    "import_theme": "加载预置主题",
+    "import_theme": "导入预置主题",
     "inputRadius": "输入框",
     "instance_default": "(默认:{value})",
     "interfaceLanguage": "界面语言",
-    "invalid_theme_imported": "你所选择的主题文件不被 Pleroma 支持,因此主题未被修改。",
-    "limited_availability": "在你的浏览器中无法使用",
+    "invalid_theme_imported": "您所选择的主题文件不被 Pleroma 支持,因此主题未被修改。",
+    "limited_availability": "在您的浏览器中无法使用",
     "links": "链接",
     "lock_account_description": "你需要手动审核关注请求",
     "loop_video": "循环视频",

From cf581b7d5a29f5164a2c1443cfbcee5cb0901bf8 Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Sat, 10 Nov 2018 10:43:25 +0100
Subject: [PATCH 47/60] On logout switch to public timeline.

---
 src/App.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/App.js b/src/App.js
index 05e3eda3..3bfd307f 100644
--- a/src/App.js
+++ b/src/App.js
@@ -73,6 +73,7 @@ export default {
       window.scrollTo(0, 0)
     },
     logout () {
+      this.$router.replace('/main/public')
       this.$store.dispatch('logout')
     }
   }

From ae927f86288e4a649de0eb4a34262c3e7429dda7 Mon Sep 17 00:00:00 2001
From: Vinzenz Vietzke <vinz@vinzv.de>
Date: Mon, 12 Nov 2018 22:39:55 +0100
Subject: [PATCH 48/60] updated and completed German translation

---
 src/i18n/de.json | 69 +++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 60 insertions(+), 9 deletions(-)

diff --git a/src/i18n/de.json b/src/i18n/de.json
index 4e742bad..73de5949 100644
--- a/src/i18n/de.json
+++ b/src/i18n/de.json
@@ -2,6 +2,15 @@
   "chat": {
     "title": "Chat"
   },
+  "features_panel": {
+    "chat": "Chat",
+    "gopher": "Gopher",
+    "media_proxy": "Media Proxy",
+    "scope_options": "Scope options",
+    "text_limit": "Textlimit",
+    "title": "Features",
+    "who_to_follow": "Who to follow"
+  },
   "finder": {
     "error_fetching_user": "Fehler beim Suchen des Benutzers",
     "find_user": "Finde Benutzer"
@@ -24,11 +33,13 @@
     "mentions": "Erwähnungen",
     "public_tl": "Lokale Zeitleiste",
     "timeline": "Zeitleiste",
-    "twkn": "Das gesamte Netzwerk"
+    "twkn": "Das gesamte bekannte Netzwerk"
   },
   "notifications": {
+    "broken_favorite": "Unbekannte Nachricht, suche danach...",
     "favorited_you": "favorisierte deine Nachricht",
     "followed_you": "folgt dir",
+    "load_older": "Ältere Benachrichtigungen laden",
     "notifications": "Benachrichtigungen",
     "read": "Gelesen!",
     "repeated_you": "wiederholte deine Nachricht"
@@ -36,6 +47,11 @@
   "post_status": {
     "account_not_locked_warning": "Dein Profil ist nicht {0}. Wer dir folgen will, kann das jederzeit tun und dann auch deine privaten Beiträge sehen.",
     "account_not_locked_warning_link": "gesperrt",
+    "attachments_sensitive": "Anhänge als heikel markieren",
+    "content_type": {
+      "plain_text": "Nur Text"
+    },
+    "content_warning": "Betreff (optional)",
     "default": "Sitze gerade im Hofbräuhaus.",
     "direct_warning": "Dieser Beitrag wird nur für die erwähnten Nutzer sichtbar sein.",
     "posting": "Veröffentlichen",
@@ -71,42 +87,68 @@
     "change_password": "Passwort ändern",
     "change_password_error": "Es gab ein Problem bei der Änderung des Passworts.",
     "changed_password": "Passwort erfolgreich geändert!",
+    "collapse_subject": "Beiträge mit Betreff einklappen",
     "confirm_new_password": "Neues Passwort bestätigen",
     "current_avatar": "Dein derzeitiger Avatar",
     "current_password": "Aktuelles Passwort",
     "current_profile_banner": "Der derzeitige Banner deines Profils",
+    "data_import_export_tab": "Datenimport/-export",
+    "default_vis": "Standard-Sichtbarkeitsumfang",
     "delete_account": "Account löschen",
     "delete_account_description": "Lösche deinen Account und alle deine Nachrichten unwiderruflich.",
-    "delete_account_error": "Es ist ein Fehler beim löschen deines Accounts aufgetreten. Tritt dies weiterhin auf, wende dich an den Administrator der Instanz.",
+    "delete_account_error": "Es ist ein Fehler beim Löschen deines Accounts aufgetreten. Tritt dies weiterhin auf, wende dich an den Administrator der Instanz.",
     "delete_account_instructions": "Tippe dein Passwort unten in das Feld ein, um die Löschung deines Accounts zu bestätigen.",
     "export_theme": "Farbschema speichern",
-    "filtering": "Filter",
+    "filtering": "Filtern",
     "filtering_explanation": "Alle Beiträge die diese Wörter enthalten werden ausgeblendet. Ein Wort pro Zeile.",
     "follow_export": "Follower exportieren",
-    "follow_export_button": "Liste (.csv) erstellen",
+    "follow_export_button": "Exportiere deine Follows in eine csv-Datei",
     "follow_export_processing": "In Bearbeitung. Die Liste steht gleich zum herunterladen bereit.",
     "follow_import": "Followers importieren",
     "follow_import_error": "Fehler beim importieren der Follower",
     "follows_imported": "Followers importiert! Die Bearbeitung kann eine Zeit lang dauern.",
     "foreground": "Vordergrund",
+    "general": "Allgemein",
     "hide_attachments_in_convo": "Anhänge in Unterhaltungen ausblenden",
     "hide_attachments_in_tl": "Anhänge in der Zeitleiste ausblenden",
+    "hide_post_stats": "Beitragsstatistiken verbergen (z.B. die Anzahl der Favoriten)",
+    "hide_user_stats": "Benutzerstatistiken verbergen (z.B. die Anzahl der Follower)",
     "import_followers_from_a_csv_file": "Importiere Follower, denen du folgen möchtest, aus einer CSV-Datei",
     "import_theme": "Farbschema laden",
     "inputRadius": "Eingabefelder",
+    "instance_default": "(Standard: {value})",
+    "interfaceLanguage": "Sprache der Oberfläche",
     "invalid_theme_imported": "Die ausgewählte Datei ist kein unterstütztes Pleroma-Theme. Keine Änderungen wurden vorgenommen.",
+    "limited_availability": "In deinem Browser nicht verfügbar",
     "links": "Links",
     "lock_account_description": "Sperre deinen Account, um neue Follower zu genehmigen oder abzulehnen",
+    "loop_video": "Videos wiederholen",
+    "loop_video_silent_only": "Nur Videos ohne Ton wiederholen (z.B. Mastodons \"gifs\")",
     "name": "Name",
     "name_bio": "Name & Bio",
     "new_password": "Neues Passwort",
+    "notification_visibility": "Benachrichtigungstypen, die angezeigt werden sollen",
+    "notification_visibility_follows": "Follows",
+    "notification_visibility_likes": "Favoriten",
+    "notification_visibility_mentions": "Erwähnungen",
+    "notification_visibility_repeats": "Wiederholungen",
+    "no_rich_text_description": "Rich-Text Formatierungen von allen Beiträgen entfernen",
     "nsfw_clickthrough": "Aktiviere ausblendbares Overlay für Anhänge, die als NSFW markiert sind",
     "panelRadius": "Panel",
+    "pause_on_unfocused": "Streaming pausieren, wenn das Tab nicht fokussiert ist",
     "presets": "Voreinstellungen",
-    "profile_background": "Profil Hintergrund",
-    "profile_banner": "Profil Banner",
+    "profile_background": "Profilhintergrund",
+    "profile_banner": "Profilbanner",
+    "profile_tab": "Profil",
     "radii_help": "Kantenrundung (in Pixel) der Oberfläche anpassen",
-    "reply_link_preview": "Aktiviere reply-link Vorschau bei Maus-Hover",
+    "replies_in_timeline": "Antworten in der Zeitleiste",
+    "reply_link_preview": "Antwortlink-Vorschau beim Überfahren mit der Maus aktivieren",
+    "reply_visibility_all": "Alle Antworten zeigen",
+    "reply_visibility_following": "Zeige nur Antworten an mich oder an Benutzer, denen ich folge",
+    "reply_visibility_self": "Nur Antworten an mich anzeigen",
+    "saving_err": "Fehler beim Speichern der Einstellungen",
+    "saving_ok": "Einstellungen gespeichert",
+    "security_tab": "Sicherheit",
     "set_new_avatar": "Setze einen neuen Avatar",
     "set_new_profile_background": "Setze einen neuen Hintergrund für dein Profil",
     "set_new_profile_banner": "Setze einen neuen Banner für dein Profil",
@@ -115,15 +157,20 @@
     "streaming": "Aktiviere automatisches Laden (Streaming) von neuen Beiträgen",
     "text": "Text",
     "theme": "Farbschema",
-    "theme_help": "Benutze HTML Farbcodes (#rrggbb) um dein Farbschema anzupassen",
+    "theme_help": "Benutze HTML-Farbcodes (#rrggbb) um dein Farbschema anzupassen",
     "tooltipRadius": "Tooltips/Warnungen",
-    "user_settings": "Benutzereinstellungen"
+    "user_settings": "Benutzereinstellungen",
+    "values": {
+      "false": "nein",
+      "true": "Ja"
+    }
   },
   "timeline": {
     "collapse": "Einklappen",
     "conversation": "Unterhaltung",
     "error_fetching": "Fehler beim Laden",
     "load_older": "Lade ältere Beiträge",
+    "no_retweet_hint": "Der Beitrag ist als nur-für-Follower oder als Direktnachricht markiert und kann nicht wiederholt werden.",
     "repeated": "wiederholte",
     "show_new": "Zeige Neuere",
     "up_to_date": "Aktuell"
@@ -146,5 +193,9 @@
   },
   "user_profile": {
     "timeline_title": "Beiträge"
+  },
+  "who_to_follow": {
+    "more": "Mehr",
+    "who_to_follow": "Wem soll ich folgen"
   }
 }

From ee29bca60a3979715370fcc8c6794db054eda959 Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Tue, 13 Nov 2018 14:14:48 +0100
Subject: [PATCH 49/60] remove deploy stage

---
 .gitlab-ci.yml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 694b77f9..b6c1b909 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -28,7 +28,6 @@ stages:
   - lint
   - build
   - test
-  - deploy
 
 lint:
   stage: lint

From e9b68b8c972e25df852543e9aa6670088bee06bb Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Tue, 13 Nov 2018 14:16:02 +0100
Subject: [PATCH 50/60] remove deploy stage

---
 .gitlab-ci.yml | 32 --------------------------------
 1 file changed, 32 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b6c1b909..6c83a123 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,27 +3,6 @@
 # https://hub.docker.com/r/library/node/tags/
 image: node:7
 
-before_script:
-  # Install ssh-agent if not already installed, it is required by Docker.
-  # (change apt-get to yum if you use a CentOS-based image)
-  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
-
-  # Run ssh-agent (inside the build environment)
-  - eval $(ssh-agent -s)
-
-  # For Docker builds disable host key checking. Be aware that by adding that
-  # you are suspectible to man-in-the-middle attacks.
-  # WARNING: Use this only with the Docker executor, if you use it with shell
-  # you will overwrite your user's SSH config.
-  - mkdir -p ~/.ssh
-  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
-
-# This folder is cached between builds
-# http://docs.gitlab.com/ce/ci/yaml/README.html#cache
-#cache:
-#  paths:
-#  - node_modules/
-
 stages:
   - lint
   - build
@@ -49,14 +28,3 @@ build:
   artifacts:
     paths:
     - dist/
-
-deploy:
-  stage: deploy
-  environment: dev
-  only:
-    - develop
-  script:
-    - yarn
-    - npm run build
-    - ssh-add <(echo "$SSH_PRIVATE_KEY")
-    - scp -r dist/* pleroma@tenshi.heldscal.la:~/pleroma

From ffb9d4faf5c6cebb89947a0a9a085fa07e295d42 Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Tue, 13 Nov 2018 20:20:46 +0100
Subject: [PATCH 51/60] api service url

---
 src/services/api/api.service.js | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index ab746918..3ac7e4b1 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -15,6 +15,7 @@ const STATUS_URL = '/api/statuses/show'
 const MEDIA_UPLOAD_URL = '/api/statusnet/media/upload'
 const CONVERSATION_URL = '/api/statusnet/conversation'
 const MENTIONS_URL = '/api/statuses/mentions.json'
+const DM_TIMELINE_URL = '/api/statuses/dm_timeline.json'
 const FOLLOWERS_URL = '/api/statuses/followers.json'
 const FRIENDS_URL = '/api/statuses/friends.json'
 const FOLLOWING_URL = '/api/friendships/create.json'
@@ -302,6 +303,7 @@ const fetchTimeline = ({timeline, credentials, since = false, until = false, use
     public: PUBLIC_TIMELINE_URL,
     friends: FRIENDS_TIMELINE_URL,
     mentions: MENTIONS_URL,
+    dms: DM_TIMELINE_URL,
     notifications: QVITTER_USER_NOTIFICATIONS_URL,
     'publicAndExternal': PUBLIC_AND_EXTERNAL_TIMELINE_URL,
     user: QVITTER_USER_TIMELINE_URL,

From b37a0f4f23fcb81353a98d45f55cc760b84c5d0f Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Tue, 13 Nov 2018 20:34:56 +0100
Subject: [PATCH 52/60] Add direct message tab.

---
 src/boot/after_store.js                    |  2 ++
 src/components/dm_timeline/dm_timeline.js  | 14 ++++++++++++++
 src/components/dm_timeline/dm_timeline.vue |  5 +++++
 src/components/nav_panel/nav_panel.js      |  3 +++
 src/components/nav_panel/nav_panel.vue     |  5 +++++
 src/i18n/en.json                           |  1 +
 src/modules/statuses.js                    |  3 ++-
 7 files changed, 32 insertions(+), 1 deletion(-)
 create mode 100644 src/components/dm_timeline/dm_timeline.js
 create mode 100644 src/components/dm_timeline/dm_timeline.vue

diff --git a/src/boot/after_store.js b/src/boot/after_store.js
index 6b8aef7f..90f25302 100644
--- a/src/boot/after_store.js
+++ b/src/boot/after_store.js
@@ -8,6 +8,7 @@ import FriendsTimeline from '../components/friends_timeline/friends_timeline.vue
 import TagTimeline from '../components/tag_timeline/tag_timeline.vue'
 import ConversationPage from '../components/conversation-page/conversation-page.vue'
 import Mentions from '../components/mentions/mentions.vue'
+import DMs from '../components/dm_timeline/dm_timeline.vue'
 import UserProfile from '../components/user_profile/user_profile.vue'
 import Settings from '../components/settings/settings.vue'
 import Registration from '../components/registration/registration.vue'
@@ -88,6 +89,7 @@ const afterStoreSetup = ({store, i18n}) => {
             { name: 'conversation', path: '/notice/:id', component: ConversationPage, meta: { dontScroll: true } },
             { name: 'user-profile', path: '/users/:id', component: UserProfile },
             { name: 'mentions', path: '/:username/mentions', component: Mentions },
+            { name: 'dms', path: '/:username/dms', component: DMs },
             { name: 'settings', path: '/settings', component: Settings },
             { name: 'registration', path: '/registration', component: Registration },
             { name: 'registration', path: '/registration/:token', component: Registration },
diff --git a/src/components/dm_timeline/dm_timeline.js b/src/components/dm_timeline/dm_timeline.js
new file mode 100644
index 00000000..8b5393a9
--- /dev/null
+++ b/src/components/dm_timeline/dm_timeline.js
@@ -0,0 +1,14 @@
+import Timeline from '../timeline/timeline.vue'
+
+const DMs = {
+  computed: {
+    timeline () {
+      return this.$store.state.statuses.timelines.dms
+    }
+  },
+  components: {
+    Timeline
+  }
+}
+
+export default DMs
diff --git a/src/components/dm_timeline/dm_timeline.vue b/src/components/dm_timeline/dm_timeline.vue
new file mode 100644
index 00000000..f03da4d3
--- /dev/null
+++ b/src/components/dm_timeline/dm_timeline.vue
@@ -0,0 +1,5 @@
+<template>
+  <Timeline :title="$t('nav.dms')" v-bind:timeline="timeline" v-bind:timeline-name="'dms'"/>
+</template>
+
+<script src="./dm_timeline.js"></script>
diff --git a/src/components/nav_panel/nav_panel.js b/src/components/nav_panel/nav_panel.js
index ea5d7ea4..caab8102 100644
--- a/src/components/nav_panel/nav_panel.js
+++ b/src/components/nav_panel/nav_panel.js
@@ -5,6 +5,9 @@ const NavPanel = {
     },
     chat () {
       return this.$store.state.chat.channel
+    },
+    showDMs () {
+      return this.$store.state.instance.scopeOptionsEnabled
     }
   }
 }
diff --git a/src/components/nav_panel/nav_panel.vue b/src/components/nav_panel/nav_panel.vue
index 0b188f9a..950825b7 100644
--- a/src/components/nav_panel/nav_panel.vue
+++ b/src/components/nav_panel/nav_panel.vue
@@ -12,6 +12,11 @@
             {{ $t("nav.mentions") }}
           </router-link>
         </li>
+        <li v-if='currentUser && showDMs'>
+          <router-link :to="{ name: 'dms', params: { username: currentUser.screen_name } }">
+            {{ $t("nav.dms") }}
+          </router-link>
+        </li>
         <li v-if='currentUser && currentUser.locked'>
           <router-link to='/friend-requests'>
             {{ $t("nav.friend_requests") }}
diff --git a/src/i18n/en.json b/src/i18n/en.json
index 036231bf..cadbaf95 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -32,6 +32,7 @@
     "chat": "Local Chat",
     "friend_requests": "Follow Requests",
     "mentions": "Mentions",
+    "dms": "Direct Messages",
     "public_tl": "Public Timeline",
     "timeline": "Timeline",
     "twkn": "The Whole Known Network"
diff --git a/src/modules/statuses.js b/src/modules/statuses.js
index f980f53d..89e00119 100644
--- a/src/modules/statuses.js
+++ b/src/modules/statuses.js
@@ -41,7 +41,8 @@ export const defaultState = {
     own: emptyTl(),
     publicAndExternal: emptyTl(),
     friends: emptyTl(),
-    tag: emptyTl()
+    tag: emptyTl(),
+    dms: emptyTl()
   }
 }
 

From c7d469249ec9ce8cc28317a621f2b53360103cf9 Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Tue, 13 Nov 2018 22:30:00 +0100
Subject: [PATCH 53/60] Always show dm panel.

---
 src/components/nav_panel/nav_panel.js  | 3 ---
 src/components/nav_panel/nav_panel.vue | 2 +-
 2 files changed, 1 insertion(+), 4 deletions(-)

diff --git a/src/components/nav_panel/nav_panel.js b/src/components/nav_panel/nav_panel.js
index caab8102..ea5d7ea4 100644
--- a/src/components/nav_panel/nav_panel.js
+++ b/src/components/nav_panel/nav_panel.js
@@ -5,9 +5,6 @@ const NavPanel = {
     },
     chat () {
       return this.$store.state.chat.channel
-    },
-    showDMs () {
-      return this.$store.state.instance.scopeOptionsEnabled
     }
   }
 }
diff --git a/src/components/nav_panel/nav_panel.vue b/src/components/nav_panel/nav_panel.vue
index 950825b7..93deaf97 100644
--- a/src/components/nav_panel/nav_panel.vue
+++ b/src/components/nav_panel/nav_panel.vue
@@ -12,7 +12,7 @@
             {{ $t("nav.mentions") }}
           </router-link>
         </li>
-        <li v-if='currentUser && showDMs'>
+        <li v-if='currentUser'>
           <router-link :to="{ name: 'dms', params: { username: currentUser.screen_name } }">
             {{ $t("nav.dms") }}
           </router-link>

From d0a4152f3c7e95a6df85ea57a9c93ca7d000cadb Mon Sep 17 00:00:00 2001
From: William Pitcock <nenolod@dereferenced.org>
Date: Wed, 14 Nov 2018 15:36:55 +0000
Subject: [PATCH 54/60] update french translation

---
 src/i18n/fr.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/i18n/fr.json b/src/i18n/fr.json
index 2140ef7f..f7e43525 100644
--- a/src/i18n/fr.json
+++ b/src/i18n/fr.json
@@ -21,6 +21,7 @@
   },
   "login": {
     "login": "Connexion",
+    "description": "Connexion avec OAuth",
     "logout": "Déconnexion",
     "password": "Mot de passe",
     "placeholder": "p.e. lain",
@@ -30,6 +31,7 @@
   "nav": {
     "chat": "Chat local",
     "friend_requests": "Demandes d'ami",
+    "dms": "Messages adressés",
     "mentions": "Notifications",
     "public_tl": "Statuts locaux",
     "timeline": "Journal",
@@ -111,6 +113,8 @@
     "general": "Général",
     "hide_attachments_in_convo": "Masquer les pièces jointes dans les conversations",
     "hide_attachments_in_tl": "Masquer les pièces jointes dans le journal",
+    "hide_post_stats": "Masquer les statistiques de publication (le nombre de favoris)",
+    "hide_user_stats": "Masquer les statistiques de profil (le nombre d'amis)",
     "import_followers_from_a_csv_file": "Importer des abonnements depuis un fichier csv",
     "import_theme": "Charger le thème",
     "inputRadius": "Champs de texte",

From 1ad642c5986feae214f567fdc14a3811c32ae0f0 Mon Sep 17 00:00:00 2001
From: William Pitcock <nenolod@dereferenced.org>
Date: Wed, 14 Nov 2018 15:43:27 +0000
Subject: [PATCH 55/60] incorporate most translation changes from MR 368

---
 src/i18n/fr.json | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/i18n/fr.json b/src/i18n/fr.json
index f7e43525..b5ad5e49 100644
--- a/src/i18n/fr.json
+++ b/src/i18n/fr.json
@@ -88,7 +88,7 @@
     "cRed": "Rouge (Annuler)",
     "change_password": "Changez votre mot de passe",
     "change_password_error": "Il y a eu un problème pour changer votre mot de passe.",
-    "changed_password": "Mot de passe changé avec succès!",
+    "changed_password": "Mot de passe modifié avec succès !",
     "collapse_subject": "Réduire les messages avec des sujets",
     "confirm_new_password": "Confirmation du nouveau mot de passe",
     "current_avatar": "Avatar actuel",
@@ -102,12 +102,12 @@
     "delete_account_instructions": "Indiquez votre mot de passe ci-dessous pour confirmer la suppression de votre compte.",
     "export_theme": "Enregistrer le thème",
     "filtering": "Filtre",
-    "filtering_explanation": "Tous les statuts contenant ces mots seront masqués. Un mot par ligne.",
+    "filtering_explanation": "Tous les statuts contenant ces mots seront masqués. Un mot par ligne",
     "follow_export": "Exporter les abonnements",
     "follow_export_button": "Exporter les abonnements en csv",
     "follow_export_processing": "Exportation en cours…",
     "follow_import": "Importer des abonnements",
-    "follow_import_error": "Erreur lors de l'importation des abonnements.",
+    "follow_import_error": "Erreur lors de l'importation des abonnements",
     "follows_imported": "Abonnements importés ! Le traitement peut prendre un moment.",
     "foreground": "Premier plan",
     "general": "Général",
@@ -159,8 +159,8 @@
     "streaming": "Charger automatiquement les nouveaux statuts lorsque vous êtes au haut de la page",
     "text": "Texte",
     "theme": "Thème",
-    "theme_help": "Spécifiez des codes couleur hexadécimaux (#aabbcc) pour personnaliser les couleurs du thème",
-    "tooltipRadius": "Info-bulles/alertes ",
+    "theme_help": "Spécifiez des codes couleur hexadécimaux (#rrvvbb) pour personnaliser les couleurs du thème.",
+    "tooltipRadius": "Info-bulles/alertes",
     "user_settings": "Paramètres utilisateur",
     "values": {
       "false": "non",
@@ -180,7 +180,7 @@
   "user_card": {
     "approve": "Accepter",
     "block": "Bloquer",
-    "blocked": "Bloqué",
+    "blocked": "Bloqué !",
     "deny": "Rejeter",
     "follow": "Suivre",
     "followees": "Suivis",

From c34eebff6c1bb0d3f500b51ee64906f82cdc6c6d Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Wed, 14 Nov 2018 20:29:45 +0100
Subject: [PATCH 56/60] Add actual user search.

---
 src/boot/after_store.js                    |  4 ++-
 src/components/user_finder/user_finder.js  | 17 +---------
 src/components/user_finder/user_finder.vue |  4 ---
 src/components/user_search/user_search.js  | 33 ++++++++++++++++++++
 src/components/user_search/user_search.vue | 12 ++++++++
 src/i18n/en.json                           |  3 +-
 src/services/new_api/user_search.js        | 16 ++++++++++
 src/services/new_api/utils.js              | 36 ++++++++++++++++++++++
 8 files changed, 103 insertions(+), 22 deletions(-)
 create mode 100644 src/components/user_search/user_search.js
 create mode 100644 src/components/user_search/user_search.vue
 create mode 100644 src/services/new_api/user_search.js
 create mode 100644 src/services/new_api/utils.js

diff --git a/src/boot/after_store.js b/src/boot/after_store.js
index 90f25302..90c558f6 100644
--- a/src/boot/after_store.js
+++ b/src/boot/after_store.js
@@ -15,6 +15,7 @@ import Registration from '../components/registration/registration.vue'
 import UserSettings from '../components/user_settings/user_settings.vue'
 import FollowRequests from '../components/follow_requests/follow_requests.vue'
 import OAuthCallback from '../components/oauth_callback/oauth_callback.vue'
+import UserSearch from '../components/user_search/user_search.vue'
 
 const afterStoreSetup = ({store, i18n}) => {
   window.fetch('/api/statusnet/config.json')
@@ -95,7 +96,8 @@ const afterStoreSetup = ({store, i18n}) => {
             { name: 'registration', path: '/registration/:token', component: Registration },
             { name: 'friend-requests', path: '/friend-requests', component: FollowRequests },
             { name: 'user-settings', path: '/user-settings', component: UserSettings },
-            { name: 'oauth-callback', path: '/oauth-callback', component: OAuthCallback, props: (route) => ({ code: route.query.code }) }
+            { name: 'oauth-callback', path: '/oauth-callback', component: OAuthCallback, props: (route) => ({ code: route.query.code }) },
+            { name: 'user-search', path: '/user-search', component: UserSearch, props: (route) => ({ query: route.query.query }) }
           ]
 
           const router = new VueRouter({
diff --git a/src/components/user_finder/user_finder.js b/src/components/user_finder/user_finder.js
index a743b5f6..74f79d1b 100644
--- a/src/components/user_finder/user_finder.js
+++ b/src/components/user_finder/user_finder.js
@@ -7,25 +7,10 @@ const UserFinder = {
   }),
   methods: {
     findUser (username) {
-      username = username[0] === '@' ? username.slice(1) : username
-      this.loading = true
-      this.$store.state.api.backendInteractor.externalProfile(username)
-        .then((user) => {
-          this.loading = false
-          this.hidden = true
-          if (!user.error) {
-            this.$store.commit('addNewUsers', [user])
-            this.$router.push({name: 'user-profile', params: {id: user.id}})
-          } else {
-            this.error = true
-          }
-        })
+      this.$router.push({ name: 'user-search', query: { query: username } })
     },
     toggleHidden () {
       this.hidden = !this.hidden
-    },
-    dismissError () {
-      this.error = false
     }
   }
 }
diff --git a/src/components/user_finder/user_finder.vue b/src/components/user_finder/user_finder.vue
index 69bd1d21..f2556569 100644
--- a/src/components/user_finder/user_finder.vue
+++ b/src/components/user_finder/user_finder.vue
@@ -1,9 +1,5 @@
 <template>
   <span class="user-finder-container">
-    <span class="alert error" v-if="error">
-      <i class="icon-cancel user-finder-icon" @click="dismissError"/>
-      {{$t('finder.error_fetching_user')}}
-    </span>
     <i class="icon-spin4 user-finder-icon animate-spin-slow" v-if="loading" />
     <a href="#" v-if="hidden"><i class="icon-user-plus user-finder-icon" @click.prevent.stop="toggleHidden"/></a>
     <span v-else>
diff --git a/src/components/user_search/user_search.js b/src/components/user_search/user_search.js
new file mode 100644
index 00000000..1e488f0c
--- /dev/null
+++ b/src/components/user_search/user_search.js
@@ -0,0 +1,33 @@
+import UserCard from '../user_card/user_card.vue'
+import userSearchApi from '../../services/new_api/user_search.js'
+const userSearch = {
+  components: {
+    UserCard
+  },
+  props: [
+    'query'
+  ],
+  data () {
+    return {
+      users: []
+    }
+  },
+  mounted () {
+    this.search(this.query)
+  },
+  watch: {
+    query (newV) {
+      this.search(newV)
+    }
+  },
+  methods: {
+    search (query) {
+      userSearchApi.search({query, store: this.$store})
+        .then((res) => {
+          this.users = res
+        })
+    }
+  }
+}
+
+export default userSearch
diff --git a/src/components/user_search/user_search.vue b/src/components/user_search/user_search.vue
new file mode 100644
index 00000000..1624ebef
--- /dev/null
+++ b/src/components/user_search/user_search.vue
@@ -0,0 +1,12 @@
+<template>
+  <div class="user-seach panel panel-default">
+    <div class="panel-heading">
+      {{$t('nav.user_search')}}
+    </div>
+    <div class="panel-body">
+      <user-card v-for="user in users" :key="user.id" :user="user" :showFollows="true"></user-card>
+    </div>
+  </div>
+</template>
+
+<script src="./user_search.js"></script>
diff --git a/src/i18n/en.json b/src/i18n/en.json
index cadbaf95..4201ba22 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -35,7 +35,8 @@
     "dms": "Direct Messages",
     "public_tl": "Public Timeline",
     "timeline": "Timeline",
-    "twkn": "The Whole Known Network"
+    "twkn": "The Whole Known Network",
+    "user_search": "User Search"
   },
   "notifications": {
     "broken_favorite": "Unknown status, searching for it...",
diff --git a/src/services/new_api/user_search.js b/src/services/new_api/user_search.js
new file mode 100644
index 00000000..ce7da88e
--- /dev/null
+++ b/src/services/new_api/user_search.js
@@ -0,0 +1,16 @@
+import utils from './utils.js'
+
+const search = ({query, store}) => {
+  return utils.request({
+    store,
+    url: '/api/pleroma/search_user',
+    params: {
+      query
+    }
+  }).then((data) => data.json())
+}
+const UserSearch = {
+  search
+}
+
+export default UserSearch
diff --git a/src/services/new_api/utils.js b/src/services/new_api/utils.js
new file mode 100644
index 00000000..078f392f
--- /dev/null
+++ b/src/services/new_api/utils.js
@@ -0,0 +1,36 @@
+const queryParams = (params) => {
+  return Object.keys(params)
+    .map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k]))
+    .join('&')
+}
+
+const headers = (store) => {
+  const accessToken = store.state.oauth.token
+  if (accessToken) {
+    return {'Authorization': `Bearer ${accessToken}`}
+  } else {
+    return {}
+  }
+}
+
+const request = ({method = 'GET', url, params, store}) => {
+  const instance = store.state.instance.server
+  let fullUrl = `${instance}${url}`
+
+  if (method === 'GET' && params) {
+    fullUrl = fullUrl + `?${queryParams(params)}`
+  }
+
+  return window.fetch(fullUrl, {
+    method,
+    headers: headers(store),
+    credentials: 'same-origin'
+  })
+}
+
+const utils = {
+  queryParams,
+  request
+}
+
+export default utils

From 7044bf2bd77a55e2d98a4275c14a74b5e4b30586 Mon Sep 17 00:00:00 2001
From: Hakaba Hitoyo <hakabahitoyo@example.com>
Date: Thu, 15 Nov 2018 11:39:08 +0900
Subject: [PATCH 57/60] update-japanese-translation

---
 src/i18n/ja.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/i18n/ja.json b/src/i18n/ja.json
index 5a31c58f..4da7ea30 100644
--- a/src/i18n/ja.json
+++ b/src/i18n/ja.json
@@ -21,6 +21,7 @@
   },
   "login": {
     "login": "ログイン",
+    "description": "OAuthでログイン",
     "logout": "ログアウト",
     "password": "パスワード",
     "placeholder": "れい: lain",
@@ -31,6 +32,7 @@
     "chat": "ローカルチャット",
     "friend_requests": "フォローリクエスト",
     "mentions": "メンション",
+    "dms": "ダイレクトメッセージ",
     "public_tl": "パブリックタイムライン",
     "timeline": "タイムライン",
     "twkn": "つながっているすべてのネットワーク"
@@ -111,6 +113,8 @@
     "general": "ぜんぱん",
     "hide_attachments_in_convo": "スレッドのファイルをかくす",
     "hide_attachments_in_tl": "タイムラインのファイルをかくす",
+    "hide_post_stats": "とうこうのとうけいをかくす (れい: おきにいりのかず)",
+    "hide_user_stats": "ユーザーのとうけいをかくす (れい: フォロワーのかず)",
     "import_followers_from_a_csv_file": "CSVファイルからフォローをインポートする",
     "import_theme": "ロード",
     "inputRadius": "インプットフィールド",

From 3ed05693de450aec3502368eb2c59c5d400c48e7 Mon Sep 17 00:00:00 2001
From: eal <eal@waifu.club>
Date: Sun, 25 Nov 2018 18:11:57 +0200
Subject: [PATCH 58/60] DM timeline: stream new statuses

---
 src/modules/statuses.js | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/modules/statuses.js b/src/modules/statuses.js
index 89e00119..2c3d2550 100644
--- a/src/modules/statuses.js
+++ b/src/modules/statuses.js
@@ -172,6 +172,14 @@ const addNewStatuses = (state, { statuses, showImmediately = false, timeline, us
           sortTimeline(mentions)
         }
       }
+      if (status.visibility === 'direct') {
+        const dms = state.timelines.dms
+
+        mergeOrAdd(dms.statuses, dms.statusesObject, status)
+        dms.newStatusCount += 1
+
+        sortTimeline(dms)
+      }
     }
 
     // Decide if we should treat the status as new for this timeline.

From 2dbc5f757d4e84e210a45ea99a64b79df6778b77 Mon Sep 17 00:00:00 2001
From: Henry Jameson <me@hjkos.com>
Date: Mon, 26 Nov 2018 04:42:25 +0300
Subject: [PATCH 59/60] whoops

---
 config/index.js | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/config/index.js b/config/index.js
index 395d1306..7b0ef26c 100644
--- a/config/index.js
+++ b/config/index.js
@@ -23,17 +23,17 @@ module.exports = {
     assetsPublicPath: '/',
     proxyTable: {
       '/api': {
-        target: 'https://shigusegubu.club/',
+        target: 'http://localhost:4000/',
         changeOrigin: true,
         cookieDomainRewrite: 'localhost'
       },
       '/nodeinfo': {
-        target: 'https://shigusegubu.club/',
+        target: 'http://localhost:4000/',
         changeOrigin: true,
         cookieDomainRewrite: 'localhost'
       },
       '/socket': {
-        target: 'https://shigusegubu.club/',
+        target: 'http://localhost:4000/',
         changeOrigin: true,
         cookieDomainRewrite: 'localhost',
         ws: true

From b948234aec2ec1d140a46303c09d24424262bd66 Mon Sep 17 00:00:00 2001
From: Henry Jameson <me@hjkos.com>
Date: Mon, 26 Nov 2018 04:44:54 +0300
Subject: [PATCH 60/60] whoops

---
 src/components/post_status_form/post_status_form.js | 2 --
 src/main.js                                         | 2 --
 2 files changed, 4 deletions(-)

diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js
index e49c3ccc..fa86ee59 100644
--- a/src/components/post_status_form/post_status_form.js
+++ b/src/components/post_status_form/post_status_form.js
@@ -46,12 +46,10 @@ const PostStatusForm = {
       statusText = buildMentionsString({ user: this.repliedUser, attentions: this.attentions }, currentUser)
     }
 
-    console.log(this.copyMessageScope)
     const scope = (this.copyMessageScope && this.$store.state.config.copyScope || this.copyMessageScope === 'direct')
           ? this.copyMessageScope
           : this.$store.state.users.currentUser.default_scope
 
-    console.log(this)
     return {
       dropFiles: [],
       submitDisabled: false,
diff --git a/src/main.js b/src/main.js
index 5f459d46..9f094ada 100644
--- a/src/main.js
+++ b/src/main.js
@@ -43,7 +43,6 @@ const i18n = new VueI18n({
   messages
 })
 
-=======
 const persistedStateOptions = {
   paths: [
     'config',
@@ -67,7 +66,6 @@ createPersistedState(persistedStateOptions).then((persistedState) => {
     plugins: [persistedState],
     strict: false // Socket modifies itself, let's ignore this for now.
     // strict: process.env.NODE_ENV !== 'production'
->>>>>>> upstream/develop
   })
 
   afterStoreSetup({store, i18n})