Page MenuHomePhabricator

No OneTemporary

This file is larger than 256 KB, so syntax highlighting was skipped.
diff --git a/.buckconfig b/.buckconfig
new file mode 100644
index 0000000..934256c
--- /dev/null
+++ b/.buckconfig
@@ -0,0 +1,6 @@
+
+[android]
+ target = Google Inc.:Google APIs:23
+
+[maven_repositories]
+ central = https://repo1.maven.org/maven2
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..c308ed0
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,13 @@
+# http://editorconfig.org
+root = true
+
+[*]
+indent_style = space
+indent_size = 4
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 0000000..40c6dcd
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,4 @@
+module.exports = {
+ root: true,
+ extends: '@react-native-community',
+};
diff --git a/.flowconfig b/.flowconfig
new file mode 100644
index 0000000..4afc766
--- /dev/null
+++ b/.flowconfig
@@ -0,0 +1,75 @@
+[ignore]
+; We fork some components by platform
+.*/*[.]android.js
+
+; Ignore "BUCK" generated dirs
+<PROJECT_ROOT>/\.buckd/
+
+; Ignore polyfills
+node_modules/react-native/Libraries/polyfills/.*
+
+; These should not be required directly
+; require from fbjs/lib instead: require('fbjs/lib/warning')
+node_modules/warning/.*
+
+; Flow doesn't support platforms
+.*/Libraries/Utilities/LoadingView.js
+
+[untyped]
+.*/node_modules/@react-native-community/cli/.*/.*
+
+[include]
+
+[libs]
+node_modules/react-native/Libraries/react-native/react-native-interface.js
+node_modules/react-native/flow/
+
+[options]
+emoji=true
+
+esproposal.optional_chaining=enable
+esproposal.nullish_coalescing=enable
+
+module.file_ext=.js
+module.file_ext=.json
+module.file_ext=.ios.js
+
+munge_underscores=true
+
+module.name_mapper='^react-native$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/react-native/react-native-implementation'
+module.name_mapper='^react-native/\(.*\)$' -> '<PROJECT_ROOT>/node_modules/react-native/\1'
+module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/Image/RelativeImageStub'
+
+suppress_type=$FlowIssue
+suppress_type=$FlowFixMe
+suppress_type=$FlowFixMeProps
+suppress_type=$FlowFixMeState
+
+suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)
+suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+
+suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
+
+[lints]
+sketchy-null-number=warn
+sketchy-null-mixed=warn
+sketchy-number=warn
+untyped-type-import=warn
+nonstrict-import=warn
+deprecated-type=warn
+unsafe-getters-setters=warn
+inexact-spread=warn
+unnecessary-invariant=warn
+signature-verification-failure=warn
+deprecated-utility=error
+
+[strict]
+deprecated-type
+nonstrict-import
+sketchy-null
+unclear-type
+unsafe-getters-setters
+untyped-import
+untyped-type-import
+
+[version]
+^0.105.0
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..d42ff18
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+*.pbxproj -text
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ad572e6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,59 @@
+# OSX
+#
+.DS_Store
+
+# Xcode
+#
+build/
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+xcuserdata
+*.xccheckout
+*.moved-aside
+DerivedData
+*.hmap
+*.ipa
+*.xcuserstate
+
+# Android/IntelliJ
+#
+build/
+.idea
+.gradle
+local.properties
+*.iml
+
+# node.js
+#
+node_modules/
+npm-debug.log
+yarn-error.log
+
+# BUCK
+buck-out/
+\.buckd/
+*.keystore
+!debug.keystore
+
+# fastlane
+#
+# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
+# screenshots whenever they are needed.
+# For more information about the recommended setup visit:
+# https://docs.fastlane.tools/best-practices/source-control/
+
+*/fastlane/report.xml
+*/fastlane/Preview.html
+*/fastlane/screenshots
+
+# Bundle artifact
+*.jsbundle
+
+# CocoaPods
+/ios/Pods/
diff --git a/.prettierrc.js b/.prettierrc.js
new file mode 100644
index 0000000..5c4de1a
--- /dev/null
+++ b/.prettierrc.js
@@ -0,0 +1,6 @@
+module.exports = {
+ bracketSpacing: false,
+ jsxBracketSameLine: true,
+ singleQuote: true,
+ trailingComma: 'all',
+};
diff --git a/.watchmanconfig b/.watchmanconfig
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/.watchmanconfig
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/__tests__/App-test.js b/__tests__/App-test.js
new file mode 100644
index 0000000..1784766
--- /dev/null
+++ b/__tests__/App-test.js
@@ -0,0 +1,14 @@
+/**
+ * @format
+ */
+
+import 'react-native';
+import React from 'react';
+import App from '../App';
+
+// Note: test renderer must be required after react-native.
+import renderer from 'react-test-renderer';
+
+it('renders correctly', () => {
+ renderer.create(<App />);
+});
diff --git a/android/.project b/android/.project
new file mode 100644
index 0000000..8585899
--- /dev/null
+++ b/android/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>Sylk</name>
+ <comment>Project android created by Buildship.</comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.buildship.core.gradleprojectbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.buildship.core.gradleprojectnature</nature>
+ </natures>
+</projectDescription>
diff --git a/android/.settings/org.eclipse.buildship.core.prefs b/android/.settings/org.eclipse.buildship.core.prefs
new file mode 100644
index 0000000..e889521
--- /dev/null
+++ b/android/.settings/org.eclipse.buildship.core.prefs
@@ -0,0 +1,2 @@
+connection.project.dir=
+eclipse.preferences.version=1
diff --git a/android/app/.classpath b/android/app/.classpath
new file mode 100644
index 0000000..eb19361
--- /dev/null
+++ b/android/app/.classpath
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/>
+ <classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
+ <classpathentry kind="output" path="bin/default"/>
+</classpath>
diff --git a/android/app/.project b/android/app/.project
new file mode 100644
index 0000000..ac485d7
--- /dev/null
+++ b/android/app/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>app</name>
+ <comment>Project app created by Buildship.</comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.buildship.core.gradleprojectbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.buildship.core.gradleprojectnature</nature>
+ </natures>
+</projectDescription>
diff --git a/android/app/.settings/org.eclipse.buildship.core.prefs b/android/app/.settings/org.eclipse.buildship.core.prefs
new file mode 100644
index 0000000..b1886ad
--- /dev/null
+++ b/android/app/.settings/org.eclipse.buildship.core.prefs
@@ -0,0 +1,2 @@
+connection.project.dir=..
+eclipse.preferences.version=1
diff --git a/android/app/BUCK b/android/app/BUCK
new file mode 100644
index 0000000..e0725bc
--- /dev/null
+++ b/android/app/BUCK
@@ -0,0 +1,55 @@
+# To learn about Buck see [Docs](https://buckbuild.com/).
+# To run your application with Buck:
+# - install Buck
+# - `npm start` - to start the packager
+# - `cd android`
+# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"`
+# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck
+# - `buck install -r android/app` - compile, install and run application
+#
+
+load(":build_defs.bzl", "create_aar_targets", "create_jar_targets")
+
+lib_deps = []
+
+create_aar_targets(glob(["libs/*.aar"]))
+
+create_jar_targets(glob(["libs/*.jar"]))
+
+android_library(
+ name = "all-libs",
+ exported_deps = lib_deps,
+)
+
+android_library(
+ name = "app-code",
+ srcs = glob([
+ "src/main/java/**/*.java",
+ ]),
+ deps = [
+ ":all-libs",
+ ":build_config",
+ ":res",
+ ],
+)
+
+android_build_config(
+ name = "build_config",
+ package = "com.sylk",
+)
+
+android_resource(
+ name = "res",
+ package = "com.sylk",
+ res = "src/main/res",
+)
+
+android_binary(
+ name = "app",
+ keystore = "//android/keystores:debug",
+ manifest = "src/main/AndroidManifest.xml",
+ package_type = "debug",
+ deps = [
+ ":app-code",
+ ],
+)
diff --git a/android/app/build.gradle b/android/app/build.gradle
new file mode 100644
index 0000000..93bf1e3
--- /dev/null
+++ b/android/app/build.gradle
@@ -0,0 +1,201 @@
+apply plugin: "com.android.application"
+
+import com.android.build.OutputFile
+
+/**
+ * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
+ * and bundleReleaseJsAndAssets).
+ * These basically call `react-native bundle` with the correct arguments during the Android build
+ * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
+ * bundle directly from the development server. Below you can see all the possible configurations
+ * and their defaults. If you decide to add a configuration block, make sure to add it before the
+ * `apply from: "../../node_modules/react-native/react.gradle"` line.
+ *
+ * project.ext.react = [
+ * // the name of the generated asset file containing your JS bundle
+ * bundleAssetName: "index.android.bundle",
+ *
+ * // the entry file for bundle generation
+ * entryFile: "index.android.js",
+ *
+ * // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format
+ * bundleCommand: "ram-bundle",
+ *
+ * // whether to bundle JS and assets in debug mode
+ * bundleInDebug: false,
+ *
+ * // whether to bundle JS and assets in release mode
+ * bundleInRelease: true,
+ *
+ * // whether to bundle JS and assets in another build variant (if configured).
+ * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
+ * // The configuration property can be in the following formats
+ * // 'bundleIn${productFlavor}${buildType}'
+ * // 'bundleIn${buildType}'
+ * // bundleInFreeDebug: true,
+ * // bundleInPaidRelease: true,
+ * // bundleInBeta: true,
+ *
+ * // whether to disable dev mode in custom build variants (by default only disabled in release)
+ * // for example: to disable dev mode in the staging build type (if configured)
+ * devDisabledInStaging: true,
+ * // The configuration property can be in the following formats
+ * // 'devDisabledIn${productFlavor}${buildType}'
+ * // 'devDisabledIn${buildType}'
+ *
+ * // the root of your project, i.e. where "package.json" lives
+ * root: "../../",
+ *
+ * // where to put the JS bundle asset in debug mode
+ * jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
+ *
+ * // where to put the JS bundle asset in release mode
+ * jsBundleDirRelease: "$buildDir/intermediates/assets/release",
+ *
+ * // where to put drawable resources / React Native assets, e.g. the ones you use via
+ * // require('./image.png')), in debug mode
+ * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
+ *
+ * // where to put drawable resources / React Native assets, e.g. the ones you use via
+ * // require('./image.png')), in release mode
+ * resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
+ *
+ * // by default the gradle tasks are skipped if none of the JS files or assets change; this means
+ * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
+ * // date; if you have any other folders that you want to ignore for performance reasons (gradle
+ * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
+ * // for example, you might want to remove it from here.
+ * inputExcludes: ["android/**", "ios/**"],
+ *
+ * // override which node gets called and with what additional arguments
+ * nodeExecutableAndArgs: ["node"],
+ *
+ * // supply additional arguments to the packager
+ * extraPackagerArgs: []
+ * ]
+ */
+
+project.ext.react = [
+ entryFile: "index.js",
+ enableHermes: false, // clean and rebuild if changing
+]
+
+apply from: "../../node_modules/react-native/react.gradle"
+
+/**
+ * Set this to true to create two separate APKs instead of one:
+ * - An APK that only works on ARM devices
+ * - An APK that only works on x86 devices
+ * The advantage is the size of the APK is reduced by about 4MB.
+ * Upload all the APKs to the Play Store and people will download
+ * the correct one based on the CPU architecture of their device.
+ */
+def enableSeparateBuildPerCPUArchitecture = false
+
+/**
+ * Run Proguard to shrink the Java bytecode in release builds.
+ */
+def enableProguardInReleaseBuilds = false
+
+/**
+ * The preferred build flavor of JavaScriptCore.
+ *
+ * For example, to use the international variant, you can use:
+ * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
+ *
+ * The international variant includes ICU i18n library and necessary data
+ * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
+ * give correct results when using with locales other than en-US. Note that
+ * this variant is about 6MiB larger per architecture than default.
+ */
+def jscFlavor = 'org.webkit:android-jsc:+'
+
+/**
+ * Whether to enable the Hermes VM.
+ *
+ * This should be set on project.ext.react and mirrored here. If it is not set
+ * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
+ * and the benefits of using Hermes will therefore be sharply reduced.
+ */
+def enableHermes = project.ext.react.get("enableHermes", false);
+
+android {
+ compileSdkVersion rootProject.ext.compileSdkVersion
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ defaultConfig {
+ applicationId "com.agprojects.sylk"
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode 1
+ versionName "1.0"
+ }
+ splits {
+ abi {
+ reset()
+ enable enableSeparateBuildPerCPUArchitecture
+ universalApk false // If true, also generate a universal APK
+ include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
+ }
+ }
+ signingConfigs {
+ debug {
+ storeFile file('debug.keystore')
+ storePassword 'android'
+ keyAlias 'androiddebugkey'
+ keyPassword 'android'
+ }
+ }
+ buildTypes {
+ debug {
+ signingConfig signingConfigs.debug
+ }
+ release {
+ // Caution! In production, you need to generate your own keystore file.
+ // see https://facebook.github.io/react-native/docs/signed-apk-android.
+ signingConfig signingConfigs.debug
+ minifyEnabled enableProguardInReleaseBuilds
+ proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
+ }
+ }
+ // applicationVariants are e.g. debug, release
+ applicationVariants.all { variant ->
+ variant.outputs.each { output ->
+ // For each separate APK per architecture, set a unique version code as described here:
+ // https://developer.android.com/studio/build/configure-apk-splits.html
+ def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
+ def abi = output.getFilter(OutputFile.ABI)
+ if (abi != null) { // null for the universal-debug, universal-release variants
+ output.versionCodeOverride =
+ versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
+ }
+
+ }
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: "libs", include: ["*.jar"])
+ implementation "com.facebook.react:react-native:+" // From node_modules
+
+ if (enableHermes) {
+ def hermesPath = "../../node_modules/hermes-engine/android/";
+ debugImplementation files(hermesPath + "hermes-debug.aar")
+ releaseImplementation files(hermesPath + "hermes-release.aar")
+ } else {
+ implementation jscFlavor
+ }
+}
+
+// Run this once to be able to run the application with BUCK
+// puts all compile dependencies into folder libs for BUCK to use
+task copyDownloadableDepsToLibs(type: Copy) {
+ from configurations.compile
+ into 'libs'
+}
+
+apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
diff --git a/android/app/build_defs.bzl b/android/app/build_defs.bzl
new file mode 100644
index 0000000..fff270f
--- /dev/null
+++ b/android/app/build_defs.bzl
@@ -0,0 +1,19 @@
+"""Helper definitions to glob .aar and .jar targets"""
+
+def create_aar_targets(aarfiles):
+ for aarfile in aarfiles:
+ name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")]
+ lib_deps.append(":" + name)
+ android_prebuilt_aar(
+ name = name,
+ aar = aarfile,
+ )
+
+def create_jar_targets(jarfiles):
+ for jarfile in jarfiles:
+ name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")]
+ lib_deps.append(":" + name)
+ prebuilt_jar(
+ name = name,
+ binary_jar = jarfile,
+ )
diff --git a/android/app/debug.keystore b/android/app/debug.keystore
new file mode 100644
index 0000000..364e105
Binary files /dev/null and b/android/app/debug.keystore differ
diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro
new file mode 100644
index 0000000..11b0257
--- /dev/null
+++ b/android/app/proguard-rules.pro
@@ -0,0 +1,10 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml
new file mode 100644
index 0000000..fa26aa5
--- /dev/null
+++ b/android/app/src/debug/AndroidManifest.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools">
+
+ <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
+
+ <application android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" />
+</manifest>
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..b3a684a
--- /dev/null
+++ b/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,47 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.agprojects.sylk">
+
+ <uses-permission android:name="android.permission.CAMERA" />
+ <uses-feature android:name="android.hardware.camera" />
+ <uses-feature android:name="android.hardware.camera.autofocus"/>
+
+ <uses-permission android:name="android.permission.INTERNET" />
+
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+ <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
+ <uses-permission android:name="android.permission.RECORD_AUDIO" />
+ <uses-permission android:name="android.permission.WAKE_LOCK" />
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+
+ <uses-permission android:name="android.permission.READ_CONTACTS" />
+ <uses-permission android:name="android.permission.VIBRATE" />
+ <uses-permission-sdk-23 android:name="android.permission.VIBRATE" />
+ <uses-permission android:name="android.permission.MANAGE_OWN_CALLS"/>
+ <uses-permission android:name="android.permission.CALL_PHONE"/>
+
+ <uses-permission android:name="android.permission.BIND_TELECOM_CONNECTION_SERVICE"/>
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
+ <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+ <uses-permission android:name="android.permission.BLUETOOTH" />
+
+ <application
+ android:name=".MainApplication"
+ android:label="@string/app_name"
+ android:icon="@mipmap/ic_launcher"
+ android:roundIcon="@mipmap/ic_launcher_round"
+ android:allowBackup="false"
+ android:theme="@style/AppTheme">
+ <activity
+ android:name=".MainActivity"
+ android:label="@string/app_name"
+ android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
+ android:windowSoftInputMode="adjustResize">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
+ </application>
+
+</manifest>
diff --git a/android/app/src/main/assets/fonts/AntDesign.ttf b/android/app/src/main/assets/fonts/AntDesign.ttf
new file mode 100644
index 0000000..2abf035
Binary files /dev/null and b/android/app/src/main/assets/fonts/AntDesign.ttf differ
diff --git a/android/app/src/main/assets/fonts/Entypo.ttf b/android/app/src/main/assets/fonts/Entypo.ttf
new file mode 100644
index 0000000..1c8f5e9
Binary files /dev/null and b/android/app/src/main/assets/fonts/Entypo.ttf differ
diff --git a/android/app/src/main/assets/fonts/EvilIcons.ttf b/android/app/src/main/assets/fonts/EvilIcons.ttf
new file mode 100644
index 0000000..6868f7b
Binary files /dev/null and b/android/app/src/main/assets/fonts/EvilIcons.ttf differ
diff --git a/android/app/src/main/assets/fonts/Feather.ttf b/android/app/src/main/assets/fonts/Feather.ttf
new file mode 100644
index 0000000..852c713
Binary files /dev/null and b/android/app/src/main/assets/fonts/Feather.ttf differ
diff --git a/android/app/src/main/assets/fonts/FontAwesome.ttf b/android/app/src/main/assets/fonts/FontAwesome.ttf
new file mode 100644
index 0000000..35acda2
Binary files /dev/null and b/android/app/src/main/assets/fonts/FontAwesome.ttf differ
diff --git a/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf b/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf
new file mode 100644
index 0000000..5f72e91
Binary files /dev/null and b/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf differ
diff --git a/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf b/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf
new file mode 100644
index 0000000..a309313
Binary files /dev/null and b/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf differ
diff --git a/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf b/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf
new file mode 100644
index 0000000..7ece328
Binary files /dev/null and b/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf differ
diff --git a/android/app/src/main/assets/fonts/Fontisto.ttf b/android/app/src/main/assets/fonts/Fontisto.ttf
new file mode 100755
index 0000000..96e2e81
Binary files /dev/null and b/android/app/src/main/assets/fonts/Fontisto.ttf differ
diff --git a/android/app/src/main/assets/fonts/Foundation.ttf b/android/app/src/main/assets/fonts/Foundation.ttf
new file mode 100644
index 0000000..6cce217
Binary files /dev/null and b/android/app/src/main/assets/fonts/Foundation.ttf differ
diff --git a/android/app/src/main/assets/fonts/Ionicons.ttf b/android/app/src/main/assets/fonts/Ionicons.ttf
new file mode 100644
index 0000000..67bd842
Binary files /dev/null and b/android/app/src/main/assets/fonts/Ionicons.ttf differ
diff --git a/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf b/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf
new file mode 100644
index 0000000..9cc8db1
Binary files /dev/null and b/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf differ
diff --git a/android/app/src/main/assets/fonts/MaterialIcons.ttf b/android/app/src/main/assets/fonts/MaterialIcons.ttf
new file mode 100644
index 0000000..7015564
Binary files /dev/null and b/android/app/src/main/assets/fonts/MaterialIcons.ttf differ
diff --git a/android/app/src/main/assets/fonts/Octicons.ttf b/android/app/src/main/assets/fonts/Octicons.ttf
new file mode 100644
index 0000000..ceac75d
Binary files /dev/null and b/android/app/src/main/assets/fonts/Octicons.ttf differ
diff --git a/android/app/src/main/assets/fonts/SimpleLineIcons.ttf b/android/app/src/main/assets/fonts/SimpleLineIcons.ttf
new file mode 100644
index 0000000..6ecb686
Binary files /dev/null and b/android/app/src/main/assets/fonts/SimpleLineIcons.ttf differ
diff --git a/android/app/src/main/assets/fonts/Zocial.ttf b/android/app/src/main/assets/fonts/Zocial.ttf
new file mode 100644
index 0000000..e4ae46c
Binary files /dev/null and b/android/app/src/main/assets/fonts/Zocial.ttf differ
diff --git a/android/app/src/main/java/com/sylk/MainActivity.java b/android/app/src/main/java/com/sylk/MainActivity.java
new file mode 100644
index 0000000..44b5c6c
--- /dev/null
+++ b/android/app/src/main/java/com/sylk/MainActivity.java
@@ -0,0 +1,15 @@
+package com.agprojects.sylk;
+
+import com.facebook.react.ReactActivity;
+
+public class MainActivity extends ReactActivity {
+
+ /**
+ * Returns the name of the main component registered from JavaScript. This is used to schedule
+ * rendering of the component.
+ */
+ @Override
+ protected String getMainComponentName() {
+ return "Sylk";
+ }
+}
diff --git a/android/app/src/main/java/com/sylk/MainApplication.java b/android/app/src/main/java/com/sylk/MainApplication.java
new file mode 100644
index 0000000..b7b7383
--- /dev/null
+++ b/android/app/src/main/java/com/sylk/MainApplication.java
@@ -0,0 +1,74 @@
+package com.agprojects.sylk;
+
+import android.app.Application;
+import android.content.Context;
+import com.facebook.react.PackageList;
+import com.facebook.react.ReactApplication;
+import com.facebook.react.ReactNativeHost;
+import com.facebook.react.ReactPackage;
+import com.facebook.soloader.SoLoader;
+import java.lang.reflect.InvocationTargetException;
+import java.util.List;
+
+public class MainApplication extends Application implements ReactApplication {
+
+ private final ReactNativeHost mReactNativeHost =
+ new ReactNativeHost(this) {
+ @Override
+ public boolean getUseDeveloperSupport() {
+ return BuildConfig.DEBUG;
+ }
+
+ @Override
+ protected List<ReactPackage> getPackages() {
+ @SuppressWarnings("UnnecessaryLocalVariable")
+ List<ReactPackage> packages = new PackageList(this).getPackages();
+ // Packages that cannot be autolinked yet can be added manually here, for example:
+ // packages.add(new MyReactNativePackage());
+ return packages;
+ }
+
+ @Override
+ protected String getJSMainModuleName() {
+ return "index";
+ }
+ };
+
+ @Override
+ public ReactNativeHost getReactNativeHost() {
+ return mReactNativeHost;
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ SoLoader.init(this, /* native exopackage */ false);
+ initializeFlipper(this); // Remove this line if you don't want Flipper enabled
+ }
+
+ /**
+ * Loads Flipper in React Native templates.
+ *
+ * @param context
+ */
+ private static void initializeFlipper(Context context) {
+ if (BuildConfig.DEBUG) {
+ try {
+ /*
+ We use reflection here to pick up the class that initializes Flipper,
+ since Flipper library is not available in release mode
+ */
+ Class<?> aClass = Class.forName("com.facebook.flipper.ReactNativeFlipper");
+ aClass.getMethod("initializeFlipper", Context.class).invoke(null, context);
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ } catch (NoSuchMethodException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}
diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..a2f5908
Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..1b52399
Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..ff10afd
Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..115a4c7
Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..dcd3cd8
Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..459ca60
Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..8ca12fe
Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..8e19b41
Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..b824ebd
Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..4c19a13
Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..fddf52a
--- /dev/null
+++ b/android/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+<resources>
+ <string name="app_name">sylk</string>
+</resources>
diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..62fe59f
--- /dev/null
+++ b/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,9 @@
+<resources>
+
+ <!-- Base application theme. -->
+ <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
+ <!-- Customize your theme here. -->
+ <item name="android:textColor">#000000</item>
+ </style>
+
+</resources>
diff --git a/android/build.gradle b/android/build.gradle
new file mode 100644
index 0000000..28f7ec6
--- /dev/null
+++ b/android/build.gradle
@@ -0,0 +1,38 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+ ext {
+ buildToolsVersion = "28.0.3"
+ minSdkVersion = 16
+ compileSdkVersion = 28
+ targetSdkVersion = 28
+ }
+ repositories {
+ google()
+ jcenter()
+ }
+ dependencies {
+ classpath("com.android.tools.build:gradle:3.4.2")
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ mavenLocal()
+ maven {
+ // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
+ url("$rootDir/../node_modules/react-native/android")
+ }
+ maven {
+ // Android JSC is installed from npm
+ url("$rootDir/../node_modules/jsc-android/dist")
+ }
+
+ google()
+ jcenter()
+ maven { url 'https://jitpack.io' }
+ }
+}
diff --git a/android/gradle.properties b/android/gradle.properties
new file mode 100644
index 0000000..027ef9d
--- /dev/null
+++ b/android/gradle.properties
@@ -0,0 +1,21 @@
+# Project-wide Gradle settings.
+
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+# Default value: -Xmx10248m -XX:MaxPermSize=256m
+# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..5c2d1cf
Binary files /dev/null and b/android/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..e0c4de3
--- /dev/null
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.5-all.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/android/gradlew b/android/gradlew
new file mode 100755
index 0000000..b0d6d0a
--- /dev/null
+++ b/android/gradlew
@@ -0,0 +1,188 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/android/gradlew.bat b/android/gradlew.bat
new file mode 100644
index 0000000..15e1ee3
--- /dev/null
+++ b/android/gradlew.bat
@@ -0,0 +1,100 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem http://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/android/settings.gradle b/android/settings.gradle
new file mode 100644
index 0000000..5a5411f
--- /dev/null
+++ b/android/settings.gradle
@@ -0,0 +1,3 @@
+rootProject.name = 'Sylk'
+apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
+include ':app'
diff --git a/app.json b/app.json
new file mode 100644
index 0000000..5ab954a
--- /dev/null
+++ b/app.json
@@ -0,0 +1,4 @@
+{
+ "name": "Sylk",
+ "displayName": "Sylk"
+}
\ No newline at end of file
diff --git a/app/MaterialColors.js b/app/MaterialColors.js
new file mode 100644
index 0000000..2c04c8c
--- /dev/null
+++ b/app/MaterialColors.js
@@ -0,0 +1,19 @@
+'use strict';
+
+const colors = require('material-ui/colors');
+const murmur = require('murmurhash-js');
+
+// Available material design colors
+const availableColors = [
+ colors.red, colors.pink, colors.purple, colors.deepPurple,
+ colors.indigo, colors.blue, colors.lightBlue, colors.cyan,
+ colors.teal, colors.green, colors.lightGreen, colors.lime,
+ colors.yellow, colors.amber, colors.orange, colors.deepOrange,
+ colors.brown, colors.grey, colors.blueGrey
+];
+
+function generateColor(text) {
+ return availableColors[(murmur.murmur3(text) % availableColors.length)];
+}
+
+exports.generateColor = generateColor;
diff --git a/app/SillyNames.js b/app/SillyNames.js
new file mode 100644
index 0000000..592471b
--- /dev/null
+++ b/app/SillyNames.js
@@ -0,0 +1,197 @@
+'use strict';
+
+const adjectives = [
+ 'Black', 'White', 'Gray', 'Brown', 'Red',
+ 'Pink', 'Crimson', 'Carnelian', 'Orange', 'Yellow',
+ 'Ivory', 'Cream', 'Green', 'Viridian', 'Aquamarine',
+ 'Cyan', 'Blue', 'Cerulean', 'Azure', 'Indigo',
+ 'Navy', 'Violet', 'Purple', 'Lavender', 'Magenta',
+ 'Rainbow', 'Iridescent', 'Spectrum', 'Prism', 'Bold',
+ 'Vivid', 'Pale', 'Clear', 'Glass', 'Translucent',
+ 'Misty', 'Dark', 'Light', 'Gold', 'Silver',
+ 'Copper', 'Bronze', 'Steel', 'Iron', 'Brass',
+ 'Mercury', 'Zinc', 'Chrome', 'Platinum', 'Titanium',
+ 'Nickel', 'Lead', 'Pewter', 'Rust', 'Metal',
+ 'Stone', 'Quartz', 'Granite', 'Marble', 'Alabaster',
+ 'Agate', 'Jasper', 'Pebble', 'Pyrite', 'Crystal',
+ 'Geode', 'Obsidian', 'Mica', 'Flint', 'Sand',
+ 'Gravel', 'Boulder', 'Basalt', 'Ruby', 'Beryl',
+ 'Scarlet', 'Citrine', 'Sulpher', 'Topaz', 'Amber',
+ 'Emerald', 'Malachite', 'Jade', 'Abalone', 'Lapis',
+ 'Sapphire', 'Diamond', 'Peridot', 'Gem', 'Jewel',
+ 'Bevel', 'Coral', 'Jet', 'Ebony', 'Wood',
+ 'Tree', 'Cherry', 'Maple', 'Cedar', 'Branch',
+ 'Bramble', 'Rowan', 'Ash', 'Fir', 'Pine',
+ 'Cactus', 'Alder', 'Grove', 'Forest', 'Jungle',
+ 'Palm', 'Bush', 'Mulberry', 'Juniper', 'Vine',
+ 'Ivy', 'Rose', 'Lily', 'Tulip', 'Daffodil',
+ 'Honeysuckle', 'Fuschia', 'Hazel', 'Walnut', 'Almond',
+ 'Lime', 'Lemon', 'Apple', 'Blossom', 'Bloom',
+ 'Crocus', 'Rose', 'Buttercup', 'Dandelion', 'Iris',
+ 'Carnation', 'Fern', 'Root', 'Branch', 'Leaf',
+ 'Seed', 'Flower', 'Petal', 'Pollen', 'Orchid',
+ 'Mangrove', 'Cypress', 'Sequoia', 'Sage', 'Heather',
+ 'Snapdragon', 'Daisy', 'Mountain', 'Hill', 'Alpine',
+ 'Chestnut', 'Valley', 'Glacier', 'Forest', 'Grove',
+ 'Glen', 'Tree', 'Thorn', 'Stump', 'Desert',
+ 'Canyon', 'Dune', 'Oasis', 'Mirage', 'Well',
+ 'Spring', 'Meadow', 'Field', 'Prairie', 'Grass',
+ 'Tundra', 'Island', 'Shore', 'Sand', 'Shell',
+ 'Surf', 'Wave', 'Foam', 'Tide', 'Lake',
+ 'River', 'Brook', 'Stream', 'Pool', 'Pond',
+ 'Sun', 'Sprinkle', 'Shade', 'Shadow', 'Rain',
+ 'Cloud', 'Storm', 'Hail', 'Snow', 'Sleet',
+ 'Thunder', 'Lightning', 'Wind', 'Hurricane', 'Typhoon',
+ 'Dawn', 'Sunrise', 'Morning', 'Noon', 'Twilight',
+ 'Evening', 'Sunset', 'Midnight', 'Night', 'Sky',
+ 'Star', 'Stellar', 'Comet', 'Nebula', 'Quasar',
+ 'Solar', 'Lunar', 'Planet', 'Meteor', 'Sprout',
+ 'Pear', 'Plum', 'Kiwi', 'Berry', 'Apricot',
+ 'Peach', 'Mango', 'Pineapple', 'Coconut', 'Olive',
+ 'Ginger', 'Root', 'Plain', 'Fancy', 'Stripe',
+ 'Spot', 'Speckle', 'Spangle', 'Ring', 'Band',
+ 'Blaze', 'Paint', 'Pinto', 'Shade', 'Tabby',
+ 'Brindle', 'Patch', 'Calico', 'Checker', 'Dot',
+ 'Pattern', 'Glitter', 'Glimmer', 'Shimmer', 'Dull',
+ 'Dust', 'Dirt', 'Glaze', 'Scratch', 'Quick',
+ 'Swift', 'Fast', 'Slow', 'Clever', 'Fire',
+ 'Flicker', 'Flash', 'Spark', 'Ember', 'Coal',
+ 'Flame', 'Chocolate', 'Vanilla', 'Sugar', 'Spice',
+ 'Cake', 'Pie', 'Cookie', 'Candy', 'Caramel',
+ 'Spiral', 'Round', 'Jelly', 'Square', 'Narrow',
+ 'Long', 'Short', 'Small', 'Tiny', 'Big',
+ 'Giant', 'Great', 'Atom', 'Peppermint', 'Mint',
+ 'Butter', 'Fringe', 'Rag', 'Quilt', 'Truth',
+ 'Lie', 'Holy', 'Curse', 'Noble', 'Sly',
+ 'Brave', 'Shy', 'Lava', 'Foul', 'Leather',
+ 'Fantasy', 'Keen', 'Luminous', 'Feather', 'Sticky',
+ 'Gossamer', 'Cotton', 'Rattle', 'Silk', 'Satin',
+ 'Cord', 'Denim', 'Flannel', 'Plaid', 'Wool',
+ 'Linen', 'Silent', 'Flax', 'Weak', 'Valiant',
+ 'Fierce', 'Gentle', 'Rhinestone', 'Splash', 'North',
+ 'South', 'East', 'West', 'Summer', 'Winter',
+ 'Autumn', 'Spring', 'Season', 'Equinox', 'Solstice',
+ 'Paper', 'Motley', 'Torch', 'Ballistic', 'Rampant',
+ 'Shag', 'Freckle', 'Wild', 'Free', 'Chain',
+ 'Sheer', 'Crazy', 'Mad', 'Candle', 'Ribbon',
+ 'Lace', 'Notch', 'Wax', 'Shine', 'Shallow',
+ 'Deep', 'Bubble', 'Harvest', 'Fluff', 'Venom',
+ 'Boom', 'Slash', 'Rune', 'Cold', 'Quill',
+ 'Love', 'Hate', 'Garnet', 'Zircon', 'Power',
+ 'Bone', 'Void', 'Horn', 'Glory', 'Cyber',
+ 'Nova', 'Hot', 'Helix', 'Cosmic', 'Quark',
+ 'Quiver', 'Holly', 'Clover', 'Polar', 'Regal',
+ 'Ripple', 'Ebony', 'Wheat', 'Phantom', 'Dew',
+ 'Chisel', 'Crack', 'Chatter', 'Laser', 'Foil',
+ 'Tin', 'Clever', 'Treasure', 'Maze', 'Twisty',
+ 'Curly', 'Fortune', 'Fate', 'Destiny', 'Cute',
+ 'Slime', 'Ink', 'Disco', 'Plume', 'Time',
+ 'Psychadelic', 'Relic', 'Fossil', 'Water', 'Savage',
+ 'Ancient', 'Rapid', 'Road', 'Trail', 'Stitch',
+ 'Button', 'Bow', 'Nimble', 'Zest', 'Sour',
+ 'Bitter', 'Phase', 'Fan', 'Frill', 'Plump',
+ 'Pickle', 'Mud', 'Puddle', 'Pond', 'River',
+ 'Spring', 'Stream', 'Battle', 'Arrow', 'Plume',
+ 'Roan', 'Pitch', 'Tar', 'Cat', 'Dog',
+ 'Horse', 'Lizard', 'Bird', 'Fish', 'Saber',
+ 'Scythe', 'Sharp', 'Soft', 'Razor', 'Neon',
+ 'Dandy', 'Weed', 'Swamp', 'Marsh', 'Bog',
+ 'Peat', 'Moor', 'Muck', 'Mire', 'Grave',
+ 'Fair', 'Just', 'Brick', 'Puzzle', 'Skitter',
+ 'Prong', 'Fork', 'Dent', 'Dour', 'Warp',
+ 'Luck', 'Coffee', 'Split', 'Chip', 'Hollow',
+ 'Heavy', 'Legend', 'Hickory', 'Mesquite', 'Nettle',
+ 'Rogue', 'Charm', 'Prickle', 'Bead', 'Sponge',
+ 'Whip', 'Bald', 'Frost', 'Fog', 'Oil',
+ 'Veil', 'Cliff', 'Volcano', 'Rift', 'Maze',
+ 'Proud', 'Dew', 'Mirror', 'Shard', 'Salt',
+ 'Pepper', 'Honey', 'Thread', 'Bristle', 'Ripple',
+ 'Glow', 'Zenith'
+];
+
+const nouns = [
+ 'Head', 'Crest', 'Crown', 'Tooth', 'Fang',
+ 'Horn', 'Frill', 'Skull', 'Bone', 'Tongue',
+ 'Throat', 'Voice', 'Nose', 'Snout', 'Chin',
+ 'Eye', 'Sight', 'Seer', 'Speaker', 'Singer',
+ 'Song', 'Chanter', 'Howler', 'Chatter', 'Shrieker',
+ 'Shriek', 'Jaw', 'Bite', 'Biter', 'Neck',
+ 'Shoulder', 'Fin', 'Wing', 'Arm', 'Lifter',
+ 'Grasp', 'Grabber', 'Hand', 'Paw', 'Foot',
+ 'Finger', 'Toe', 'Thumb', 'Talon', 'Palm',
+ 'Touch', 'Racer', 'Runner', 'Hoof', 'Fly',
+ 'Flier', 'Swoop', 'Roar', 'Hiss', 'Hisser',
+ 'Snarl', 'Dive', 'Diver', 'Rib', 'Chest',
+ 'Back', 'Ridge', 'Leg', 'Legs', 'Tail',
+ 'Beak', 'Walker', 'Lasher', 'Swisher', 'Carver',
+ 'Kicker', 'Roarer', 'Crusher', 'Spike', 'Shaker',
+ 'Charger', 'Hunter', 'Weaver', 'Crafter', 'Binder',
+ 'Scribe', 'Muse', 'Snap', 'Snapper', 'Slayer',
+ 'Stalker', 'Track', 'Tracker', 'Scar', 'Scarer',
+ 'Fright', 'Killer', 'Death', 'Doom', 'Healer',
+ 'Saver', 'Friend', 'Foe', 'Guardian', 'Thunder',
+ 'Lightning', 'Cloud', 'Storm', 'Forger', 'Scale',
+ 'Hair', 'Braid', 'Nape', 'Belly', 'Thief',
+ 'Stealer', 'Reaper', 'Giver', 'Taker', 'Dancer',
+ 'Player', 'Gambler', 'Twister', 'Turner', 'Painter',
+ 'Dart', 'Drifter', 'Sting', 'Stinger', 'Venom',
+ 'Spur', 'Ripper', 'Swallow', 'Devourer', 'Knight',
+ 'Lady', 'Lord', 'Queen', 'King', 'Master',
+ 'Mistress', 'Prince', 'Princess', 'Duke', 'Dutchess',
+ 'Samurai', 'Ninja', 'Knave', 'Slave', 'Servant',
+ 'Sage', 'Wizard', 'Witch', 'Warlock', 'Warrior',
+ 'Jester', 'Paladin', 'Bard', 'Trader', 'Sword',
+ 'Shield', 'Knife', 'Dagger', 'Arrow', 'Bow',
+ 'Fighter', 'Bane', 'Follower', 'Leader', 'Scourge',
+ 'Watcher', 'Cat', 'Panther', 'Tiger', 'Cougar',
+ 'Puma', 'Jaguar', 'Ocelot', 'Lynx', 'Lion',
+ 'Leopard', 'Ferret', 'Weasel', 'Wolverine', 'Bear',
+ 'Raccoon', 'Dog', 'Wolf', 'Kitten', 'Puppy',
+ 'Cub', 'Fox', 'Hound', 'Terrier', 'Coyote',
+ 'Hyena', 'Jackal', 'Pig', 'Horse', 'Donkey',
+ 'Stallion', 'Mare', 'Zebra', 'Antelope', 'Gazelle',
+ 'Deer', 'Buffalo', 'Bison', 'Boar', 'Elk',
+ 'Whale', 'Dolphin', 'Shark', 'Fish', 'Minnow',
+ 'Salmon', 'Ray', 'Fisher', 'Otter', 'Gull',
+ 'Duck', 'Goose', 'Crow', 'Raven', 'Bird',
+ 'Eagle', 'Raptor', 'Hawk', 'Falcon', 'Moose',
+ 'Heron', 'Owl', 'Stork', 'Crane', 'Sparrow',
+ 'Robin', 'Parrot', 'Cockatoo', 'Carp', 'Lizard',
+ 'Gecko', 'Iguana', 'Snake', 'Python', 'Viper',
+ 'Boa', 'Condor', 'Vulture', 'Spider', 'Fly',
+ 'Scorpion', 'Heron', 'Oriole', 'Toucan', 'Bee',
+ 'Wasp', 'Hornet', 'Rabbit', 'Bunny', 'Hare',
+ 'Brow', 'Mustang', 'Ox', 'Piper', 'Soarer',
+ 'Flasher', 'Moth', 'Mask', 'Hide', 'Hero',
+ 'Antler', 'Chill', 'Chiller', 'Gem', 'Ogre',
+ 'Myth', 'Elf', 'Fairy', 'Pixie', 'Dragon',
+ 'Griffin', 'Unicorn', 'Pegasus', 'Sprite', 'Fancier',
+ 'Chopper', 'Slicer', 'Skinner', 'Butterfly', 'Legend',
+ 'Wanderer', 'Rover', 'Raver', 'Loon', 'Lancer',
+ 'Glass', 'Glazer', 'Flame', 'Crystal', 'Lantern',
+ 'Lighter', 'Cloak', 'Bell', 'Ringer', 'Keeper',
+ 'Centaur', 'Bolt', 'Catcher', 'Whimsey', 'Quester',
+ 'Rat', 'Mouse', 'Serpent', 'Wyrm', 'Gargoyle',
+ 'Thorn', 'Whip', 'Rider', 'Spirit', 'Sentry',
+ 'Bat', 'Beetle', 'Burn', 'Cowl', 'Stone',
+ 'Gem', 'Collar', 'Mark', 'Grin', 'Scowl',
+ 'Spear', 'Razor', 'Edge', 'Seeker', 'Jay',
+ 'Ape', 'Monkey', 'Gorilla', 'Koala', 'Kangaroo',
+ 'Yak', 'Sloth', 'Ant', 'Roach', 'Weed',
+ 'Seed', 'Eater', 'Razor', 'Shirt', 'Face',
+ 'Goat', 'Mind', 'Shift', 'Rider', 'Face',
+ 'Mole', 'Vole', 'Pirate', 'Llama', 'Stag',
+ 'Bug', 'Cap', 'Boot', 'Drop', 'Hugger',
+ 'Sargent', 'Snagglefoot', 'Carpet', 'Curtain'
+];
+
+function randomNoun() {
+ return nouns[Math.floor(Math.random() * nouns.length)];
+}
+
+function randomAdjective() {
+ return adjectives[Math.floor(Math.random() * adjectives.length)];
+}
+
+exports.randomAdjective = randomAdjective;
+exports.randomNoun = randomNoun;
diff --git a/app/app.js b/app/app.js
new file mode 100644
index 0000000..79bd590
--- /dev/null
+++ b/app/app.js
@@ -0,0 +1,1061 @@
+import React, { Component } from 'react';
+import { View, SafeAreaView, ImageBackground } from 'react-native';
+import { Provider as PaperProvider, DefaultTheme } from 'react-native-paper';
+import { BreadProvider } from "material-bread";
+import { registerGlobals } from 'react-native-webrtc';
+import { Router, Route, Link, Switch } from 'react-router-native';
+import history from './history';
+import debug from 'react-native-debug';
+import DigestAuthRequest from 'digest-auth-request';
+import autoBind from 'auto-bind';
+
+debug.enable('*');
+
+registerGlobals();
+
+import * as sylkrtc from 'sylkrtc';
+
+import RegisterBox from './components/RegisterBox';
+import ReadyBox from './components/ReadyBox';
+import Call from './components/Call';
+import CallByUriBox from './components/CallByUriBox';
+import Conference from './components/Conference';
+import ConferenceByUriBox from './components/ConferenceByUriBox';
+// import AudioPlayer from './components/AudioPlayer';
+// import ErrorPanel from './components/ErrorPanel';
+import FooterBox from './components/FooterBox';
+import StatusBox from './components/StatusBox';
+import IncomingCallModal from './components/IncomingCallModal';
+import NotificationCenter from './components/NotificationCenter';
+import LoadingScreen from './components/LoadingScreen';
+import NavigationBar from './components/NavigationBar';
+import Preview from './components/Preview';
+
+import utils from './utils';
+import config from './config';
+import storage from './storage';
+
+import styles from './assets/styles/blink/root.scss';
+const backgroundImage = require('./assets/images/dark_linen.png');
+
+const theme = {
+ ...DefaultTheme,
+ dark: true,
+ roundness: 2,
+ colors: {
+ ...DefaultTheme.colors,
+ primary: '#337ab7',
+ // accent: '#f1c40f',
+ },
+};
+
+const DEBUG = debug('blinkrtc:App');
+
+// Application modes
+const MODE_NORMAL = Symbol('mode-normal');
+const MODE_PRIVATE = Symbol('mode-private');
+const MODE_GUEST_CALL = Symbol('mode-guest-call');
+const MODE_GUEST_CONFERENCE = Symbol('mode-guest-conference');
+
+
+class Blink extends Component {
+ constructor() {
+ super();
+ autoBind(this)
+ this._initialSstate = {
+ accountId: '',
+ password: '',
+ displayName: '',
+ account: null,
+ registrationState: null,
+ currentCall: null,
+ connection: null,
+ inboundCall: null,
+ showIncomingModal: false,
+ showScreenSharingModal: false,
+ status: null,
+ targetUri: '',
+ missedTargetUri: '',
+ loading: null,
+ mode: MODE_PRIVATE,
+ localMedia: null,
+ generatedVideoTrack: false,
+ history: [],
+ serverHistory: [],
+ devices: {}
+ };
+ this.state = Object.assign({}, this._initialSstate);
+
+ this.__notificationCenter = null;
+
+ this.participantsToInvite = null;
+ this.redirectTo = null;
+ this.prevPath = null;
+ this.shouldUseHashRouting = false;
+ this.muteIncoming = false;
+
+ storage.initialize();
+
+ // Load camera/mic preferences
+ storage.get('devices').then((devices) => {
+ if (devices) {
+ this.setState({devices: devices});
+ }
+ });
+ }
+
+ get _notificationCenter() {
+ // getter to lazy-load the NotificationCenter ref
+ if (!this.__notificationCenter) {
+ this.__notificationCenter = this.refs.notificationCenter;
+ }
+ return this.__notificationCenter;
+ }
+
+ componentDidMount() {
+ history.push('/login');
+
+ // prime the ref
+ DEBUG('NotificationCenter ref: %o', this._notificationCenter);
+ }
+
+ connectionStateChanged(oldState, newState) {
+ DEBUG(`Connection state changed! ${oldState} -> ${newState}`);
+ switch (newState) {
+ case 'closed':
+ this.setState({connection: null, loading: null});
+ break;
+ case 'ready':
+ this.processRegistration(this.state.accountId, this.state.password, this.state.displayName);
+ break;
+ case 'disconnected':
+ // this.refs.audioPlayerOutbound.stop();
+ // this.refs.audioPlayerInbound.stop();
+
+ if (this.state.localMedia) {
+ sylkrtc.utils.closeMediaStream(this.state.localMedia);
+ }
+
+ if (this.state.currentCall) {
+ this.state.currentCall.removeListener('stateChanged', this.callStateChanged);
+ this.state.currentCall.terminate();
+ }
+
+ if (this.state.inboundCall && this.state.inboundCall !== this.state.currentCall) {
+ this.state.inboundCall.removeListener('stateChanged', this.inboundCallStateChanged);
+ this.state.inboundCall.terminate();
+ }
+
+ this.setState({
+ account:null,
+ registrationState: null,
+ loading: 'Disconnected, reconnecting...',
+ showIncomingModal: false,
+ currentCall: null,
+ inboundCall: null,
+ localMedia: null,
+ generatedVideoTrack: false
+ });
+ break;
+ default:
+ this.setState({loading: 'Connecting...'});
+ break;
+ }
+ }
+
+ notificationCenter() {
+ return this._notificationCenter;
+ }
+
+ registrationStateChanged(oldState, newState, data) {
+ DEBUG('Registration state changed! ' + newState);
+ this.setState({registrationState: newState});
+ if (newState === 'failed') {
+ let reason = data.reason;
+ if (reason.match(/904/)) {
+ // Sofia SIP: WAT
+ reason = 'Bad account or password';
+ } else {
+ reason = 'Connection failed';
+ }
+ this.setState({
+ loading : null,
+ status : {
+ msg : 'Sign In failed: ' + reason,
+ level : 'danger'
+ }
+ });
+ } else if (newState === 'registered') {
+ this.setState({loading: null});
+ console.log('pushing ready onto history');
+ history.push('/ready');
+ console.log('pushed ready onto history');
+ return;
+ } else {
+ this.setState({status: null });
+ }
+ }
+
+ callStateChanged(oldState, newState, data) {
+ DEBUG(`Call state changed! ${oldState} -> ${newState}`);
+
+ switch (newState) {
+ case 'progress':
+ //this.refs.audioPlayerOutbound.play(true);
+ break;
+ case 'accepted':
+ //this.refs.audioPlayerOutbound.stop();
+ //this.refs.audioPlayerInbound.stop();
+ break;
+ case 'terminated':
+ //this.refs.audioPlayerOutbound.stop();
+ //this.refs.audioPlayerInbound.stop();
+ //this.refs.audioPlayerHangup.play();
+
+ let callSuccesfull = false;
+ let reason = data.reason;
+ if (!reason || reason.match(/200/)) {
+ reason = 'Hangup';
+ callSuccesfull = true;
+ } else if (reason.match(/403/)) {
+ reason = 'This domain is not served here';
+ } else if (reason.match(/404/)) {
+ reason = 'User not found';
+ } else if (reason.match(/408/)) {
+ reason = 'Timeout';
+ } else if (reason.match(/480/)) {
+ reason = 'User not online';
+ } else if (reason.match(/486/) || reason.match(/60[036]/)) {
+ reason = 'Busy';
+ } else if (reason.match(/487/)) {
+ reason = 'Cancelled';
+ } else if (reason.match(/488/)) {
+ reason = 'Unacceptable media';
+ } else if (reason.match(/5\d\d/)) {
+ reason = 'Server failure';
+ } else if (reason.match(/904/)) {
+ // Sofia SIP: WAT
+ reason = 'Bad account or password';
+ } else {
+ reason = 'Connection failed';
+ }
+ this._notificationCenter.postSystemNotification('Call Terminated', {body: reason, timeout: callSuccesfull ? 5 : 10});
+
+ this.setState({
+ currentCall : null,
+ targetUri : callSuccesfull || config.useServerCallHistory ? '' : this.state.targetUri,
+ showIncomingModal : false,
+ inboundCall : null,
+ localMedia : null,
+ generatedVideoTrack : false
+ });
+ this.setFocusEvents(false);
+ this.participantsToInvite = null;
+
+ history.push('/ready');
+
+ break;
+ default:
+ break;
+ }
+ }
+
+ inboundCallStateChanged(oldState, newState, data) {
+ DEBUG('Inbound Call state changed! ' + newState);
+ if (newState === 'terminated') {
+ this.setState({ inboundCall: null, showIncomingModal: false });
+ this.setFocusEvents(false);
+ }
+ }
+
+ handleCallByUri(displayName, targetUri) {
+ const accountId = `${utils.generateUniqueId()}@${config.defaultGuestDomain}`;
+ this.setState({
+ accountId : accountId,
+ password : '',
+ displayName : displayName,
+ //mode : MODE_GUEST_CALL,
+ targetUri : utils.normalizeUri(targetUri, config.defaultDomain),
+ loading : 'Connecting...'
+ });
+
+ if (this.state.connection === null) {
+ let connection = sylkrtc.createConnection({server: config.wsServer});
+ connection.on('stateChanged', this.connectionStateChanged);
+ this.setState({connection: connection});
+ } else {
+ DEBUG('Connection Present, try to register');
+ this.processRegistration(accountId, '', displayName);
+ }
+ }
+
+ handleConferenceByUri(displayName, targetUri) {
+ const accountId = `${utils.generateUniqueId()}@${config.defaultGuestDomain}`;
+ this.setState({
+ accountId : accountId,
+ password : '',
+ displayName : displayName,
+ //mode : MODE_GUEST_CONFERENCE,
+ targetUri : targetUri,
+ loading : 'Connecting...'
+ });
+
+ if (this.state.connection === null) {
+ let connection = sylkrtc.createConnection({server: config.wsServer});
+ connection.on('stateChanged', this.connectionStateChanged);
+ this.setState({connection: connection});
+ } else {
+ DEBUG('Connection Present, try to register');
+ this.processRegistration(accountId, '', displayName);
+ }
+ }
+
+ handleRegistration(accountId, password, remember) {
+ this.setState({
+ accountId : accountId,
+ password : password,
+ mode : remember ? MODE_NORMAL : MODE_PRIVATE,
+ loading : 'Connecting...'
+ });
+
+ if (this.state.connection === null) {
+ let connection = sylkrtc.createConnection({server: config.wsServer});
+ connection.on('stateChanged', this.connectionStateChanged);
+ this.setState({connection: connection});
+ console.log('HALP');
+ } else {
+ DEBUG('Connection Present, try to register');
+ this.processRegistration(accountId, password, '');
+ }
+ }
+
+ processRegistration(accountId, password, displayName) {
+ if (this.state.account !== null) {
+ DEBUG('We already have an account, removing it');
+ this.state.connection.removeAccount(this.state.account,
+ (error) => {
+ if (error) {
+ DEBUG(error);
+ }
+ this.setState({account: null, registrationState: null});
+ }
+ );
+ }
+
+ const options = {
+ account: accountId,
+ password: password,
+ displayName: displayName
+ };
+ const account = this.state.connection.addAccount(options, (error, account) => {
+ if (!error) {
+ account.on('outgoingCall', this.outgoingCall);
+ account.on('conferenceCall', this.outgoingCall);
+ switch (this.state.mode) {
+ case MODE_PRIVATE:
+ case MODE_NORMAL:
+ account.on('registrationStateChanged', this.registrationStateChanged);
+ account.on('incomingCall', this.incomingCall);
+ account.on('missedCall', this.missedCall);
+ account.on('conferenceInvite', this.conferenceInvite);
+ this.setState({account: account});
+ this.state.account.register();
+ if (this.state.mode !== MODE_PRIVATE) {
+ storage.set('account', {
+ accountId: this.state.accountId,
+ password: this.state.password
+ });
+ } else {
+ // Wipe storage if private login
+ //storage.remove('account'); // lets try this out
+ // history.clear().then(() => {
+ // this.setState({history: []});
+ // });
+ }
+ break;
+ case MODE_GUEST_CALL:
+ this.setState({account: account, loading: null, registrationState: 'registered'});
+ DEBUG(`${accountId} (guest) signed in`);
+ // Start the call immediately, this is call started with "Call by URI"
+ this.startGuestCall(this.state.targetUri, {audio: true, video: true});
+ break;
+ case MODE_GUEST_CONFERENCE:
+ this.setState({account: account, loading: null, registrationState: 'registered'});
+ DEBUG(`${accountId} (conference guest) signed in`);
+ // Start the call immediately, this is call started with "Conference by URI"
+ this.startGuestConference(this.state.targetUri);
+ break;
+ default:
+ DEBUG(`Unknown mode: ${this.state.mode}`);
+ break;
+
+ }
+ } else {
+ DEBUG('Add account error: ' + error);
+ this.setState({loading: null, status: {msg: error.message, level:'danger'}});
+ }
+ });
+ }
+
+ setDevice(device) {
+ const oldDevices = Object.assign({}, this.state.devices);
+
+ if (device.kind === 'videoinput') {
+ oldDevices['camera'] = device;
+ } else if (device.kind === 'audioinput') {
+ oldDevices['mic'] = device;
+ }
+
+ this.setState({devices: oldDevices});
+ storage.set('devices', oldDevices);
+ sylkrtc.utils.closeMediaStream(this.state.localMedia);
+ this.getLocalMedia();
+ }
+
+ getLocalMedia(mediaConstraints={audio: true, video: true}, nextRoute=null) { // eslint-disable-line space-infix-ops
+ DEBUG('getLocalMedia(), mediaConstraints=%o', mediaConstraints);
+ const constraints = Object.assign({}, mediaConstraints);
+
+ if (constraints.video === true) {
+ if ((nextRoute === '/conference' || this.state.mode === MODE_GUEST_CONFERENCE)) {
+ constraints.video = {
+ 'width': {
+ 'ideal': 640
+ },
+ 'height': {
+ 'ideal': 480
+ }
+ };
+
+ // TODO: remove this, workaround so at least safari works wehn joining a video conference
+ } else if ((nextRoute === '/conference' || this.state.mode === MODE_GUEST_CONFERENCE) && isSafari) {
+ constraints.video = false;
+ } else {
+ // ask for 720p video
+ constraints.video = {
+ 'width': {
+ 'ideal': 1280
+ },
+ 'height': {
+ 'ideal': 720
+ }
+ };
+ }
+ }
+
+ DEBUG('getLocalMedia(), (modified) mediaConstraints=%o', constraints);
+
+ this.loadScreenTimer = setTimeout(() => {
+ this.setState({loading: 'Please allow access to your media devices'});
+ }, 150);
+
+
+
+ navigator.mediaDevices.enumerateDevices()
+ .then((devices) => {
+ devices.forEach((device) => {
+ if ('video' in constraints && 'camera' in this.state.devices) {
+ if (constraints.video !== false && (device.deviceId === this.state.devices.camera.deviceId || device.label === this.state.devices.camera.label)) {
+ constraints.video.deviceId = {
+ exact: device.deviceId
+ };
+ }
+ }
+ if ('mic' in this.state.devices) {
+ if (device.deviceId === this.state.devices.mic.deviceId || device.label === this.state.devices.mic.Label) {
+ constraints.audio = {
+ deviceId: {
+ exact: device.deviceId
+ }
+ };
+ }
+ }
+ });
+ })
+ .catch((error) => {
+ DEBUG('Device enumeration failed: %o', error);
+ })
+ .then(() => {
+ return navigator.mediaDevices.getUserMedia(constraints)
+ })
+ .then((localStream) => {
+ clearTimeout(this.loadScreenTimer);
+ this.setState({status: null, loading: null, localMedia: localStream});
+ if (nextRoute !== null) {
+ history.push(nextRoute);
+ }
+ })
+ .catch((error) => {
+ DEBUG('Access failed, trying audio only: %o', error);
+ navigator.mediaDevices.getUserMedia({
+ audio: true,
+ video: false
+ })
+ .then((localStream) => {
+ clearTimeout(this.loadScreenTimer);
+
+ if (nextRoute != '/preview') {
+ DEBUG('Audio only media, but video was requested, creating generated video track');
+ const generatedVideoTrack = utils.generateVideoTrack(localStream);
+ localStream.addTrack(generatedVideoTrack);
+ }
+
+ this.setState({status: null, loading: null, localMedia: localStream, generatedVideoTrack: true});
+ if (nextRoute !== null) {
+ history.push(nextRoute);
+ }
+ })
+ .catch((error) => {
+ DEBUG('Access to local media failed: %o', error);
+ clearTimeout(this.loadScreenTimer);
+ this._notificationCenter.postSystemNotification("Can't access camera or microphone", {timeout: 10});
+ this.setState({
+ loading: null
+ });
+ });
+ });
+ }
+
+ startCall(targetUri, options) {
+ this.setState({targetUri: targetUri});
+ this.addCallHistoryEntry(targetUri);
+ this.getLocalMedia(Object.assign({audio: true, video: true}, options), '/call');
+ }
+
+ startGuestCall(targetUri, options) {
+ this.setState({targetUri: targetUri});
+ this.getLocalMedia(Object.assign({audio: true, video: true}, options));
+ }
+
+ answerCall(options) {
+ this.setState({ showIncomingModal: false });
+ this.setFocusEvents(false);
+ if (this.state.inboundCall !== this.state.currentCall) {
+ // terminate current call to switch to incoming one
+ this.state.inboundCall.removeListener('stateChanged', this.inboundCallStateChanged);
+ this.state.currentCall.removeListener('stateChanged', this.callStateChanged);
+ this.state.currentCall.terminate();
+ this.setState({currentCall: this.state.inboundCall, inboundCall: this.state.inboundCall, localMedia: null});
+ this.state.inboundCall.on('stateChanged', this.callStateChanged);
+ }
+ this.getLocalMedia(Object.assign({audio: true, video: true}, options), '/call');
+ }
+
+ rejectCall() {
+ this.setState({showIncomingModal: false});
+ this.state.inboundCall.terminate();
+ }
+
+ hangupCall() {
+ if (this.state.currentCall != null) {
+ this.state.currentCall.terminate();
+ } else {
+ // We have no call but we still want to cancel
+ if (this.state.localMedia != null) {
+ sylkrtc.utils.closeMediaStream(this.state.localMedia);
+ }
+ history.push('/ready');
+ }
+ }
+
+ escalateToConference(participants) {
+ this.state.currentCall.removeListener('stateChanged', this.callStateChanged);
+ this.state.currentCall.terminate();
+ history.push('/ready');
+ this.setState({currentCall: null, localMedia: null});
+ this.participantsToInvite = participants;
+ const uri = `${utils.generateSillyName()}@${config.defaultConferenceDomain}`;
+ this.startConference(uri);
+ }
+
+ startConference(targetUri) {
+ this.setState({targetUri: targetUri});
+ this.getLocalMedia({audio: true, video: true}, '/conference');
+ }
+
+ startGuestConference(targetUri) {
+ this.setState({targetUri: targetUri});
+ this.getLocalMedia({audio: true, video: true});
+ }
+
+ toggleMute() {
+ this.muteIncoming = !this.muteIncoming;
+ }
+
+ outgoingCall(call) {
+ call.on('stateChanged', this.callStateChanged);
+ this.setState({currentCall: call});
+ }
+
+ incomingCall(call, mediaTypes) {
+ DEBUG('New incoming call from %o with %o', call.remoteIdentity, mediaTypes);
+ if (!mediaTypes.audio && !mediaTypes.video) {
+ call.terminate();
+ return;
+ }
+ call.mediaTypes = mediaTypes;
+ if (this.state.currentCall !== null) {
+ // detect if we called ourselves
+ if (this.state.currentCall.localIdentity.uri === call.remoteIdentity.uri) {
+ DEBUG('Aborting call to myself');
+ call.terminate();
+ return;
+ }
+ this.setState({ showIncomingModal: true, inboundCall: call });
+ this.setFocusEvents(true);
+ call.on('stateChanged', this.inboundCallStateChanged);
+ } else {
+ if (!this.muteIncoming) {
+ //this.refs.audioPlayerInbound.play(true);
+ }
+ this.setFocusEvents(true);
+ call.on('stateChanged', this.callStateChanged);
+ this.setState({currentCall: call, inboundCall: call, showIncomingModal: true});
+ }
+ // if (!this.shouldUseHashRouting) {
+ // this._notificationCenter.postSystemNotification('Incoming call', {body: `From ${call.remoteIdentity.displayName || call.remoteIdentity.uri}`, timeout: 15, silent: false});
+ // }
+ }
+
+ setFocusEvents(enabled) {
+ // if (this.shouldUseHashRouting) {
+ // const remote = window.require('electron').remote;
+ // if (enabled) {
+ // const currentWindow = remote.getCurrentWindow();
+ // currentWindow.on('focus', this.hasFocus);
+ // currentWindow.on('blur', this.hasNoFocus);
+ // this.setState({haveFocus: currentWindow.isFocused()});
+ // } else {
+ // const currentWindow = remote.getCurrentWindow();
+ // currentWindow.removeListener('focus', this.hasFocus);
+ // currentWindow.removeListener('blur', this.hasNoFocus);
+ // }
+ // }
+ }
+
+ // hasFocus() {
+ // this.setState({haveFocus: true});
+ // }
+
+ // hasNoFocus() {
+ // this.setState({haveFocus: false});
+ // }
+
+ missedCall(data) {
+ DEBUG('Missed call from ' + data.originator);
+ this._notificationCenter.postSystemNotification('Missed call', {body: `From ${data.originator.displayName || data.originator.uri}`, timeout: 15, silent: false});
+ if (this.state.currentCall !== null || !config.useServerCallHistory) {
+ this._notificationCenter.postMissedCall(data.originator, () => {
+ if (this.state.currentCall !== null) {
+ this.state.currentCall.removeListener('stateChanged', this.callStateChanged);
+ this.state.currentCall.terminate();
+ this.setState({currentCall: null, missedTargetUri: data.originator.uri, showIncomingModal: false, localMedia: null});
+ } else {
+ this.setState({missedTargetUri: data.originator.uri});
+ }
+ history.push('/ready');
+ });
+ } else {
+ this.getServerHistory();
+ }
+ }
+
+ conferenceInvite(data) {
+ DEBUG('Conference invite from %o to %s', data.originator, data.room);
+ this._notificationCenter.postSystemNotification('Conference invite', {body: `From ${data.originator.displayName || data.originator.uri} for room ${data.room}`, timeout: 15, silent: false});
+ this._notificationCenter.postConferenceInvite(data.originator, data.room, () => {
+ if (this.state.currentCall !== null) {
+ this.state.currentCall.removeListener('stateChanged', this.callStateChanged);
+ this.state.currentCall.terminate();
+ this.setState({currentCall: null, showIncomingModal: false, localMedia: null, generatedVideoTrack: false});
+ }
+ setTimeout(() => {
+ this.startConference(data.room);
+ });
+ });
+ }
+
+ startPreview() {
+ this.getLocalMedia({audio: true, video: true}, '/preview');
+ }
+
+ addCallHistoryEntry(uri) {
+ if (this.state.mode === MODE_NORMAL) {
+ // history.add(uri).then((entries) => {
+ // this.setState({history: entries});
+ // });
+ } else {
+ let entries = this.state.history.slice();
+ if (entries.length !== 0) {
+ const idx = entries.indexOf(uri);
+ if (idx !== -1) {
+ entries.splice(idx, 1);
+ }
+ entries.unshift(uri);
+ // keep just the last 50
+ entries = entries.slice(0, 50);
+ } else {
+ entries = [uri];
+ }
+ this.setState({history: entries});
+ }
+ }
+
+ getServerHistory() {
+ if (!config.useServerCallHistory) {
+ return;
+ }
+
+ DEBUG('Requesting call history from server');
+ let getServerCallHistory = new DigestAuthRequest(
+ 'GET',
+ `${config.serverCallHistoryUrl}?action=get_history&realm=${this.state.account.id.split('@')[1]}`,
+ this.state.account.id.split('@')[0],
+ this.state.password
+ );
+ // Disable logging
+ getServerCallHistory.loggingOn = false;
+ getServerCallHistory.request((data) => {
+ if (data.success !== undefined && data.success === false) {
+ DEBUG('Error getting call history from server: %o', data.error_message)
+ return;
+ }
+ let history = []
+ data.placed.map(elem => {elem.direction = 'placed'; return elem});
+ data.received.map(elem => {elem.direction = 'received'; return elem});
+ history = data.placed;
+ history = history.concat(data.received);
+ history.sort((a,b) => {
+ return new Date(b.startTime) - new Date(a.startTime);
+ });
+ const known = [];
+ history = history.filter((elem) => {
+ if (known.indexOf(elem.remoteParty) <= -1) {
+ if ((elem.media.indexOf('audio') > -1 || elem.media.indexOf('video') > -1) &&
+ (elem.remoteParty !== this.state.account.id || elem.direction !== 'placed')) {
+ known.push(elem.remoteParty);
+ return elem;
+ }
+ }
+ });
+ this.setState({serverHistory: history});
+ }, (errorCode) => {
+ DEBUG('Error getting call history from server: %o', errorCode)
+ });
+ }
+
+ // checkRoute(nextPath, navigation, match) {
+ // if (nextPath !== this.prevPath) {
+ // DEBUG(`Transition from ${this.prevPath} to ${nextPath}`);
+
+ // if (config.useServerCallHistory && nextPath === '/ready' && this.state.registrationState === 'registered' && (this.state.mode !== MODE_GUEST_CALL && this.state.mode !== MODE_GUEST_CONFERENCE)) {
+ // this.getServerHistory();
+ // }
+ // // Press back in ready after a login, prevent initial navigation
+ // // don't deny if there is no registrationState (connection fail)
+ // if (this.prevPath === '/ready' && nextPath === '/login' && this.state.registrationState !== null) {
+ // DEBUG('Transition denied redirecting to /logout');
+ // history.push('/logout');
+ // return false;
+
+ // // Press back in ready after a call
+ // } else if ((nextPath === '/call' || nextPath === '/conference') && this.state.localMedia === null && this.state.registrationState === 'registered') {
+ // return false;
+
+ // // Press back from within a call/conference, don't navigate terminate the call and
+ // // let termination take care of navigating
+ // } else if (nextPath === '/ready' && this.state.registrationState === 'registered' && this.state.currentCall !== null) {
+ // this.state.currentCall.terminate();
+ // return false;
+
+ // // Guest call ended, needed to logout and display msg and logout
+ // } else if (nextPath === '/ready' && (this.state.mode === MODE_GUEST_CALL || this.state.mode === MODE_GUEST_CONFERENCE)) {
+ // history.push('/logout');
+ // this.forceUpdate();
+ // }
+ // }
+ // this.prevPath = nextPath;
+ // }
+
+ render() {
+
+ let footerBox = <View style={styles.footer}><FooterBox /></View>;
+
+ let extraStyles = {};
+
+ if (this.state.localMedia || this.state.registrationState === 'registered') {
+ footerBox = null;
+ }
+ return (
+ <BreadProvider>
+ <PaperProvider theme={theme}>
+ <Router history={history} ref="router">
+ <ImageBackground source={backgroundImage} style={{width: '100%', height: '100%'}}>
+ <SafeAreaView style={[styles.root, extraStyles]}>
+
+ <LoadingScreen text={this.state.loading} show={this.state.loading !== null}/>
+
+ <IncomingCallModal
+ call={this.state.inboundCall}
+ onAnswer={this.answerCall}
+ onHangup={this.rejectCall}
+ show={this.state.showIncomingModal}
+ />
+
+ {/* <Locations hash={this.shouldUseHashRouting} onBeforeNavigation={this.checkRoute}> */}
+ <Switch>
+ <Route exact path="/" component={this.main} />
+ <Route exact path="/login" component={this.login} />
+ <Route exact path="/logout" component={this.logout} />
+ <Route exact path="/ready" component={this.ready} />
+ <Route exact path="/call" component={this.call} />
+ <Route path="/call/:targetUri" component={this.callByUri} />
+ {/* <Location path="/call/:targetUri" urlPatternOptions={{segmentValueCharset: 'a-zA-Z0-9-_ \.@'}} handler={this.callByUri} /> */}
+ <Route exact path="/conference" component={this.conference} />
+ <Route path="/conference/:targetUri" component={this.conferenceByUri} />
+ {/* <Location path="/conference/:targetUri" urlPatternOptions={{segmentValueCharset: 'a-zA-Z0-9-_~ %\.@'}} handler={this.conferenceByUri} /> */}
+ <Route exact path="/preview" component={this.preview} />
+ <Route component={this.notFound} />
+ </Switch>
+ <NotificationCenter ref="notificationCenter" />
+ {footerBox}
+ </SafeAreaView>
+ </ImageBackground>
+ </Router>
+ </PaperProvider>
+ </BreadProvider>
+ );
+ }
+
+ notFound(match) {
+
+ const status = {
+ title : '404',
+ message : 'Oops, the page your looking for can\'t found',
+ level : 'danger',
+ width : 'large'
+ }
+ return (
+ <StatusBox
+ {...status}
+ />
+ );
+ }
+
+ ready() {
+ if (this.state.registrationState !== 'registered') {
+ setTimeout(() => {
+ history.push('/login');
+ });
+ return false;
+ };
+ return (
+ <View>
+ <NavigationBar
+ notificationCenter = {this.notificationCenter}
+ account = {this.state.account}
+ logout = {this.logout}
+ preview = {this.startPreview}
+ toggleMute = {this.toggleMute}
+ />
+ <ReadyBox
+ account = {this.state.account}
+ startCall = {this.startCall}
+ startConference = {this.startConference}
+ missedTargetUri = {this.state.missedTargetUri}
+ history = {this.state.history}
+ key = {this.state.missedTargetUri}
+ serverHistory = {this.state.serverHistory}
+ />
+ </View>
+ );
+ }
+
+ preview() {
+ if (this.state.registrationState !== 'registered') {
+ setTimeout(() => {
+ history.push('/login');
+ });
+ return false;
+ };
+ return (
+ <View>
+ <Preview
+ localMedia = {this.state.localMedia}
+ hangupCall = {this.hangupCall}
+ setDevice = {this.setDevice}
+ selectedDevices = {this.state.devices}
+ />
+ </View>
+ );
+ }
+
+ call() {
+ if (this.state.registrationState !== 'registered') {
+ setTimeout(() => {
+ history.push('/login');
+ });
+ return false;
+ };
+ return (
+ <Call
+ localMedia = {this.state.localMedia}
+ account = {this.state.account}
+ targetUri = {this.state.targetUri}
+ currentCall = {this.state.currentCall}
+ escalateToConference = {this.escalateToConference}
+ hangupCall = {this.hangupCall}
+ // shareScreen = {this.switchScreensharing}
+ generatedVideoTrack = {this.state.generatedVideoTrack}
+ />
+ )
+ }
+
+ callByUri(urlParameters) {
+ // check if the uri contains a domain
+ if (urlParameters.targetUri.indexOf('@') === -1) {
+ const status = {
+ title : 'Invalid user',
+ message : `Oops, the domain of the user is not set in '${urlParameters.targetUri}'`,
+ level : 'danger',
+ width : 'large'
+ }
+ return (
+ <StatusBox {...status} />
+ );
+ }
+ return (
+ <CallByUriBox
+ handleCallByUri = {this.handleCallByUri}
+ notificationCenter = {this.notificationCenter}
+ targetUri = {urlParameters.targetUri}
+ localMedia = {this.state.localMedia}
+ account = {this.state.account}
+ currentCall = {this.state.currentCall}
+ hangupCall = {this.hangupCall}
+ // shareScreen = {this.switchScreensharing}
+ generatedVideoTrack = {this.state.generatedVideoTrack}
+ />
+ );
+ }
+
+ conference() {
+ if (this.state.registrationState !== 'registered') {
+ setTimeout(() => {
+ history.push('/login');
+ });
+ return false;
+ };
+ return (
+ <Conference
+ notificationCenter = {this.notificationCenter}
+ localMedia = {this.state.localMedia}
+ account = {this.state.account}
+ targetUri = {this.state.targetUri}
+ currentCall = {this.state.currentCall}
+ participantsToInvite = {this.participantsToInvite}
+ hangupCall = {this.hangupCall}
+ shareScreen = {this.switchScreensharing}
+ generatedVideoTrack = {this.state.generatedVideoTrack}
+ />
+ )
+ }
+
+ conferenceByUri(urlParameters) {
+ const targetUri = utils.normalizeUri(urlParameters.targetUri, config.defaultConferenceDomain);
+ const idx = targetUri.indexOf('@');
+ const uri = {};
+ const pattern = /^[A-Za-z0-9\-\_]+$/g;
+ uri.user = targetUri.substring(0, idx);
+
+ // check if the uri.user is valid
+ if (!pattern.test(uri.user)) {
+ const status = {
+ title : 'Invalid conference',
+ message : `Oops, the conference ID is invalid: ${targetUri}`,
+ level : 'danger',
+ width : 'large'
+ }
+ return (
+ <StatusBox
+ {...status}
+ />
+ );
+ }
+
+ return (
+ <ConferenceByUriBox
+ notificationCenter = {this.notificationCenter}
+ handler = {this.handleConferenceByUri}
+ targetUri = {targetUri}
+ localMedia = {this.state.localMedia}
+ account = {this.state.account}
+ currentCall = {this.state.currentCall}
+ hangupCall = {this.hangupCall}
+ shareScreen = {this.switchScreensharing}
+ generatedVideoTrack = {this.state.generatedVideoTrack}
+ />
+ );
+ }
+
+ login() {
+ let registerBox;
+ let statusBox;
+
+ if (this.state.status !== null) {
+ statusBox = (
+ <StatusBox
+ message={this.state.status.msg}
+ level={this.state.status.level}
+ />
+ );
+ }
+
+ if (this.state.registrationState !== 'registered') {
+ registerBox = (
+ <RegisterBox
+ registrationInProgress = {this.state.registrationState !== null && this.state.registrationState !== 'failed'}
+ handleRegistration = {this.handleRegistration}
+ autoLogin={true}
+ />
+ );
+ }
+
+ return (
+ <View>
+ {registerBox}
+ {statusBox}
+ </View>
+ );
+ }
+
+ logout() {
+ setTimeout(() => {
+ if (this.state.registrationState !== null && (this.state.mode === MODE_NORMAL || this.state.mode === MODE_PRIVATE)) {
+ this.state.account.unregister();
+ }
+
+ if (this.state.account !== null) {
+ this.state.connection.removeAccount(this.state.account,
+ (error) => {
+ if (error) {
+ DEBUG(error);
+ }
+ }
+ );
+ }
+ storage.set('account', {accountId: this.state.accountId, password: ''});
+ this.setState({account: null, registrationState: null, status: null});
+ history.push('/login');
+ });
+ return <View></View>;
+ }
+
+ main() {
+ return (
+ <View></View>
+ );
+ }
+}
+
+export default Blink;
\ No newline at end of file
diff --git a/app/assets/images/aglogo-white.svg b/app/assets/images/aglogo-white.svg
new file mode 100644
index 0000000..fe9dbc8
--- /dev/null
+++ b/app/assets/images/aglogo-white.svg
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ viewBox="0 0 160 50"
+ height="50"
+ width="160"
+ version="1.1"
+ id="svg4151">
+ <metadata
+ id="metadata4157">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs4155" />
+ <g
+ id="text4701"
+ style="font-style:normal;font-weight:normal;font-size:28.36300278px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:0.8;stroke:#333333;stroke-width:0.44261572;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8">
+ <path
+ id="path4235"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.90837669px;line-height:125%;font-family:'News Gothic Std';-inkscape-font-specification:'News Gothic Std, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:0.8;stroke:#333333;stroke-width:0.44261572;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8"
+ d="m 13.061957,9.7318434 -3.7013721,0 -6.9879345,24.8247176 2.6803036,0 2.1378613,-7.913278 8.0728197,0 2.265494,7.913278 2.680304,0 -7.147476,-24.8247176 z m 1.595418,14.6778536 -6.7964838,0 3.2546548,-13.018618 0.06382,0 3.478013,13.018618 z" />
+ <path
+ id="path4237"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.90837669px;line-height:125%;font-family:'News Gothic Std';-inkscape-font-specification:'News Gothic Std, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:0.8;stroke:#333333;stroke-width:0.44261572;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8"
+ d="M 38.799054,16.432603 C 37.969436,12.34833 35.193408,9.2213094 30.63051,9.2213094 c -5.169157,0 -8.998163,4.7543486 -8.998163,12.9228926 0,8.168544 3.829006,12.922893 8.998163,12.922893 2.456945,0 4.594806,-1.084885 5.934958,-2.935571 l 0,2.425037 2.233586,0 0,-11.901825 -7.65801,0 0,2.233586 5.041523,0 c 0.255267,3.765189 -0.957251,8.040911 -5.552057,8.040911 -3.446105,0 -6.381676,-3.254654 -6.381676,-10.785031 0,-7.530377 2.935571,-10.785031 6.381676,-10.785031 3.637555,0 4.945798,2.776028 5.647782,5.679691 l 2.520762,-0.606259 z" />
+ <path
+ id="path4239"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.90837669px;line-height:125%;font-family:'News Gothic Std';-inkscape-font-specification:'News Gothic Std, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:0.8;stroke:#333333;stroke-width:0.44261572;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8"
+ d="m 51.652644,9.7318434 0,24.8247176 2.616487,0 0,-11.167932 3.797096,0 c 6.764576,0 8.551445,-3.829006 8.551445,-6.860301 0,-2.871754 -1.946411,-6.7964846 -8.136636,-6.7964846 l -6.828392,0 z m 2.616487,2.2335866 1.818777,0 c 3.446105,0 7.913277,-0.127634 7.913277,4.594806 0,4.467173 -4.148089,4.594806 -7.562285,4.594806 l -2.169769,0 0,-9.189612 z" />
+ <path
+ id="path4241"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.90837669px;line-height:125%;font-family:'News Gothic Std';-inkscape-font-specification:'News Gothic Std, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:0.8;stroke:#333333;stroke-width:0.44261572;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8"
+ d="m 72.08996,16.943137 -2.488853,0 0,17.613424 2.488853,0 0,-9.987322 c 0.957252,-2.552671 2.648396,-6.062592 5.90305,-5.615875 l 0,-2.265494 -0.957251,0 c -2.616487,0 -3.892822,1.946411 -4.881982,4.052363 l -0.06382,0 0,-3.797096 z" />
+ <path
+ id="path4243"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.90837669px;line-height:125%;font-family:'News Gothic Std';-inkscape-font-specification:'News Gothic Std, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:0.8;stroke:#333333;stroke-width:0.44261572;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8"
+ d="m 86.54994,35.067095 c 3.92473,0 7.051751,-2.712212 7.051751,-9.317246 0,-6.605034 -3.127021,-9.317246 -7.051751,-9.317246 -3.92473,0 -7.051751,2.712212 -7.051751,9.317246 0,6.605034 3.127021,9.317246 7.051751,9.317246 z m 0,-2.105953 c -3.829005,0 -4.562898,-4.211906 -4.562898,-7.211293 0,-2.999388 0.733893,-7.211294 4.562898,-7.211294 3.829005,0 4.562898,4.211906 4.562898,7.211294 0,2.999387 -0.733893,7.211293 -4.562898,7.211293 z" />
+ <path
+ id="path4245"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.90837669px;line-height:125%;font-family:'News Gothic Std';-inkscape-font-specification:'News Gothic Std, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:0.8;stroke:#333333;stroke-width:0.44261572;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8"
+ d="m 99.573542,16.943137 -2.488853,0 0,18.794033 c 0,1.308244 0.159541,2.776029 -1.659236,2.776029 -0.319084,0 -0.670076,-0.06382 -1.021068,-0.127633 l 0,2.393128 1.148702,0 c 2.584578,0 4.020455,-1.116793 4.020455,-4.339539 l 0,-19.496018 z m 0,-7.2112936 -2.488853,0 0,2.7441206 2.488853,0 0,-2.7441206 z" />
+ <path
+ id="path4247"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.90837669px;line-height:125%;font-family:'News Gothic Std';-inkscape-font-specification:'News Gothic Std, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:0.8;stroke:#333333;stroke-width:0.44261572;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8"
+ d="m 116.29752,26.164657 c 0.35099,-4.30763 -1.11679,-9.732054 -6.19022,-9.732054 -3.92473,0 -7.05175,2.712212 -7.05175,9.317246 0,6.605034 3.12702,9.317246 7.05175,9.317246 3.03129,0 5.39251,-1.691144 6.34976,-3.956639 l -1.78686,-1.18061 c -0.89344,1.531602 -2.45695,3.031296 -4.30764,3.031296 -2.55267,0 -4.69053,-1.754961 -4.69053,-6.796485 l 10.62549,0 z m -10.56167,-2.105952 c 0.0319,-2.488854 1.37206,-5.52015 4.18,-5.52015 2.61648,0 3.829,3.254655 3.76519,5.52015 l -7.94519,0 z" />
+ <path
+ id="path4249"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.90837669px;line-height:125%;font-family:'News Gothic Std';-inkscape-font-specification:'News Gothic Std, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:0.8;stroke:#333333;stroke-width:0.44261572;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8"
+ d="m 132.14551,20.899775 c -0.95725,-2.648395 -2.74412,-4.467172 -5.64778,-4.467172 -3.92473,0 -7.05175,2.712212 -7.05175,9.317246 0,6.605034 3.12702,9.317246 7.05175,9.317246 2.83985,0 5.10534,-2.074045 6.12641,-4.754349 l -2.01023,-0.893434 c -0.7658,1.723052 -1.97832,3.446105 -4.11618,3.54183 -3.829,0 -4.5629,-4.211906 -4.5629,-7.211293 0,-2.999388 0.7339,-7.211294 4.5629,-7.211294 1.97832,-0.06382 2.93557,1.691144 3.54183,3.318472 l 2.10595,-0.957252 z" />
+ <path
+ id="path4251"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.90837669px;line-height:125%;font-family:'News Gothic Std';-inkscape-font-specification:'News Gothic Std, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:0.8;stroke:#333333;stroke-width:0.44261572;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8"
+ d="m 139.54378,11.231537 -2.48885,0 0,5.7116 -2.68031,0 0,2.105952 2.68031,0 0,9.955414 c 0,3.222746 -0.22336,6.062592 3.98854,6.062592 0.86153,0 1.69115,-0.223359 2.48886,-0.510534 l 0,-1.818778 c -0.60626,0.159542 -1.27634,0.223359 -1.97832,0.223359 -2.04214,0 -2.01023,-1.116794 -2.01023,-2.839846 l 0,-11.072207 3.98855,0 0,-2.105952 -3.98855,0 0,-5.7116 z" />
+ <path
+ id="path4253"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.90837669px;line-height:125%;font-family:'News Gothic Std';-inkscape-font-specification:'News Gothic Std, Normal';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:0.8;stroke:#333333;stroke-width:0.44261572;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8"
+ d="m 157.27636,19.495807 c -1.37206,-2.042136 -3.4142,-3.063204 -5.87114,-3.063204 -2.90367,0 -5.39252,1.850685 -5.39252,4.881981 0,6.317859 9.28534,4.211906 9.28534,8.64717 0,2.010228 -1.62733,2.999388 -3.44611,2.999388 -2.10595,0 -3.63755,-1.021068 -4.5948,-2.839846 l -1.97832,1.244427 c 1.43587,2.456945 3.73328,3.701372 6.57312,3.701372 3.31847,0 5.77542,-2.105953 5.77542,-5.552058 0,-5.934958 -9.28534,-4.052364 -9.28534,-8.359995 0,-1.786869 1.5316,-2.616487 3.15893,-2.616487 1.85069,0 3.0313,0.861527 4.02046,2.329312 l 1.75496,-1.37206 z" />
+ </g>
+</svg>
diff --git a/app/assets/images/blink-48.png b/app/assets/images/blink-48.png
new file mode 100644
index 0000000..c5354bc
Binary files /dev/null and b/app/assets/images/blink-48.png differ
diff --git a/app/assets/images/blink-grey.png b/app/assets/images/blink-grey.png
new file mode 100644
index 0000000..660ea5f
Binary files /dev/null and b/app/assets/images/blink-grey.png differ
diff --git a/app/assets/images/blink-white-big.png b/app/assets/images/blink-white-big.png
new file mode 100644
index 0000000..4dea86d
Binary files /dev/null and b/app/assets/images/blink-white-big.png differ
diff --git a/app/assets/images/blink-white.png b/app/assets/images/blink-white.png
new file mode 100644
index 0000000..a3118f8
Binary files /dev/null and b/app/assets/images/blink-white.png differ
diff --git a/app/assets/images/blink.ico b/app/assets/images/blink.ico
new file mode 100644
index 0000000..493642b
Binary files /dev/null and b/app/assets/images/blink.ico differ
diff --git a/app/assets/images/dark_linen.png b/app/assets/images/dark_linen.png
new file mode 100644
index 0000000..4bcaa7a
Binary files /dev/null and b/app/assets/images/dark_linen.png differ
diff --git a/app/assets/images/noise1.png b/app/assets/images/noise1.png
new file mode 100644
index 0000000..ec01ac5
Binary files /dev/null and b/app/assets/images/noise1.png differ
diff --git a/app/assets/images/noise_dark2.png b/app/assets/images/noise_dark2.png
new file mode 100644
index 0000000..2ec614f
Binary files /dev/null and b/app/assets/images/noise_dark2.png differ
diff --git a/app/assets/images/transparent-1px.png b/app/assets/images/transparent-1px.png
new file mode 100644
index 0000000..9da19ea
Binary files /dev/null and b/app/assets/images/transparent-1px.png differ
diff --git a/app/assets/images/video-camera-slash.png b/app/assets/images/video-camera-slash.png
new file mode 100644
index 0000000..8addeef
Binary files /dev/null and b/app/assets/images/video-camera-slash.png differ
diff --git a/app/assets/sounds/dtmf/0.wav b/app/assets/sounds/dtmf/0.wav
new file mode 100644
index 0000000..887523c
Binary files /dev/null and b/app/assets/sounds/dtmf/0.wav differ
diff --git a/app/assets/sounds/dtmf/1.wav b/app/assets/sounds/dtmf/1.wav
new file mode 100644
index 0000000..00cd984
Binary files /dev/null and b/app/assets/sounds/dtmf/1.wav differ
diff --git a/app/assets/sounds/dtmf/2.wav b/app/assets/sounds/dtmf/2.wav
new file mode 100644
index 0000000..2c420d3
Binary files /dev/null and b/app/assets/sounds/dtmf/2.wav differ
diff --git a/app/assets/sounds/dtmf/3.wav b/app/assets/sounds/dtmf/3.wav
new file mode 100644
index 0000000..d0d2583
Binary files /dev/null and b/app/assets/sounds/dtmf/3.wav differ
diff --git a/app/assets/sounds/dtmf/4.wav b/app/assets/sounds/dtmf/4.wav
new file mode 100644
index 0000000..d89a0b8
Binary files /dev/null and b/app/assets/sounds/dtmf/4.wav differ
diff --git a/app/assets/sounds/dtmf/5.wav b/app/assets/sounds/dtmf/5.wav
new file mode 100644
index 0000000..14191df
Binary files /dev/null and b/app/assets/sounds/dtmf/5.wav differ
diff --git a/app/assets/sounds/dtmf/6.wav b/app/assets/sounds/dtmf/6.wav
new file mode 100644
index 0000000..78093f8
Binary files /dev/null and b/app/assets/sounds/dtmf/6.wav differ
diff --git a/app/assets/sounds/dtmf/7.wav b/app/assets/sounds/dtmf/7.wav
new file mode 100644
index 0000000..3d83e89
Binary files /dev/null and b/app/assets/sounds/dtmf/7.wav differ
diff --git a/app/assets/sounds/dtmf/8.wav b/app/assets/sounds/dtmf/8.wav
new file mode 100644
index 0000000..3db9a8e
Binary files /dev/null and b/app/assets/sounds/dtmf/8.wav differ
diff --git a/app/assets/sounds/dtmf/9.wav b/app/assets/sounds/dtmf/9.wav
new file mode 100644
index 0000000..67a25f7
Binary files /dev/null and b/app/assets/sounds/dtmf/9.wav differ
diff --git a/app/assets/sounds/dtmf/hash.wav b/app/assets/sounds/dtmf/hash.wav
new file mode 100644
index 0000000..40ba2cb
Binary files /dev/null and b/app/assets/sounds/dtmf/hash.wav differ
diff --git a/app/assets/sounds/dtmf/star.wav b/app/assets/sounds/dtmf/star.wav
new file mode 100644
index 0000000..2ab6489
Binary files /dev/null and b/app/assets/sounds/dtmf/star.wav differ
diff --git a/app/assets/sounds/hangup_tone.wav b/app/assets/sounds/hangup_tone.wav
new file mode 100644
index 0000000..b95ffe3
Binary files /dev/null and b/app/assets/sounds/hangup_tone.wav differ
diff --git a/app/assets/sounds/inbound_ringtone.wav b/app/assets/sounds/inbound_ringtone.wav
new file mode 100644
index 0000000..de4b6a7
Binary files /dev/null and b/app/assets/sounds/inbound_ringtone.wav differ
diff --git a/app/assets/sounds/outbound_ringtone.wav b/app/assets/sounds/outbound_ringtone.wav
new file mode 100644
index 0000000..62ea27c
Binary files /dev/null and b/app/assets/sounds/outbound_ringtone.wav differ
diff --git a/app/assets/sounds/participant_joined.wav b/app/assets/sounds/participant_joined.wav
new file mode 100644
index 0000000..47452a7
Binary files /dev/null and b/app/assets/sounds/participant_joined.wav differ
diff --git a/app/assets/sounds/participant_left.wav b/app/assets/sounds/participant_left.wav
new file mode 100644
index 0000000..64ae241
Binary files /dev/null and b/app/assets/sounds/participant_left.wav differ
diff --git a/app/assets/styles/blink/_AboutModal.scss b/app/assets/styles/blink/_AboutModal.scss
new file mode 100644
index 0000000..d1672bc
--- /dev/null
+++ b/app/assets/styles/blink/_AboutModal.scss
@@ -0,0 +1,4 @@
+.container {
+ padding: 30px;
+ margin: 10px;
+}
\ No newline at end of file
diff --git a/app/assets/styles/blink/_AudioCallBox.scss b/app/assets/styles/blink/_AudioCallBox.scss
new file mode 100644
index 0000000..c9a4ac1
--- /dev/null
+++ b/app/assets/styles/blink/_AudioCallBox.scss
@@ -0,0 +1,18 @@
+.container {
+
+}
+
+.buttonContainer {
+ flex-direction: row;
+ margin: 0 auto;
+ padding-top: 10px;
+}
+
+.button {
+ background-color: white;
+ margin: 10px;
+}
+
+.hangupButton {
+ background-color: rgba(#a94442, .8);
+}
\ No newline at end of file
diff --git a/app/assets/styles/blink/_CallMeMaybeModal.scss b/app/assets/styles/blink/_CallMeMaybeModal.scss
new file mode 100644
index 0000000..d1672bc
--- /dev/null
+++ b/app/assets/styles/blink/_CallMeMaybeModal.scss
@@ -0,0 +1,4 @@
+.container {
+ padding: 30px;
+ margin: 10px;
+}
\ No newline at end of file
diff --git a/app/assets/styles/blink/_ConferenceBox.scss b/app/assets/styles/blink/_ConferenceBox.scss
new file mode 100644
index 0000000..c93b13c
--- /dev/null
+++ b/app/assets/styles/blink/_ConferenceBox.scss
@@ -0,0 +1,25 @@
+.button {
+ background-color: white;
+ margin: 10px;
+}
+
+.container {
+ flex: 1;
+ height: 100%;
+}
+
+.videoContainer {
+ flex: 1;
+ display: flex;
+ background-color: pink;
+}
+
+.hangupButton {
+ background-color: rgba(#a94442, .8);
+}
+
+.wholePageVideo {
+ width: 100%;
+ height: 100%;
+ border: 1px orange solid;
+}
\ No newline at end of file
diff --git a/app/assets/styles/blink/_ConferenceCarousel.scss b/app/assets/styles/blink/_ConferenceCarousel.scss
new file mode 100644
index 0000000..c452f93
--- /dev/null
+++ b/app/assets/styles/blink/_ConferenceCarousel.scss
@@ -0,0 +1,5 @@
+.container {
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+}
\ No newline at end of file
diff --git a/app/assets/styles/blink/_ConferenceHeader.scss b/app/assets/styles/blink/_ConferenceHeader.scss
new file mode 100644
index 0000000..1cda230
--- /dev/null
+++ b/app/assets/styles/blink/_ConferenceHeader.scss
@@ -0,0 +1,10 @@
+.container {
+ flex: 1;
+}
+
+.buttonContainer {
+ flex: 1;
+ flex-direction: row;
+ margin: 0 auto;
+ padding-top: 10px;
+}
\ No newline at end of file
diff --git a/app/assets/styles/blink/_ConferenceMatrixParticipant.scss b/app/assets/styles/blink/_ConferenceMatrixParticipant.scss
new file mode 100644
index 0000000..1a4adea
--- /dev/null
+++ b/app/assets/styles/blink/_ConferenceMatrixParticipant.scss
@@ -0,0 +1,20 @@
+.container {
+ flex: 1;
+}
+
+.videoContainer {
+ flex: 1;
+}
+
+.videoLarge {
+ width: 100%;
+ min-height: 100%;
+ border: 1px green solid;
+}
+
+.video {
+ margin: 0 auto;
+ width: 90%;
+ height: 500px;
+ border: 1px yellow solid;
+}
\ No newline at end of file
diff --git a/app/assets/styles/blink/_ConferenceModal.scss b/app/assets/styles/blink/_ConferenceModal.scss
new file mode 100644
index 0000000..8efcb51
--- /dev/null
+++ b/app/assets/styles/blink/_ConferenceModal.scss
@@ -0,0 +1,4 @@
+.container {
+ padding: 30px;
+ margin: 30px;
+}
\ No newline at end of file
diff --git a/app/assets/styles/blink/_ConferenceParticipantSelf.scss b/app/assets/styles/blink/_ConferenceParticipantSelf.scss
new file mode 100644
index 0000000..c58fbad
--- /dev/null
+++ b/app/assets/styles/blink/_ConferenceParticipantSelf.scss
@@ -0,0 +1,9 @@
+.container {
+ flex: 1;
+}
+
+.video {
+ height: 100px;
+ width: 100px;
+ border: 1px purple solid;
+}
\ No newline at end of file
diff --git a/app/assets/styles/blink/_DTMFModal.scss b/app/assets/styles/blink/_DTMFModal.scss
new file mode 100644
index 0000000..f938176
--- /dev/null
+++ b/app/assets/styles/blink/_DTMFModal.scss
@@ -0,0 +1,13 @@
+.conatiner {
+
+}
+
+.row {
+ flex-direction: row;
+ margin: 0 auto;
+ padding-top: 10px;
+}
+
+.button {
+
+}
diff --git a/app/assets/styles/blink/_EnrollmentModal.scss b/app/assets/styles/blink/_EnrollmentModal.scss
new file mode 100644
index 0000000..54c95e5
--- /dev/null
+++ b/app/assets/styles/blink/_EnrollmentModal.scss
@@ -0,0 +1,15 @@
+.title {
+ color: black;
+ margin: 0 auto;
+}
+
+.container {
+ padding: 30px;
+ //flex: 1;
+ justify-content: flex-start;
+}
+
+.inner {
+ // flex: 1;
+ // justify-content: flex-end;
+}
\ No newline at end of file
diff --git a/app/assets/styles/blink/_EscalateConferenceModal.scss b/app/assets/styles/blink/_EscalateConferenceModal.scss
new file mode 100644
index 0000000..595bbbf
--- /dev/null
+++ b/app/assets/styles/blink/_EscalateConferenceModal.scss
@@ -0,0 +1,3 @@
+.container {
+
+}
\ No newline at end of file
diff --git a/app/assets/styles/blink/_Footer.scss b/app/assets/styles/blink/_Footer.scss
new file mode 100644
index 0000000..bf76cb9
--- /dev/null
+++ b/app/assets/styles/blink/_Footer.scss
@@ -0,0 +1,8 @@
+.container {
+ margin: 0 auto;
+ padding-bottom: 15px;
+}
+
+.text {
+ color: white;
+}
\ No newline at end of file
diff --git a/app/assets/styles/blink/_HistoryTileBox.scss b/app/assets/styles/blink/_HistoryTileBox.scss
new file mode 100644
index 0000000..2fb2731
--- /dev/null
+++ b/app/assets/styles/blink/_HistoryTileBox.scss
@@ -0,0 +1,20 @@
+.history-tile-box {
+ display: flex;
+ align-items: self-start;
+ flex: 1 0 auto;
+ width: 100%;
+ max-width: 1200px;
+ margin: auto;
+
+ // Show hide history cards
+ .card-hidden {
+ height: 100%;
+ visibility: hidden;
+ }
+
+ .card-visible {
+ height: 100%;
+ visibility: visible;
+ animation-delay: .3s;
+ }
+}
diff --git a/app/assets/styles/blink/_IncomingCallModal.scss b/app/assets/styles/blink/_IncomingCallModal.scss
new file mode 100644
index 0000000..bbfe90f
--- /dev/null
+++ b/app/assets/styles/blink/_IncomingCallModal.scss
@@ -0,0 +1,11 @@
+.container {
+
+}
+
+.button {
+
+}
+
+.buttonContainer {
+
+}
\ No newline at end of file
diff --git a/app/assets/styles/blink/_LoadingScreen.scss b/app/assets/styles/blink/_LoadingScreen.scss
new file mode 100644
index 0000000..344428f
--- /dev/null
+++ b/app/assets/styles/blink/_LoadingScreen.scss
@@ -0,0 +1,9 @@
+.container {
+ margin: 0 auto;
+ justify-content: center;
+ align-items: center;
+}
+
+.title {
+ color: white;
+}
diff --git a/app/assets/styles/blink/_LocalMedia.scss b/app/assets/styles/blink/_LocalMedia.scss
new file mode 100644
index 0000000..d8029a9
--- /dev/null
+++ b/app/assets/styles/blink/_LocalMedia.scss
@@ -0,0 +1,23 @@
+.container {
+ flex: 1;
+ height: 100%;
+ width: 100%;
+ display: flex;
+}
+
+.video {
+}
+
+.buttonContainer {
+ position: absolute;
+ bottom: 100;
+ width: 100%;
+ z-index: 99;
+ justify-content: center;
+ align-items: center;
+}
+
+.button {
+ background-color: rgba(#a94442, .8);
+}
+
diff --git a/app/assets/styles/blink/_Logo.scss b/app/assets/styles/blink/_Logo.scss
new file mode 100644
index 0000000..b113b45
--- /dev/null
+++ b/app/assets/styles/blink/_Logo.scss
@@ -0,0 +1,14 @@
+.title {
+ margin: 0 auto;
+ color: white;
+}
+
+.logoContainer {
+ margin: 0 auto;
+}
+
+.logo {
+ width: 200px;
+ height: 200px;
+ resize-mode: contain;
+}
\ No newline at end of file
diff --git a/app/assets/styles/blink/_NavigationBar.scss b/app/assets/styles/blink/_NavigationBar.scss
new file mode 100644
index 0000000..635296b
--- /dev/null
+++ b/app/assets/styles/blink/_NavigationBar.scss
@@ -0,0 +1,44 @@
+// Values
+// 31 -> inner buttonsize + border
+// 38 -> default padding is 6 on a 50px 50-12
+// 20 -> default line-height
+
+.navbar-header {
+ float: left !important;
+}
+
+.navbar-blink-logo {
+ @include background-image-retina($navbar-logo-image, $navbar-height, $navbar-height);
+ width: $navbar-height;
+ height: $navbar-height;
+ margin: 0 auto;
+ margin-left: 15px;
+}
+
+.navbar-btn-toolbar {
+ margin-top: ($navbar-height - 31 - zero($navbar-height - 38)) / 2; // 40 -> 7/2, 50 -> 7/2
+}
+
+.navbar {
+ min-height: $navbar-height;
+
+ button {
+ padding: zero(($navbar-height - 38) / 2) 12px;
+
+ &.btn-fw {
+ width: 58px;
+ margin-right: -5px;
+ }
+ }
+}
+
+.navbar-brand {
+ height: $navbar-height;
+ padding: ($navbar-height - 20) / 2 15px;
+ padding-left: 0;
+ margin-left: 0 !important;
+}
+
+.navbar-text {
+ margin: ($navbar-height - 20) / 2 15px;
+}
diff --git a/app/assets/styles/blink/_Preview.scss b/app/assets/styles/blink/_Preview.scss
new file mode 100644
index 0000000..c4f6710
--- /dev/null
+++ b/app/assets/styles/blink/_Preview.scss
@@ -0,0 +1,24 @@
+.container {
+ flex: 1;
+}
+
+.video {
+ width: 100%;
+ height: 100%;
+}
+
+.buttonContainer {
+ position: absolute;
+ bottom: 100;
+ margin: 0 auto;
+ width: 100%;
+ z-index: 99;
+ justify-content: center;
+ align-items: center;
+}
+
+.button {
+ color: white;
+ background-color: rgba(#a94442, .8);
+}
+
diff --git a/app/assets/styles/blink/_ReadyBox.scss b/app/assets/styles/blink/_ReadyBox.scss
new file mode 100644
index 0000000..996ee7e
--- /dev/null
+++ b/app/assets/styles/blink/_ReadyBox.scss
@@ -0,0 +1,30 @@
+@import './variables';
+
+.title {
+ color: white;
+}
+
+.footer {
+ position: absolute;
+ bottom: 0;
+ font-size: 11px;
+ color: $white-transparent;
+ text-shadow: 0 1px 3px $black-transparent;
+ width: 100%;
+}
+
+.container {
+ padding: 30px;
+}
+
+.button {
+ background-color: grey;
+ margin: 10px;
+}
+
+.buttonGroup {
+ flex: 1;
+ flex-direction: row;
+ margin: 0 auto;
+ padding-top: 10px;
+}
diff --git a/app/assets/styles/blink/_RegisterBox.scss b/app/assets/styles/blink/_RegisterBox.scss
new file mode 100644
index 0000000..0e39b5d
--- /dev/null
+++ b/app/assets/styles/blink/_RegisterBox.scss
@@ -0,0 +1,7 @@
+.registerBox {
+ padding: 30px;
+}
+
+.title {
+ color: white;
+}
\ No newline at end of file
diff --git a/app/assets/styles/blink/_RegisterForm.scss b/app/assets/styles/blink/_RegisterForm.scss
new file mode 100644
index 0000000..b1790c0
--- /dev/null
+++ b/app/assets/styles/blink/_RegisterForm.scss
@@ -0,0 +1,17 @@
+.title {
+ margin: 0 auto;
+ color: white;
+}
+
+.row {
+ padding: 12px 0;
+}
+
+.button {
+ margin: 4px;
+}
+
+.input {
+ border-radius: 5px;
+}
+
diff --git a/app/assets/styles/blink/_URIInput.scss b/app/assets/styles/blink/_URIInput.scss
new file mode 100644
index 0000000..d69280a
--- /dev/null
+++ b/app/assets/styles/blink/_URIInput.scss
@@ -0,0 +1,35 @@
+div {
+ &.uri-input {
+ .algolia-autocomplete {
+ width: 100%;
+
+ .aa-hint {
+ color: $lighter-gray;
+ }
+
+ .aa-input,
+ .aa-hint {
+ width: 100%;
+ }
+
+ .aa-dropdown-menu {
+ width: 100%;
+ background-color: $white;
+ border: 1px solid $lighter-gray;
+ border-top: 0;
+
+ .aa-suggestion {
+ padding: 5px 4px;
+ color: $gray;
+ text-align: left;
+ cursor: pointer;
+
+ &.aa-cursor {
+ color: darken($gray, 5%);
+ background-color: $boostrap-link-hover-bg;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/app/assets/styles/blink/_animations.scss b/app/assets/styles/blink/_animations.scss
new file mode 100644
index 0000000..56ea22e
--- /dev/null
+++ b/app/assets/styles/blink/_animations.scss
@@ -0,0 +1,86 @@
+// Sound animation
+
+.animate-sound1 {
+ animation: fade-custom 3s ease-in-out infinite;
+}
+
+@keyframes fade-custom {
+ from {opacity: 0;}
+ to {opacity: 1;}
+}
+
+
+// BELL
+@keyframes ring {
+ 0% {
+ transform: rotate(-15deg);
+ }
+
+ 2% {
+ transform: rotate(15deg);
+ }
+
+ 4% {
+ transform: rotate(-18deg);
+ }
+
+ 6% {
+ transform: rotate(18deg);
+ }
+
+ 8% {
+ transform: rotate(-22deg);
+ }
+
+ 10% {
+ transform: rotate(22deg);
+ }
+
+ 12% {
+ transform: rotate(-18deg);
+ }
+
+ 14% {
+ transform: rotate(18deg);
+ }
+
+ 16% {
+ transform: rotate(-12deg);
+ }
+
+ 18% {
+ transform: rotate(12deg);
+ }
+
+ 20% {
+ transform: rotate(0deg);
+ }
+}
+
+.faa-ring {
+ &.animated {
+ animation: ring 2s ease infinite;
+ transform-origin-x: 50%;
+ transform-origin-y: 0;
+ transform-origin-z: initial;
+
+ &.faa-fast {
+ animation: ring 1s ease infinite;
+ }
+
+ &.faa-slow {
+ animation: ring 3s ease infinite;
+ }
+ }
+}
+
+// Incoming Modal animation
+.incoming-modal-enter {
+ animation: fadeIn ease .3s;
+}
+
+.incoming-modal-exit {
+ &.incoming-modal-exit-active {
+ animation: fadeOut ease .3s;
+ }
+}
diff --git a/app/assets/styles/blink/_buttons.scss b/app/assets/styles/blink/_buttons.scss
new file mode 100644
index 0000000..ae9ebba
--- /dev/null
+++ b/app/assets/styles/blink/_buttons.scss
@@ -0,0 +1,52 @@
+// Custom default button
+.btn-default {
+ &,
+ &:hover,
+ &:focus {
+ color: $default-button-foreground-color;
+ text-shadow: none; // Prevent inheritence from `body`
+ background-color: $default-button-background-color;
+ border: 1px solid $default-button-background-color;
+ }
+}
+
+// Round Button
+
+%btn-round {
+ margin: 4px;
+ border-radius: 50%;
+ opacity: .9;
+}
+
+.btn-round {
+ @extend %btn-round;
+ width: 45px;
+ height: 45px;
+ font-size: 20px;
+}
+
+.btn-round-big {
+ @extend %btn-round;
+ width: 55px;
+ height: 55px;
+ font-size: 22px;
+}
+
+.btn-round-xxl {
+ @extend %btn-round;
+ width: 65px;
+ height: 65px;
+ font-size: 24px;
+}
+
+.btn-link,
+.btn-round,
+.btn-round-big,
+.btn-round-xxl {
+ &:focus {
+ &,
+ &:active {
+ outline: 0;
+ }
+ }
+}
diff --git a/app/assets/styles/blink/_call.scss b/app/assets/styles/blink/_call.scss
new file mode 100644
index 0000000..d79f4d7
--- /dev/null
+++ b/app/assets/styles/blink/_call.scss
@@ -0,0 +1,74 @@
+.call-buttons {
+ position: absolute;
+ right: 0;
+ bottom: 0 !important;
+ left: 0;
+ z-index: 1;
+ padding-bottom: 35px;
+ margin: auto;
+ overflow: hidden;
+}
+
+.top-overlay {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ z-index: 2;
+}
+
+.call-header {
+ padding: 4px 0;
+ color: $white;
+ background-color: $darker-gray-transparent;
+
+ p {
+ margin-bottom: 2px !important;
+ overflow: hidden;
+ font-size: 17px !important;
+ line-height: 1.2 !important;
+ text-overflow: ellipsis;
+ }
+
+ p + p {
+ margin-bottom: 0 !important;
+ }
+}
+
+.call-user-icon {
+ padding-bottom: 100px;
+}
+
+// Buttons Animation
+
+.videobuttons-enter {
+ animation: fadeInUp linear .3s;
+}
+
+.videobuttons-exit {
+ &.videobuttons-exit-active {
+ animation: fadeOutDown linear .3s;
+ }
+}
+
+// Video header animation
+.videoheader-enter {
+ animation: fadeInDown linear .3s;
+}
+
+.videoheader-exit {
+ &.videoheader-exit-active {
+ animation: fadeOutUp linear .3s;
+ }
+}
+
+// Watermark animation
+.watermark-enter {
+ animation: fadeIn linear .6s;
+}
+
+.watermark-exit {
+ &.watermark-exit-active {
+ animation: fadeOut linear .3s;
+ }
+}
diff --git a/app/assets/styles/blink/_conference.scss b/app/assets/styles/blink/_conference.scss
new file mode 100644
index 0000000..85ef181
--- /dev/null
+++ b/app/assets/styles/blink/_conference.scss
@@ -0,0 +1,286 @@
+.conference-buttons {
+ padding-top: 10px;
+ margin: auto;
+ overflow: hidden;
+}
+
+.conference-top-buttons {
+ position: absolute;
+ top: -4px;
+ right: 0;
+ margin-top: 3.5px;
+
+ .btn-link {
+ color: $lighter-gray;
+
+ &:hover {
+ color: $white;
+ }
+ }
+}
+
+.conference-thumbnails {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 2;
+ max-height: 114px;
+ min-height: 114px;
+
+ .participant-container {
+ width: $video-thumbnail-width !important;
+ height: $video-thumbnail-height !important;
+ margin: 5px;
+
+ video {
+ width: 100% ;
+ height: 100% ;
+ background-color: $gray;
+ border: 1px solid $white;
+ border-radius: 10px;
+ }
+ }
+
+ .conference-active {
+ box-shadow: 0 0 10px 2px $bootstrap-base;
+ }
+
+ .mute {
+ position: absolute;
+ top: 25px;
+ z-index: 2;
+ width: 87px;
+
+ button {
+ transform: translateX(50%);
+ }
+ }
+
+ .mute-self {
+ position: absolute;
+ top: 39px;
+ z-index: 2;
+ width: 136px;
+ text-align: center;
+
+ i {
+ transform: translateX(50%);
+ }
+ }
+
+ .left-arrow {
+ float: left;
+ margin-left: 15px;
+ color: $light-gray;
+ transform: translateY(50%);
+ }
+
+ .right-arrow {
+ float: right;
+ margin-right: 15px;
+ color: $light-gray;
+ transform: translateY(50%);
+ }
+
+ .carousel {
+ margin-right: 50px !important;
+ margin-left: 50px !important;
+ overflow: hidden;
+ }
+
+ .carousel-list {
+ padding-bottom: 17px;
+ margin: auto !important;
+ overflow-x: auto;
+ overflow-y: hidden;
+ white-space: nowrap;
+ }
+}
+
+// Carousel Animation
+
+.carousel-enter {
+ animation: fadeIn ease .5s;
+}
+
+.carousel-exit {
+ &.carousel-exit-active {
+ animation: fadeOutDown ease .3s;
+ }
+}
+
+.conference {
+ top: 0;
+ left: 0;
+ display: flex;
+ align-items: center;
+ flex-direction: row;
+ justify-content: center;
+ width: 100% !important;
+ height: 100% !important;
+ margin-right: 0;
+ overflow: hidden;
+ transition: margin 225ms cubic-bezier(0, 0, .2, 1) 0ms, width 225ms cubic-bezier(0, 0, .2, 1) 0ms;
+
+ &.drawer-visible {
+ width: calc(100% - 350px) !important;
+ margin-right: 350px;
+ }
+
+ .matrix {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ justify-content: center;
+ width: 100%;
+ max-height: 100vh;
+ min-height: 100vh;
+ }
+
+ .call-header {
+ .container-fluid {
+ position: relative;
+ }
+ }
+
+ .two-columns {
+ .remote-video {
+ flex: 0 0 calc(50% - 12px);
+ }
+ }
+
+ .three-columns {
+ .remote-video {
+ flex: 0 0 calc(33% - 18px);
+ }
+ }
+
+ .one-row {
+ padding-top: calc(25vh - 8px);
+ padding-bottom: calc(25vh - 8px);
+
+ .remote-video {
+ height: calc(50vh - 8px);
+ min-height: calc(50vh - 8px);
+ }
+
+ video {
+ &.poster {
+ @include background-image-retina($video-big-poster-image, 350px, 350px);
+ background-color: $black-transparent;
+ }
+ }
+ }
+
+ .two-row {
+ .remote-video {
+ height: calc(50vh - 8px);
+ min-height: calc(50vh - 8px);
+ }
+
+ &.three-columns {
+ padding-top: calc(17vh - 4px);
+ padding-bottom: calc(17vh - 4px);
+
+ .remote-video {
+ height: calc(33vh - 8px);
+ min-height: calc(33vh - 8px);
+ }
+ }
+ }
+
+ .three-row {
+ .remote-video {
+ height: calc(33vh - 16px);
+ min-height: calc(33vh - 16px);
+ }
+ }
+
+ .remote-video {
+ position: relative;
+ margin: 4px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ border: 3px solid $white-transparent;
+
+ &.conference-active {
+ box-shadow: 0 0 10px 2px $bootstrap-base;
+ }
+
+ &.large {
+ z-index: 0;
+ flex: none;
+ width: 100% !important;
+ height: auto !important;
+ max-height: calc(100vh);
+ min-height: 100%;
+ margin: 0;
+ border-width: 0;
+ }
+
+ .controls {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1;
+ display: flex;
+ align-items: flex-end;
+ flex-direction: row;
+ max-height: 114px;
+ min-height: 114px;
+ padding-left: 20px;
+ box-shadow: inset 0 -100px 60px -60px $black-less-transparent;
+
+ .lead {
+ margin-bottom: 10px;
+ }
+ }
+
+ .controls-top {
+ position: absolute;
+ top: 0;
+ right: 0;
+ left: 0;
+ z-index: 1;
+ display: flex;
+ align-items: center;
+ flex-direction: row;
+ max-height: 50px;
+ min-height: 50px;
+ padding-left: 20px;
+
+ .lead {
+ margin-bottom: 10px;
+ }
+ }
+ }
+
+ .video {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ object-fit: cover;
+ }
+
+ video {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+
+ &.large {
+ &.fit {
+ width: auto !important;
+ }
+ }
+ }
+
+ .fit {
+ background-color: $white-transparent !important;
+ object-fit: contain !important;
+ }
+
+
+}
diff --git a/app/assets/styles/blink/_conferenceDrawer.scss b/app/assets/styles/blink/_conferenceDrawer.scss
new file mode 100644
index 0000000..2f20ee1
--- /dev/null
+++ b/app/assets/styles/blink/_conferenceDrawer.scss
@@ -0,0 +1,161 @@
+.conference-drawer {
+ display: flex;
+ flex-direction: column;
+ height: 100vh;
+ overflow: hidden;
+ color: $gray;
+
+ .header {
+ padding-bottom: 9px;
+ border-bottom: 1px solid $light-gray;
+
+ &:nth-child(n+2) {
+ margin-top: 25px;
+ }
+
+ + .list-group {
+ margin-top: -11px;
+ }
+ }
+
+ .drawer-body {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ padding: 15px;
+ overflow: hidden;
+ text-align: left;
+ }
+
+ .drawer-log {
+ display: flex;
+ flex-direction: column;
+ overflow: hidden;
+
+ pre {
+ background-color: $white;
+ }
+
+ .log-entry {
+ display: flex;
+ padding-bottom: 4px;
+ margin-bottom: 4px;
+ background-color: $white;
+ border-bottom: 1px solid $light-gray;
+
+ .idx {
+ display: flex;
+ align-items: center;
+ padding-right: 8px;
+ color: $light-gray;
+ }
+
+ &:last-of-type {
+ margin-bottom: 0;
+ border-bottom: 0 !important;
+ }
+ }
+ }
+
+ .drawer-files {
+ display: flex;
+ flex-direction: column;
+ max-height: 100%;
+
+ .list-group {
+ width: 350px;
+ margin-bottom: -15px;
+ margin-left: -15px;
+ overflow-x: hidden;
+ overflow-y: auto;
+
+ .list-group-item {
+ margin-left: 0;
+ }
+ }
+
+ .file-link {
+ display: flex;
+ justify-content: space-between;
+
+ span {
+ padding: 0 2px;
+ }
+ }
+
+ a {
+ width: 250px;
+ overflow: hidden;
+ font-weight: bold;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ cursor: pointer;
+ }
+
+ .small {
+ margin-bottom: 2px;
+ }
+ }
+
+ h2 {
+ font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
+ font-size: 18px;
+ font-weight: 300;
+ }
+
+ .list-group {
+ width: 320px;
+ }
+
+ .list-group-item {
+ margin-right: -15px;
+ margin-left: -15px;
+
+ &:first-of-type {
+ border-top-right-radius: 0;
+ border-top-left-radius: 0;
+ }
+
+ &:last-of-type {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+ }
+ }
+
+ .vertical-center {
+ vertical-align: middle;
+
+ h4 {
+ margin-top: 5px;
+ }
+ }
+
+ .btn-default {
+ color: $gray;
+ background-color: $white;
+ border-color: $light-gray;
+
+ &:focus {
+ &,
+ &:active {
+ outline: 0;
+ }
+ }
+ }
+
+ label {
+ width: 25%;
+ }
+
+ .form-group {
+ margin-bottom: 2px;
+
+ &:last-of-type {
+ margin-bottom: 15px;
+ }
+ }
+
+ .dropdown {
+ width: 75%;
+ }
+}
diff --git a/app/assets/styles/blink/_forms.scss b/app/assets/styles/blink/_forms.scss
new file mode 100644
index 0000000..f8dd294
--- /dev/null
+++ b/app/assets/styles/blink/_forms.scss
@@ -0,0 +1,95 @@
+// General
+
+// Forms
+
+.form-dial,
+.form-guest,
+.form-signin {
+ max-width: 330px;
+ padding: 15px;
+ margin: 0 auto;
+}
+
+.form-dial {
+ max-width: 360px;
+}
+
+.form-signin {
+ .checkbox,
+ .form-signin-heading {
+ margin-bottom: 10px;
+ }
+
+ .checkbox {
+ font-weight: normal;
+ }
+
+ input {
+ &[type='password'] {
+ border-top-right-radius: 0;
+ border-top-left-radius: 0;
+ }
+ }
+
+ .input-group {
+ &:first-of-type {
+ input {
+ margin-bottom: -1px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+
+ // Needed to display blue border over next input group
+ &:focus {
+ z-index: 3;
+ }
+ }
+
+ .input-group-addon {
+ &:first-child {
+ padding: 10px;
+ padding-top: 11px;
+ margin-bottom: -1px;
+ font-size: 16px;
+ border: 0;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+ }
+ }
+ }
+
+ ~.input-group {
+ .input-group-addon {
+ &:first-child {
+ padding: 10px;
+ padding-top: 12px;
+ padding-bottom: 11px;
+ font-size: 16px;
+ border: 0;
+ border-top: 1px solid $light-gray;
+ border-top-right-radius: 0;
+ border-top-left-radius: 0;
+ }
+ }
+ }
+ }
+}
+
+.form-guest,
+.form-signin-electron {
+ .input-group {
+ ~.input-group {
+ margin-bottom: 20px;
+ }
+ }
+}
+
+.form-guest,
+.form-signin {
+ .form-control {
+ position: relative;
+ height: auto;
+ padding: 10px;
+ font-size: 16px;
+ box-sizing: border-box;
+ }
+}
diff --git a/app/assets/styles/blink/_functions.scss b/app/assets/styles/blink/_functions.scss
new file mode 100644
index 0000000..ef50d9a
--- /dev/null
+++ b/app/assets/styles/blink/_functions.scss
@@ -0,0 +1,9 @@
+@function zero($number) {
+ $value: 0;
+
+ @if $number > 0 {
+ $value: $number;
+ }
+
+ @return $value;
+}
diff --git a/app/assets/styles/blink/_mixins.scss b/app/assets/styles/blink/_mixins.scss
new file mode 100644
index 0000000..e4bc1f7
--- /dev/null
+++ b/app/assets/styles/blink/_mixins.scss
@@ -0,0 +1,9 @@
+@mixin background-image-retina($file, $width: auto, $height: auto, $type: 'png') {
+ background-image: url($file + '.' + $type);
+ background-size: $width $height;
+ @media only screen and (min-resolution: 1.5dppx) {
+ & {
+ background-image: url($file + '@2x.' + $type);
+ }
+ }
+}
diff --git a/app/assets/styles/blink/_modals.scss b/app/assets/styles/blink/_modals.scss
new file mode 100644
index 0000000..defcfaf
--- /dev/null
+++ b/app/assets/styles/blink/_modals.scss
@@ -0,0 +1,45 @@
+
+.modal-content {
+ a {
+ &,
+ &:focus,
+ &:hover {
+ color: $bootstrap-primary;
+ }
+
+ &.btn-primary {
+ color: $white;
+ }
+ }
+}
+
+.modal-body {
+ .lead {
+ font-size: 16px;
+ }
+}
+
+.modal,
+.modal-backdrop {
+ z-index: 9999 !important;
+}
+
+// Modal colors, text should not be white
+
+.modal-body,
+.modal-header,
+.modal-footer {
+ color: $gray;
+}
+
+.modal-danger > .modal-content > .modal-header {
+ padding: 10px;
+ color: $bootstrap-danger !important;
+ background-color: $bootstrap-danger-bg;
+ border-color: $boostrap-danger-border;
+ border-radius: 6px 6px 0 0;
+}
+
+.modal-danger > .modal-content {
+ border-color: $boostrap-danger-border;
+}
diff --git a/app/assets/styles/blink/_notifications.scss b/app/assets/styles/blink/_notifications.scss
new file mode 100644
index 0000000..76ecf70
--- /dev/null
+++ b/app/assets/styles/blink/_notifications.scss
@@ -0,0 +1,4 @@
+.notifications-tr {
+ right: 40px !important;
+ z-index: 1500 !important;
+}
diff --git a/app/assets/styles/blink/_popovers.scss b/app/assets/styles/blink/_popovers.scss
new file mode 100644
index 0000000..8b8d3dd
--- /dev/null
+++ b/app/assets/styles/blink/_popovers.scss
@@ -0,0 +1,3 @@
+.popover {
+ color: $gray;
+}
diff --git a/app/assets/styles/blink/_utils.scss b/app/assets/styles/blink/_utils.scss
new file mode 100644
index 0000000..f3ef493
--- /dev/null
+++ b/app/assets/styles/blink/_utils.scss
@@ -0,0 +1,45 @@
+.semi-transparent {
+ opacity: .7;
+}
+
+// Rotate 135 degrees
+
+.rotate-135 {
+ transform: rotate(135deg);
+}
+
+// Bigger fa-4
+
+.fa-4 {
+ font-size: 7em;
+}
+
+.fa-5 {
+ font-size: 8em;
+}
+// First letter is a capital
+
+.capitalize {
+ text-transform: capitalize;
+}
+
+// Shift icons so they overlap
+
+// TODO: rename
+.move-icon {
+ z-index: 0;
+ margin-left: -21px;
+}
+
+.move-icon2 {
+ z-index: 1;
+ margin-left: 28px;
+}
+
+.blue-bar {
+ background-color: $bootstrap-primary !important;
+}
+
+.rotate-minus-45 {
+ transform: rotate(-45deg);
+}
diff --git a/app/assets/styles/blink/_variables.scss b/app/assets/styles/blink/_variables.scss
new file mode 100644
index 0000000..8d5b939
--- /dev/null
+++ b/app/assets/styles/blink/_variables.scss
@@ -0,0 +1,38 @@
+$black: #000;
+$gray: #333;
+$darker-gray: #222;
+$lighter-gray: #999;
+$light-gray: #ccc;
+$white: #fff;
+
+$black-transparent: rgba($black, .5);
+$black-less-transparent: rgba($black, .7);
+$darker-gray-transparent: rgba($darker-gray, .7);
+$white-transparent: rgba($white, .5);
+$white-less-transparent: rgba($white, .8);
+
+$bootstrap-danger: #a94442;
+$bootstrap-danger-bg: #f2dede;
+$boostrap-danger-border: darken(adjust-hue($bootstrap-danger-bg, -10), 5%);
+$bootstrap-base: #428bca;
+$bootstrap-primary: darken($bootstrap-base, 6.5%); // #337ab7
+$boostrap-link-hover-bg: #f5f5f5;
+
+$base-foreground-color: $white;
+$base-background-color: $gray;
+
+$default-button-foreground-color: $gray;
+$default-button-background-color: $white;
+
+// Needs to be 125 x 125px
+$base-logo-image: '../images/blink-white';
+
+$navbar-logo-image: '../images/blink-white';
+$navbar-height: 50px;
+
+$video-poster-image: '../../images/blink-white';
+$video-big-poster-image: '../../images/blink-white-big';
+$video-watermark-image: '../../images/aglogo-white.svg';
+
+$video-thumbnail-width: 150px;
+$video-thumbnail-height: 100px;
diff --git a/app/assets/styles/blink/_video.scss b/app/assets/styles/blink/_video.scss
new file mode 100644
index 0000000..0b4f13c
--- /dev/null
+++ b/app/assets/styles/blink/_video.scss
@@ -0,0 +1,67 @@
+.video-container {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100% !important;
+ height: 100% !important;
+ overflow: hidden;
+
+ &.drawer-visible {
+ width: calc(100% - 350px) !important;
+ margin-right: 350px;
+ }
+
+ video {
+ object-fit: cover;
+
+ &.mirror {
+ transform: scaleX(-1); // mirror
+ }
+
+ &.large {
+ z-index: 0;
+ width: 100% !important;
+ height: auto !important;
+ max-height: 100%;
+ min-height: 100%;
+ }
+
+ &.video-thumbnail {
+ position: absolute;
+ bottom: 10px;
+ left: 30px;
+ z-index: 3;
+ width: $video-thumbnail-width !important;
+ height: $video-thumbnail-height !important;
+ border: 2px solid $white;
+ border-radius: 10px;
+ }
+
+ &.poster {
+ @include background-image-retina($video-poster-image, 75px, 75px);
+ background-position: center;
+ background-repeat: no-repeat;
+ background-blend-mode: luminosity;
+
+ &.large {
+ @include background-image-retina($video-big-poster-image, 350px, 350px);
+ background-color: $black-transparent;
+ }
+ }
+
+ &.fit {
+ background-color: $white-transparent;
+ object-fit: contain !important;
+ }
+ }
+
+ .watermark {
+ position: absolute;
+ top: 0;
+ right: 5px;
+ z-index: 2;
+ width: 160px;
+ height: 50px;
+ background-image: url($video-watermark-image);
+ }
+}
diff --git a/app/assets/styles/blink/root.scss b/app/assets/styles/blink/root.scss
new file mode 100644
index 0000000..e74b745
--- /dev/null
+++ b/app/assets/styles/blink/root.scss
@@ -0,0 +1,107 @@
+@import './variables';
+@import './mixins';
+
+.root {
+ color: $base-foreground-color;
+ text-align: center;
+ position: absolute;
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: stretch;
+ flex: 1;
+ height: 100%;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+}
+
+// Padding for spacing
+.inner {
+ padding: 30px;
+}
+
+.inner-small {
+ padding: 10px;
+}
+
+// Stckiy layer to top
+.sticky-wrapper {
+ position: sticky;
+ top: -1px;
+ z-index: 1;
+ margin-top: calc(50vh - 159px);
+ margin-right: -20px;
+ margin-left: -20px;
+}
+
+.sticky {
+ //sass-lint:disable-block no-color-literals, property-sort-order
+ background-color: $black-less-transparent;
+ //background: linear-gradient(180deg, $black 0%, rgba($black, .95) 15%, rgba($black, .55) 80%, rgba($black, 0) 100%);
+}
+
+
+// Cover
+
+.cover {
+ padding: 0 20px;
+
+ .btn-lg {
+ padding: 10px 20px;
+ font-weight: bold;
+ }
+}
+
+// Scroll main section
+
+.scroll {
+ display: flex;
+ flex-direction: column;
+ height: calc(100vh - 50px);
+ margin-top: 50px;
+ overflow-x: hidden;
+ overflow-y: auto;
+
+ .footer {
+ position: static;
+ padding-top: 10px;
+ }
+}
+
+// Footer
+
+.footer {
+ position: absolute;
+ bottom: 0;
+ font-size: 11px;
+ color: $white-transparent;
+ text-shadow: 0 1px 3px $black-transparent;
+ width: 100%;
+}
+
+// Handle the widths
+.cover-container,
+.half-width {
+ width: 100%; // Must be percentage or pixels for horizontal alignment
+}
+
+
+@media (min-width: 992px) {
+ .half-width {
+ width: 500px;
+ margin: auto;
+ }
+}
+
+// Helper to include shadow if footer is not displayed from main
+.extra-shadow {
+ position: fixed;
+ bottom: -100px;
+ z-index: 10;
+ width: 100vw;
+ height: 100px;
+ margin: 0 -20px;
+ //box-shadow: 0 -5px 100px $black-transparent;
+}
diff --git a/app/components/AboutModal.js b/app/components/AboutModal.js
new file mode 100644
index 0000000..13c5d11
--- /dev/null
+++ b/app/components/AboutModal.js
@@ -0,0 +1,27 @@
+import React from 'react';
+import { Text } from 'react-native';
+import PropTypes from 'prop-types';
+import { Modal, Portal, Surface, Title } from 'react-native-paper';
+
+import styles from '../assets/styles/blink/_AboutModal.scss';
+
+const AboutModal = (props) => {
+ return (
+ <Portal>
+ <Modal visible={props.show} onDismiss={props.close}>
+ <Surface style={styles.container}>
+ <Title>About Sylk</Title>
+ <Text>Sylk is the WebRTC client companion for SylkServer</Text>
+ <Text>Copyright &copy; AG Projects</Text>
+ </Surface>
+ </Modal>
+ </Portal>
+ );
+}
+
+AboutModal.propTypes = {
+ show: PropTypes.bool.isRequired,
+ close: PropTypes.func.isRequired
+};
+
+export default AboutModal;
diff --git a/app/components/AudioCallBox.js b/app/components/AudioCallBox.js
new file mode 100644
index 0000000..ab2c6fd
--- /dev/null
+++ b/app/components/AudioCallBox.js
@@ -0,0 +1,203 @@
+import React, { Component } from 'react';
+import { View } from 'react-native';
+import { IconButton } from 'react-native-paper';
+import PropTypes from 'prop-types';
+import debug from 'react-native-debug';
+// const hark = require('hark');
+import autoBind from 'auto-bind';
+
+import CallOverlay from './CallOverlay';
+import DTMFModal from './DTMFModal';
+import EscalateConferenceModal from './EscalateConferenceModal';
+import UserIcon from './UserIcon';
+
+import styles from '../assets/styles/blink/_AudioCallBox.scss';
+
+const DEBUG = debug('blinkrtc:AudioCallBox');
+debug.enable('*');
+
+
+class AudioCallBox extends Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+ this.state = {
+ active : false,
+ audioMuted : false,
+ showDtmfModal : false,
+ showEscalateConferenceModal : false
+ };
+ // this.speechEvents = null;
+
+ this.remoteAudio = React.createRef();
+ }
+
+ componentDidMount() {
+ // This component is used both for as 'local media' and as the in-call component.
+ // Thus, if the call is not null it means we are beyond the 'local media' phase
+ // so don't call the mediaPlaying prop.
+
+ if (this.props.call != null) {
+ switch (this.props.call.state) {
+ case 'established':
+ this.attachStream(this.props.call);
+ break;
+ case 'incoming':
+ this.props.mediaPlaying();
+ // fall through
+ default:
+ this.props.call.on('stateChanged', this.callStateChanged);
+ break;
+ }
+ } else {
+ this.props.mediaPlaying();
+ }
+ }
+
+ componentWillReceiveProps(nextProps) {
+ if (this.props.call == null && nextProps.call) {
+ if (nextProps.call.state === 'established') {
+ this.attachStream(nextProps.call);
+ } else {
+ nextProps.call.on('stateChanged', this.callStateChanged);
+ }
+ }
+ }
+
+ componentWillUnmount() {
+ clearTimeout(this.callTimer);
+ // if (this.speechEvents !== null) {
+ // this.speechEvents.stop();
+ // this.speechEvents = null;
+ // }
+ }
+
+ callStateChanged(oldState, newState, data) {
+ if (newState === 'established') {
+ this.attachStream(this.props.call);
+ }
+ }
+
+ attachStream(call) {
+ this.setState({stream: call.getRemoteStreams()[0]}); //we dont use it anywhere though as audio gets automatically piped
+ // const options = {
+ // interval: 225,
+ // play: false
+ // };
+ // this.speechEvents = hark(remoteStream, options);
+ // this.speechEvents.on('speaking', () => {
+ // this.setState({active: true});
+ // });
+ // this.speechEvents.on('stopped_speaking', () => {
+ // this.setState({active: false});
+ // });
+ }
+
+ escalateToConference(participants) {
+ this.props.escalateToConference(participants);
+ }
+
+ hangupCall(event) {
+ event.preventDefault();
+ this.props.hangupCall();
+ }
+
+ muteAudio(event) {
+ event.preventDefault();
+ const localStream = this.props.call.getLocalStreams()[0];
+
+ if(this.state.audioMuted) {
+ DEBUG('Unmute microphone');
+ localStream.getAudioTracks()[0].enabled = true;
+ this.setState({audioMuted: false});
+ } else {
+ DEBUG('Mute microphone');
+ localStream.getAudioTracks()[0].enabled = false;
+ this.setState({audioMuted: true});
+ }
+
+ }
+
+ showDtmfModal() {
+ this.setState({showDtmfModal: true});
+ }
+
+ hideDtmfModal() {
+ this.setState({showDtmfModal: false});
+ }
+
+ toggleEscalateConferenceModal() {
+ this.setState({
+ showEscalateConferenceModal: !this.state.showEscalateConferenceModal
+ });
+ }
+ render() {
+ let remoteIdentity;
+
+ if (this.props.call !== null) {
+ remoteIdentity = this.props.call.remoteIdentity;
+ } else {
+ remoteIdentity = {uri: this.props.remoteIdentity};
+ }
+
+ return (
+ <View style={styles.container}>
+ <CallOverlay
+ show={true}
+ remoteIdentity={this.props.remoteIdentity}
+ call={this.props.call}
+ />
+ <View className="call-user-icon">
+ <UserIcon identity={remoteIdentity} large={true} active={this.state.active} />
+ </View>
+ <View style={styles.buttonContainer}>
+ <IconButton
+ size={24}
+ style={styles.button}
+ icon="account-plus"
+ onPress={this.toggleEscalateConferenceModal}
+ />
+ <IconButton
+ size={24}
+ style={styles.button}
+ icon={this.state.audioMuted ? 'microphone-off' : 'microphone'}
+ onPress={this.muteAudio}
+ />
+ <IconButton
+ size={24}
+ style={styles.button}
+ icon="dialpad"
+ onPress={this.showDtmfModal}
+ />
+ <IconButton
+ size={24}
+ style={[styles.button, styles.hangupButton]}
+ icon="phone-hangup"
+ onPress={this.hangupCall}
+ />
+ </View>
+ <DTMFModal
+ show={this.state.showDtmfModal}
+ hide={this.hideDtmfModal}
+ call={this.props.call}
+ />
+ <EscalateConferenceModal
+ show={this.state.showEscalateConferenceModal}
+ call={this.props.call}
+ close={this.toggleEscalateConferenceModal}
+ escalateToConference={this.escalateToConference}
+ />
+ </View>
+ );
+ }
+}
+
+AudioCallBox.propTypes = {
+ call : PropTypes.object,
+ escalateToConference : PropTypes.func,
+ hangupCall : PropTypes.func,
+ mediaPlaying : PropTypes.func,
+ remoteIdentity : PropTypes.string
+};
+
+module.exports = AudioCallBox;
diff --git a/app/components/AudioPlayer.js b/app/components/AudioPlayer.js
new file mode 100644
index 0000000..53785c1
--- /dev/null
+++ b/app/components/AudioPlayer.js
@@ -0,0 +1,86 @@
+'use strict';
+
+const React = require('react');
+const PropTypes = require('prop-types');
+const load = require('audio-loader');
+// const play = require('audio-play');
+
+class AudioPlayer extends React.Component {
+ constructor(props) {
+ super(props);
+ this.timeout = null;
+
+ this.buffer = null;
+ this.time = null;
+ this.src = null
+
+ // ES6 classes no longer autobind
+ this.audioEnded = this.audioEnded.bind(this);
+ this.stop = this.stop.bind(this);
+ }
+
+ componentDidMount() {
+ load(this.props.sourceFile).then(
+ (buffer, time) => {
+ this.buffer = buffer;
+ this.time = time;
+ }
+ );
+ }
+
+ audioEnded() {
+ this.timeout = setTimeout(() => {
+ let source = ac.createBufferSource();
+ source.buffer = this.buffer;
+ source.addEventListener('ended', this.audioEnded);
+ source.connect(ac.destination);
+ source.start(this.time || ac.currentTime);
+ this.src = source;
+ }, 3000);
+ }
+
+ componentWillUnmount() {
+ clearTimeout(this.timeout);
+ this.timeout = null;
+ if (this.src !== null) {
+ this.src.removeEventListener('ended', this.audioEnded);
+ this.src = null;
+ }
+ }
+
+ play(repeat) {
+ let source = ac.createBufferSource();
+ source.buffer = this.buffer;
+
+ if (repeat) {
+ this.timeout = null;
+ source.addEventListener('ended', this.audioEnded);
+ } else {
+ source.addEventListener('ended', this.stop);
+ }
+ source.connect(ac.destination);
+ source.start(this.time || ac.currentTime);
+ this.src = source;
+ }
+
+ stop() {
+ if (this.src !== null) {
+ // this.src.stop();
+ this.src.removeEventListener('ended', this.audioEnded);
+ this.src = null;
+ }
+ clearTimeout(this.timeout);
+ this.timeout = null;
+ }
+
+ render() {
+ return (<View></View>);
+ }
+}
+
+AudioPlayer.propTypes = {
+ sourceFile: PropTypes.string.isRequired
+};
+
+
+module.exports = AudioPlayer;
diff --git a/app/components/Call.js b/app/components/Call.js
new file mode 100644
index 0000000..4da59a7
--- /dev/null
+++ b/app/components/Call.js
@@ -0,0 +1,173 @@
+import React, { Component } from 'react';
+import { View } from 'react-native';
+import PropTypes from 'prop-types';
+import assert from 'assert';
+import debug from 'react-native-debug';
+import autoBind from 'auto-bind';
+
+import AudioCallBox from './AudioCallBox';
+import LocalMedia from './LocalMedia';
+import VideoBox from './VideoBox';
+import config from '../config';
+
+const DEBUG = debug('blinkrtc:Call');
+debug.enable('*');
+
+class Call extends Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+
+ if (this.props.localMedia.getVideoTracks().length === 0) {
+ DEBUG('Will send audio only');
+ this.state = {audioOnly: true};
+ } else {
+ this.state = {audioOnly: false};
+ }
+
+ // If current call is available on mount we must have incoming
+ if (this.props.currentCall != null) {
+ this.props.currentCall.on('stateChanged', this.callStateChanged);
+ }
+ }
+
+ componentWillReceiveProps(nextProps) {
+ // Needed for switching to incoming call while in a call
+ if (this.props.currentCall != null && this.props.currentCall != nextProps.currentCall) {
+ if (nextProps.currentCall != null) {
+ nextProps.currentCall.on('stateChanged', this.callStateChanged);
+ } else {
+ this.props.currentCall.removeListener('stateChanged', this.callStateChanged);
+ }
+ }
+ }
+
+ callStateChanged(oldState, newState, data) {
+ if (newState === 'established') {
+ // Check the media type again, remote can choose to not accept all offered media types
+ const currentCall = this.props.currentCall;
+ const remoteHasStreams = currentCall.getRemoteStreams().length > 0;
+ const remoteHasNoVideoTracks = currentCall.getRemoteStreams()[0].getVideoTracks().length === 0;
+ const remoteIsRecvOnly = currentCall.remoteMediaDirections.video[0] === 'recvonly';
+ const remoteIsInactive = currentCall.remoteMediaDirections.video[0] === 'inactive';
+
+ if (remoteHasStreams && (remoteHasNoVideoTracks || remoteIsRecvOnly || remoteIsInactive) && !this.state.audioOnly) {
+ DEBUG('Media type changed to audio');
+ // Stop local video
+ if (this.props.localMedia.getVideoTracks().length !== 0) {
+ currentCall.getLocalStreams()[0].getVideoTracks()[0].stop();
+ }
+ this.setState({audioOnly: true});
+ } else {
+ this.forceUpdate();
+ }
+ currentCall.removeListener('stateChanged', this.callStateChanged);
+ // Switch to video earlier. The callOverlay has a handle on
+ // 'established'. It starts a timer. To prevent a state updating on
+ // unmounted component we try to switch on 'accept'. This means we get
+ // to localMedia first.
+ } else if (newState === 'accepted') {
+ // Switch if we have audioOnly and local videotracks. This means
+ // the call object switched and we are transitioning to an
+ // incoming call.
+ if (this.state.audioOnly && this.props.localMedia.getVideoTracks().length !== 0) {
+ DEBUG('Media type changed to video on accepted');
+ this.setState({audioOnly: false});
+ }
+ }
+ }
+
+ startCall() {
+ assert(this.props.currentCall === null, 'currentCall is not null');
+ let options = {pcConfig: {iceServers: config.iceServers}};
+ options.localStream = this.props.localMedia;
+ let call = this.props.account.call(this.props.targetUri, options);
+ call.on('stateChanged', this.callStateChanged);
+ }
+
+ answerCall() {
+ assert(this.props.currentCall !== null, 'currentCall is null');
+ let options = {pcConfig: {iceServers: config.iceServers}};
+ options.localStream = this.props.localMedia;
+ this.props.currentCall.answer(options);
+ }
+
+ hangupCall() {
+ this.props.hangupCall();
+ }
+
+ mediaPlaying() {
+ if (this.props.currentCall === null) {
+ this.startCall();
+ } else {
+ this.answerCall();
+ }
+ }
+
+ render() {
+ let box;
+ let remoteIdentity;
+
+ if (this.props.currentCall !== null) {
+ remoteIdentity = this.props.currentCall.remoteIdentity.displayName || this.props.currentCall.remoteIdentity.uri;
+ } else {
+ remoteIdentity = this.props.targetUri;
+ }
+
+ if (this.props.localMedia !== null) {
+ if (this.state.audioOnly) {
+ box = (
+ <AudioCallBox
+ remoteIdentity = {remoteIdentity}
+ hangupCall = {this.hangupCall}
+ call = {this.props.currentCall}
+ mediaPlaying = {this.mediaPlaying}
+ escalateToConference = {this.props.escalateToConference}
+ />
+ );
+ } else {
+ if (this.props.currentCall != null && this.props.currentCall.state === 'established') {
+ box = (
+ <VideoBox
+ call = {this.props.currentCall}
+ localMedia = {this.props.localMedia}
+ shareScreen = {this.props.shareScreen}
+ hangupCall = {this.hangupCall}
+ escalateToConference = {this.props.escalateToConference}
+ generatedVideoTrack = {this.props.generatedVideoTrack}
+ />
+ );
+ } else {
+ box = (
+ <LocalMedia
+ remoteIdentity = {remoteIdentity}
+ localMedia = {this.props.localMedia}
+ mediaPlaying = {this.mediaPlaying}
+ hangupCall = {this.hangupCall}
+ generatedVideoTrack = {this.props.generatedVideoTrack}
+ />
+ );
+ }
+ }
+ }
+ return (
+ <View>
+ {box}
+ </View>
+ );
+ }
+}
+
+Call.propTypes = {
+ account : PropTypes.object.isRequired,
+ hangupCall : PropTypes.func.isRequired,
+ shareScreen : PropTypes.func.isRequired,
+ currentCall : PropTypes.object,
+ escalateToConference : PropTypes.func,
+ localMedia : PropTypes.object,
+ targetUri : PropTypes.string,
+ generatedVideoTrack : PropTypes.bool
+};
+
+
+export default Call;
diff --git a/app/components/CallByUriBox.js b/app/components/CallByUriBox.js
new file mode 100644
index 0000000..0729724
--- /dev/null
+++ b/app/components/CallByUriBox.js
@@ -0,0 +1,114 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+import classNames from 'classnames';
+import { Title, Button, TextInput } from 'react-native-paper';
+import autoBind from 'auto-bind';
+import { View } from 'react-native';
+
+import Call from './Call';
+
+class CallByUriBox extends Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+ this.state = {
+ displayName: ''
+ };
+
+ this._notificationCenter = null;
+ }
+
+ componentDidMount() {
+ this._notificationCenter = this.props.notificationCenter();
+ }
+
+ componentWillReceiveProps(nextProps) {
+ if (!this.props.currentCall && nextProps.currentCall) {
+ nextProps.currentCall.on('stateChanged', this.callStateChanged);
+ }
+ }
+
+ callStateChanged(oldState, newState, data) {
+ if (newState === 'terminated') {
+ this._notificationCenter.postSystemNotification('Thanks for calling with Sylk!', {timeout: 10});
+ }
+ }
+
+ handleDisplayNameChange(event) {
+ this.setState({displayName: event.target.value});
+ }
+
+ handleSubmit(event) {
+ event.preventDefault();
+ this.props.handleCallByUri(this.state.displayName, this.props.targetUri);
+ }
+
+ render() {
+ const validInput = this.state.displayName !== '';
+ let content;
+
+ if (this.props.localMedia !== null) {
+ content = (
+ <Call
+ localMedia = {this.props.localMedia}
+ account = {this.props.account}
+ currentCall = {this.props.currentCall}
+ targetUri = {this.props.targetUri}
+ hangupCall = {this.props.hangupCall}
+ shareScreen = {this.props.shareScreen}
+ generatedVideoTrack = {this.props.generatedVideoTrack}
+ />
+ );
+ } else {
+ const classes = classNames({
+ 'capitalize' : true,
+ 'btn' : true,
+ 'btn-lg' : true,
+ 'btn-block' : true,
+ 'btn-default': !validInput,
+ 'btn-primary': validInput
+ });
+
+ content = (
+ <View>
+ <Title>You've been invited to call {this.props.targetUri}</Title>
+ <View className="input-group">
+ <TextInput id="inputName"
+ className="form-control"
+ label="Name"
+ placeholder="Enter your name"
+ value={this.state.displayName}
+ onChange={this.handleDisplayNameChange}
+ required
+ autoFocus
+ />
+ </View>
+ <Button type="submit" className={classes} disabled={!validInput} onPress={this.handleSubmit} icon="camera">Call</Button>
+ </View>
+ );
+ }
+
+ return (
+ <View className="cover-container">
+ <View className="inner cover" >
+ {content}
+ </View>
+ </View>
+ );
+ }
+}
+
+CallByUriBox.propTypes = {
+ handleCallByUri : PropTypes.func.isRequired,
+ notificationCenter : PropTypes.func.isRequired,
+ hangupCall : PropTypes.func.isRequired,
+ shareScreen : PropTypes.func.isRequired,
+ targetUri : PropTypes.string,
+ localMedia : PropTypes.object,
+ account : PropTypes.object,
+ currentCall : PropTypes.object,
+ generatedVideoTrack : PropTypes.bool
+};
+
+
+module.exports = CallByUriBox;
diff --git a/app/components/CallMeMaybeModal.js b/app/components/CallMeMaybeModal.js
new file mode 100644
index 0000000..b58d150
--- /dev/null
+++ b/app/components/CallMeMaybeModal.js
@@ -0,0 +1,74 @@
+import React, { Component } from 'react';
+import { View, Linking } from 'react-native';
+import PropTypes from 'prop-types';
+import { Modal, Title, Surface, Portal, IconButton, Text } from 'react-native-paper';
+import autoBind from 'auto-bind';
+
+import utils from '../utils';
+import styles from '../assets/styles/blink/_CallMeMaybeModal.scss';
+
+class CallMeMaybeModal extends Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+
+ const sipUri = this.props.callUrl.split('/').slice(-1)[0]; // hack!
+ const emailMessage = `You can call me using a Web browser at ${this.props.callUrl} or a SIP client at ${sipUri} ` +
+ 'or by using the freely available Sylk WebRTC client app at http://sylkserver.com';
+ const subject = 'Call me, maybe?';
+
+ this.emailLink = `mailto:?subject=${encodeURI(subject)}&body=${encodeURI(emailMessage)}`;
+ }
+
+ handleClipboardButton(event) {
+ utils.copyToClipboard(this.props.callUrl);
+ this.props.notificationCenter().postSystemNotification('Call me, maybe?', {body: 'URL copied to the clipboard'});
+ this.props.close();
+ }
+
+ handleEmailButton(event) {
+ Linking.canOpenURL(this.emailLink)
+ .then((supported) => {
+ if (!supported) {
+ } else {
+ return Linking.openURL(url);
+ }
+ })
+ .catch((err) => {
+ this.props.notificationCenter().postSystemNotification('Call me, maybe?', {body: 'Unable to open email app'});
+ });
+
+ this.props.close();
+ }
+
+ render() {
+
+ return (
+ <Portal>
+ <Modal visible={this.props.show} onDismiss={this.props.close}>
+ <Surface style={styles.container}>
+ <Title>Call me, maybe?</Title>
+ <Text>
+ Share {this.props.callUrl} with others so they can easily call you. You can copy it to the clipboard or send it via email.
+ </Text>
+ <View>
+ <View>
+ <IconButton onPress={this.handleClipboardButton} icon="content-copy"/>
+ <IconButton className="btn btn-lg btn-primary" onPress={this.handleEmailButton} icon="email" />
+ </View>
+ </View>
+ </Surface>
+ </Modal>
+ </Portal>
+ );
+ }
+}
+
+CallMeMaybeModal.propTypes = {
+ show : PropTypes.bool.isRequired,
+ close : PropTypes.func.isRequired,
+ callUrl : PropTypes.string.isRequired,
+ notificationCenter : PropTypes.func.isRequired
+};
+
+export default CallMeMaybeModal;
diff --git a/app/components/CallOverlay.js b/app/components/CallOverlay.js
new file mode 100644
index 0000000..114fa0b
--- /dev/null
+++ b/app/components/CallOverlay.js
@@ -0,0 +1,107 @@
+import React from 'react';
+import { View, Text } from 'react-native';
+import PropTypes from 'prop-types';
+import classNames from 'classnames';
+import moment from 'moment';
+import momentFormat from 'moment-duration-format';
+import autoBind from 'auto-bind';
+import { Appbar } from 'react-native-paper';
+
+class CallOverlay extends React.Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+
+ this.duration = null;
+ this.timer = null;
+ this._isMounted = true;
+ }
+
+ componentDidMount() {
+ if (this.props.call) {
+ if (this.props.call.state === 'established') {
+ this.startTimer();
+ } else if (this.props.call.state !== 'terminated') {
+ this.props.call.on('stateChanged', this.callStateChanged);
+ }
+ }
+ }
+
+ componentWillReceiveProps(nextProps) {
+ if (this.props.call == null && nextProps.call) {
+ if (nextProps.call.state === 'established') {
+ this.startTimer();
+ } else if (nextProps.call.state !== 'terminated') {
+ nextProps.call.on('stateChanged', this.callStateChanged);
+ }
+ }
+ }
+
+ componentWillUnmount() {
+ this._isMounted = false;
+ clearTimeout(this.timer);
+ }
+
+ callStateChanged(oldState, newState, data) {
+ // Prevent starting timer when we are unmounted
+ if (newState === 'established' && this._isMounted) {
+ this.startTimer();
+ this.props.call.removeListener('stateChanged', this.callStateChanged);
+ }
+ }
+
+ startTimer() {
+ if (this.timer !== null) {
+ // already armed
+ return;
+ }
+
+ // TODO: consider using window.requestAnimationFrame
+
+ const startTime = new Date();
+ this.timer = setInterval(() => {
+ this.duration = moment.duration(new Date() - startTime).format('hh:mm:ss', {trim: false});
+ if (this.props.show) {
+ this.forceUpdate();
+ }
+ }, 300);
+ }
+
+ render() {
+ let header;
+
+ if (this.props.show) {
+ let callDetail;
+ if (this.duration !== null) {
+ callDetail = <View><Icon name="clock"/><Text>{this.duration}</Text></View>;
+ callDetail = this.duration;
+ } else {
+ callDetail = 'Connecting...'
+ }
+
+ header = (
+ <Appbar.Header style={{backgroundColor: 'black'}}>
+ <Appbar.Content
+ title={`Call with ${this.props.remoteIdentity}`}
+ subtitle={callDetail}
+ />
+ </Appbar.Header>
+ );
+ }
+
+ return (
+ <View>
+ {header}
+ </View>
+ );
+ }
+}
+
+CallOverlay.propTypes = {
+ show: PropTypes.bool.isRequired,
+ remoteIdentity: PropTypes.string.isRequired,
+ call: PropTypes.object
+};
+
+
+module.exports = CallOverlay;
diff --git a/app/components/Conference.js b/app/components/Conference.js
new file mode 100644
index 0000000..5fc780a
--- /dev/null
+++ b/app/components/Conference.js
@@ -0,0 +1,109 @@
+import React from 'react';
+import { View } from 'react-native';
+import PropTypes from 'prop-types';
+import assert from 'assert';
+import debug from 'react-native-debug';
+import autoBind from 'auto-bind';
+
+import ConferenceBox from './ConferenceBox';
+import LocalMedia from './LocalMedia';
+import config from '../config';
+
+const DEBUG = debug('blinkrtc:Conference');
+debug.enable('*');
+
+class Conference extends React.Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+ }
+
+ confStateChanged(oldState, newState, data) {
+ DEBUG(`Conference state changed ${oldState} -> ${newState}`);
+ if (newState === 'established') {
+ this.forceUpdate();
+ }
+ }
+
+ start() {
+ if (this.props.currentCall === null) {
+ const options = {
+ pcConfig: {iceServers: config.iceServers},
+ localStream: this.props.localMedia,
+ audio: true,
+ video: true,
+ offerOptions: {
+ offerToReceiveAudio: false,
+ offerToReceiveVideo: false
+ },
+ initialParticipants: this.props.participantsToInvite
+ };
+ DEBUG('Creating conference call', this.props.targetUri.toLowerCase(), options);
+ const confCall = this.props.account.joinConference(this.props.targetUri.toLowerCase(), options);
+ confCall.on('stateChanged', this.confStateChanged);
+ } else {
+ DEBUG('CALL ALREADY STARTED');
+ }
+ }
+
+ hangup() {
+ this.props.hangupCall();
+ }
+
+ mediaPlaying() {
+ if (this.props.currentCall === null) {
+ this.start();
+ } else {
+ DEBUG('CALL ALREADY STARTED');
+ }
+ }
+
+ render() {
+ let box;
+
+ if (this.props.localMedia !== null) {
+ if (this.props.currentCall != null && this.props.currentCall.state === 'established') {
+ box = (
+ <ConferenceBox
+ notificationCenter = {this.props.notificationCenter}
+ call = {this.props.currentCall}
+ hangup = {this.hangup}
+ remoteIdentity = {this.props.targetUri}
+ shareScreen = {this.props.shareScreen}
+ generatedVideoTrack = {this.props.generatedVideoTrack}
+ />
+ );
+ } else {
+ box = (
+ <LocalMedia
+ remoteIdentity = {this.props.targetUri.split('@')[0]}
+ localMedia = {this.props.localMedia}
+ mediaPlaying = {this.mediaPlaying}
+ hangupCall = {this.hangup}
+ generatedVideoTrack = {this.props.generatedVideoTrack}
+ />
+ );
+ }
+ }
+
+ return (
+ <View style={{flex: 1}}>
+ {box}
+ </View>
+ );
+ }
+}
+
+Conference.propTypes = {
+ notificationCenter : PropTypes.func.isRequired,
+ account : PropTypes.object.isRequired,
+ hangupCall : PropTypes.func.isRequired,
+ currentCall : PropTypes.object,
+ localMedia : PropTypes.object,
+ targetUri : PropTypes.string,
+ participantsToInvite : PropTypes.array,
+ generatedVideoTrack : PropTypes.bool
+};
+
+
+module.exports = Conference;
diff --git a/app/components/ConferenceBox.js b/app/components/ConferenceBox.js
new file mode 100644
index 0000000..d3ba58c
--- /dev/null
+++ b/app/components/ConferenceBox.js
@@ -0,0 +1,682 @@
+'use strict';
+
+import React, {Component, Fragment} from 'react';
+import { View } from 'react-native';
+import PropTypes from 'prop-types';
+import * as sylkrtc from 'sylkrtc';
+import classNames from 'classnames';
+import debug from 'react-native-debug';
+import superagent from 'superagent';
+import autoBind from 'auto-bind';
+import { RTCView } from 'react-native-webrtc';
+import { IconButton, Appbar, Portal, Modal, Surface, Paragraph } from 'react-native-paper';
+
+import config from '../config';
+import utils from '../utils';
+//import AudioPlayer from './AudioPlayer';
+import ConferenceDrawer from './ConferenceDrawer';
+import ConferenceDrawerLog from './ConferenceDrawerLog';
+import ConferenceDrawerFiles from './ConferenceDrawerFiles';
+import ConferenceDrawerParticipant from './ConferenceDrawerParticipant';
+import ConferenceDrawerParticipantList from './ConferenceDrawerParticipantList';
+import ConferenceDrawerSpeakerSelection from './ConferenceDrawerSpeakerSelection';
+import ConferenceHeader from './ConferenceHeader';
+import ConferenceCarousel from './ConferenceCarousel';
+import ConferenceParticipant from './ConferenceParticipant';
+import ConferenceMatrixParticipant from './ConferenceMatrixParticipant';
+import ConferenceParticipantSelf from './ConferenceParticipantSelf';
+import InviteParticipantsModal from './InviteParticipantsModal';
+
+import styles from '../assets/styles/blink/_ConferenceBox.scss';
+
+const DEBUG = debug('blinkrtc:ConferenceBox');
+debug.enable('*');
+
+class ConferenceBox extends Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+ this.state = {
+ callOverlayVisible: true,
+ audioMuted: false,
+ videoMuted: false,
+ participants: props.call.participants.slice(),
+ showInviteModal: false,
+ showDrawer: false,
+ showFiles: false,
+ shareOverlayVisible: false,
+ activeSpeakers: props.call.activeParticipants.slice(),
+ selfDisplayedLarge: false,
+ eventLog: [],
+ sharedFiles: props.call.sharedFiles.slice(),
+ largeVideoStream: null
+ };
+
+ const friendlyName = this.props.remoteIdentity.split('@')[0];
+ if (window.location.origin.startsWith('file://')) {
+ this.callUrl = `${config.publicUrl}/conference/${friendlyName}`;
+ } else {
+ this.callUrl = `${window.location.origin}/conference/${friendlyName}`;
+ }
+
+ const emailMessage = `You can join me in the conference using a Web browser at ${this.callUrl} ` +
+ 'or by using the freely available Sylk WebRTC client app at http://sylkserver.com';
+ const subject = 'Join me, maybe?';
+
+ this.emailLink = `mailto:?subject=${encodeURI(subject)}&body=${encodeURI(emailMessage)}`;
+
+ this.overlayTimer = null;
+ this.logEvent = {};
+ this.haveVideo = false;
+ this.uploads = [];
+
+ [
+ 'error',
+ 'warning',
+ 'info',
+ 'debug'
+ ].forEach((level) => {
+ this.logEvent[level] = (
+ (action, messages, originator) => {
+ const log = this.state.eventLog.slice();
+ log.unshift({originator, originator, level: level, action: action, messages: messages});
+ this.setState({eventLog: log});
+ }
+ );
+ });
+ }
+
+ componentDidMount() {
+ for (let p of this.state.participants) {
+ p.on('stateChanged', this.onParticipantStateChanged);
+ p.attach();
+ }
+ this.props.call.on('participantJoined', this.onParticipantJoined);
+ this.props.call.on('participantLeft', this.onParticipantLeft);
+ this.props.call.on('roomConfigured', this.onConfigureRoom);
+ this.props.call.on('fileSharing', this.onFileSharing);
+
+ this.armOverlayTimer();
+
+ // attach to ourselves first if there are no other participants
+ if (this.state.participants.length === 0) {
+ setTimeout(() => {
+ const item = {
+ stream: this.props.call.getLocalStreams()[0],
+ identity: this.props.call.localIdentity
+ };
+ this.selectVideo(item);
+ });
+ } else {
+ // this.changeResolution();
+ }
+
+ if (this.props.call.getLocalStreams()[0].getVideoTracks().length !== 0) {
+ this.haveVideo = true;
+ }
+ }
+
+ componentWillUnmount() {
+ clearTimeout(this.overlayTimer);
+ this.uploads.forEach((upload) => {
+ this.props.notificationCenter().removeNotification(upload[1]);
+ upload[0].abort();
+ })
+ }
+
+ onParticipantJoined(p) {
+ DEBUG(`Participant joined: ${p.identity}`);
+ // this.refs.audioPlayerParticipantJoined.play();
+ p.on('stateChanged', this.onParticipantStateChanged);
+ p.attach();
+ this.setState({
+ participants: this.state.participants.concat([p])
+ });
+ // this.changeResolution();
+ }
+
+ onParticipantLeft(p) {
+ DEBUG(`Participant left: ${p.identity}`);
+ // this.refs.audioPlayerParticipantLeft.play();
+ const participants = this.state.participants.slice();
+ const idx = participants.indexOf(p);
+ if (idx !== -1) {
+ participants.splice(idx, 1);
+ this.setState({
+ participants: participants
+ });
+ }
+ p.detach(true);
+ // this.changeResolution();
+ }
+
+ onParticipantStateChanged(oldState, newState) {
+ if (newState === 'established' || newState === null) {
+ this.maybeSwitchLargeVideo();
+ }
+ }
+
+ onConfigureRoom(config) {
+ const newState = {};
+ newState.activeSpeakers = config.activeParticipants;
+ this.setState(newState);
+
+ if (config.activeParticipants.length === 0) {
+ this.logEvent.info('set speakers to', ['Nobody'], config.originator);
+ } else {
+ const speakers = config.activeParticipants.map((p) => {return p.identity.displayName || p.identity.uri});
+ this.logEvent.info('set speakers to', speakers, config.originator);
+ }
+ this.maybeSwitchLargeVideo();
+ }
+
+ onFileSharing(files) {
+ let stateFiles = this.state.sharedFiles.slice();
+ stateFiles = stateFiles.concat(files);
+ this.setState({sharedFiles: stateFiles});
+ files.forEach((file)=>{
+ if (file.session !== this.props.call.id) {
+ this.props.notificationCenter().postFileShared(file, this.showFiles);
+ }
+ })
+ }
+
+ changeResolution() {
+ let stream = this.props.call.getLocalStreams()[0];
+ if (this.state.participants.length < 2) {
+ this.props.call.scaleLocalTrack(stream, 1.5);
+ } else if (this.state.participants.length < 5) {
+ this.props.call.scaleLocalTrack(stream, 2);
+ } else {
+ this.props.call.scaleLocalTrack(stream, 1);
+ }
+ }
+
+ selectVideo(item) {
+ DEBUG('Switching video to: %o', item);
+ if (item.stream) {
+ this.setState({selfDisplayedLarge: true, largeVideoStream: item.stream});
+ }
+ }
+
+ maybeSwitchLargeVideo() {
+ // Switch the large video to another source, maybe.
+ if (this.state.participants.length === 0 && !this.state.selfDisplayedLarge) {
+ // none of the participants are eligible, show ourselves
+ const item = {
+ stream: this.props.call.getLocalStreams()[0],
+ identity: this.props.call.localIdentity
+ };
+ this.selectVideo(item);
+ } else if (this.state.selfDisplayedLarge) {
+ this.setState({selfDisplayedLarge: false});
+ }
+ }
+
+ handleClipboardButton() {
+ utils.copyToClipboard(this.callUrl);
+ this.props.notificationCenter().postSystemNotification('Join me, maybe?', {body: 'Link copied to the clipboard'});
+ this.setState({shareOverlayVisible: false});
+ }
+
+ handleEmailButton(event) {
+ // if (navigator.userAgent.indexOf('Chrome') > 0) {
+ // let emailWindow = window.open(this.emailLink, '_blank');
+ // setTimeout(() => {
+ // emailWindow.close();
+ // }, 500);
+ // } else {
+ // window.open(this.emailLink, '_self');
+ // }
+ this.setState({shareOverlayVisible: false});
+ }
+
+ handleShareOverlayEntered() {
+ this.setState({shareOverlayVisible: true});
+ }
+
+ handleShareOverlayExited() {
+ this.setState({shareOverlayVisible: false});
+ }
+
+ handleActiveSpeakerSelected(participant, secondVideo=false) { // eslint-disable-line space-infix-ops
+ let newActiveSpeakers = this.state.activeSpeakers.slice();
+ if (secondVideo) {
+ if (participant.id !== 'none') {
+ if (newActiveSpeakers.length >= 1) {
+ newActiveSpeakers[1] = participant;
+ } else {
+ newActiveSpeakers[0] = participant;
+ }
+ } else {
+ newActiveSpeakers.splice(1,1);
+ }
+ } else {
+ if (participant.id !== 'none') {
+ newActiveSpeakers[0] = participant;
+ } else {
+ newActiveSpeakers.shift();
+ }
+ }
+ this.props.call.configureRoom(newActiveSpeakers.map((element) => element.publisherId), (error) => {
+ if (error) {
+ // This causes a state update, hence the drawer lists update
+ this.logEvent.error('set speakers failed', [], this.localIdentity);
+ }
+ });
+ }
+
+ handleDrop(files) {
+ DEBUG('Dropped file %o', files);
+ this.uploadFiles(files);
+ };
+
+ handleFiles(e) {
+ DEBUG('Selected files %o', e.target.files);
+ this.uploadFiles(e.target.files);
+ event.target.value = '';
+ }
+
+ uploadFiles(files) {
+ for (var key in files) {
+ // is the item a File?
+ if (files.hasOwnProperty(key) && files[key] instanceof File) {
+ let uploadRequest;
+ let complete = false;
+ const filename = files[key].name
+ let progressNotification = this.props.notificationCenter().postFileUploadProgress(
+ filename,
+ (notification) => {
+ if (!complete) {
+ uploadRequest.abort();
+ this.uploads.splice(this.uploads.indexOf(uploadRequest), 1);
+ }
+ }
+ );
+ uploadRequest = superagent
+ .post(`${config.fileSharingUrl}/${this.props.remoteIdentity}/${this.props.call.id}/${filename}`)
+ .send(files[key])
+ .on('progress', (e) => {
+ this.props.notificationCenter().editFileUploadNotification(e.percent, progressNotification);
+ })
+ .end((err, response) => {
+ complete = true;
+ this.props.notificationCenter().removeFileUploadNotification(progressNotification);
+ if (err) {
+ this.props.notificationCenter().postFileUploadFailed(filename);
+ }
+ this.uploads.splice(this.uploads.indexOf(uploadRequest), 1);
+ });
+ this.uploads.push([uploadRequest, progressNotification]);
+ }
+ }
+ }
+
+ downloadFile(filename) {
+ // const a = document.createElement('a');
+ // a.href = `${config.fileSharingUrl}/${this.props.remoteIdentity}/${this.props.call.id}/${filename}`;
+ // a.target = '_blank';
+ // a.download = filename;
+ // const clickEvent = document.createEvent('MouseEvent');
+ // clickEvent.initMouseEvent('click', true, true, window, 0,
+ // clickEvent.screenX, clickEvent.screenY, clickEvent.clientX, clickEvent.clientY,
+ // clickEvent.ctrlKey, clickEvent.altKey, clickEvent.shiftKey, clickEvent.metaKey,
+ // 0, null);
+ // a.dispatchEvent(clickEvent);
+ }
+
+ preventOverlay(event) {
+ // Stop the overlay when we are the thumbnail bar
+ event.stopPropagation();
+ }
+
+ muteAudio(event) {
+ event.preventDefault();
+ const localStream = this.props.call.getLocalStreams()[0];
+ if (localStream.getAudioTracks().length > 0) {
+ const track = localStream.getAudioTracks()[0];
+ if(this.state.audioMuted) {
+ DEBUG('Unmute microphone');
+ track.enabled = true;
+ this.setState({audioMuted: false});
+ } else {
+ DEBUG('Mute microphone');
+ track.enabled = false;
+ this.setState({audioMuted: true});
+ }
+ }
+ }
+
+ muteVideo(event) {
+ event.preventDefault();
+ const localStream = this.props.call.getLocalStreams()[0];
+ if (localStream.getVideoTracks().length > 0) {
+ const track = localStream.getVideoTracks()[0];
+ if (this.state.videoMuted) {
+ DEBUG('Unmute camera');
+ track.enabled = true;
+ this.setState({videoMuted: false});
+ } else {
+ DEBUG('Mute camera');
+ track.enabled = false;
+ this.setState({videoMuted: true});
+ }
+ }
+ }
+
+ hangup(event) {
+ event.preventDefault();
+ for (let participant of this.state.participants) {
+ participant.detach();
+ }
+ this.props.hangup();
+ }
+
+ armOverlayTimer() {
+ clearTimeout(this.overlayTimer);
+ this.overlayTimer = setTimeout(() => {
+ this.setState({callOverlayVisible: false});
+ }, 4000);
+ }
+
+ showOverlay() {
+ // if (!this.state.shareOverlayVisible && !this.state.showDrawer && !this.state.showFiles) {
+ // if (!this.state.callOverlayVisible) {
+ // this.setState({callOverlayVisible: true});
+ // }
+ // this.armOverlayTimer();
+ // }
+ }
+
+ toggleInviteModal() {
+ // this.setState({showInviteModal: !this.state.showInviteModal});
+ // if (this.refs.showOverlay) {
+ // this.refs.shareOverlay.hide();
+ // }
+ }
+
+ toggleDrawer() {
+ this.setState({callOverlayVisible: true, showDrawer: !this.state.showDrawer, showFiles: false});
+ clearTimeout(this.overlayTimer);
+ }
+
+ toggleFiles() {
+ this.setState({callOverlayVisible: true, showFiles: !this.state.showFiles, showDrawer: false});
+ clearTimeout(this.overlayTimer);
+ }
+
+ showFiles() {
+ this.setState({callOverlayVisible: true, showFiles: true, showDrawer: false});
+ clearTimeout(this.overlayTimer);
+ }
+
+ render() {
+ if (this.props.call === null) {
+ return (<View></View>);
+ }
+
+ let watermark;
+
+ const largeVideoClasses = classNames({
+ 'animated' : true,
+ 'fadeIn' : true,
+ 'large' : true,
+ 'mirror' : !this.props.call.sharingScreen && !this.props.generatedVideoTrack,
+ 'fit' : this.props.call.sharingScreen
+ });
+
+ let matrixClasses = classNames({
+ 'matrix' : true
+ });
+
+ const containerClasses = classNames({
+ 'video-container': true,
+ 'conference': true,
+ 'drawer-visible': this.state.showDrawer || this.state.showFiles
+ });
+
+ const remoteIdentity = this.props.remoteIdentity.split('@')[0];
+
+ const shareOverlay = (
+ <Portal>
+ <Modal>
+ <Surface>
+ <Paragraph>
+ Invite other online users of this service, share <strong><a href={this.callUrl} target="_blank" rel="noopener noreferrer">this link</a></strong> with others or email, so they can easily join this conference.
+ </Paragraph>
+ <View className="text-center">
+ <View className="btn-group">
+ <IconButton className="btn btn-primary" onPress={this.toggleInviteModal} icon="account-plus" />
+ <IconButton className="btn btn-primary" onPress={this.handleClipboardButton} icon="copy" />
+ <IconButton className="btn btn-primary" onPress={this.handleEmailButton} alt="Send email" icon="email" />
+ </View>
+ </View>
+ </Surface>
+ </Modal>
+ </Portal>
+ );
+
+ const buttons = {};
+
+ // const commonButtonTopClasses = classNames({
+ // 'btn' : true,
+ // 'btn-link' : true
+ // });
+
+ // const fullScreenButtonIcons = classNames({
+ // 'fa' : true,
+ // 'fa-2x' : true,
+ // 'fa-expand' : !this.isFullScreen(),
+ // 'fa-compress' : this.isFullScreen()
+ // });
+
+ const topButtons = [];
+
+ // if (!this.state.showFiles) {
+ // if (this.state.sharedFiles.length !== 0) {
+ // topButtons.push(
+ // <Badge badgeContent={this.state.sharedFiles.length} color="primary" classes={{badge: this.props.classes.badge}}>
+ // <button key="fbButton" type="button" title="Open Drawer" className={commonButtonTopClasses} onPress={this.toggleFiles}> <i className="fa fa-files-o fa-2x"></i> </button>
+ // </Badge>
+ // );
+ // }
+ // }
+
+ if (!this.state.showDrawer) {
+ topButtons.push(<Appbar.Action key="sbButton" title="Open Drawer" onPress={this.toggleDrawer} icon="menu" />);
+ }
+
+ buttons.top = {right: topButtons};
+
+ const muteButtonIcons = this.state.audioMuted ? 'microphone-off' : 'microphone';
+
+ const muteVideoButtonIcons = this.state.videoMuted ? 'video-off' : 'video';
+
+ const bottomButtons = [];
+ bottomButtons.push(
+ <IconButton size={24} style={styles.button} key="shareButton" title="Share link to this conference" icon="account-plus" onPress={this.shareModal} />
+ );
+ bottomButtons.push(<IconButton size={24} style={styles.button} key="muteVideo" title="Mute/unmute video" onPress={this.muteVideo} icon={muteVideoButtonIcons}/>);
+ bottomButtons.push(<IconButton size={24} style={styles.button} key="muteAudio" title="Mute/unmute audio" onPress={this.muteAudio} icon={muteButtonIcons}/>);
+ bottomButtons.push(
+ <View key="shareFiles">
+ <IconButton size={24} style={styles.button} title="Share files" component="span" disableRipple={true} icon="upload"/>
+ </View>
+ );
+ bottomButtons.push(<IconButton size={24} style={[styles.button, styles.hangupButton]} key="hangupButton" title="Leave conference" className="btn btn-round btn-danger" onPress={this.hangup} icon="phone-hangup"/>);
+ buttons.bottom = bottomButtons;
+
+ const participants = [];
+
+ if (this.state.participants.length > 0) {
+ if (this.state.activeSpeakers.findIndex((element) => {return element.id === this.props.call.id}) === -1) {
+ participants.push(
+ <ConferenceParticipantSelf
+ key="myself"
+ stream={this.props.call.getLocalStreams()[0]}
+ identity={this.props.call.localIdentity}
+ audioMuted={this.state.audioMuted}
+ generatedVideoTrack={this.props.generatedVideoTrack}
+ />
+ );
+ }
+ }
+
+ const drawerParticipants = [];
+ drawerParticipants.push(
+ <ConferenceDrawerParticipant
+ key="myself"
+ participant={{identity: this.props.call.localIdentity}}
+ isLocal={true}
+ />
+ );
+
+ let videos = [];
+ if (this.state.participants.length === 0) {
+ videos.push(
+ <RTCView style={styles.wholePageVideo} ref="largeVideo" key="largeVideo" poster="assets/images/transparent-1px.png" streamURL={this.state.largeVideoStream ? this.state.largeVideoStream.toURL() : null} />
+ );
+ } else {
+ const activeSpeakers = this.state.activeSpeakers;
+ const activeSpeakersCount = activeSpeakers.length;
+ matrixClasses = classNames({
+ 'matrix' : true,
+ 'one-row' : activeSpeakersCount === 2,
+ 'two-columns' : activeSpeakersCount === 2
+ });
+
+ if (activeSpeakersCount > 0) {
+ activeSpeakers.forEach((p) => {
+ videos.push(
+ <ConferenceMatrixParticipant
+ key={p.id}
+ participant={p}
+ large={activeSpeakers.length <= 1}
+ isLocal={p.id === this.props.call.id}
+ />
+ );
+ });
+
+ this.state.participants.forEach((p) => {
+ if (this.state.activeSpeakers.indexOf(p) === -1) {
+ participants.push(
+ <ConferenceParticipant
+ key={p.id}
+ participant={p}
+ selected={this.onVideoSelected}
+ />
+ );
+ }
+
+ drawerParticipants.push(
+ <ConferenceDrawerParticipant
+ key={p.id}
+ participant={p}
+ />
+ );
+ });
+ } else {
+ matrixClasses = classNames({
+ 'matrix' : true,
+ 'one-row' : this.state.participants.length === 2 ,
+ 'two-row' : this.state.participants.length >= 3 && this.state.participants.length < 7,
+ 'three-row' : this.state.participants.length >= 7,
+ 'two-columns' : this.state.participants.length >= 2 || this.state.participants.length <= 4,
+ 'three-columns' : this.state.participants.length > 4
+ });
+ this.state.participants.forEach((p) => {
+ videos.push(
+ <ConferenceMatrixParticipant
+ key = {p.id}
+ participant = {p}
+ large = {this.state.participants.length <= 1}
+ />
+ );
+
+ drawerParticipants.push(
+ <ConferenceDrawerParticipant
+ key={p.id}
+ participant={p}
+ />
+ );
+ });
+ }
+ }
+
+ let drawerContent = (
+ <Fragment>
+ <ConferenceDrawerSpeakerSelection
+ participants={this.state.participants.concat([{id: this.props.call.id, publisherId: this.props.call.id, identity: this.props.call.localIdentity}])}
+ selected={this.handleActiveSpeakerSelected}
+ activeSpeakers={this.state.activeSpeakers}
+ />
+ <ConferenceDrawerParticipantList>
+ {drawerParticipants}
+ </ConferenceDrawerParticipantList>
+ <ConferenceDrawerLog log={this.state.eventLog} />
+ </Fragment>
+ );
+
+ let filesDrawerContent = (
+ <ConferenceDrawerFiles
+ sharedFiles={this.state.sharedFiles}
+ downloadFile={this.downloadFile}
+ />
+ );
+
+ let appbar = (
+ <ConferenceHeader
+ show={true}
+ remoteIdentity={remoteIdentity}
+ participants={this.state.participants}
+ buttons={buttons}
+ />
+ );
+
+ return (
+ <View style={{flex: 1}}>
+ {appbar}
+ {/* <input
+ style={{display:'none'}}
+ id="outlined-button-file"
+ multiple
+ type="file"
+ onChange={this.handleFiles}
+ /> */}
+ <View style={styles.container}>
+ <View style={styles.videoContainer}>
+ {videos}
+ </View>
+ <View style={styles.carouselContainer}>
+ <ConferenceCarousel align={'right'}>
+ {participants}
+ </ConferenceCarousel>
+ </View>
+ </View>
+
+ <InviteParticipantsModal
+ show={this.state.showInviteModal}
+ call={this.props.call}
+ close={this.toggleInviteModal}
+ />
+
+ <ConferenceDrawer
+ show={this.state.showDrawer}
+ close={this.toggleDrawer}
+ >
+ {drawerContent}
+ </ConferenceDrawer>
+ </View>
+ );
+ }
+}
+
+ConferenceBox.propTypes = {
+ notificationCenter : PropTypes.func.isRequired,
+ call : PropTypes.object,
+ hangup : PropTypes.func,
+ remoteIdentity : PropTypes.string,
+ generatedVideoTrack : PropTypes.bool
+};
+
+export default ConferenceBox;
diff --git a/app/components/ConferenceByUriBox.js b/app/components/ConferenceByUriBox.js
new file mode 100644
index 0000000..e5174d3
--- /dev/null
+++ b/app/components/ConferenceByUriBox.js
@@ -0,0 +1,124 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import classNames from 'classnames';
+import autoBind from 'auto-bind';
+import { View } from 'react-native';
+import { Title, Button, TextInput } from 'react-native-paper';
+
+import Conference from './Conference';
+
+class ConferenceByUriBox extends React.Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+ this.state = {
+ displayName: ''
+ };
+
+ this._notificationCenter = null;
+ }
+
+ componentDidMount() {
+ this._notificationCenter = this.props.notificationCenter();
+ }
+
+ componentWillReceiveProps(nextProps) {
+ if (!this.props.currentCall && nextProps.currentCall) {
+ nextProps.currentCall.on('stateChanged', this.callStateChanged);
+ }
+ }
+
+ callStateChanged(oldState, newState, data) {
+ if (newState === 'terminated') {
+ this._notificationCenter.postSystemNotification('Thanks for calling with Sylk!', {timeout: 10});
+ }
+ }
+
+ handleDisplayNameChange(event) {
+ this.setState({displayName: event.target.value});
+ }
+
+ handleSubmit(event) {
+ event.preventDefault();
+ let displayName;
+ if (this.state.displayName === '') {
+ this.setState({displayName: 'Guest'});
+ displayName = 'Guest';
+ } else {
+ displayName = this.state.displayName;
+ // Bug in SIPSIMPLE, display name can't end with \ else we don't join chat
+ if (displayName.endsWith('\\')) {
+ displayName = displayName.slice(0, -1);
+ }
+ }
+ this.props.handler(displayName, this.props.targetUri);
+ }
+
+ render() {
+ let content;
+
+ if (this.props.localMedia !== null) {
+ content = (
+ <Conference
+ notificationCenter = {this.props.notificationCenter}
+ localMedia = {this.props.localMedia}
+ account = {this.props.account}
+ currentCall = {this.props.currentCall}
+ targetUri = {this.props.targetUri}
+ hangupCall = {this.props.hangupCall}
+ shareScreen = {this.props.shareScreen}
+ generatedVideoTrack = {this.props.generatedVideoTrack}
+ />
+ );
+ } else {
+ const classes = classNames({
+ 'capitalize' : true,
+ 'btn' : true,
+ 'btn-lg' : true,
+ 'btn-block' : true,
+ 'btn-primary': true
+ });
+
+ const friendlyName = this.props.targetUri.split('@')[0];
+
+ content = (
+ <View>
+ <Title>You're about to join a conference! {friendlyName}</Title>
+ <View >
+ <TextInput id="inputName"
+ label="Name"
+ className="form-control"
+ placeholder="Enter your name (optional)"
+ value={this.state.displayName}
+ onChange={this.handleDisplayNameChange}
+ />
+ </View>
+ <Button type="submit" onPress={this.handleSubmit} className={classes} icon="sign-in">Join</Button>
+ </View>
+ );
+ }
+
+ return (
+ <View className="cover-container">
+ <View className="inner cover" >
+ {content}
+ </View>
+ </View>
+ );
+ }
+}
+
+ConferenceByUriBox.propTypes = {
+ notificationCenter : PropTypes.func.isRequired,
+ handler : PropTypes.func.isRequired,
+ hangupCall : PropTypes.func.isRequired,
+ shareScreen : PropTypes.func.isRequired,
+ targetUri : PropTypes.string,
+ localMedia : PropTypes.object,
+ account : PropTypes.object,
+ currentCall : PropTypes.object,
+ generatedVideoTrack : PropTypes.bool
+};
+
+
+module.exports = ConferenceByUriBox;
diff --git a/app/components/ConferenceCarousel.js b/app/components/ConferenceCarousel.js
new file mode 100644
index 0000000..67e4c0f
--- /dev/null
+++ b/app/components/ConferenceCarousel.js
@@ -0,0 +1,116 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+import autoBind from 'auto-bind';
+import { View } from 'react-native';
+
+import styles from '../assets/styles/blink/_ConferenceCarousel.scss';
+
+class ConferenceCarousel extends Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+ this.state = {
+ displayLeftArrow: false,
+ displayRightArrow: false
+ };
+
+ this.carouselList = null;
+ }
+
+ componentDidMount() {
+ // Get UL from children of the carousel
+ // const children = this.refs.carousel.children;
+ // for (let child of children) {
+ // if (child.tagName == 'UL') {
+ // this.carouselList = child;
+ // }
+ // };
+
+ if (this.canScroll()) {
+ this.setState({displayRightArrow: true}); // eslint-disable-line react/no-did-mount-set-state
+ }
+
+ // window.addEventListener('resize', this.handleResize);
+ }
+
+ componentWillUnmount() {
+ // window.removeEventListener('resize', this.handleResize);
+ }
+
+ componentDidUpdate(prevProps) {
+ if (prevProps.children.length != this.props.children.length) {
+ // We need to wait for the animation to end before calculating
+ setTimeout(() => {
+ this.handleScroll();
+ }, 310);
+ }
+ }
+
+ canScroll() {
+ return false;
+ //return (this.carouselList.scrollWidth > this.carouselList.clientWidth);
+ }
+
+ handleScroll(event) {
+ const newState = {
+ displayRightArrow : false,
+ displayLeftArrow : false
+ };
+
+ if (this.canScroll()) {
+ const scrollWidth = this.carouselList.scrollWidth;
+ const scrollLeft = this.carouselList.scrollLeft;
+ const clientWidth = this.carouselList.clientWidth;
+ newState.displayRightArrow = true;
+ if (scrollLeft > 0) {
+ newState.displayLeftArrow = true;
+ if (scrollLeft === (scrollWidth - clientWidth)) {
+ newState.displayRightArrow = false;
+ }
+ } else {
+ newState.displayLeftArrow = false;
+ }
+ }
+
+ this.setState(newState);
+ }
+
+ scrollToRight(event) {
+ this.carouselList.scrollLeft += 100;
+ }
+
+ scrollToLeft(event) {
+ this.carouselList.scrollLeft -= 100;
+ }
+
+ handleResize(event) {
+ if (this.canScroll()) {
+ this.setState({displayRightArrow: true})
+ } else {
+ if (this.state.displayRightArrow) {
+ this.setState({displayRightArrow: false});
+ }
+ }
+ }
+
+ render() {
+ // const classes = classNames({
+ // 'carousel-list' : true,
+ // 'list-inline' : true,
+ // 'text-right' : this.props.align === 'right'
+ // });
+ return (
+ <View style={styles.container}>
+ {this.props.children}
+ </View>
+ );
+ }
+}
+
+ConferenceCarousel.propTypes = {
+ children: PropTypes.node,
+ align: PropTypes.string
+};
+
+
+module.exports = ConferenceCarousel;
diff --git a/app/components/ConferenceDrawer.js b/app/components/ConferenceDrawer.js
new file mode 100644
index 0000000..248a758
--- /dev/null
+++ b/app/components/ConferenceDrawer.js
@@ -0,0 +1,41 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { Drawer, SheetSide } from 'material-bread';
+
+// const styleSheet = {
+// paper: {
+// width: 350,
+// backgroundColor: Grey[100],
+// borderLeft: '1px solid rgba(0, 0, 0, 0.12)',
+// borderRight: 0
+// },
+// title: {
+// flex: '0 1 auto'
+// },
+// grow: {
+// flex: '1 1 auto'
+// },
+// toolbar: {
+// minHeight: '50px',
+// height: 50
+// }
+// };
+
+const ConferenceDrawer = (props) => {
+ return (
+ <SheetSide
+ visible={props.show}
+ onBackdropPress={props.close}
+ >
+ {props.children}
+ </SheetSide>
+ );
+}
+
+ConferenceDrawer.propTypes = {
+ show : PropTypes.bool.isRequired,
+ close : PropTypes.func.isRequired,
+ children : PropTypes.node
+};
+
+export default ConferenceDrawer;
diff --git a/app/components/ConferenceDrawerFiles.js b/app/components/ConferenceDrawerFiles.js
new file mode 100644
index 0000000..0901f9b
--- /dev/null
+++ b/app/components/ConferenceDrawerFiles.js
@@ -0,0 +1,46 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { View } from 'react-native';
+//import utils from '../utils';
+import { List, IconButton } from 'react-native-paper';
+
+
+const ConferenceDrawerFiles = (props) => {
+ const entries = props.sharedFiles.slice(0).reverse().map((elem, idx) => {
+ const uploader = elem.uploader.displayName || elem.uploader.uri || elem.uploader;
+ //const color = utils.generateMaterialColor(elem.uploader.uri || elem.uploader)['300'];
+
+ let size = (elem.filesize / 1048576).toFixed(2);
+
+ return (
+ <List.Item
+ key={idx}
+ title={`Shared by ${uploader}`}
+ description={`${size} MB`}
+ left={props => <List.Icon {...props} icon="file" />}
+ right={props => <IconButton
+ {...props}
+ icon="download"
+ onPress={() => {props.downloadFile(elem.filename)}}
+ />}
+ />
+ );
+ });
+
+ return (
+ <View className="drawer-files">
+ <List.Section>
+ <List.Subheader>Shared Files</List.Subheader>
+ {entries}
+ </List.Section>
+ </View>
+ );
+};
+
+ConferenceDrawerFiles.propTypes = {
+ sharedFiles: PropTypes.array.isRequired,
+ downloadFile: PropTypes.func.isRequired
+};
+
+
+export default ConferenceDrawerFiles;
diff --git a/app/components/ConferenceDrawerLog.js b/app/components/ConferenceDrawerLog.js
new file mode 100644
index 0000000..c48704f
--- /dev/null
+++ b/app/components/ConferenceDrawerLog.js
@@ -0,0 +1,46 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import utils from '../utils';
+import { Title } from 'react-native-paper';
+import { View } from 'react-native';
+
+const ConferenceDrawerLog = (props) => {
+ const entries = props.log.map((elem, idx) => {
+ // const classes = classNames({
+ // 'text-danger' : elem.level === 'error',
+ // 'text-warning' : elem.level === 'warning',
+ // 'log-entry' : true
+ // });
+
+ const originator = elem.originator.displayName || elem.originator.uri || elem.originator;
+
+ const messages = elem.messages.map((message, index) => {
+ return <span key={index}>{message}<br /></span>;
+ });
+
+ const color = utils.generateMaterialColor(elem.originator.uri || elem.originator)['300'];
+ return null;
+ // return (
+ // <View key={idx}>
+ // <View className="idx"><{props.log.length - idx}</View>
+ // <View>
+ // <Text className="label label-info" style={{backgroundColor: color}}>{originator}</span> <span>{elem.action}</span><br />{messages}</Text
+ // </View>
+ // </View>
+ // )
+ });
+
+ return (
+ <View className="drawer-log">
+ <Title>Configuration Events</Title>
+ {entries}
+ </View>
+ );
+};
+
+ConferenceDrawerLog.propTypes = {
+ log: PropTypes.array.isRequired
+};
+
+
+export default ConferenceDrawerLog;
diff --git a/app/components/ConferenceDrawerParticipant.js b/app/components/ConferenceDrawerParticipant.js
new file mode 100644
index 0000000..a0cb7d5
--- /dev/null
+++ b/app/components/ConferenceDrawerParticipant.js
@@ -0,0 +1,38 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+
+import UserIcon from './UserIcon';
+
+const ConferenceDrawerParticipant = (props) => {
+
+
+ return null;
+
+ // let tag = null
+ // if (props.isLocal) {
+ // tag = <Label bsStyle="primary">Myself</Label>;
+ // }
+
+ // return (
+ // <Media className="text-left">
+ // <Media.Left>
+ // <UserIcon identity={props.participant.identity} />
+ // </Media.Left>
+ // <Media.Body className="vertical-center">
+ // <Media.Heading>{props.participant.identity.displayName || props.participant.identity.uri}</Media.Heading>
+ // </Media.Body>
+ // <Media.Right className="vertical-center">
+ // {tag}
+ // </Media.Right>
+ // </Media>
+ // );
+
+}
+
+ConferenceDrawerParticipant.propTypes = {
+ participant: PropTypes.object.isRequired,
+ isLocal: PropTypes.bool
+};
+
+
+export default ConferenceDrawerParticipant;
diff --git a/app/components/ConferenceDrawerParticipantList.js b/app/components/ConferenceDrawerParticipantList.js
new file mode 100644
index 0000000..f220ece
--- /dev/null
+++ b/app/components/ConferenceDrawerParticipantList.js
@@ -0,0 +1,29 @@
+
+import React from 'react';
+import { View } from 'react-native';
+import PropTypes from 'prop-types';
+import { List } from 'react-native-paper';
+
+const ConferenceDrawerParticipantList = (props) => {
+ const items = [];
+ let idx = 0;
+ React.Children.forEach(props.children, (child) => {
+ items.push(<List.Item title={child} key={idx} />);
+ idx++;
+ });
+
+ return (
+ <View>
+ <List.Section>
+ <List.Subheader>Participants</List.Subheader>
+ {items}
+ </List.Section>
+ </View>
+ );
+};
+
+ConferenceDrawerParticipantList.propTypes = {
+ children: PropTypes.node
+};
+
+export default ConferenceDrawerParticipantList;
diff --git a/app/components/ConferenceDrawerSpeakerSelection.js b/app/components/ConferenceDrawerSpeakerSelection.js
new file mode 100644
index 0000000..7b9e2a0
--- /dev/null
+++ b/app/components/ConferenceDrawerSpeakerSelection.js
@@ -0,0 +1,123 @@
+import React, { Component } from 'react';
+import { View } from 'react-native';
+import PropTypes from 'prop-types';
+import autoBind from 'auto-bind';
+import { Divider, Menu, Title } from 'react-native-paper';
+
+class ConferenceDrawerSpeakerSelection extends Component {
+ constructor(props) {
+ super(props);
+ autoBind(this)
+ this.state = {
+ speakers: props.activeSpeakers.map((participant) => {return participant.id})
+ };
+ }
+
+ componentWillReceiveProps(nextProps) {
+ let speakers = [];
+ if (nextProps.activeSpeakers.length !== 0) {
+ speakers = nextProps.activeSpeakers.map((participant) => {
+ return participant.id
+ });
+ }
+ this.setState({speakers: speakers});
+ }
+
+ handleFirstSpeakerSelected(event) {
+ if (event === 'none') {
+ if (this.state.speakers.length > 0) {
+ this.props.selected({ id: event});
+ const newSpeakers = this.state.speakers.slice(1);
+ this.setState({speakers: newSpeakers});
+ }
+ } else {
+ if (this.state.speakers[0] !== this.props.participants[event].id) {
+ this.props.selected(this.props.participants[event]);
+ const newSpeakers = this.state.speakers.slice();
+ newSpeakers[0] = this.props.participants[event].id;
+ this.setState({speakers: newSpeakers});
+ }
+ }
+ }
+
+ handleSecondSpeakerSelected(event) {
+ if (event === 'none') {
+ if (this.state.speakers.length > 1) {
+ this.props.selected({ id: event}, true);
+ const newSpeakers = this.state.speakers.slice();
+ newSpeakers.pop();
+ this.setState({speakers: newSpeakers});
+ }
+ } else {
+ const newSpeakers = this.state.speakers.slice();
+ newSpeakers[1] = this.props.participants[event].id;
+ this.setState({speakers: newSpeakers});
+ this.props.selected(this.props.participants[event], true);
+ }
+ }
+
+ render() {
+ const participantsLeft = [];
+ const participantsRight = [];
+ let title1 = 'None';
+ let title2 = 'None';
+
+ participantsLeft.push(<Menu.Item key="divider" divider />);
+
+ this.props.participants.forEach((p, index) => {
+
+ let title = p.identity.displayName || p.identity.uri;
+
+ if (this.state.speakers[0] === p.id) {
+ participantsLeft.push(
+ <Menu.Item key={index} eventKey={index} active={true} title={title}/>
+ );
+ title1 = title;
+ } else if (this.state.speakers[1] === p.id) {
+ participantsRight.push(
+ <Menu.Item key={index} eventKey={index} active={true} title={title} />
+ );
+ title2 = title;
+ } else {
+ participantsRight.push(
+ <Menu.Item key={index} eventKey={index} title={title} />
+ );
+ participantsLeft.push(
+ <Menu.Item key={index} eventKey={index} title={title} />
+ );
+ }
+ });
+
+ if (participantsRight.length !== 0) {
+ participantsRight.unshift(<Divider />);
+ }
+
+ return (
+ <View>
+ <Title>Active Speakers</Title>
+ <View className="form-group">
+ {/* <label htmlFor="speaker1" className="control-label">Speaker 1:</label> */}
+ <Menu id="speaker1" title={title1} onSelect={this.handleFirstSpeakerSelected} block>
+ <Menu.Item key="none" eventKey="none" active={this.state.speakers.length === 0} title="None" />
+ {participantsLeft}
+ </Menu>
+ </View>
+ <View className="form-group">
+ {/* <label htmlFor="speaker1">Speaker 2:</label> */}
+ <Menu onSelect={this.handleSecondSpeakerSelected} id="speaker2" title={title2} disabled={this.props.participants.length < 2 || this.state.speakers.length === 0} block>
+ <Menu.Item key="none" eventKey="none" active={this.state.speakers.length < 2} title="None" />
+ {participantsRight}
+ </Menu>
+ </View>
+ </View>
+ );
+ }
+}
+
+ConferenceDrawerSpeakerSelection.propTypes = {
+ participants: PropTypes.array.isRequired,
+ selected: PropTypes.func,
+ activeSpeakers: PropTypes.array
+};
+
+export default ConferenceDrawerSpeakerSelection;
diff --git a/app/components/ConferenceHeader.js b/app/components/ConferenceHeader.js
new file mode 100644
index 0000000..a4f12eb
--- /dev/null
+++ b/app/components/ConferenceHeader.js
@@ -0,0 +1,86 @@
+import React, { useState, useEffect, useRef, Fragment } from 'react';
+import { View } from 'react-native';
+import PropTypes from 'prop-types';
+import moment from 'moment';
+import momentFormat from 'moment-duration-format';
+import { Text, Appbar } from 'react-native-paper';
+import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
+
+import styles from '../assets/styles/blink/_ConferenceHeader.scss';
+
+const useInterval = (callback, delay) => {
+ const savedCallback = useRef();
+
+ // Remember the latest callback.
+ useEffect(() => {
+ savedCallback.current = callback;
+ }, [callback]);
+
+ // Set up the interval.
+ useEffect(() => {
+ function tick() {
+ savedCallback.current();
+ }
+ if (delay !== null) {
+ let id = setInterval(tick, delay);
+ return () => clearInterval(id);
+ }
+ }, [delay]);
+}
+
+const ConferenceHeader = (props) => {
+ let [seconds, setSeconds] = useState(0);
+
+ useInterval(() => {
+ setSeconds(seconds + 1);
+ }, 1000);
+
+ const duration = moment.duration(seconds, 'seconds').format('hh:mm:ss', {trim: false});
+
+ let videoHeader;
+ let callButtons;
+
+ if (props.show) {
+ const participantCount = props.participants.length + 1;
+ const callDetail = (
+ <View>
+ <Icon name="clock-outline" /><Text>{duration} - </Text><Icon name="account-group" /><Text>{participantCount} participant{participantCount > 1 ? 's' : ''}</Text>
+ </View>
+ );
+
+ videoHeader = (
+ <View>
+ <Appbar.Header style={{backgroundColor: 'black'}}>
+ <Appbar.Content
+ title={`Conference: ${props.remoteIdentity}`}
+ subtitle={callDetail}
+ />
+ {props.buttons.top.right}
+ </Appbar.Header>
+ </View>
+ );
+
+ callButtons = (
+ <View className="conference-buttons" style={styles.buttonContainer}>
+ {props.buttons.bottom}
+ </View>
+ );
+ }
+
+ return (
+ <View>
+ {videoHeader}
+ {callButtons}
+ </View>
+ );
+}
+
+ConferenceHeader.propTypes = {
+ show: PropTypes.bool.isRequired,
+ remoteIdentity: PropTypes.string.isRequired,
+ participants: PropTypes.array.isRequired,
+ buttons: PropTypes.object.isRequired
+};
+
+
+export default ConferenceHeader;
diff --git a/app/components/ConferenceMatrixParticipant.js b/app/components/ConferenceMatrixParticipant.js
new file mode 100644
index 0000000..2002f6a
--- /dev/null
+++ b/app/components/ConferenceMatrixParticipant.js
@@ -0,0 +1,140 @@
+
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+// const hark = require('hark');
+import classNames from 'classnames';
+import autoBind from 'auto-bind';
+import { Paragraph } from 'react-native-paper';
+import { RTCView } from 'react-native-webrtc';
+import { View } from 'react-native';
+
+import styles from '../assets/styles/blink/_ConferenceMatrixParticipant.scss';
+
+class ConferenceMatrixParticipant extends Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+ this.state = {
+ active: false,
+ hasVideo: false,
+ sharesScreen: false,
+ audioMuted: false,
+ stream: null
+ }
+ this.speechEvents = null;
+
+ this.videoElement = React.createRef();
+
+ if (!props.isLocal) {
+ props.participant.on('stateChanged', this.onParticipantStateChanged);
+ }
+
+ }
+
+ componentDidMount() {
+ this.maybeAttachStream();
+ // this.videoElement.current.oncontextmenu = (e) => {
+ // // disable right click for video elements
+ // e.preventDefault();
+ // };
+ // this.videoElement.current.onresize = (event) => {
+ // this.handleResize(event);
+ // };
+ }
+
+ componentWillUnmount() {
+ if (!this.props.isLocal) {
+ this.props.participant.removeListener('stateChanged', this.onParticipantStateChanged);
+ }
+ // if (this.speechEvents !== null) {
+ // this.speechEvents.stop();
+ // this.speechEvents = null;
+ // }
+ }
+
+ onParticipantStateChanged(oldState, newState) {
+ if (newState === 'established') {
+ this.maybeAttachStream();
+ }
+ }
+
+ handleResize(event) {
+ // console.log(event.srcElement.videoWidth);
+ const resolutions = ['1280x720', '960x540', '640x480', '640x360', '480x270', '320x180'];
+ if (this.state.hasVideo) {
+ const videoResolution = event.target.videoWidth + 'x' + event.target.videoHeight;
+ if (resolutions.indexOf(videoResolution) === -1) {
+ this.setState({sharesScreen: true});
+ } else {
+ this.setState({sharesScreen: false});
+ }
+ }
+ }
+
+ maybeAttachStream() {
+ const streams = this.props.participant.streams;
+ console.log(this.props.participant);
+ if (streams.length > 0) {
+ this.setState({stream: streams[0], hasVideo: streams[0].getVideoTracks().length > 0});
+ // const options = {
+ // interval: 150,
+ // play: false
+ // };
+ // this.speechEvents = hark(streams[0], options);
+ // this.speechEvents.on('speaking', () => {
+ // this.setState({active: true});
+ // });
+ // this.speechEvents.on('stopped_speaking', () => {
+ // this.setState({active: false});
+ // });
+ }
+ }
+
+ render() {
+ // const classes = classNames({
+ // 'poster' : !this.state.hasVideo,
+ // 'fit' : this.state.sharesScreen
+ // });
+ // const remoteVideoClasses = classNames({
+ // 'remote-video' : true,
+ // 'large' : this.props.large,
+ // 'conference-active' : this.state.active
+ // });
+
+ const participantInfo = (
+ <View className="controls">
+ <Paragraph className="lead">{this.props.participant.identity.displayName || this.props.participant.identity.uri}</Paragraph>
+ </View>
+ );
+
+ let activeIcon;
+
+ if (this.props.isLocal) {
+ activeIcon = (
+ <View className="controls-top">
+ <Paragraph className="lead">Speaker</Paragraph>
+ </View>
+ );
+ }
+
+ console.log(this.state.stream);
+
+ return (
+ <View style={styles.container}>
+ {activeIcon}
+ {/* {participantInfo} */}
+ <View className="video" style={styles.videoContainer}>
+ <RTCView style={this.props.large ? styles.videoLarge : styles.video} poster="assets/images/transparent-1px.png" ref={this.videoElement} streamURL={this.state.stream ? this.state.stream.toURL() : null} />
+ </View>
+ </View>
+ );
+ }
+}
+
+ConferenceMatrixParticipant.propTypes = {
+ participant: PropTypes.object.isRequired,
+ large: PropTypes.bool,
+ isLocal: PropTypes.bool
+};
+
+export default ConferenceMatrixParticipant;
diff --git a/app/components/ConferenceModal.js b/app/components/ConferenceModal.js
new file mode 100644
index 0000000..29f15d7
--- /dev/null
+++ b/app/components/ConferenceModal.js
@@ -0,0 +1,76 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+import { Portal, Modal, Title, Button, Text, TextInput, Surface } from 'react-native-paper';
+
+import config from '../config';
+import styles from '../assets/styles/blink/_ConferenceModal.scss';
+
+class ConferenceModal extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ conferenceTargetUri: props.targetUri.split('@')[0],
+ managed: false
+ };
+ this.handleConferenceTargetChange = this.handleConferenceTargetChange.bind(this);
+ this.onHide = this.onHide.bind(this);
+ this.join = this.join.bind(this);
+ }
+
+ componentWillReceiveProps(nextProps) {
+ this.setState({conferenceTargetUri: nextProps.targetUri.split('@')[0]});
+ }
+
+ handleConferenceTargetChange(value) {
+ this.setState({conferenceTargetUri: value});
+ }
+
+ join(event) {
+ event.preventDefault();
+ const uri = `${this.state.conferenceTargetUri.replace(/[\s()-]/g, '')}@${config.defaultConferenceDomain}`;
+ this.props.handleConferenceCall(uri.toLowerCase(), this.state.managed);
+ }
+
+ onHide() {
+ this.props.handleConferenceCall(null);
+ }
+
+ render() {
+ const validUri = this.state.conferenceTargetUri.length > 0 && this.state.conferenceTargetUri.indexOf('@') === -1;
+
+ return (
+ <Portal>
+ <Modal visible={this.props.show} onDismiss={this.onHide}>
+ <Surface style={styles.container}>
+ <Title>Join Video Conference</Title>
+ <Text>Enter the conference room you wish to join</Text>
+ <TextInput
+ autoCapitalize="none"
+ label="Conference Room"
+ placeholder="Conference Room"
+ onChangeText={this.handleConferenceTargetChange}
+ required
+ value={this.state.conferenceTargetUri}
+ />
+ <Button
+ mode="contained"
+ onPress={this.join}
+ disabled={!validUri}
+ icon="video"
+ >
+ Join
+ </Button>
+ </Surface>
+ </Modal>
+ </Portal>
+ );
+ }
+}
+
+ConferenceModal.propTypes = {
+ show: PropTypes.bool.isRequired,
+ handleConferenceCall: PropTypes.func.isRequired,
+ targetUri: PropTypes.string.isRequired
+};
+
+export default ConferenceModal;
diff --git a/app/components/ConferenceParticipant.js b/app/components/ConferenceParticipant.js
new file mode 100644
index 0000000..e540708
--- /dev/null
+++ b/app/components/ConferenceParticipant.js
@@ -0,0 +1,133 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+// const hark = require('hark');
+import classNames from 'classnames';
+import autoBind from 'auto-bind';
+import { IconButton } from 'react-native-paper';
+import { RTCView } from 'react-native-webrtc';
+
+
+class ConferenceParticipant extends React.Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+ this.state = {
+ active: false,
+ hasVideo: false,
+ overlayVisible: false,
+ audioMuted: false,
+ stream: null
+ }
+ this.speechEvents = null;
+
+ this.videoElement = React.createRef();
+
+ props.participant.on('stateChanged', this.onParticipantStateChanged);
+ }
+
+ componentDidMount() {
+ this.maybeAttachStream();
+ // this.videoElement.current.oncontextmenu = (e) => {
+ // // disable right click for video elements
+ // e.preventDefault();
+ // };
+ }
+
+ componentWillUnmount() {
+ this.videoElement.current.pause();
+ this.props.participant.removeListener('stateChanged', this.onParticipantStateChanged);
+ if (this.speechEvents !== null) {
+ this.speechEvents.stop();
+ this.speechEvents = null;
+ }
+ }
+
+ onParticipantStateChanged(oldState, newState) {
+ if (newState === 'established') {
+ this.maybeAttachStream();
+ }
+ }
+
+ onMuteAudioClicked(event) {
+ event.preventDefault();
+ const streams = this.props.participant.streams;
+ if (streams[0].getAudioTracks().length > 0) {
+ const track = streams[0].getAudioTracks()[0];
+ if(this.state.audioMuted) {
+ track.enabled = true;
+ this.setState({audioMuted: false});
+ } else {
+ track.enabled = false;
+ this.setState({audioMuted: true});
+ }
+ }
+ }
+
+ maybeAttachStream() {
+ const streams = this.props.participant.streams;
+ if (streams.length > 0) {
+ this.setState({stream: streams[0], hasVideo: streams[0].getVideoTracks().length > 0});
+ // const options = {
+ // interval: 150,
+ // play: false
+ // };
+ // this.speechEvents = hark(streams[0], options);
+ // this.speechEvents.on('speaking', () => {
+ // this.setState({active: true});
+ // });
+ // this.speechEvents.on('stopped_speaking', () => {
+ // this.setState({active: false});
+ // });
+ }
+ }
+
+ showOverlay() {
+ this.setState({overlayVisible: true});
+ }
+
+ hideOverlay() {
+ if (!this.state.audioMuted) {
+ this.setState({overlayVisible: false});
+ }
+ }
+
+ render() {
+ // const tooltip = (
+ // <Tooltip id={this.props.participant.id}>{this.props.participant.identity.displayName || this.props.participant.identity.uri}</Tooltip>
+ // );
+
+ const classes = classNames({
+ 'poster' : !this.state.hasVideo,
+ 'conference-active' : this.state.active
+ });
+
+ let muteButton;
+
+ if (this.state.overlayVisible) {
+ const muteButtonIcons = this.state.audioMuted ? 'microphone-off' : 'microphone';
+
+ muteButton = (
+ <View className="mute">
+ <IconButton icon={muteButtonIcons} onPress={this.onMuteAudioClicked} />
+ </View>
+ );
+ }
+
+ return (
+ <View>
+ {muteButton}
+ {/* <OverlayTrigger placement="top" overlay={tooltip}> */}
+ <View className="participant-container">
+ <RTCView ref={this.videoElement} streamURL={this.state.stream ? this.state.stream.toURL() : null} poster="assets/images/transparent-1px.png" />
+ </View>
+ {/* </OverlayTrigger> */}
+ </View>
+ );
+ }
+}
+
+ConferenceParticipant.propTypes = {
+ participant: PropTypes.object.isRequired
+};
+
+export default ConferenceParticipant;
diff --git a/app/components/ConferenceParticipantSelf.js b/app/components/ConferenceParticipantSelf.js
new file mode 100644
index 0000000..4e20d1a
--- /dev/null
+++ b/app/components/ConferenceParticipantSelf.js
@@ -0,0 +1,98 @@
+import React, { Component } from 'react';
+import { View } from 'react-native';
+import PropTypes from 'prop-types';
+//const hark = require('hark');
+import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
+import { RTCView } from 'react-native-webrtc';
+import { Card } from 'react-native-paper';
+
+import styles from '../assets/styles/blink/_ConferenceParticipantSelf.scss';
+
+class ConferenceParticipantSelf extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ active: false,
+ hasVideo: false,
+ sharesScreen: false,
+ }
+ // this.speechEvents = null;
+ }
+
+ componentDidMount() {
+ // factor it out to a function to avoid lint warning about calling setState here
+ this.attachSpeechEvents();
+ // this.refs.videoElement.onresize = (event) => {
+ // this.handleResize(event)
+ // };
+ }
+
+ handleResize(event) {
+ const resolutions = [ '1280x720', '960x540', '640x480', '640x360', '480x270','320x180'];
+ const videoResolution = event.target.videoWidth + 'x' + event.target.videoHeight;
+ if (resolutions.indexOf(videoResolution) === -1) {
+ this.setState({sharesScreen: true});
+ } else {
+ this.setState({sharesScreen: false});
+ }
+ }
+
+ componentWillUnmount() {
+ // if (this.speechEvents !== null) {
+ // this.speechEvents.stop();
+ // this.speechEvents = null;
+ // }
+ }
+
+ attachSpeechEvents() {
+ this.setState({hasVideo: this.props.stream.getVideoTracks().length > 0});
+
+ // const options = {
+ // interval: 150,
+ // play: false
+ // };
+ // this.speechEvents = hark(this.props.stream, options);
+ // this.speechEvents.on('speaking', () => {
+ // this.setState({active: true});
+ // });
+ // this.speechEvents.on('stopped_speaking', () => {
+ // this.setState({active: false});
+ // });
+ }
+
+ render() {
+ if (this.props.stream == null) {
+ return false;
+ }
+
+ // const tooltip = (
+ // <Tooltip id="t-myself">{this.props.identity.displayName || this.props.identity.uri}</Tooltip>
+ // );
+
+ let muteIcon
+ if (this.props.audioMuted) {
+ muteIcon = (
+ <Icon name="microphone-off" />
+ );
+ }
+
+ return (
+ <Card style={styles.container}>
+ <Card.Content>
+ {muteIcon}
+ <RTCView style={styles.video} ref="videoElement" poster="assets/images/transparent-1px.png" streamURL={this.props.stream ? this.props.stream.toURL() : null} mirror={true}/>
+ </Card.Content>
+ </Card>
+ );
+ }
+}
+
+ConferenceParticipantSelf.propTypes = {
+ stream: PropTypes.object.isRequired,
+ identity: PropTypes.object.isRequired,
+ audioMuted: PropTypes.bool.isRequired,
+ generatedVideoTrack: PropTypes.bool
+};
+
+
+export default ConferenceParticipantSelf;
diff --git a/app/components/DTMFModal.js b/app/components/DTMFModal.js
new file mode 100644
index 0000000..48c7f7a
--- /dev/null
+++ b/app/components/DTMFModal.js
@@ -0,0 +1,67 @@
+import debug from 'debug';
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+import { View } from 'react-native';
+import { Portal, Modal, Surface, Title, Button } from 'react-native-paper';
+import dtmf from 'react-native-dtmf';
+
+import styles from '../assets/styles/blink/_DTMFModal.scss';
+
+const DEBUG = debug('blinkrtc:DTMF');
+debug.enable('*');
+
+class DTMFModal extends Component {
+ sendDtmf(tone) {
+ DEBUG('DTMF tone was sent: ' + tone);
+
+ dtmf.stopTone();//don't play a tone at the same time as another
+ dtmf.playTone(tone, 1000);
+
+ if (this.props.call !== null) {
+ this.props.call.sendDtmf(tone);
+ }
+ }
+
+ render() {
+ return (
+ <Portal>
+ <Modal visible={this.props.show} onDismiss={this.props.hide}>
+ <Surface>
+ <Title>DTMF</Title>
+ <View style={styles.container}>
+ <View style={styles.row}>
+ <Button style={styles.button} key="dtmfButton1" onPress={this.sendDtmf.bind(this, '1')}>1</Button>
+ <Button style={styles.button} key="dtmfButton2" onPress={this.sendDtmf.bind(this, '2')}>2</Button>
+ <Button style={styles.button} key="dtmfButton3" onPress={this.sendDtmf.bind(this, '3')}>3</Button>
+ </View>
+ <View style={styles.row}>
+ <Button style={styles.button} key="dtmfButton4" onPress={this.sendDtmf.bind(this, '4')}>4</Button>
+ <Button style={styles.button} key="dtmfButton5" onPress={this.sendDtmf.bind(this, '5')}>5</Button>
+ <Button style={styles.button} key="dtmfButton6" onPress={this.sendDtmf.bind(this, '6')}>6</Button>
+ </View>
+ <View style={styles.row}>
+ <Button style={styles.button} key="dtmfButton7" onPress={this.sendDtmf.bind(this, '7')}>7</Button>
+ <Button style={styles.button} key="dtmfButton8" onPress={this.sendDtmf.bind(this, '8')}>8</Button>
+ <Button style={styles.button} key="dtmfButton9" onPress={this.sendDtmf.bind(this, '9')}>9</Button>
+ </View>
+ <View style={styles.row}>
+ <Button style={styles.button} key="dtmfButtonStar" onPress={this.sendDtmf.bind(this, '*')}>*</Button>
+ <Button style={styles.button} key="dtmfButton0" onPress={this.sendDtmf.bind(this, '0')}>0</Button>
+ <Button style={styles.button} key="dtmfButtonHash" onPress={this.sendDtmf.bind(this, '#')}>#</Button>
+ </View>
+ </View>
+ </Surface>
+ </Modal>
+ </Portal>
+ );
+ }
+}
+
+DTMFModal.propTypes = {
+ show: PropTypes.bool.isRequired,
+ hide: PropTypes.func.isRequired,
+ call: PropTypes.object
+};
+
+
+export default DTMFModal;
diff --git a/app/components/EnrollmentModal.js b/app/components/EnrollmentModal.js
new file mode 100644
index 0000000..b2c7ed4
--- /dev/null
+++ b/app/components/EnrollmentModal.js
@@ -0,0 +1,199 @@
+import React, { Component } from 'react';
+import { View, KeyboardAvoidingView, Platform, ScrollView } from 'react-native';
+import PropTypes from 'prop-types';
+import superagent from 'superagent';
+import autoBind from 'auto-bind';
+import { Modal, Portal, Button, TextInput, Title, Surface, HelperText, Snackbar } from 'react-native-paper';
+
+import styles from '../assets/styles/blink/_EnrollmentModal.scss';
+
+import config from '../config';
+
+class EnrollmentModal extends Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+
+ // save the initial state so we can restore it later
+ this.initialState = {
+ yourName: '',
+ username: '',
+ password: '',
+ password2: '',
+ email: '',
+ enrolling: false,
+ error: '',
+ errorVisible: false
+ };
+ this.state = Object.assign({}, this.initialState);
+ }
+
+ handleFormFieldChange(event) {
+ event.preventDefault();
+ let state = {};
+ state[event.target.name] = event.target.value;
+ this.setState(state);
+ }
+
+ enrollmentFormSubmitted(event) {
+ event.preventDefault();
+ // validate the password fields
+ if (this.state.password !== this.state.password2) {
+ this.setState({error: 'Password missmatch'});
+ return;
+ }
+ this.setState({enrolling: true, error:''});
+ superagent.post(config.enrollmentUrl)
+ .send(superagent.serialize['application/x-www-form-urlencoded']({username: this.state.username,
+ password: this.state.password,
+ email: this.state.email,
+ display_name: this.state.yourName})) //eslint-disable-line camelcase
+ .end((error, res) => {
+ this.setState({enrolling: false});
+ if (error) {
+ this.setState({error: error.toString(), errorVisible: true});
+ return;
+ }
+ let data;
+ try {
+ data = JSON.parse(res.text);
+ } catch (e) {
+ this.setState({error: 'Could not decode response data', errorVisible: true});
+ return;
+ }
+ if (data.success) {
+ this.props.handleEnrollment({accountId: data.sip_address,
+ password: this.state.password});
+ this.setState(this.initialState);
+ } else if (data.error === 'user_exists') {
+ this.setState({error: 'User already exists', errorVisible: true});
+ } else {
+ this.setState({error: data.error_message, errorVisible: true});
+ }
+ });
+ }
+
+ onHide() {
+ this.props.handleEnrollment(null);
+ this.setState(this.initialState);
+ }
+
+ render() {
+ let buttonText = 'Create';
+ let buttonIcon = null;
+ if (this.state.enrolling) {
+ buttonIcon = "cog";
+ }
+
+ return (
+ <Portal>
+ <Modal visible={this.props.show} onDismiss={this.onHide}>
+ <KeyboardAvoidingView behavior={Platform.OS === "ios" ? "padding" : null} enabled pointerEvents="box-none">
+ <Surface style={styles.container}>
+ <ScrollView style={styles.inner}>
+ <Title style={styles.title}>Create account</Title>
+ <View>
+ <View>
+ <TextInput
+ label="Display name"
+ name="yourName"
+ type="text"
+ placeholder="Alice"
+ onChange={this.handleFormFieldChange}
+ required
+ value={this.state.yourName}
+ disabled={this.state.enrolling}
+ />
+ </View>
+ </View>
+ <View>
+ <View>
+ <View>
+ <TextInput
+ label="Username"
+ name="username"
+ placeholder="alice"
+ onChange={this.handleFormFieldChange}
+ required
+ value={this.state.username}
+ disabled={this.state.enrolling}
+ />
+ <HelperText
+ type="info"
+ visible={true}
+ >
+ @{config.enrollmentDomain}
+ </HelperText>
+ </View>
+ </View>
+ </View>
+ <View>
+ <View>
+ <TextInput
+ label="Password"
+ name="password"
+ secureTextEntry={true}
+ textContentType="password"
+ onChangeText={this.handleFormFieldChange}
+ required value={this.state.password}
+ disabled={this.state.enrolling}
+ />
+ </View>
+ </View>
+ <View>
+ <View>
+ <TextInput
+ label="Verify password"
+ secureTextEntry={true}
+ textContentType="password"
+ name="password2"
+ onChange={this.handleFormFieldChange}
+ required value={this.state.password2}
+ disabled={this.state.enrolling}
+ />
+ </View>
+ </View>
+ <View>
+ <View>
+ <TextInput
+ label="E-Mail"
+ textContentType="emailAddress"
+ name="email"
+ placeholder="alice@atlanta.example.com"
+ onChange={this.handleFormFieldChange}
+ required value={this.state.email}
+ disabled={this.state.enrolling}
+ />
+ </View>
+ </View>
+ <View>
+ <Button
+ icon={buttonIcon}
+ loading={this.state.enrolling}
+ disabled={this.state.enrolling}
+ onPress={this.enrollmentFormSubmitted}
+ >
+ {buttonText}
+ </Button>
+ </View>
+ <Snackbar
+ visible={this.state.errorVisible}
+ duration={2000}
+ onDismiss={() => this.setState({ errorVisible: false })}
+
+ >{this.state.error}</Snackbar>
+ </ScrollView>
+ </Surface>
+ </KeyboardAvoidingView>
+ </Modal>
+ </Portal>
+ );
+ }
+}
+
+EnrollmentModal.propTypes = {
+ handleEnrollment: PropTypes.func.isRequired,
+ show: PropTypes.bool.isRequired
+};
+
+export default EnrollmentModal;
diff --git a/app/components/ErrorPanel.js b/app/components/ErrorPanel.js
new file mode 100644
index 0000000..107611e
--- /dev/null
+++ b/app/components/ErrorPanel.js
@@ -0,0 +1,24 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { Portal, Modal, Title, Text, Surface } from 'react-native-paper';
+
+const ErrorPanel = (props) => {
+ return (
+ <Portal>
+ <Modal visible={true}>
+ <Surface>
+ <Title><Icon name="alert" /> Warning</Title>
+ <Text>
+ {props.errorMsg}
+ </Text>
+ </Surface>
+ </Modal>
+ </Portal>
+ );
+}
+
+ErrorPanel.propTypes = {
+ errorMsg: PropTypes.object.isRequired
+};
+
+export default ErrorPanel;
diff --git a/app/components/EscalateConferenceModal.js b/app/components/EscalateConferenceModal.js
new file mode 100644
index 0000000..09357aa
--- /dev/null
+++ b/app/components/EscalateConferenceModal.js
@@ -0,0 +1,64 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { View } from 'react-native';
+import { Title, Portal, Modal, Paragraph, TextInput, Surface, Button } from 'react-native-paper';
+
+import styles from '../assets/styles/blink/_EscalateConferenceModal.scss';
+
+import config from '../config';
+
+class EscalateConferenceModal extends React.Component {
+ constructor(props) {
+ super(props);
+ this.invitees = React.createRef();
+
+ this.escalate = this.escalate.bind(this);
+ }
+
+ escalate(event) {
+ event.preventDefault();
+ const uris = [];
+ for (let item of this.invitees.current.value.split(',')) {
+ item = item.trim();
+ if (item.indexOf('@') === -1) {
+ item = `${item}@${config.defaultDomain}`;
+ }
+ uris.push(item);
+ };
+ uris.push(this.props.call.remoteIdentity.uri);
+ this.props.escalateToConference(uris);
+ }
+
+ render() {
+ return (
+ <Portal>
+ <Modal visible={this.props.show} onDismiss={this.props.close}>
+ <Surface style={styles.container}>
+ <Title>Move to conference</Title>
+ <Paragraph>Please enter the account(s) you wish to add to this call. After pressing Move, all parties will be invited to join a conference.</Paragraph>
+ <View>
+ <TextInput
+ label="Users"
+ id="inputTarget"
+ ref={this.invitees}
+ placeholder="alice@sip2sip.info,bob,carol"
+ required
+ autoCapitalize="none"
+ />
+ <Button style={styles.button} onPress={this.escalate} icon="send">Move</Button>
+ </View>
+ </Surface>
+ </Modal>
+ </Portal>
+ );
+ }
+}
+
+EscalateConferenceModal.propTypes = {
+ show: PropTypes.bool.isRequired,
+ close: PropTypes.func.isRequired,
+ call: PropTypes.object,
+ escalateToConference: PropTypes.func
+};
+
+export default EscalateConferenceModal;
diff --git a/app/components/FooterBox.js b/app/components/FooterBox.js
new file mode 100644
index 0000000..e477a82
--- /dev/null
+++ b/app/components/FooterBox.js
@@ -0,0 +1,18 @@
+import React from 'react';
+import { View } from 'react-native';
+import { Text } from 'react-native-paper';
+import styles from '../assets/styles/blink/_Footer.scss';
+
+const FooterBox = () => {
+ return (
+ <View style={styles.container}>
+ <View>
+ <View>
+ <Text style={styles.text}>Copyright &copy;AG Projects</Text>
+ </View>
+ </View>
+ </View>
+ );
+};
+
+export default FooterBox
\ No newline at end of file
diff --git a/app/components/HistoryCard.js b/app/components/HistoryCard.js
new file mode 100644
index 0000000..80117f8
--- /dev/null
+++ b/app/components/HistoryCard.js
@@ -0,0 +1,76 @@
+import React from 'react';
+import { View } from 'react-native';
+import PropTypes from 'prop-types';
+import moment from 'moment';
+import momentFormat from 'moment-duration-format';
+import { Card, IconButton, Headline, Subheading } from 'react-native-paper';
+import { Icon } from 'react-native-vector-icons';
+
+import UserIcon from './UserIcon';
+
+const HistoryCard = (props) => {
+ const classes = props.classes;
+ const identity = {
+ displayName: props.historyItem.displayName,
+ uri: props.historyItem.remoteParty || props.historyItem
+ }
+
+ const startVideoCall = (e) => {
+ e.stopPropagation();
+ props.setTargetUri(identity.uri);
+ // We need to wait for targetURI
+ setImmediate(() => {
+ props.startVideoCall(e);
+ });
+ }
+
+ const startAudioCall = (e) => {
+ e.stopPropagation();
+ props.setTargetUri(identity.uri);
+ // We need to wait for targetURI
+ setImmediate(() => {
+ props.startAudioCall(e);
+ });
+ }
+
+ let duration = moment.duration(props.historyItem.duration, 'seconds').format('hh:mm:ss', {trim: false});
+ let color = {};
+ if (props.historyItem.direction === 'received' && props.historyItem.duration === 0) {
+ color.color = '#a94442';
+ duration = 'missed';
+ }
+
+ const name = identity.displayName || identity.uri;
+
+ return (
+ <Card
+ onLongPress={() => {props.setTargetUri(identity.uri)}}
+ onPress={startVideoCall}
+ >
+ <Card.Content>
+ <Headline noWrap style={color}>{name} ({duration})</Headline>
+ <Subheading className={classes.biggerFont} color="textSecondary">
+ <Icon name={props.historyItem.direction == 'received' ? 'arrow-bottom-left' : 'arrow-top-right'}/>{props.historyItem.startTime}
+ </Subheading>
+ </Card.Content>
+ <Card.Actions>
+ <IconButton icon="phone" className={classes.iconSmall} onPress={startAudioCall} title={`Audio call to ${name}`} />
+ <IconButton icon="video" className={classes.iconSmall} onPress={startVideoCall} title={`Video call to ${name}`} />
+ </Card.Actions>
+ <View>
+ <UserIcon identity={identity} card/>
+ </View>
+ </Card>
+ );
+}
+
+HistoryCard.propTypes = {
+ classes : PropTypes.object.isRequired,
+ historyItem : PropTypes.object,
+ startAudioCall : PropTypes.func.isRequired,
+ startVideoCall : PropTypes.func.isRequired,
+ setTargetUri : PropTypes.func.isRequired
+};
+
+
+export default HistoryCard;
diff --git a/app/components/HistoryTileBox.js b/app/components/HistoryTileBox.js
new file mode 100644
index 0000000..7f74659
--- /dev/null
+++ b/app/components/HistoryTileBox.js
@@ -0,0 +1,18 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { View } from 'react-native';
+
+const HistoryTileBox = (props) => {
+ return (
+ <View className="history-tile-box">
+ {props.children}
+ </View>
+ );
+}
+
+HistoryTileBox.propTypes = {
+ children : PropTypes.node
+};
+
+
+export default HistoryTileBox;
diff --git a/app/components/IncomingCallModal.js b/app/components/IncomingCallModal.js
new file mode 100644
index 0000000..d56072f
--- /dev/null
+++ b/app/components/IncomingCallModal.js
@@ -0,0 +1,66 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import UserIcon from './UserIcon';
+import { Headline, IconButton, Title, Portal, Modal, Surface } from 'react-native-paper';
+import { View } from 'react-native';
+
+import styles from '../assets/styles/blink/_IncomingCallModal.scss';
+
+const IncomingCallModal = (props) => {
+
+ const answerAudioOnly = () => {
+ props.onAnswer({audio: true, video: false});
+ }
+
+ const answer = () => {
+ props.onAnswer({audio: true, video: true});
+ };
+
+ if (props.call == null) {
+ return false;
+ }
+
+ let answerButtons = [
+ <IconButton id="decline" style={styles.button} onPress={props.onHangup} icon="phone-hangup" />
+ ];
+
+ let callType = 'audio';
+ if (props.call.mediaTypes.video) {
+ callType = 'video';
+ answerButtons.push(
+ <IconButton id="accept" style={styles.button} onPress={answer} autoFocus icon="video" />
+ );
+ }
+
+ answerButtons.push(
+ <IconButton style={styles.button} id="audio" onPress={answerAudioOnly} icon="phone" />
+ );
+
+ const remoteIdentityLine = props.call.remoteIdentity.displayName || props.call.remoteIdentity.uri;
+
+ return (
+ <Portal>
+ <Modal visible={props.show} dismissable={false}>
+ <Surface style={styles.container}>
+ <UserIcon identity={props.call.remoteIdentity} large={true} />
+ <Title>{remoteIdentityLine}</Title>
+ <Headline>is calling with {callType}</Headline>
+ <View style={styles.buttonContainer}>
+ {answerButtons}
+ </View>
+ </Surface>
+ </Modal>
+ </Portal>
+ );
+}
+
+IncomingCallModal.propTypes = {
+ call : PropTypes.object,
+ onAnswer : PropTypes.func.isRequired,
+ onHangup : PropTypes.func.isRequired,
+ compact : PropTypes.bool,
+ show : PropTypes.bool
+};
+
+
+export default IncomingCallModal;
diff --git a/app/components/InviteParticipantsModal.js b/app/components/InviteParticipantsModal.js
new file mode 100644
index 0000000..fec6949
--- /dev/null
+++ b/app/components/InviteParticipantsModal.js
@@ -0,0 +1,55 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+import { View } from 'react-native';
+import { Modal, Portal, Text, Button, Surface, TextInput, Title } from 'react-native-paper';
+
+import config from '../config';
+
+class InviteParticipantsModal extends Component {
+ constructor(props) {
+ super(props);
+ this.invitees = React.createRef();
+
+ this.invite = this.invite.bind(this);
+ }
+
+ invite(event) {
+ event.preventDefault();
+ const uris = [];
+ this.invitees.current.value.split(',').forEach((item) => {
+ item = item.trim();
+ if (item.indexOf('@') === -1) {
+ item = `${item}@${config.defaultDomain}`;
+ }
+ uris.push(item);
+ });
+ if (uris && this.props.call) {
+ this.props.call.inviteParticipants(uris);
+ }
+ this.props.close();
+ }
+
+ render() {
+ return (
+ <Portal>
+ <Modal visible={this.props.show} onDismiss={this.props.close}>
+ <Surface>
+ <Title id="cmodal-title-sm">Invite Online Users</Title>
+
+ <Text className="lead">Enter the users you wish to invite</Text>
+ <TextInput label="Users" id="inputTarget" ref={this.invitees} className="form-control" placeholder="alice@sip2sip.info,bob,carol" required autoCapitalize="none" />
+ <Button type="submit" className="btn btn-success" onSubmit={this.invite} icon="email">Invite</Button>
+ </Surface>
+ </Modal>
+ </Portal>
+ );
+ }
+}
+
+InviteParticipantsModal.propTypes = {
+ show: PropTypes.bool.isRequired,
+ close: PropTypes.func.isRequired,
+ call: PropTypes.object
+};
+
+export default InviteParticipantsModal;
diff --git a/app/components/LoadingScreen.js b/app/components/LoadingScreen.js
new file mode 100644
index 0000000..e380e20
--- /dev/null
+++ b/app/components/LoadingScreen.js
@@ -0,0 +1,29 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { View } from 'react-native';
+import { Title, Modal, Portal } from 'react-native-paper';
+import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
+import styles from '../assets/styles/blink/_LoadingScreen.scss';
+
+const LoadingScreen = (props) => {
+
+ return (
+ <Portal>
+ <Modal dismissable={false} visible={props.show}>
+ <View style={styles.container}>
+ <Icon style={styles.icon} color="white" name="settings" size={48}/>
+ {props.text ?
+ <Title style={styles.title}>{props.text}</Title>
+ : null }
+ </View>
+ </Modal>
+ </Portal>
+ );
+}
+
+LoadingScreen.propTypes = {
+ text: PropTypes.string,
+ show: PropTypes.bool
+};
+
+export default LoadingScreen;
\ No newline at end of file
diff --git a/app/components/LocalMedia.js b/app/components/LocalMedia.js
new file mode 100644
index 0000000..d8012a4
--- /dev/null
+++ b/app/components/LocalMedia.js
@@ -0,0 +1,62 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+import autoBind from 'auto-bind';
+import { View, Dimensions } from 'react-native';
+import { RTCView } from 'react-native-webrtc';
+import { IconButton } from 'react-native-paper';
+
+import CallOverlay from './CallOverlay';
+import styles from '../assets/styles/blink/_LocalMedia.scss';
+
+class LocalMedia extends Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+
+ this.localVideo = React.createRef();
+
+ this.props.mediaPlaying();
+ }
+
+ hangupCall(event) {
+ event.preventDefault();
+ this.props.hangupCall();
+ }
+
+ render() {
+
+ let {height, width} = Dimensions.get('window');
+ let videoStyle = {
+ height,
+ width
+ };
+
+ return (
+ <View style={{flex: 1}}>
+ <CallOverlay
+ show = {true}
+ remoteIdentity = {this.props.remoteIdentity}
+ call = {null}
+ />
+ <View style={styles.buttonContainer}>
+ <IconButton style={styles.button} key="hangupButton" onPress={this.hangupCall} icon="phone-hangup" size={48} />
+ </View>
+ <View style={styles.container}>
+ <RTCView style={[styles.video, videoStyle]} id="localVideo" ref={this.localVideo} streamURL={this.props.localMedia.toURL()} mirror={true} />
+ </View>
+
+ </View>
+ );
+ }
+}
+
+LocalMedia.propTypes = {
+ hangupCall : PropTypes.func,
+ localMedia : PropTypes.object.isRequired,
+ mediaPlaying : PropTypes.func.isRequired,
+ remoteIdentity : PropTypes.string,
+ generatedVideoTrack : PropTypes.bool
+};
+
+
+export default LocalMedia;
diff --git a/app/components/Logo.js b/app/components/Logo.js
new file mode 100644
index 0000000..68ba2ca
--- /dev/null
+++ b/app/components/Logo.js
@@ -0,0 +1,20 @@
+import React from 'react';
+import { View, Image } from 'react-native';
+import { Title } from 'react-native-paper';
+import styles from '../assets/styles/blink/_Logo.scss';
+
+const blinkLogo = require('../assets/images/blink-white-big.png');
+
+const Logo = () => {
+ return (
+ <View>
+ <View style={styles.logoContainer}>
+ <Image source={blinkLogo} style={styles.logo}/>
+ </View>
+ <Title style={styles.title}>Sylk</Title>
+ </View>
+ );
+}
+
+
+export default Logo;
diff --git a/app/components/NavigationBar.js b/app/components/NavigationBar.js
new file mode 100644
index 0000000..b2d06d4
--- /dev/null
+++ b/app/components/NavigationBar.js
@@ -0,0 +1,110 @@
+import React, { Component } from 'react';
+import { Linking } from 'react-native';
+import PropTypes from 'prop-types';
+import autoBind from 'auto-bind';
+import { Appbar, Menu, Divider } from 'react-native-paper';
+
+import config from '../config';
+import AboutModal from './AboutModal';
+import CallMeMaybeModal from './CallMeMaybeModal';
+
+class NavigationBar extends Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+ this.state = {
+ showAboutModal: false,
+ showCallMeMaybeModal: false,
+ mute: false,
+ menuVisible: false
+ }
+
+ this.callUrl = `${config.publicUrl}/call/${props.account.id}`;
+
+ this.menuRef = React.createRef();
+ }
+
+ handleMenu(event) {
+ switch (event) {
+ case 'about':
+ this.toggleAboutModal();
+ break;
+ case 'callMeMaybe':
+ this.toggleCallMeMaybeModal();
+ break;
+ case 'logOut':
+ this.props.logout();
+ break;
+ case 'preview':
+ this.props.preview();
+ break;
+ case 'settings':
+ Linking.openURL('https://mdns.sipthor.net/sip_settings.phtml');
+ break;
+ default:
+ break;
+ }
+ this.setState({menuVisible: false});
+ }
+
+ toggleMute() {
+ this.setState(prevState => ({mute: !prevState.mute}));
+ this.props.toggleMute();
+ }
+
+ toggleAboutModal() {
+ this.setState({showAboutModal: !this.state.showAboutModal});
+ }
+
+ toggleCallMeMaybeModal() {
+ this.setState({showCallMeMaybeModal: !this.state.showCallMeMaybeModal});
+ }
+
+ render() {
+ const muteIcon = this.state.mute ? 'bell-off' : 'bell';
+
+ return (
+ <Appbar.Header style={{backgroundColor: 'black'}}>
+ <Appbar.Content
+ title="Sylk"
+ subtitle={`Signed in as: ${this.props.account.id}`}
+ />
+ <Appbar.Action icon={muteIcon} onPress={this.toggleMute} />
+ <Menu
+ visible={this.state.menuVisible}
+ onDismiss={this._closeMenu}
+ anchor={<Appbar.Action ref={this.menuRef} color="white" icon="menu" onPress={() => this.setState({menuVisible: !this.state.menuVisible})} />}
+ >
+ <Menu.Item icon="account" title={this.props.account.id} />
+ <Divider />
+ <Menu.Item onPress={() => this.handleMenu('about')} icon="information" title="About Sylk" />
+ <Menu.Item onPress={() => this.handleMenu('callMeMaybe')} icon="share" title="Call me, maybe?" />
+ <Menu.Item onPress={() => this.handleMenu('preview')} icon="video" title="Video preview" />
+ <Menu.Item onPress={() => this.handleMenu('settings')} icon="wrench" title="Server account settings" />
+ <Menu.Item onPress={() => this.handleMenu('logOut')} icon="logout" title="Sign Out" />
+ </Menu>
+
+ <AboutModal
+ show={this.state.showAboutModal}
+ close={this.toggleAboutModal}
+ />
+ <CallMeMaybeModal
+ show={this.state.showCallMeMaybeModal}
+ close={this.toggleCallMeMaybeModal}
+ callUrl={this.callUrl}
+ notificationCenter={this.props.notificationCenter}
+ />
+ </Appbar.Header>
+ );
+ }
+}
+
+NavigationBar.propTypes = {
+ notificationCenter : PropTypes.func.isRequired,
+ account : PropTypes.object.isRequired,
+ logout : PropTypes.func.isRequired,
+ preview : PropTypes.func.isRequired,
+ toggleMute : PropTypes.func.isRequired
+};
+
+export default NavigationBar;
diff --git a/app/components/NotificationCenter.js b/app/components/NotificationCenter.js
new file mode 100644
index 0000000..6f1643d
--- /dev/null
+++ b/app/components/NotificationCenter.js
@@ -0,0 +1,158 @@
+import React, { Component } from 'react';
+import { ProgressBar, Colors, Snackbar } from 'react-native-paper';
+import moment from 'moment';
+import autoBind from 'auto-bind';
+
+import config from '../config';
+
+class NotificationCenter extends Component {
+
+ constructor(props) {
+ super(props);
+ autoBind(this);
+ this.state = {
+ visible: false,
+ message: null,
+ title: null,
+ autoDismiss: null,
+ action: null
+ }
+ }
+
+ postSystemNotification(title, options={}) { // eslint-disable-line space-infix-ops
+ this.setState({
+ visible: true,
+ autoDismiss: 3,
+ title: title,
+ message: options.body
+ });
+ }
+
+ postConferenceInvite(originator, room, cb) {
+ if (originator.uri.endsWith(config.defaultGuestDomain)) {
+ return;
+ }
+ const idx = room.indexOf('@');
+ if (idx === -1) {
+ return;
+ }
+ const currentDate = moment().format('MMMM Do YYYY [at] HH:mm:ss');
+ const action = {
+ label: 'Join',
+ onPress: () => { cb(room); }
+ };
+ this.setState({
+ visible: true,
+ message: `${(originator.displayName || originator.uri)} invited you to join conference room ${room.substring(0, idx)}<br />On ${currentDate}`,
+ title: 'Conference Invite',
+ autoDismiss: 0,
+ action: action,
+ });
+ }
+
+ postMissedCall(originator, cb) {
+ const currentDate = moment().format('MMMM Do YYYY [at] HH:mm:ss');
+ let action;
+ if (originator.uri.endsWith(config.defaultGuestDomain)) {
+ action = null;
+ } else {
+ action = {
+ label: 'Call',
+ onPress: () => { cb(originator.uri); }
+ };
+ }
+ this.setState({
+ visible: true,
+ message: `From ${(originator.displayName || originator.uri)} <br />On ${currentDate}`,
+ title: 'Missed Call',
+ autoDismiss: 0,
+ action: action
+ });
+ }
+
+ postFileUploadProgress(filename, cb) {
+ this.setState({
+ visible: true,
+ message: `${filename}`,
+ title: 'Uploading file',
+ autoDismiss: 0,
+ action: {
+ label: 'OK',
+ onPress: () => cb()
+ },
+ // children: (
+ // <View>
+ // <ProgressBar
+ // style={{marginTop: '2px'}}
+ // classes={{barColorPrimary: 'blue-bar'}}
+ // variant="determinate"
+ // progress={0}
+ // />
+ // </View>
+ // )
+ });
+ }
+
+ editFileUploadNotification(progress, notification) {
+ if (progress === undefined) {
+ progress = 100;
+ }
+ this.setState({
+ visible: true,
+ message: `${filename}`,
+ title: 'Upload Successful',
+ autoDismiss: 3,
+ });
+ }
+
+ removeFileUploadNotification(notification) {
+ let timer = setTimeout(() => {
+ this.setState({visible: false});
+ }, 3000);
+ }
+
+ removeNotification(notification) {
+ this.setState({visible: false});
+ }
+
+ postFileUploadFailed(filename) {
+ this.setState({
+ visible: true,
+ message: `Uploading of ${filename} failed`,
+ title: 'File sharing failed',
+ autoDismiss: 10,
+ });
+ }
+
+ postFileShared(file, cb) {
+ const uploader = file.uploader.displayName || file.uploader.uri || file.uploader;
+
+ this.setState({
+ visible: true,
+ message: `${uploader} shared ${file.filename}`,
+ title: 'File shared',
+ autoDismiss: 10,
+ action: {
+ label: 'Show Files',
+ onPress: () => cb()
+ }
+ });
+ }
+
+ render() {
+ console.log('Re-rendering snackbar');
+ return (
+ <Snackbar
+ visible={this.state.visible}
+ duration={this.state.autoDismiss * 1000}
+ onDismiss={() => this.setState({ visible: false })}
+ action={this.state.action}
+ >
+ {this.state.title} - {this.state.message}
+ </Snackbar>
+ );
+ }
+}
+
+
+export default NotificationCenter;
\ No newline at end of file
diff --git a/app/components/Preview.js b/app/components/Preview.js
new file mode 100644
index 0000000..90703d5
--- /dev/null
+++ b/app/components/Preview.js
@@ -0,0 +1,196 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+import debug from 'react-native-debug';
+import { View } from 'react-native';
+import { Text, IconButton, List, Appbar } from 'react-native-paper';
+import autoBind from 'auto-bind';
+import { RTCView } from 'react-native-webrtc';
+
+import ConferenceDrawer from './ConferenceDrawer';
+import VolumeBar from './VolumeBar';
+
+import styles from '../assets/styles/blink/_Preview.scss';
+
+const DEBUG = debug('blinkrtc:Preview');
+debug.enable('*');
+
+class Preview extends Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+
+ let mic = { label: 'No mic' };
+ let camera = { label: 'No Camera' };
+
+ if ('camera' in this.props.selectedDevices) {
+ camera = this.props.selectedDevices.camera;
+ } else if (this.props.localMedia.getVideoTracks().length !== 0) {
+ camera.label = this.props.localMedia.getVideoTracks()[0].label;
+ }
+
+ if ('mic' in this.props.selectedDevices) {
+ mic = this.props.selectedDevices.mic;
+ } else if (this.props.localMedia.getAudioTracks().length !== 0) {
+ mic.label = this.props.localMedia.getAudioTracks()[0].label;
+ }
+
+ this.state = {
+ camera: camera,
+ showDrawer: false,
+ mic: mic,
+ streamURL: null
+ }
+ this.devices = [];
+ this.localVideo = React.createRef();
+ }
+
+ componentDidMount() {
+
+ console.log( this.props.localMedia);
+
+ this.setState({streamURL: this.props.localMedia});
+
+ navigator.mediaDevices.enumerateDevices()
+ .then((devices) => {
+ this.devices = devices;
+ console.log(devices);
+
+ let newState = {};
+ if (this.state.camera.label !== 'No Camera') {
+ if (!devices.find((device) => {return device.kind === 'videoinput'})) {
+ newState.camera = {label: 'No Camera'};
+ } else if (this.props.localMedia.getVideoTracks().length !== 0) {
+ newState.camera = {label: this.props.localMedia.getVideoTracks()[0].label};
+ }
+ }
+
+ if (this.state.mic.label !== 'No mic') {
+ if (!devices.find((device) => {return device.kind === 'audioinput'})) {
+ newState.mic = {label: 'No mic'};
+ } else if (this.props.localMedia.getAudioTracks().length !== 0) {
+ newState.mic = { label: this.props.localMedia.getAudioTracks()[0].label};
+ }
+ }
+
+ if (Object.keys(newState).length != 0) {
+ this.setState(Object.assign({},newState));
+ }
+ })
+ .catch(function(error) {
+ DEBUG('Device enumeration failed: %o', error);
+ });
+ }
+
+ componentWillReceiveProps(nextProps) {
+ if (nextProps.localMedia !== this.props.localMedia) {
+ this.setState({streamURL: nextProps.localMedia})
+ }
+
+
+ if (nextProps.selectedDevices !== this.props.selectedDevices) {
+ let camera = {label: 'No Camera'};
+ let mic = {label: 'No Mic'};
+ if ('camera' in nextProps.selectedDevices) {
+ camera = nextProps.selectedDevices.camera;
+ }
+
+ if ('mic' in nextProps.selectedDevices) {
+ mic = nextProps.selectedDevices.mic;
+ }
+ this.setState({ camera, mic });
+ }
+ }
+
+ setDevice = (device) => (e) => {
+ e.preventDefault();
+ if (device.label !== this.state.mic.label && device.label !== this.state.camera.label) {
+ this.props.setDevice(device);
+ }
+ }
+
+ hangupCall(event) {
+ event.preventDefault();
+ this.props.hangupCall();
+ }
+
+ toggleDrawer() {
+ this.setState({showDrawer: !this.state.showDrawer});
+ }
+
+ render() {
+ let cameras = [];
+ let mics = [];
+
+ this.devices.forEach((device) => {
+ if (device.kind === 'videoinput') {
+ cameras.push(
+ <List.Item key={device.deviceId} style={{width: '350px'}} onPress={this.setDevice(device)} active={device.label === this.state.camera.label} title={device.label} />
+ );
+ } else if (device.kind === 'audioinput') {
+ mics.push(
+ <List.Item key={device.deviceId} style={{width: '350px'}} onPress={this.setDevice(device)} active={device.label === this.state.mic.label} title={device.label} />
+ );
+ }
+ });
+
+
+ let header = null;
+ if (this.state.camera !== '') {
+ header = (
+ <View>
+ <Appbar.Header>
+ <Appbar.Content
+ title="Preview"
+ subtitle={this.state.camera.label}
+ />
+ { !this.state.showDrawer ?
+ <Appbar.Action icon="menu" onPress={this.toggleDrawer} />
+ : null }
+ </Appbar.Header>
+ <VolumeBar localMedia={this.props.localMedia} />
+ </View>
+ );
+ }
+
+ let drawercontent = (
+ <View>
+ <List.Section>
+ <List.Subheader>Video Camera</List.Subheader>
+ {cameras}
+ </List.Section>
+ <List.Section>
+ <List.Subheader>Audio Input</List.Subheader>
+ {mics}
+ </List.Section>
+ </View>
+ );
+
+ console.log(this.state.streamURL);
+
+ return (
+ <View>
+ {header}
+ <View style={styles.container}>
+ { this.state.streamURL ?
+ <RTCView style={styles.video} streamURL={this.state.streamURL.toURL()} mirror={true}/>
+ : null }
+ <View style={styles.buttonContainer}>
+ <IconButton style={styles.button} color="white" onPress={this.hangupCall} icon="power" size={48} />
+ </View>
+ </View>
+ <ConferenceDrawer show={this.state.showDrawer} close={this.toggleDrawer}>
+ {drawercontent}
+ </ConferenceDrawer>
+ </View>
+ );
+ }
+}
+
+Preview.propTypes = {
+ hangupCall: PropTypes.func,
+ localMedia: PropTypes.object.isRequired,
+ setDevice: PropTypes.func.isRequired,
+ selectedDevices: PropTypes.object.isRequired
+};
+
+export default Preview;
diff --git a/app/components/ReadyBox.js b/app/components/ReadyBox.js
new file mode 100644
index 0000000..8eb5fd9
--- /dev/null
+++ b/app/components/ReadyBox.js
@@ -0,0 +1,151 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+import classNames from 'classnames';
+// import VizSensor = require('react-visibility-sensor').default;
+import autoBind from 'auto-bind';
+import { View } from 'react-native';
+import { IconButton, Title } from 'react-native-paper';
+
+import ConferenceModal from './ConferenceModal';
+import HistoryCard from './HistoryCard';
+import HistoryTileBox from './HistoryTileBox';
+import FooterBox from './FooterBox';
+import URIInput from './URIInput';
+import config from '../config';
+import utils from '../utils';
+
+import styles from '../assets/styles/blink/_ReadyBox.scss';
+
+
+class ReadyBox extends Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+
+ this.state = {
+ targetUri: this.props.missedTargetUri,
+ showConferenceModal: false,
+ sticky: false,
+ height: utils.getWindowHeight() - 120
+ };
+ }
+
+ getTargetUri() {
+ const defaultDomain = this.props.account.id.substring(this.props.account.id.indexOf('@') + 1);
+ return utils.normalizeUri(this.state.targetUri, defaultDomain);
+ }
+
+ handleTargetChange(value) {
+ this.setState({targetUri: value});
+ }
+
+ handleTargetSelect() {
+ // the user pressed enter, start a video call by default
+ if (this.state.targetUri.endsWith(`@${config.defaultConferenceDomain}`)) {
+ this.props.startConference(this.state.targetUri);
+ } else {
+ this.props.startCall(this.getTargetUri(), {audio: true, video: true});
+ }
+ }
+
+ handleAudioCall(event) {
+ event.preventDefault();
+ if (this.state.targetUri.endsWith(`@${config.defaultConferenceDomain}`)) {
+ this.props.startConference(this.state.targetUri);
+ } else {
+ this.props.startCall(this.getTargetUri(), {audio: true, video: false});
+ }
+ }
+
+ handleVideoCall(event) {
+ event.preventDefault();
+ if (this.state.targetUri.endsWith(`@${config.defaultConferenceDomain}`)) {
+ this.props.startConference(this.state.targetUri);
+ } else {
+ this.props.startCall(this.getTargetUri(), {audio: true, video: true});
+ }
+ }
+
+ showConferenceModal(event) {
+ event.preventDefault();
+ if (this.state.targetUri.length !== 0) {
+ const uri = `${this.state.targetUri.split('@')[0].replace(/[\s()-]/g, '')}@${config.defaultConferenceDomain}`;
+ this.handleConferenceCall(uri.toLowerCase());
+ } else {
+ this.setState({showConferenceModal: true});
+ }
+ }
+
+ handleConferenceCall(targetUri) {
+ this.setState({showConferenceModal: false});
+ if (targetUri) {
+ this.props.startConference(targetUri);
+ }
+ }
+
+ handleResize() {
+ this.setState({height: utils.getWindowHeight() - 50});
+ }
+
+ render() {
+ // Join URIs from local and server history for input
+ let history = this.props.history.concat(
+ this.props.serverHistory.map(e => e.remoteParty)
+ );
+ history = [...new Set(history)];
+
+ return (
+ <View>
+ <View style={{height: this.state.height}}>
+ <View style={styles.container}>
+ <Title style={styles.title}>Enter the address you wish to call</Title>
+ <URIInput
+ defaultValue={this.state.targetUri}
+ data={history}
+ onChange={this.handleTargetChange}
+ onSelect={this.handleTargetSelect}
+ placeholder="Eg. alice@sip2sip.info or 3333"
+ autoFocus={false}
+ />
+ <View style={styles.buttonGroup}>
+ <IconButton style={styles.button} size={36} disabled={this.state.targetUri.length === 0} onPress={this.handleAudioCall} icon="phone"/>
+ <IconButton style={styles.button} size={36} disabled={this.state.targetUri.length === 0} onPress={this.handleVideoCall} icon="video"/>
+ <IconButton style={styles.button} size={36} onPress={this.showConferenceModal} icon="account-group"/>
+ </View>
+ </View>
+ <HistoryTileBox>
+ {this.props.serverHistory.filter(historyItem => historyItem.remoteParty.startsWith(this.state.targetUri)).map((historyItem, idx) =>
+ (<HistoryCard
+ historyItem = {historyItem}
+ setTargetUri = {this.handleTargetChange}
+ startVideoCall = {this.handleVideoCall}
+ startAudioCall = {this.handleAudioCall}
+ />)
+ )
+ }
+ </HistoryTileBox>
+ <View style={styles.footer}>
+ <FooterBox />
+ </View>
+ </View>
+ <ConferenceModal
+ show={this.state.showConferenceModal}
+ targetUri={this.state.targetUri}
+ handleConferenceCall={this.handleConferenceCall}
+ />
+ </View>
+ );
+ }
+}
+
+ReadyBox.propTypes = {
+ account : PropTypes.object.isRequired,
+ startCall : PropTypes.func.isRequired,
+ startConference : PropTypes.func.isRequired,
+ missedTargetUri : PropTypes.string,
+ history : PropTypes.array,
+ serverHistory : PropTypes.array
+};
+
+
+export default ReadyBox;
diff --git a/app/components/RegisterBox.js b/app/components/RegisterBox.js
new file mode 100644
index 0000000..8f291af
--- /dev/null
+++ b/app/components/RegisterBox.js
@@ -0,0 +1,28 @@
+import React from 'react';
+import { View } from 'react-native';
+import PropTypes from 'prop-types';
+
+import RegisterForm from './RegisterForm';
+import Logo from './Logo';
+import styles from '../assets/styles/blink/_RegisterBox.scss';
+
+const RegisterBox = (props) => {
+ return (
+ <View style={styles.registerBox}>
+ <Logo />
+ <RegisterForm
+ registrationInProgress={props.registrationInProgress}
+ handleRegistration={props.handleRegistration}
+ autoLogin={props.autoLogin}
+ />
+ </View>
+ );
+};
+
+RegisterBox.propTypes = {
+ handleRegistration : PropTypes.func.isRequired,
+ registrationInProgress : PropTypes.bool,
+ autoLogin : PropTypes.bool
+};
+
+export default RegisterBox;
diff --git a/app/components/RegisterForm.js b/app/components/RegisterForm.js
new file mode 100644
index 0000000..8ccf924
--- /dev/null
+++ b/app/components/RegisterForm.js
@@ -0,0 +1,136 @@
+import React, { Component } from 'react';
+import { View, Keyboard } from 'react-native';
+import PropTypes from 'prop-types';
+import ipaddr from 'ipaddr.js';
+import autoBind from 'auto-bind';
+
+import { Button, TextInput, Title } from 'react-native-paper';
+
+import EnrollmentModal from './EnrollmentModal';
+import storage from '../storage';
+import styles from '../assets/styles/blink/_RegisterForm.scss';
+
+class RegisterForm extends Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+ this.state = {
+ accountId: '',
+ password: '',
+ registering: false,
+ remember: false,
+ showEnrollmentModal: false
+ };
+ }
+
+ componentDidMount() {
+ storage.get('account').then((account) => {
+ if (account) {
+ this.setState(Object.assign({}, account, {remember: true}));
+ if (this.props.autoLogin && this.state.password !== '') {
+ this.props.handleRegistration(this.state.accountId, this.state.password);
+ }
+ }
+ });
+ }
+
+ handleAccountIdChange(value) {
+ this.setState({accountId: value});
+ }
+
+ handlePasswordChange(value) {
+ this.setState({password: value});
+ }
+
+ handleSubmit(event) {
+ if (event) {
+ event.preventDefault();
+ }
+ Keyboard.dismiss();
+ this.props.handleRegistration(this.state.accountId, this.state.password, true);
+ }
+
+ handleEnrollment(account) {
+ this.setState({showEnrollmentModal: false});
+ if (account !== null) {
+ this.setState({accountId: account.accountId, password: account.password, registering: true});
+ this.props.handleRegistration(account.accountId, account.password);
+ }
+ }
+
+ createAccount(event) {
+ event.preventDefault();
+ this.setState({showEnrollmentModal: true});
+ }
+
+ render() {
+ const domain = this.state.accountId.substring(this.state.accountId.indexOf('@') + 1);
+ const validDomain = !ipaddr.IPv4.isValidFourPartDecimal(domain) && !ipaddr.IPv6.isValid(domain);
+ const validInput = validDomain && this.state.accountId.indexOf('@') !== -1 && this.state.password !== 0;
+
+ return (
+ <View style={styles.container}>
+ <Title style={styles.title}>Sign in to continue</Title>
+ <View style={styles.row}>
+ <TextInput
+ style={styles.input}
+ textContentType="emailAddress"
+ label="Sip Account"
+ placeholder="Enter your account"
+ value={this.state.accountId}
+ onChangeText={this.handleAccountIdChange}
+ required
+ autoCapitalize="none"
+ />
+ </View>
+ <View style={styles.row}>
+ <TextInput
+ style={styles.input}
+ label="Password"
+ textContentType="password"
+ placeholder="Password"
+ value={this.state.password}
+ onChangeText={this.handlePasswordChange}
+ required
+ secureTextEntry={true}
+ />
+ </View>
+
+ <View style={styles.row}>
+ <Button
+ style={styles.button}
+ icon="login"
+ disabled={this.props.registrationInProgress || !validInput}
+ onPress={this.handleSubmit}
+ mode="contained"
+ loading={this.state.registering}
+ accessibilityLabel="Sign In"
+ >
+ Sign In
+ </Button>
+ <Button
+ icon="plus"
+ style={styles.button}
+ mode="contained"
+ onPress={this.createAccount}
+ disabled={this.props.registrationInProgress}
+ accessibilityLabel="Sign Up"
+ >
+ Sign Up
+ </Button>
+ </View>
+ <EnrollmentModal show={this.state.showEnrollmentModal} handleEnrollment={this.handleEnrollment} />
+ </View>
+ );
+ }
+}
+
+RegisterForm.propTypes = {
+ classes : PropTypes.object,
+ handleRegistration : PropTypes.func.isRequired,
+ registrationInProgress : PropTypes.bool.isRequired,
+ autoLogin : PropTypes.bool
+};
+
+
+export default RegisterForm;
\ No newline at end of file
diff --git a/app/components/StatusBox.js b/app/components/StatusBox.js
new file mode 100644
index 0000000..4229f94
--- /dev/null
+++ b/app/components/StatusBox.js
@@ -0,0 +1,38 @@
+import React from 'react';
+import { View } from 'react-native';
+import PropTypes from 'prop-types';
+import { Snackbar } from 'react-native-paper';
+import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
+
+const StatusBox = (props) => {
+
+ let iconName;
+ switch (props.level) {
+ case 'info':
+ iconName = 'information-outline';
+ break;
+ case 'danger':
+ iconName = 'alert-circle-outline';
+ break;
+ case 'warning':
+ iconName = 'alert-octogon-outline';
+ break;
+ }
+
+ return (
+ <View>
+ <Snackbar visible={true} duraction={2000} onDismiss={() => {}}>
+ { iconName ? (<Icon name={iconName} />) : null }{ props.title }{ props.message }
+ </Snackbar>
+ </View>
+ );
+};
+
+StatusBox.propTypes = {
+ level: PropTypes.string,
+ message: PropTypes.string.isRequired,
+ title: PropTypes.string,
+};
+
+
+export default StatusBox;
diff --git a/app/components/URIInput.js b/app/components/URIInput.js
new file mode 100644
index 0000000..461d7bb
--- /dev/null
+++ b/app/components/URIInput.js
@@ -0,0 +1,129 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { View } from 'react-native';
+import { TextInput } from 'react-native-paper';
+import autoBind from 'auto-bind';
+
+class URIInput extends React.Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+ this.state = {
+ selecting: false
+ };
+
+ this.uriInput = React.createRef();
+ this.clicked = false;
+ this.autoComplete;
+ }
+
+ componentDidMount() {
+ // this.autoComplete = autocomplete('#uri-input', { hint: false }, [
+ // {
+ // source: (query, cb) => {
+ // let data = this.props.data.filter((item) => {
+ // return item.startsWith(query);
+ // });
+ // cb(data);
+ // },
+ // displayKey: String,
+ // templates: {
+ // suggestion: (suggestion) => {
+ // return suggestion;
+ // }
+ // }
+ // }
+ // ]).on('autocomplete:selected', (event, suggestion, dataset) => {
+ // this.setValue(suggestion);
+ // });
+
+ if (this.props.autoFocus) {
+ this.uriInput.current.focus();
+ }
+ }
+
+ componentDidUpdate(prevProps) {
+ if (prevProps.defaultValue !== this.props.defaultValue && this.props.autoFocus) {
+ this.uriInput.current.focus();
+ }
+ }
+
+ setValue(value) {
+ this.props.onChange(value);
+ }
+
+ onInputChange(value) {
+ this.setValue(value);
+ }
+
+ onInputClick(event) {
+ if (!this.clicked) {
+ this.uriInput.current.select();
+ this.clicked = true;
+ }
+ }
+
+ onInputKeyDown(event) {
+ switch (event.which) {
+ case 13:
+ // ENTER
+ if (this.state.selecting) {
+ this.setState({selecting: false});
+ } else {
+ this.props.onSelect(event.target.value);
+ }
+ break;
+ case 27:
+ // ESC
+ this.setState({selecting: false});
+ break;
+ case 38:
+ case 40:
+ // UP / DOWN ARROW
+ this.setState({selecting: true});
+ break;
+ default:
+ break;
+ }
+ }
+
+ onInputBlur(event) {
+ // focus was lost, reset selecting state
+ if (this.state.selecting) {
+ this.setState({selecting: false});
+ }
+ this.clicked = false;
+ }
+
+ render() {
+ return (
+ <View className="form-group uri-input">
+ <TextInput id="uri-input" name="uri-input" ref={this.uriInput} className="form-control input-lg"
+ onChangeText={this.onInputChange}
+ onKeyDown={this.onInputKeyDown}
+ onBlur={this.onInputBlur}
+ onPress={this.onInputClick}
+ value={this.props.defaultValue}
+ autoCapitalize="none"
+ autoCorrect={false}
+ required
+ autoFocus={this.props.autoFocus}
+ placeholder={this.props.placeholder}
+ />
+ </View>
+ );
+
+ }
+}
+
+URIInput.propTypes = {
+ defaultValue: PropTypes.string.isRequired,
+ data: PropTypes.array.isRequired,
+ autoFocus: PropTypes.bool.isRequired,
+ onChange: PropTypes.func.isRequired,
+ onSelect: PropTypes.func.isRequired,
+ placeholder : PropTypes.string
+};
+
+
+export default URIInput;
diff --git a/app/components/UserIcon.js b/app/components/UserIcon.js
new file mode 100644
index 0000000..9faafe8
--- /dev/null
+++ b/app/components/UserIcon.js
@@ -0,0 +1,58 @@
+import React from'react';
+import PropTypes from 'prop-types';
+import utils from '../utils';
+import { Avatar } from 'react-native-paper';
+
+import classNames from 'classnames';
+
+// const styleSheet = {
+// root: {
+// transition: 'box-shadow 0.3s'
+// },
+// drawerAvatar: {
+// fontFamily: 'Helvetica Neue ,Helvetica, Arial, sans-serif',
+// textTransform: 'uppercase'
+// },
+// card: {
+// width: '70px',
+// height: '70px',
+// fontSize: '2.5rem',
+// margin: '10px'
+// },
+// large: {
+// width: '144px',
+// height: '144px',
+// fontSize: '5rem',
+// margin: 'auto'
+// },
+// shadow: {
+// boxShadow: '0 0 10px 2px #999'
+// }
+// };
+
+const UserIcon = (props) => {
+ const name = props.identity.displayName || props.identity.uri;
+ let initials = name.split(' ', 2).map(x => x[0]).join('');
+ const color = utils.generateMaterialColor(props.identity.uri)['300'];
+
+ if (props.identity.uri === 'anonymous@anonymous.invalid') {
+ return (
+ <Avatar.Icon style={{backgroundColor: color}} icon="user" />
+ )
+ }
+
+ return (
+ <Avatar.Text style={{backgroundColor: color}} label={initials} />
+ );
+};
+
+UserIcon.propTypes = {
+ classes: PropTypes.object.isRequired,
+ identity: PropTypes.object.isRequired,
+ large: PropTypes.bool,
+ card: PropTypes.bool,
+ active: PropTypes.bool
+};
+
+
+export default UserIcon;
diff --git a/app/components/VideoBox.js b/app/components/VideoBox.js
new file mode 100644
index 0000000..b297ac3
--- /dev/null
+++ b/app/components/VideoBox.js
@@ -0,0 +1,272 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+// const TransitionGroup = require('react-transition-group/TransitionGroup');
+// const CSSTransition = require('react-transition-group/CSSTransition');
+import ReactMixin from 'react-mixin';
+import sylkrtc from 'sylkrtc';
+import classNames from 'classnames';
+import debug from 'react-native-debug';
+import autoBind from 'auto-bind';
+
+// import FullscreenMixin from '../mixins/FullScreen';
+import CallOverlay from './CallOverlay';
+import EscalateConferenceModal from './EscalateConferenceModal';
+
+const DEBUG = debug('blinkrtc:Video');
+
+class VideoBox extends Component {
+ constructor(props) {
+ super(props);
+ autoBind(this);
+
+ this.state = {
+ callOverlayVisible: true,
+ audioMuted: false,
+ videoMuted: false,
+ localVideoShow: false,
+ remoteVideoShow: false,
+ remoteSharesScreen: false,
+ showEscalateConferenceModal: false,
+ stream: null
+ };
+
+ this.overlayTimer = null;
+ this.localVideo = React.createRef();
+ this.remoteVideo = React.createRef();
+ }
+
+ componentDidMount() {
+ this.setState({localStream: this.props.call.getLocalStreams()[0], localVideoShow: true, remoteStream: this.props.call.getRemoteStreams()[0], remoteVideoShow: true})
+ // sylkrtc.utils.attachMediaStream(, this.localVideo.current, {disableContextMenu: true});
+ // let promise = this.localVideo.current.play()
+ // if (promise !== undefined) {
+ // promise.then(_ => {
+ // this.setState({localVideoShow: true}); // eslint-disable-line react/no-did-mount-set-state
+ // // Autoplay started!
+ // }).catch(error => {
+ // // Autoplay was prevented.
+ // // Show a "Play" button so that user can start playback.
+ // });
+ // } else {
+ // this.localVideo.current.addEventListener('playing', () => {
+ // this.setState({}); // eslint-disable-line react/no-did-mount-set-state
+ // });
+ // }
+
+ // this.remoteVideo.current.addEventListener('playing', this.handleRemoteVideoPlaying);
+ // sylkrtc.utils.attachMediaStream(this.props.call.getRemoteStreams()[0], this.remoteVideo.current, {disableContextMenu: true});
+ }
+
+ componentWillUnmount() {
+ // clearTimeout(this.overlayTimer);
+ // this.remoteVideo.current.removeEventListener('playing', this.handleRemoteVideoPlaying);
+ // this.exitFullscreen();
+ }
+
+ handleFullscreen(event) {
+ event.preventDefault();
+ // this.toggleFullscreen();
+ }
+
+ handleRemoteVideoPlaying() {
+ this.setState({remoteVideoShow: true});
+ // this.remoteVideo.current.onresize = (event) => {
+ // this.handleRemoteResize(event)
+ // };
+ // this.armOverlayTimer();
+ }
+
+ handleRemoteResize(event, target) {
+ //DEBUG("%o", event);
+ const resolutions = [ '1280x720', '960x540', '640x480', '640x360', '480x270','320x180'];
+ const videoResolution = event.target.videoWidth + 'x' + event.target.videoHeight;
+ if (resolutions.indexOf(videoResolution) === -1) {
+ this.setState({remoteSharesScreen: true});
+ } else {
+ this.setState({remoteSharesScreen: false});
+ }
+ }
+
+ muteAudio(event) {
+ event.preventDefault();
+ const localStream = this.props.call.getLocalStreams()[0];
+ if (localStream.getAudioTracks().length > 0) {
+ const track = localStream.getAudioTracks()[0];
+ if(this.state.audioMuted) {
+ DEBUG('Unmute microphone');
+ track.enabled = true;
+ this.setState({audioMuted: false});
+ } else {
+ DEBUG('Mute microphone');
+ track.enabled = false;
+ this.setState({audioMuted: true});
+ }
+ }
+ }
+
+ muteVideo(event) {
+ event.preventDefault();
+ const localStream = this.props.call.getLocalStreams()[0];
+ if (localStream.getVideoTracks().length > 0) {
+ const track = localStream.getVideoTracks()[0];
+ if(this.state.videoMuted) {
+ DEBUG('Unmute camera');
+ track.enabled = true;
+ this.setState({videoMuted: false});
+ } else {
+ DEBUG('Mute camera');
+ track.enabled = false;
+ this.setState({videoMuted: true});
+ }
+ }
+ }
+
+ hangupCall(event) {
+ event.preventDefault();
+ this.props.hangupCall();
+ }
+
+ escalateToConference(participants) {
+ this.props.escalateToConference(participants);
+ }
+
+ armOverlayTimer() {
+ clearTimeout(this.overlayTimer);
+ this.overlayTimer = setTimeout(() => {
+ this.setState({callOverlayVisible: false});
+ }, 4000);
+ }
+
+ showCallOverlay() {
+ if (this.state.remoteVideoShow) {
+ this.setState({callOverlayVisible: true});
+ this.armOverlayTimer();
+ }
+ }
+
+ toggleEscalateConferenceModal() {
+ this.setState({
+ callOverlayVisible : false,
+ showEscalateConferenceModal : !this.state.showEscalateConferenceModal
+ });
+ }
+
+ render() {
+ if (this.props.call == null) {
+ return (<View></View>);
+ }
+
+ const localVideoClasses = classNames({
+ 'video-thumbnail' : true,
+ 'mirror' : !this.props.call.sharingScreen && !this.props.generatedVideoTrack,
+ 'hidden' : !this.state.localVideoShow,
+ 'animated' : true,
+ 'fadeIn' : this.state.localVideoShow || this.state.videoMuted,
+ 'fadeOut' : this.state.videoMuted,
+ 'fit' : this.props.call.sharingScreen
+ });
+
+ const remoteVideoClasses = classNames({
+ 'poster' : !this.state.remoteVideoShow,
+ 'animated' : true,
+ 'fadeIn' : this.state.remoteVideoShow,
+ 'large' : true,
+ 'fit' : this.state.remoteSharesScreen
+ });
+
+ let callButtons;
+ let watermark;
+
+ if (this.state.callOverlayVisible) {
+ // const screenSharingButtonIcons = classNames({
+ // 'fa' : true,
+ // 'fa-clone' : true,
+ // 'fa-flip-horizontal' : true,
+ // 'text-warning' : this.props.call.sharingScreen
+ // });
+
+ // const fullScreenButtonIcons = classNames({
+ // 'fa' : true,
+ // 'fa-expand' : !this.isFullScreen(),
+ // 'fa-compress' : this.isFullScreen()
+ // });
+
+ // const commonButtonClasses = classNames({
+ // 'btn' : true,
+ // 'btn-round' : true,
+ // 'btn-default' : true
+ // });
+
+ const muteButtonIcons = this.state.audioMuted ? 'microphone-off' : 'microphone';
+
+ const muteVideoButtonIcons = this.state.videoMuted ? 'video-off' : 'video';
+
+ const buttons = [];
+
+ buttons.push(<IconButton key="escalateButton" onPress={this.toggleEscalateConferenceModal} icon="account-plus" />);
+ buttons.push(<IconButton key="muteVideo" onPress={this.muteVideo} icon={muteButtonIcons} />);
+ buttons.push(<IconButton key="muteAudio" onPress={this.muteAudio} icon={muteVideoButtonIcons} />);
+ // buttons.push(<Button key="shareScreen" type="button" title="Share screen" className={commonButtonClasses} onPress={this.props.shareScreen}><i className={screenSharingButtonIcons}></i></button>);
+ // if (this.isFullscreenSupported()) {
+ // buttons.push(<button key="fsButton" type="button" className={commonButtonClasses} onPress={this.handleFullscreen}> <i className={fullScreenButtonIcons}></i> </button>);
+ // }
+ // buttons.push(<br key="break" />);
+ buttons.push(<IconButton key="hangupButton" onPress={this.hangupCall} icon="phone-hangup" />);
+
+ callButtons = (
+ // <CSSTransition
+ // key="buttons"
+ // classNames="videobuttons"
+ // timeout={{ enter: 300, exit: 300}}
+ // >
+ <View className="call-buttons">
+ {buttons}
+ </View>
+ // </CSSTransition>
+ );
+ } else {
+ // watermark = (
+ // <CSSTransition
+ // key="watermark"
+ // classNames="watermark"
+ // timeout={{enter: 600, exit: 300}}
+ // >
+ // <View className="watermark"></View>
+ // </CSSTransition>
+ // );
+ }
+
+ return (
+ <View className="video-container" onMouseMove={this.showCallOverlay}>
+ <CallOverlay
+ show = {this.state.callOverlayVisible}
+ remoteIdentity = {this.props.call.remoteIdentity.displayName || this.props.call.remoteIdentity.uri}
+ call = {this.props.call}
+ />
+ {/* <TransitionGroup> */}
+ {/* {watermark} */}
+ {/* </TransitionGroup> */}
+ <RTCView id="remoteVideo" className={remoteVideoClasses} poster="assets/images/transparent-1px.png" ref={this.remoteVideo} streamURL={this.state.remoteStream ? this.state.remoteStream.toURL() : null} />
+ <RTCView id="localVideo" className={localVideoClasses} ref={this.localVideo} streamURL={this.state.localStream ? this.state.localStream.toURL() : null} />
+ {callButtons}
+ <EscalateConferenceModal
+ show={this.state.showEscalateConferenceModal}
+ call={this.props.call}
+ close={this.toggleEscalateConferenceModal}
+ escalateToConference={this.escalateToConference}
+ />
+ </View>
+ );
+ }
+}
+
+VideoBox.propTypes = {
+ call : PropTypes.object,
+ localMedia : PropTypes.object,
+ hangupCall : PropTypes.func,
+ shareScreen : PropTypes.func.isRequired,
+ escalateToConference : PropTypes.func,
+ generatedVideoTrack : PropTypes.bool
+};
+
+export default VideoBox;
diff --git a/app/components/VolumeBar.js b/app/components/VolumeBar.js
new file mode 100644
index 0000000..768e376
--- /dev/null
+++ b/app/components/VolumeBar.js
@@ -0,0 +1,85 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+// const hark = require('hark');
+
+import { ProgressBar, Colors } from 'react-native-paper';
+
+// const styleSheet = {
+// colorSecondary: {
+// backgroundColor: Green[100]
+// },
+// barColorSecondary: {
+// backgroundColor: Green[500]
+// },
+// root: {
+// height: '10px',
+// opacity: '0.7'
+// },
+// bar1Determinate: {
+// transition: 'transform 0.2s linear'
+// }
+// };
+
+class VolumeBar extends Component {
+
+ constructor(props) {
+ super(props);
+ this.speechEvents = null;
+ this.state = {
+ volume: 0
+ }
+ }
+
+ componentDidMount() {
+ // const options = {
+ // interval: 225,
+ // play: false
+ // };
+ // this.speechEvents = hark(this.props.localMedia, options);
+ // this.speechEvents.on('volume_change', (vol, threshold) => {
+ // this.setState({volume: 2 * (vol + 75)});
+ // });
+ }
+
+ componentDidUpdate(prevProps) {
+ if (prevProps.localMedia !== this.props.localMedia) {
+ // if (this.speechEvents !== null) {
+ // this.speechEvents.stop();
+ // this.speechEvents = null;
+ // }
+ // const options = {
+ // interval: 225,
+ // play: false
+ // };
+ // this.speechEvents = hark(this.props.localMedia, options);
+ // this.speechEvents.on('volume_change', (vol, threshold) => {
+ // this.setState({volume: 2 * (vol + 75)});
+ // });
+ }
+ }
+
+ componentWillUnmount() {
+ // if (this.speechEvents !== null) {
+ // this.speechEvents.stop();
+ // this.speechEvents = null;
+ // }
+ }
+
+ render() {
+ // let color = 'primary';
+ // if (this.state.volume > 20) {
+ // color = 'secondary';
+ // }
+
+ return (
+ <ProgressBar classes={this.props.classes} indeterminate={false} progress={this.state.volume} />
+ );
+ }
+}
+
+VolumeBar.propTypes = {
+ localMedia: PropTypes.object.isRequired
+};
+
+
+export default VolumeBar;
diff --git a/app/config.js b/app/config.js
new file mode 100644
index 0000000..b2af8ef
--- /dev/null
+++ b/app/config.js
@@ -0,0 +1,20 @@
+'use strict';
+
+const defaultDomain = 'sip2sip.info';
+
+const configOptions = {
+ defaultDomain : defaultDomain,
+ enrollmentDomain : defaultDomain,
+ publicUrl : 'https://webrtc.sipthor.net',
+ enrollmentUrl : 'https://blink.sipthor.net/enrollment-webrtc.phtml',
+ useServerCallHistory : true,
+ serverCallHistoryUrl : 'https://blink.sipthor.net/settings-webrtc.phtml',
+ defaultConferenceDomain : `videoconference.${defaultDomain}`,
+ defaultGuestDomain : `guest.${defaultDomain}`,
+ wsServer : 'wss://webrtc-gateway.sipthor.net:9999/webrtcgateway/ws',
+ fileSharingUrl : 'https://webrtc-gateway.sipthor.net:9999/webrtcgateway/filesharing',
+ iceServers : [{urls: 'stun:stun.sipthor.net:3478'}]
+};
+
+
+module.exports = configOptions;
diff --git a/app/history.js b/app/history.js
new file mode 100644
index 0000000..d3d811c
--- /dev/null
+++ b/app/history.js
@@ -0,0 +1,13 @@
+import { createMemoryHistory } from 'history';
+
+const history = createMemoryHistory({
+ initialEntries: ['/'], // The initial URLs in the history stack
+ initialIndex: 0, // The starting index in the history stack
+ keyLength: 10, // The length of location.key
+ // A function to use to confirm navigation with the user. Required
+ // if you return string prompts from transition hooks (see below)
+ getUserConfirmation: null
+});
+
+
+export default history;
\ No newline at end of file
diff --git a/app/mixins/FullScreen.js b/app/mixins/FullScreen.js
new file mode 100644
index 0000000..fb4e2c4
--- /dev/null
+++ b/app/mixins/FullScreen.js
@@ -0,0 +1,34 @@
+'use strict';
+
+const screenfull = require('screenfull');
+
+
+const FullscreenMixin = {
+ isFullScreen: function() {
+ return screenfull.isFullscreen;
+ },
+
+ isFullscreenSupported: function() {
+ return screenfull.enabled;
+ },
+
+ requestFullscreen: function(elem) {
+ if (screenfull.enabled) {
+ screenfull.request(elem);
+ }
+ },
+
+ exitFullscreen: function() {
+ if (screenfull.enabled) {
+ screenfull.exit();
+ }
+ },
+
+ toggleFullscreen: function(elem) {
+ if (screenfull.enabled) {
+ screenfull.toggle(elem);
+ }
+ }
+};
+
+module.exports = FullscreenMixin;
diff --git a/app/storage.js b/app/storage.js
new file mode 100644
index 0000000..56d3ad2
--- /dev/null
+++ b/app/storage.js
@@ -0,0 +1,24 @@
+import AsyncStorage from '@react-native-community/async-storage';
+
+function initialize() {}
+
+async function set(key, value) {
+ value = JSON.stringify(value);
+
+ return await AsyncStorage.setItem(key, value);
+}
+
+async function get(key) {
+ let res = await AsyncStorage.getItem(key);
+
+ return JSON.parse(res);
+}
+
+async function remove(key) {
+ return await AsyncStorage.removeItem(key);
+}
+
+exports.initialize = initialize;
+exports.set = set;
+exports.get = get;
+exports.remove = remove;
diff --git a/app/utils.js b/app/utils.js
new file mode 100644
index 0000000..5ed8ad7
--- /dev/null
+++ b/app/utils.js
@@ -0,0 +1,107 @@
+import uuidv4 from 'uuid/v4';
+import SillyNames from './SillyNames';
+import MaterialColors from './MaterialColors';
+import { Clipboard, Dimensions } from 'react-native';
+
+function generateUniqueId() {
+ const uniqueId = uuidv4().replace(/-/g, '').slice(0, 16);
+ return uniqueId;
+}
+
+function normalizeUri(uri, defaultDomain) {
+ let targetUri = uri;
+ let idx = targetUri.indexOf('@');
+ let username;
+ let domain;
+ if (idx !== -1) {
+ username = targetUri.substring(0, idx);
+ domain = targetUri.substring(idx + 1);
+ } else {
+ username = targetUri;
+ domain = defaultDomain;
+ }
+ username = username.replace(/[\s()-]/g, '');
+ return `${username}@${domain}`;
+}
+
+function copyToClipboard(text) {
+ Clipboard.setString(text);
+
+ return true;
+}
+
+function generateSillyName() {
+ const adjective = SillyNames.randomAdjective();
+ const number = Math.floor(Math.random() * 10);
+ const noun1 = SillyNames.randomNoun();
+ const noun2 = SillyNames.randomNoun();
+ return adjective + noun1 + noun2 + number;
+}
+
+function generateMaterialColor(text) {
+ return MaterialColors.generateColor(text);
+}
+
+function generateVideoTrack(stream, width = 640, height = 480) {
+ // const audioCtx = new (window.AudioContext || window.webkitAudioContext)();
+ // const analyser = audioCtx.createAnalyser();
+ // const source = audioCtx.createMediaStreamSource(stream);
+ // source.connect(analyser);
+
+ // analyser.fftSize = 256;
+ // const bufferLength = analyser.frequencyBinCount;
+ // const dataArray = new Uint8Array(bufferLength);
+
+ // const canvas = Object.assign(document.createElement('canvas'), {width, height});
+ // const ctx = canvas.getContext('2d');
+
+ // const img = new Image();
+ // const blinkLogo = new Image();
+ // img.addEventListener('load', () => {
+ // draw();
+ // });
+
+ // const draw = () => {
+ // if (stream.active) {
+ // const drawVisual = requestAnimationFrame(draw);
+ // }
+ // analyser.getByteFrequencyData(dataArray);
+
+ // ctx.fillStyle = 'rgb(35, 35, 35)';
+ // ctx.fillRect(0, 0, width, height);
+ // ctx.filter = 'grayscale(100%) brightness(90%)';
+ // ctx.drawImage(blinkLogo, (width / 2) - 150, (height / 2) - 150, 300, 300);
+ // ctx.filter = 'none';
+ // ctx.drawImage(img, (width / 2) - 45 , height / 3, 90, 90);
+ // const barWidth = (width / bufferLength) * 2.5;
+ // let barHeight;
+ // let x = 0;
+ // for(var i = 0; i < bufferLength; i++) {
+ // barHeight = dataArray[i] / 2;
+
+ // ctx.fillStyle = 'rgb(' + (barHeight + 100) + ', 50, 50)';
+ // ctx.fillRect(x, 2 * height / 3 - barHeight / 2, barWidth, barHeight);
+
+ // x += barWidth + 1;
+ // }
+ // };
+ // img.src = 'assets/images/video-camera-slash.png';
+ // blinkLogo.src = 'assets/images/blink-white-big.png';
+
+ // const canvasStream = canvas.captureStream();
+
+
+ return Object.assign(stream.getVideoTracks()[0], {enabled: true});
+}
+
+function getWindowHeight() {
+ return Dimensions.get('window').height;
+}
+
+exports.copyToClipboard = copyToClipboard;
+exports.normalizeUri = normalizeUri;
+exports.generateSillyName = generateSillyName;
+exports.generateUniqueId = generateUniqueId;
+exports.generateMaterialColor = generateMaterialColor;
+exports.generateVideoTrack = generateVideoTrack;
+exports.getWindowHeight = getWindowHeight;
diff --git a/babel.config.js b/babel.config.js
new file mode 100644
index 0000000..9b7b211
--- /dev/null
+++ b/babel.config.js
@@ -0,0 +1,8 @@
+module.exports = {
+ presets: ['module:metro-react-native-babel-preset'],
+ // env: {
+ // production: {
+ // plugins: ['react-native-paper/babel'],
+ // },
+ // },
+};
\ No newline at end of file
diff --git a/fastlane/Appfile b/fastlane/Appfile
new file mode 100644
index 0000000..2a0a964
--- /dev/null
+++ b/fastlane/Appfile
@@ -0,0 +1,8 @@
+app_identifier("com.agprojects.sylk-ios") # The bundle identifier of your app
+apple_id("me@dan-jenkins.co.uk") # Your Apple email address
+
+itc_team_id("467748") # App Store Connect Team ID
+team_id("4DFEFUDLKZ") # Developer Portal Team ID
+
+# For more information about the Appfile, see:
+# https://docs.fastlane.tools/advanced/#appfile
diff --git a/fastlane/Fastfile b/fastlane/Fastfile
new file mode 100644
index 0000000..2d486ab
--- /dev/null
+++ b/fastlane/Fastfile
@@ -0,0 +1,34 @@
+# This file contains the fastlane.tools configuration
+# You can find the documentation at https://docs.fastlane.tools
+#
+# For a list of all available actions, check out
+#
+# https://docs.fastlane.tools/actions
+#
+# For a list of all available plugins, check out
+#
+# https://docs.fastlane.tools/plugins/available-plugins
+#
+
+fastlane_version '2.137.0'
+
+before_all do
+ ensure_git_branch
+ ensure_git_status_clean
+ git_pull
+end
+
+default_platform(:ios)
+
+platform :ios do
+ desc "Push a new beta build to TestFlight"
+ lane :beta do
+ increment_build_number(xcodeproj: "./ios/sylk.xcodeproj")
+ build_app(export_xcargs: "-allowProvisioningUpdates", workspace: "./ios/sylk.xcworkspace", scheme: "sylk")
+ upload_to_testflight
+ end
+end
+
+platform :android do
+ # Android Lanes
+end
diff --git a/fastlane/README.md b/fastlane/README.md
new file mode 100644
index 0000000..99b6dd4
--- /dev/null
+++ b/fastlane/README.md
@@ -0,0 +1,29 @@
+fastlane documentation
+================
+# Installation
+
+Make sure you have the latest version of the Xcode command line tools installed:
+
+```
+xcode-select --install
+```
+
+Install _fastlane_ using
+```
+[sudo] gem install fastlane -NV
+```
+or alternatively using `brew cask install fastlane`
+
+# Available Actions
+## iOS
+### ios beta
+```
+fastlane ios beta
+```
+Push a new beta build to TestFlight
+
+----
+
+This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run.
+More information about fastlane can be found on [fastlane.tools](https://fastlane.tools).
+The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
diff --git a/fastlane/report.xml b/fastlane/report.xml
new file mode 100644
index 0000000..bcfb9f0
--- /dev/null
+++ b/fastlane/report.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<testsuites>
+ <testsuite name="fastlane.lanes">
+
+
+
+
+ <testcase classname="fastlane.lanes" name="0: Verifying fastlane version" time="0.009346">
+
+ </testcase>
+
+
+ <testcase classname="fastlane.lanes" name="1: default_platform" time="0.00376">
+
+ </testcase>
+
+
+ <testcase classname="fastlane.lanes" name="2: ensure_git_branch" time="0.037548">
+
+ <failure message="/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane/lib/fastlane/actions/actions_helper.rb:48:in `execute_action'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane/lib/fastlane/runner.rb:235:in `block in execute_action'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane/lib/fastlane/runner.rb:227:in `chdir'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane/lib/fastlane/runner.rb:227:in `execute_action'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane/lib/fastlane/runner.rb:157:in `trigger_action_by_name'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane/lib/fastlane/fast_file.rb:159:in `method_missing'&#10;Fastfile:16:in `block in parsing_binding'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane/lib/fastlane/runner.rb:285:in `call'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane/lib/fastlane/runner.rb:285:in `execute_flow_block'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane/lib/fastlane/runner.rb:46:in `block in execute'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane/lib/fastlane/runner.rb:45:in `chdir'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane/lib/fastlane/runner.rb:45:in `execute'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane/lib/fastlane/lane_manager.rb:56:in `cruise_lane'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane/lib/fastlane/command_line_handler.rb:36:in `handle'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane/lib/fastlane/commands_generator.rb:108:in `block (2 levels) in run'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/commander-fastlane-4.4.6/lib/commander/command.rb:178:in `call'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/commander-fastlane-4.4.6/lib/commander/command.rb:178:in `call'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/commander-fastlane-4.4.6/lib/commander/command.rb:153:in `run'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/commander-fastlane-4.4.6/lib/commander/runner.rb:476:in `run_active_command'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb:76:in `run!'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/commander-fastlane-4.4.6/lib/commander/delegates.rb:15:in `run!'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane/lib/fastlane/commands_generator.rb:349:in `run'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane/lib/fastlane/commands_generator.rb:41:in `start'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/fastlane/lib/fastlane/cli_tools_distributor.rb:119:in `take_off'&#10;/Users/danjenkins/.fastlane/bin/bundle/lib/ruby/gems/2.2.0/gems/fastlane-2.137.0/bin/fastlane:23:in `&lt;top (required)&gt;'&#10;/Users/danjenkins/.fastlane/bin/bundle/bin/fastlane:22:in `load'&#10;/Users/danjenkins/.fastlane/bin/bundle/bin/fastlane:22:in `&lt;main&gt;'&#10;&#10;Git is not on a branch matching `master`. Current branch is ``! Please ensure the repo is checked out to the correct branch." />
+
+ </testcase>
+
+ </testsuite>
+</testsuites>
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..9f4f5ca
--- /dev/null
+++ b/index.js
@@ -0,0 +1,9 @@
+/**
+ * @format
+ */
+
+import { AppRegistry } from 'react-native';
+import App from './app/app';
+import { name as appName } from './app.json';
+
+AppRegistry.registerComponent(appName, () => App);
diff --git a/ios/Gemfile b/ios/Gemfile
new file mode 100644
index 0000000..7a118b4
--- /dev/null
+++ b/ios/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "fastlane"
diff --git a/ios/Podfile b/ios/Podfile
new file mode 100644
index 0000000..458e4e3
--- /dev/null
+++ b/ios/Podfile
@@ -0,0 +1,54 @@
+platform :ios, '11.0'
+require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
+
+target 'sylk' do
+ # Pods for sylk
+
+ pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector"
+ pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec"
+ pod 'RCTRequired', :path => "../node_modules/react-native/Libraries/RCTRequired"
+ pod 'RCTTypeSafety', :path => "../node_modules/react-native/Libraries/TypeSafety"
+ pod 'React', :path => '../node_modules/react-native/'
+ pod 'React-Core', :path => '../node_modules/react-native/'
+ pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules'
+ pod 'React-Core/DevSupport', :path => '../node_modules/react-native/'
+ pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
+ pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
+ pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'
+ pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
+ pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'
+ pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'
+ pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'
+ pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'
+ pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
+ pod 'React-Core/RCTWebSocket', :path => '../node_modules/react-native/'
+
+ pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact'
+ pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi'
+ pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor'
+ pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector'
+ pod 'ReactCommon/jscallinvoker', :path => "../node_modules/react-native/ReactCommon"
+ pod 'ReactCommon/turbomodule/core', :path => "../node_modules/react-native/ReactCommon"
+ pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
+
+ pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
+ pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
+ pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
+
+ target 'sylkTests' do
+ inherit! :search_paths
+ # Pods for testing
+ end
+
+ use_native_modules!
+end
+
+target 'sylk-tvOS' do
+ # Pods for sylk-tvOS
+
+ target 'sylk-tvOSTests' do
+ inherit! :search_paths
+ # Pods for testing
+ end
+
+end
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
new file mode 100644
index 0000000..de00425
--- /dev/null
+++ b/ios/Podfile.lock
@@ -0,0 +1,374 @@
+PODS:
+ - boost-for-react-native (1.63.0)
+ - DoubleConversion (1.1.6)
+ - FBLazyVector (0.61.5)
+ - FBReactNativeSpec (0.61.5):
+ - Folly (= 2018.10.22.00)
+ - RCTRequired (= 0.61.5)
+ - RCTTypeSafety (= 0.61.5)
+ - React-Core (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - ReactCommon/turbomodule/core (= 0.61.5)
+ - Folly (2018.10.22.00):
+ - boost-for-react-native
+ - DoubleConversion
+ - Folly/Default (= 2018.10.22.00)
+ - glog
+ - Folly/Default (2018.10.22.00):
+ - boost-for-react-native
+ - DoubleConversion
+ - glog
+ - glog (0.3.5)
+ - RCTRequired (0.61.5)
+ - RCTTypeSafety (0.61.5):
+ - FBLazyVector (= 0.61.5)
+ - Folly (= 2018.10.22.00)
+ - RCTRequired (= 0.61.5)
+ - React-Core (= 0.61.5)
+ - React (0.61.5):
+ - React-Core (= 0.61.5)
+ - React-Core/DevSupport (= 0.61.5)
+ - React-Core/RCTWebSocket (= 0.61.5)
+ - React-RCTActionSheet (= 0.61.5)
+ - React-RCTAnimation (= 0.61.5)
+ - React-RCTBlob (= 0.61.5)
+ - React-RCTImage (= 0.61.5)
+ - React-RCTLinking (= 0.61.5)
+ - React-RCTNetwork (= 0.61.5)
+ - React-RCTSettings (= 0.61.5)
+ - React-RCTText (= 0.61.5)
+ - React-RCTVibration (= 0.61.5)
+ - React-Core (0.61.5):
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-Core/Default (= 0.61.5)
+ - React-cxxreact (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - React-jsiexecutor (= 0.61.5)
+ - Yoga
+ - React-Core/CoreModulesHeaders (0.61.5):
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - React-jsiexecutor (= 0.61.5)
+ - Yoga
+ - React-Core/Default (0.61.5):
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-cxxreact (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - React-jsiexecutor (= 0.61.5)
+ - Yoga
+ - React-Core/DevSupport (0.61.5):
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-Core/Default (= 0.61.5)
+ - React-Core/RCTWebSocket (= 0.61.5)
+ - React-cxxreact (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - React-jsiexecutor (= 0.61.5)
+ - React-jsinspector (= 0.61.5)
+ - Yoga
+ - React-Core/RCTActionSheetHeaders (0.61.5):
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - React-jsiexecutor (= 0.61.5)
+ - Yoga
+ - React-Core/RCTAnimationHeaders (0.61.5):
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - React-jsiexecutor (= 0.61.5)
+ - Yoga
+ - React-Core/RCTBlobHeaders (0.61.5):
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - React-jsiexecutor (= 0.61.5)
+ - Yoga
+ - React-Core/RCTImageHeaders (0.61.5):
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - React-jsiexecutor (= 0.61.5)
+ - Yoga
+ - React-Core/RCTLinkingHeaders (0.61.5):
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - React-jsiexecutor (= 0.61.5)
+ - Yoga
+ - React-Core/RCTNetworkHeaders (0.61.5):
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - React-jsiexecutor (= 0.61.5)
+ - Yoga
+ - React-Core/RCTSettingsHeaders (0.61.5):
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - React-jsiexecutor (= 0.61.5)
+ - Yoga
+ - React-Core/RCTTextHeaders (0.61.5):
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - React-jsiexecutor (= 0.61.5)
+ - Yoga
+ - React-Core/RCTVibrationHeaders (0.61.5):
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-Core/Default
+ - React-cxxreact (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - React-jsiexecutor (= 0.61.5)
+ - Yoga
+ - React-Core/RCTWebSocket (0.61.5):
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-Core/Default (= 0.61.5)
+ - React-cxxreact (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - React-jsiexecutor (= 0.61.5)
+ - Yoga
+ - React-CoreModules (0.61.5):
+ - FBReactNativeSpec (= 0.61.5)
+ - Folly (= 2018.10.22.00)
+ - RCTTypeSafety (= 0.61.5)
+ - React-Core/CoreModulesHeaders (= 0.61.5)
+ - React-RCTImage (= 0.61.5)
+ - ReactCommon/turbomodule/core (= 0.61.5)
+ - React-cxxreact (0.61.5):
+ - boost-for-react-native (= 1.63.0)
+ - DoubleConversion
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-jsinspector (= 0.61.5)
+ - React-jsi (0.61.5):
+ - boost-for-react-native (= 1.63.0)
+ - DoubleConversion
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-jsi/Default (= 0.61.5)
+ - React-jsi/Default (0.61.5):
+ - boost-for-react-native (= 1.63.0)
+ - DoubleConversion
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-jsiexecutor (0.61.5):
+ - DoubleConversion
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-cxxreact (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - React-jsinspector (0.61.5)
+ - react-native-webrtc (1.75.2):
+ - React
+ - React-RCTActionSheet (0.61.5):
+ - React-Core/RCTActionSheetHeaders (= 0.61.5)
+ - React-RCTAnimation (0.61.5):
+ - React-Core/RCTAnimationHeaders (= 0.61.5)
+ - React-RCTBlob (0.61.5):
+ - React-Core/RCTBlobHeaders (= 0.61.5)
+ - React-Core/RCTWebSocket (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - React-RCTNetwork (= 0.61.5)
+ - React-RCTImage (0.61.5):
+ - React-Core/RCTImageHeaders (= 0.61.5)
+ - React-RCTNetwork (= 0.61.5)
+ - React-RCTLinking (0.61.5):
+ - React-Core/RCTLinkingHeaders (= 0.61.5)
+ - React-RCTNetwork (0.61.5):
+ - React-Core/RCTNetworkHeaders (= 0.61.5)
+ - React-RCTSettings (0.61.5):
+ - React-Core/RCTSettingsHeaders (= 0.61.5)
+ - React-RCTText (0.61.5):
+ - React-Core/RCTTextHeaders (= 0.61.5)
+ - React-RCTVibration (0.61.5):
+ - React-Core/RCTVibrationHeaders (= 0.61.5)
+ - ReactCommon/jscallinvoker (0.61.5):
+ - DoubleConversion
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-cxxreact (= 0.61.5)
+ - ReactCommon/turbomodule/core (0.61.5):
+ - DoubleConversion
+ - Folly (= 2018.10.22.00)
+ - glog
+ - React-Core (= 0.61.5)
+ - React-cxxreact (= 0.61.5)
+ - React-jsi (= 0.61.5)
+ - ReactCommon/jscallinvoker (= 0.61.5)
+ - RNCallKeep (3.0.8):
+ - React
+ - RNCAsyncStorage (1.7.1):
+ - React
+ - RNDtmf (1.0.0):
+ - React
+ - RNSVG (10.0.0):
+ - React
+ - RNVectorIcons (6.6.0):
+ - React
+ - Yoga (1.14.0)
+
+DEPENDENCIES:
+ - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
+ - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
+ - FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`)
+ - Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
+ - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
+ - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
+ - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
+ - React (from `../node_modules/react-native/`)
+ - React-Core (from `../node_modules/react-native/`)
+ - React-Core/DevSupport (from `../node_modules/react-native/`)
+ - React-Core/RCTWebSocket (from `../node_modules/react-native/`)
+ - React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
+ - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
+ - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
+ - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
+ - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
+ - react-native-webrtc (from `../node_modules/react-native-webrtc`)
+ - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
+ - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
+ - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
+ - React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
+ - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
+ - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`)
+ - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
+ - React-RCTText (from `../node_modules/react-native/Libraries/Text`)
+ - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
+ - ReactCommon/jscallinvoker (from `../node_modules/react-native/ReactCommon`)
+ - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
+ - RNCallKeep (from `../node_modules/react-native-callkeep`)
+ - "RNCAsyncStorage (from `../node_modules/@react-native-community/async-storage`)"
+ - RNDtmf (from `../node_modules/react-native-dtmf/ios`)
+ - RNSVG (from `../node_modules/react-native-svg`)
+ - RNVectorIcons (from `../node_modules/react-native-vector-icons`)
+ - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
+
+SPEC REPOS:
+ https://github.com/cocoapods/specs.git:
+ - boost-for-react-native
+
+EXTERNAL SOURCES:
+ DoubleConversion:
+ :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
+ FBLazyVector:
+ :path: "../node_modules/react-native/Libraries/FBLazyVector"
+ FBReactNativeSpec:
+ :path: "../node_modules/react-native/Libraries/FBReactNativeSpec"
+ Folly:
+ :podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec"
+ glog:
+ :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
+ RCTRequired:
+ :path: "../node_modules/react-native/Libraries/RCTRequired"
+ RCTTypeSafety:
+ :path: "../node_modules/react-native/Libraries/TypeSafety"
+ React:
+ :path: "../node_modules/react-native/"
+ React-Core:
+ :path: "../node_modules/react-native/"
+ React-CoreModules:
+ :path: "../node_modules/react-native/React/CoreModules"
+ React-cxxreact:
+ :path: "../node_modules/react-native/ReactCommon/cxxreact"
+ React-jsi:
+ :path: "../node_modules/react-native/ReactCommon/jsi"
+ React-jsiexecutor:
+ :path: "../node_modules/react-native/ReactCommon/jsiexecutor"
+ React-jsinspector:
+ :path: "../node_modules/react-native/ReactCommon/jsinspector"
+ react-native-webrtc:
+ :path: "../node_modules/react-native-webrtc"
+ React-RCTActionSheet:
+ :path: "../node_modules/react-native/Libraries/ActionSheetIOS"
+ React-RCTAnimation:
+ :path: "../node_modules/react-native/Libraries/NativeAnimation"
+ React-RCTBlob:
+ :path: "../node_modules/react-native/Libraries/Blob"
+ React-RCTImage:
+ :path: "../node_modules/react-native/Libraries/Image"
+ React-RCTLinking:
+ :path: "../node_modules/react-native/Libraries/LinkingIOS"
+ React-RCTNetwork:
+ :path: "../node_modules/react-native/Libraries/Network"
+ React-RCTSettings:
+ :path: "../node_modules/react-native/Libraries/Settings"
+ React-RCTText:
+ :path: "../node_modules/react-native/Libraries/Text"
+ React-RCTVibration:
+ :path: "../node_modules/react-native/Libraries/Vibration"
+ ReactCommon:
+ :path: "../node_modules/react-native/ReactCommon"
+ RNCallKeep:
+ :path: "../node_modules/react-native-callkeep"
+ RNCAsyncStorage:
+ :path: "../node_modules/@react-native-community/async-storage"
+ RNDtmf:
+ :path: "../node_modules/react-native-dtmf/ios"
+ RNSVG:
+ :path: "../node_modules/react-native-svg"
+ RNVectorIcons:
+ :path: "../node_modules/react-native-vector-icons"
+ Yoga:
+ :path: "../node_modules/react-native/ReactCommon/yoga"
+
+SPEC CHECKSUMS:
+ boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
+ DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2
+ FBLazyVector: aaeaf388755e4f29cd74acbc9e3b8da6d807c37f
+ FBReactNativeSpec: 118d0d177724c2d67f08a59136eb29ef5943ec75
+ Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51
+ glog: 1f3da668190260b06b429bb211bfbee5cd790c28
+ RCTRequired: b153add4da6e7dbc44aebf93f3cf4fcae392ddf1
+ RCTTypeSafety: 9aa1b91d7f9310fc6eadc3cf95126ffe818af320
+ React: b6a59ef847b2b40bb6e0180a97d0ca716969ac78
+ React-Core: 688b451f7d616cc1134ac95295b593d1b5158a04
+ React-CoreModules: d04f8494c1a328b69ec11db9d1137d667f916dcb
+ React-cxxreact: d0f7bcafa196ae410e5300736b424455e7fb7ba7
+ React-jsi: cb2cd74d7ccf4cffb071a46833613edc79cdf8f7
+ React-jsiexecutor: d5525f9ed5f782fdbacb64b9b01a43a9323d2386
+ React-jsinspector: fa0ecc501688c3c4c34f28834a76302233e29dc0
+ react-native-webrtc: f6783727706d8bec5fb302b76eda60c33dfe3191
+ React-RCTActionSheet: 600b4d10e3aea0913b5a92256d2719c0cdd26d76
+ React-RCTAnimation: 791a87558389c80908ed06cc5dfc5e7920dfa360
+ React-RCTBlob: d89293cc0236d9cb0933d85e430b0bbe81ad1d72
+ React-RCTImage: 6b8e8df449eb7c814c99a92d6b52de6fe39dea4e
+ React-RCTLinking: 121bb231c7503cf9094f4d8461b96a130fabf4a5
+ React-RCTNetwork: fb353640aafcee84ca8b78957297bd395f065c9a
+ React-RCTSettings: 8db258ea2a5efee381fcf7a6d5044e2f8b68b640
+ React-RCTText: 9ccc88273e9a3aacff5094d2175a605efa854dbe
+ React-RCTVibration: a49a1f42bf8f5acf1c3e297097517c6b3af377ad
+ ReactCommon: 198c7c8d3591f975e5431bec1b0b3b581aa1c5dd
+ RNCallKeep: cfc1353c4806f4b88bf33e3479cf0d68da18e3cb
+ RNCAsyncStorage: 44395cb9c7c1523104c2b499eb426ef7aff82bca
+ RNDtmf: 3d027df415fd00b707061864e2ce270f04d22f3d
+ RNSVG: 9d45f03136ecc9b5497e12f6f20838b568acb9f4
+ RNVectorIcons: 0bb4def82230be1333ddaeee9fcba45f0b288ed4
+ Yoga: f2a7cd4280bfe2cca5a7aed98ba0eb3d1310f18b
+
+PODFILE CHECKSUM: 703755bd43cf1bbd26118fbc65951e3bebd768da
+
+COCOAPODS: 1.7.2
diff --git a/ios/sylk-tvOS/Info.plist b/ios/sylk-tvOS/Info.plist
new file mode 100644
index 0000000..ecbd496
--- /dev/null
+++ b/ios/sylk-tvOS/Info.plist
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleExecutable</key>
+ <string>$(EXECUTABLE_NAME)</string>
+ <key>CFBundleIdentifier</key>
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>$(PRODUCT_NAME)</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>NSAppTransportSecurity</key>
+ <dict>
+ <key>NSExceptionDomains</key>
+ <dict>
+ <key>localhost</key>
+ <dict>
+ <key>NSExceptionAllowsInsecureHTTPLoads</key>
+ <true/>
+ </dict>
+ </dict>
+ </dict>
+ <key>NSLocationWhenInUseUsageDescription</key>
+ <string></string>
+ <key>UILaunchStoryboardName</key>
+ <string>LaunchScreen</string>
+ <key>UIRequiredDeviceCapabilities</key>
+ <array>
+ <string>armv7</string>
+ </array>
+ <key>UISupportedInterfaceOrientations</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+ <key>UIViewControllerBasedStatusBarAppearance</key>
+ <false/>
+</dict>
+</plist>
diff --git a/ios/sylk-tvOSTests/Info.plist b/ios/sylk-tvOSTests/Info.plist
new file mode 100644
index 0000000..886825c
--- /dev/null
+++ b/ios/sylk-tvOSTests/Info.plist
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleExecutable</key>
+ <string>$(EXECUTABLE_NAME)</string>
+ <key>CFBundleIdentifier</key>
+ <string>org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>$(PRODUCT_NAME)</string>
+ <key>CFBundlePackageType</key>
+ <string>BNDL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1</string>
+</dict>
+</plist>
diff --git a/ios/sylk.xcodeproj/project.pbxproj b/ios/sylk.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..d36d598
--- /dev/null
+++ b/ios/sylk.xcodeproj/project.pbxproj
@@ -0,0 +1,1081 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 007F05CD046B4EA387EC4FA0 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 16F8C88D0BB542C7BDD8C492 /* Octicons.ttf */; };
+ 00E356F31AD99517003FC87E /* sylkTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* sylkTests.m */; };
+ 06E4215B94974D1EB24FBE62 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B0040D4144904BA28481D28C /* Ionicons.ttf */; };
+ 0B3DBE453C64488F95AF8533 /* AntDesign.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 671D4DAF69E7476BA7978555 /* AntDesign.ttf */; };
+ 0F120D4D65714CD2A45E69D7 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9B61C54627484A56BC2A9F98 /* Feather.ttf */; };
+ 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
+ 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
+ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
+ 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
+ 29D5FE151E14442FA7F6DBC8 /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F5DBADB972DD4EC78B35AEC7 /* FontAwesome5_Regular.ttf */; };
+ 2BAAA3AAA657695FEC28A353 /* libPods-sylk.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 49A21E9CE6F6D41897DDF38D /* libPods-sylk.a */; };
+ 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
+ 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
+ 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
+ 2DCD954D1E0B4F2C00145EB5 /* sylkTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* sylkTests.m */; };
+ 44D6917438644D769F0D1B86 /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 71521CAD4ABB4743BEBB2695 /* FontAwesome5_Brands.ttf */; };
+ 4B537AF831184A408CF71E17 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ECE2C9FB9E504DD58FD917F4 /* SimpleLineIcons.ttf */; };
+ 50FCA2345C7A40F8AAFEFC8E /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 89A695E1F7D84682917D7A81 /* FontAwesome5_Solid.ttf */; };
+ 6167D4A601229A7369CC95C2 /* libPods-sylk-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 97E31D80CC3854DFCF4BE29A /* libPods-sylk-tvOS.a */; };
+ 73EEEF7A4DFF4464BF5B3585 /* Fontisto.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CCD62FF165FB4D40AB7112F7 /* Fontisto.ttf */; };
+ 836AC13CB62B671217B01187 /* libPods-sylk-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ECAE7D40ED513B47A64B1E5C /* libPods-sylk-tvOSTests.a */; };
+ 85DD658E3E5E440295DD59A3 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CED7F526111B4006B8F219F0 /* FontAwesome.ttf */; };
+ 9920CA86EB26464FA9FCE7ED /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E9A068D7794A48C1A05373F8 /* Foundation.ttf */; };
+ 9BCCD55A27E14029BED280FE /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2E731AC43DE748B89D20AFE1 /* EvilIcons.ttf */; };
+ BD4A5A9922484C94BA9F5638 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 81AA696C92584612895065F5 /* MaterialCommunityIcons.ttf */; };
+ BDFD08AE2D9B4D099A2BD4D9 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C1EEC850E910413BBAA6C838 /* Zocial.ttf */; };
+ D4E2C139FA8C44E5A2F52590 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0C6A7EDC60DD46C6B68BC085 /* Entypo.ttf */; };
+ F60CB71846DA47DD93036BF8 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 409CEF65070048FEA6F61E15 /* MaterialIcons.ttf */; };
+ F94FA55B6581AED0640B0A11 /* libPods-sylkTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DB529F1F69462E254A0E3D32 /* libPods-sylkTests.a */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
+ remoteInfo = sylk;
+ };
+ 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7;
+ remoteInfo = "sylk-tvOS";
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = "<group>"; };
+ 00E356EE1AD99517003FC87E /* sylkTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = sylkTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+ 00E356F21AD99517003FC87E /* sylkTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = sylkTests.m; sourceTree = "<group>"; };
+ 0C6A7EDC60DD46C6B68BC085 /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = "<group>"; };
+ 13B07F961A680F5B00A75B9A /* sylk.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = sylk.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = sylk/AppDelegate.h; sourceTree = "<group>"; };
+ 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = sylk/AppDelegate.m; sourceTree = "<group>"; };
+ 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
+ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = sylk/Images.xcassets; sourceTree = "<group>"; };
+ 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = sylk/Info.plist; sourceTree = "<group>"; };
+ 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = sylk/main.m; sourceTree = "<group>"; };
+ 141410F414CAC204556211B0 /* Pods-sylk-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-sylk-tvOS.release.xcconfig"; path = "Target Support Files/Pods-sylk-tvOS/Pods-sylk-tvOS.release.xcconfig"; sourceTree = "<group>"; };
+ 16F8C88D0BB542C7BDD8C492 /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = "<group>"; };
+ 270A48821BBCA438AB7EF7B3 /* Pods-sylkTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-sylkTests.release.xcconfig"; path = "Target Support Files/Pods-sylkTests/Pods-sylkTests.release.xcconfig"; sourceTree = "<group>"; };
+ 289BA370B7241CA5B519D65E /* Pods-sylk-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-sylk-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-sylk-tvOSTests/Pods-sylk-tvOSTests.release.xcconfig"; sourceTree = "<group>"; };
+ 2D02E47B1E0B4A5D006451C7 /* sylk-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "sylk-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2D02E4901E0B4A5D006451C7 /* sylk-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "sylk-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2E731AC43DE748B89D20AFE1 /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = "<group>"; };
+ 409CEF65070048FEA6F61E15 /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = "<group>"; };
+ 47FF6CA4B56C075052CF83B5 /* Pods-sylk.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-sylk.debug.xcconfig"; path = "Target Support Files/Pods-sylk/Pods-sylk.debug.xcconfig"; sourceTree = "<group>"; };
+ 49A21E9CE6F6D41897DDF38D /* libPods-sylk.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-sylk.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 545EA2F7DD5FB702AA32A25A /* Pods-sylk-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-sylk-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-sylk-tvOS/Pods-sylk-tvOS.debug.xcconfig"; sourceTree = "<group>"; };
+ 5A3CF81527785048E1FCBA8E /* Pods-sylk-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-sylk-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-sylk-tvOSTests/Pods-sylk-tvOSTests.debug.xcconfig"; sourceTree = "<group>"; };
+ 64E96AF423C4CAEC004F2E23 /* sylk.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = sylk.entitlements; path = sylk/sylk.entitlements; sourceTree = "<group>"; };
+ 671D4DAF69E7476BA7978555 /* AntDesign.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = AntDesign.ttf; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = "<group>"; };
+ 71521CAD4ABB4743BEBB2695 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = "<group>"; };
+ 81AA696C92584612895065F5 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = "<group>"; };
+ 89A695E1F7D84682917D7A81 /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Solid.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = "<group>"; };
+ 97E31D80CC3854DFCF4BE29A /* libPods-sylk-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-sylk-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9B61C54627484A56BC2A9F98 /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = "<group>"; };
+ B0040D4144904BA28481D28C /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = "<group>"; };
+ BCC81928E7F95765EDFC67E6 /* Pods-sylkTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-sylkTests.debug.xcconfig"; path = "Target Support Files/Pods-sylkTests/Pods-sylkTests.debug.xcconfig"; sourceTree = "<group>"; };
+ C1EEC850E910413BBAA6C838 /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = "<group>"; };
+ CCD62FF165FB4D40AB7112F7 /* Fontisto.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Fontisto.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf"; sourceTree = "<group>"; };
+ CD3EBBBEF56D9C1F0C3C66A7 /* Pods-sylk.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-sylk.release.xcconfig"; path = "Target Support Files/Pods-sylk/Pods-sylk.release.xcconfig"; sourceTree = "<group>"; };
+ CED7F526111B4006B8F219F0 /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = "<group>"; };
+ DB529F1F69462E254A0E3D32 /* libPods-sylkTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-sylkTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ E9A068D7794A48C1A05373F8 /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = "<group>"; };
+ ECAE7D40ED513B47A64B1E5C /* libPods-sylk-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-sylk-tvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ ECE2C9FB9E504DD58FD917F4 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = "<group>"; };
+ ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
+ ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; };
+ F5DBADB972DD4EC78B35AEC7 /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Regular.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 00E356EB1AD99517003FC87E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F94FA55B6581AED0640B0A11 /* libPods-sylkTests.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2BAAA3AAA657695FEC28A353 /* libPods-sylk.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E4781E0B4A5D006451C7 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 6167D4A601229A7369CC95C2 /* libPods-sylk-tvOS.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 836AC13CB62B671217B01187 /* libPods-sylk-tvOSTests.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 00E356EF1AD99517003FC87E /* sylkTests */ = {
+ isa = PBXGroup;
+ children = (
+ 00E356F21AD99517003FC87E /* sylkTests.m */,
+ 00E356F01AD99517003FC87E /* Supporting Files */,
+ );
+ path = sylkTests;
+ sourceTree = "<group>";
+ };
+ 00E356F01AD99517003FC87E /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 00E356F11AD99517003FC87E /* Info.plist */,
+ );
+ name = "Supporting Files";
+ sourceTree = "<group>";
+ };
+ 13B07FAE1A68108700A75B9A /* sylk */ = {
+ isa = PBXGroup;
+ children = (
+ 64E96AF423C4CAEC004F2E23 /* sylk.entitlements */,
+ 008F07F21AC5B25A0029DE68 /* main.jsbundle */,
+ 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
+ 13B07FB01A68108700A75B9A /* AppDelegate.m */,
+ 13B07FB51A68108700A75B9A /* Images.xcassets */,
+ 13B07FB61A68108700A75B9A /* Info.plist */,
+ 13B07FB11A68108700A75B9A /* LaunchScreen.xib */,
+ 13B07FB71A68108700A75B9A /* main.m */,
+ );
+ name = sylk;
+ sourceTree = "<group>";
+ };
+ 2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
+ ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
+ 49A21E9CE6F6D41897DDF38D /* libPods-sylk.a */,
+ 97E31D80CC3854DFCF4BE29A /* libPods-sylk-tvOS.a */,
+ ECAE7D40ED513B47A64B1E5C /* libPods-sylk-tvOSTests.a */,
+ DB529F1F69462E254A0E3D32 /* libPods-sylkTests.a */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ 351DDEB757664A18BFAFA3DC /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 671D4DAF69E7476BA7978555 /* AntDesign.ttf */,
+ 0C6A7EDC60DD46C6B68BC085 /* Entypo.ttf */,
+ 2E731AC43DE748B89D20AFE1 /* EvilIcons.ttf */,
+ 9B61C54627484A56BC2A9F98 /* Feather.ttf */,
+ CED7F526111B4006B8F219F0 /* FontAwesome.ttf */,
+ 71521CAD4ABB4743BEBB2695 /* FontAwesome5_Brands.ttf */,
+ F5DBADB972DD4EC78B35AEC7 /* FontAwesome5_Regular.ttf */,
+ 89A695E1F7D84682917D7A81 /* FontAwesome5_Solid.ttf */,
+ CCD62FF165FB4D40AB7112F7 /* Fontisto.ttf */,
+ E9A068D7794A48C1A05373F8 /* Foundation.ttf */,
+ B0040D4144904BA28481D28C /* Ionicons.ttf */,
+ 81AA696C92584612895065F5 /* MaterialCommunityIcons.ttf */,
+ 409CEF65070048FEA6F61E15 /* MaterialIcons.ttf */,
+ 16F8C88D0BB542C7BDD8C492 /* Octicons.ttf */,
+ ECE2C9FB9E504DD58FD917F4 /* SimpleLineIcons.ttf */,
+ C1EEC850E910413BBAA6C838 /* Zocial.ttf */,
+ );
+ name = Resources;
+ sourceTree = "<group>";
+ };
+ 7F8D61712125CE276D8F5B51 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 47FF6CA4B56C075052CF83B5 /* Pods-sylk.debug.xcconfig */,
+ CD3EBBBEF56D9C1F0C3C66A7 /* Pods-sylk.release.xcconfig */,
+ 545EA2F7DD5FB702AA32A25A /* Pods-sylk-tvOS.debug.xcconfig */,
+ 141410F414CAC204556211B0 /* Pods-sylk-tvOS.release.xcconfig */,
+ 5A3CF81527785048E1FCBA8E /* Pods-sylk-tvOSTests.debug.xcconfig */,
+ 289BA370B7241CA5B519D65E /* Pods-sylk-tvOSTests.release.xcconfig */,
+ BCC81928E7F95765EDFC67E6 /* Pods-sylkTests.debug.xcconfig */,
+ 270A48821BBCA438AB7EF7B3 /* Pods-sylkTests.release.xcconfig */,
+ );
+ path = Pods;
+ sourceTree = "<group>";
+ };
+ 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ name = Libraries;
+ sourceTree = "<group>";
+ };
+ 83CBB9F61A601CBA00E9B192 = {
+ isa = PBXGroup;
+ children = (
+ 13B07FAE1A68108700A75B9A /* sylk */,
+ 832341AE1AAA6A7D00B99B32 /* Libraries */,
+ 00E356EF1AD99517003FC87E /* sylkTests */,
+ 83CBBA001A601CBA00E9B192 /* Products */,
+ 2D16E6871FA4F8E400B85C8A /* Frameworks */,
+ 7F8D61712125CE276D8F5B51 /* Pods */,
+ 351DDEB757664A18BFAFA3DC /* Resources */,
+ );
+ indentWidth = 2;
+ sourceTree = "<group>";
+ tabWidth = 2;
+ usesTabs = 0;
+ };
+ 83CBBA001A601CBA00E9B192 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 13B07F961A680F5B00A75B9A /* sylk.app */,
+ 00E356EE1AD99517003FC87E /* sylkTests.xctest */,
+ 2D02E47B1E0B4A5D006451C7 /* sylk-tvOS.app */,
+ 2D02E4901E0B4A5D006451C7 /* sylk-tvOSTests.xctest */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 00E356ED1AD99517003FC87E /* sylkTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "sylkTests" */;
+ buildPhases = (
+ 4C29A10583A636C72136796A /* [CP] Check Pods Manifest.lock */,
+ 00E356EA1AD99517003FC87E /* Sources */,
+ 00E356EB1AD99517003FC87E /* Frameworks */,
+ 00E356EC1AD99517003FC87E /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 00E356F51AD99517003FC87E /* PBXTargetDependency */,
+ );
+ name = sylkTests;
+ productName = sylkTests;
+ productReference = 00E356EE1AD99517003FC87E /* sylkTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 13B07F861A680F5B00A75B9A /* sylk */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "sylk" */;
+ buildPhases = (
+ 185F770A0B0EE1BF2F18038F /* [CP] Check Pods Manifest.lock */,
+ FD10A7F022414F080027D42C /* Start Packager */,
+ 13B07F871A680F5B00A75B9A /* Sources */,
+ 13B07F8C1A680F5B00A75B9A /* Frameworks */,
+ 13B07F8E1A680F5B00A75B9A /* Resources */,
+ 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
+ 1D5DA56729EF19F4B4E9DC20 /* [CP] Embed Pods Frameworks */,
+ 9E9762271833D196894E6D8D /* [CP] Copy Pods Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = sylk;
+ productName = sylk;
+ productReference = 13B07F961A680F5B00A75B9A /* sylk.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 2D02E47A1E0B4A5D006451C7 /* sylk-tvOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "sylk-tvOS" */;
+ buildPhases = (
+ 72653B04819DEBB531AAF947 /* [CP] Check Pods Manifest.lock */,
+ FD10A7F122414F3F0027D42C /* Start Packager */,
+ 2D02E4771E0B4A5D006451C7 /* Sources */,
+ 2D02E4781E0B4A5D006451C7 /* Frameworks */,
+ 2D02E4791E0B4A5D006451C7 /* Resources */,
+ 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "sylk-tvOS";
+ productName = "sylk-tvOS";
+ productReference = 2D02E47B1E0B4A5D006451C7 /* sylk-tvOS.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 2D02E48F1E0B4A5D006451C7 /* sylk-tvOSTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "sylk-tvOSTests" */;
+ buildPhases = (
+ 055009ADC1419E2CAF4EEE8F /* [CP] Check Pods Manifest.lock */,
+ 2D02E48C1E0B4A5D006451C7 /* Sources */,
+ 2D02E48D1E0B4A5D006451C7 /* Frameworks */,
+ 2D02E48E1E0B4A5D006451C7 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */,
+ );
+ name = "sylk-tvOSTests";
+ productName = "sylk-tvOSTests";
+ productReference = 2D02E4901E0B4A5D006451C7 /* sylk-tvOSTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 83CBB9F71A601CBA00E9B192 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 940;
+ ORGANIZATIONNAME = Facebook;
+ TargetAttributes = {
+ 00E356ED1AD99517003FC87E = {
+ CreatedOnToolsVersion = 6.2;
+ TestTargetID = 13B07F861A680F5B00A75B9A;
+ };
+ 13B07F861A680F5B00A75B9A = {
+ DevelopmentTeam = 4DFEFUDLKZ;
+ };
+ 2D02E47A1E0B4A5D006451C7 = {
+ CreatedOnToolsVersion = 8.2.1;
+ DevelopmentTeam = 4DFEFUDLKZ;
+ ProvisioningStyle = Automatic;
+ };
+ 2D02E48F1E0B4A5D006451C7 = {
+ CreatedOnToolsVersion = 8.2.1;
+ ProvisioningStyle = Automatic;
+ TestTargetID = 2D02E47A1E0B4A5D006451C7;
+ };
+ };
+ };
+ buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "sylk" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ English,
+ en,
+ Base,
+ );
+ mainGroup = 83CBB9F61A601CBA00E9B192;
+ productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 13B07F861A680F5B00A75B9A /* sylk */,
+ 00E356ED1AD99517003FC87E /* sylkTests */,
+ 2D02E47A1E0B4A5D006451C7 /* sylk-tvOS */,
+ 2D02E48F1E0B4A5D006451C7 /* sylk-tvOSTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 00E356EC1AD99517003FC87E /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 13B07F8E1A680F5B00A75B9A /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
+ 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
+ 0B3DBE453C64488F95AF8533 /* AntDesign.ttf in Resources */,
+ D4E2C139FA8C44E5A2F52590 /* Entypo.ttf in Resources */,
+ 9BCCD55A27E14029BED280FE /* EvilIcons.ttf in Resources */,
+ 0F120D4D65714CD2A45E69D7 /* Feather.ttf in Resources */,
+ 85DD658E3E5E440295DD59A3 /* FontAwesome.ttf in Resources */,
+ 44D6917438644D769F0D1B86 /* FontAwesome5_Brands.ttf in Resources */,
+ 29D5FE151E14442FA7F6DBC8 /* FontAwesome5_Regular.ttf in Resources */,
+ 50FCA2345C7A40F8AAFEFC8E /* FontAwesome5_Solid.ttf in Resources */,
+ 73EEEF7A4DFF4464BF5B3585 /* Fontisto.ttf in Resources */,
+ 9920CA86EB26464FA9FCE7ED /* Foundation.ttf in Resources */,
+ 06E4215B94974D1EB24FBE62 /* Ionicons.ttf in Resources */,
+ BD4A5A9922484C94BA9F5638 /* MaterialCommunityIcons.ttf in Resources */,
+ F60CB71846DA47DD93036BF8 /* MaterialIcons.ttf in Resources */,
+ 007F05CD046B4EA387EC4FA0 /* Octicons.ttf in Resources */,
+ 4B537AF831184A408CF71E17 /* SimpleLineIcons.ttf in Resources */,
+ BDFD08AE2D9B4D099A2BD4D9 /* Zocial.ttf in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E4791E0B4A5D006451C7 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E48E1E0B4A5D006451C7 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Bundle React Native code and images";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
+ };
+ 055009ADC1419E2CAF4EEE8F /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-sylk-tvOSTests-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 185F770A0B0EE1BF2F18038F /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-sylk-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 1D5DA56729EF19F4B4E9DC20 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-sylk/Pods-sylk-frameworks.sh",
+ "${PODS_ROOT}/../../node_modules/react-native-webrtc/ios/WebRTC.framework",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputPaths = (
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebRTC.framework",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-sylk/Pods-sylk-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Bundle React Native Code And Images";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
+ };
+ 4C29A10583A636C72136796A /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-sylkTests-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 72653B04819DEBB531AAF947 /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-sylk-tvOS-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 9E9762271833D196894E6D8D /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 8;
+ files = (
+ );
+ inputPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-sylk/Pods-sylk-resources.sh",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf",
+ "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputPaths = (
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf",
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf",
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-sylk/Pods-sylk-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ FD10A7F022414F080027D42C /* Start Packager */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = "Start Packager";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n";
+ showEnvVarsInLog = 0;
+ };
+ FD10A7F122414F3F0027D42C /* Start Packager */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = "Start Packager";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n";
+ showEnvVarsInLog = 0;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 00E356EA1AD99517003FC87E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 00E356F31AD99517003FC87E /* sylkTests.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 13B07F871A680F5B00A75B9A /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
+ 13B07FC11A68108700A75B9A /* main.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E4771E0B4A5D006451C7 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */,
+ 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E48C1E0B4A5D006451C7 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2DCD954D1E0B4F2C00145EB5 /* sylkTests.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 13B07F861A680F5B00A75B9A /* sylk */;
+ targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
+ };
+ 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 2D02E47A1E0B4A5D006451C7 /* sylk-tvOS */;
+ targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+ 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 13B07FB21A68108700A75B9A /* Base */,
+ );
+ name = LaunchScreen.xib;
+ path = sylk;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 00E356F61AD99517003FC87E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = BCC81928E7F95765EDFC67E6 /* Pods-sylkTests.debug.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ INFOPLIST_FILE = sylkTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "-lc++",
+ "$(inherited)",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/sylk.app/sylk";
+ };
+ name = Debug;
+ };
+ 00E356F71AD99517003FC87E /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 270A48821BBCA438AB7EF7B3 /* Pods-sylkTests.release.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ COPY_PHASE_STRIP = NO;
+ INFOPLIST_FILE = sylkTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "-lc++",
+ "$(inherited)",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/sylk.app/sylk";
+ };
+ name = Release;
+ };
+ 13B07F941A680F5B00A75B9A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 47FF6CA4B56C075052CF83B5 /* Pods-sylk.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_ENTITLEMENTS = sylk/sylk.entitlements;
+ CURRENT_PROJECT_VERSION = 1;
+ DEAD_CODE_STRIPPING = NO;
+ DEVELOPMENT_TEAM = 4DFEFUDLKZ;
+ INFOPLIST_FILE = sylk/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.agprojects.sylk-ios";
+ PRODUCT_NAME = sylk;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ 13B07F951A680F5B00A75B9A /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = CD3EBBBEF56D9C1F0C3C66A7 /* Pods-sylk.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_ENTITLEMENTS = sylk/sylk.entitlements;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = 4DFEFUDLKZ;
+ INFOPLIST_FILE = sylk/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.agprojects.sylk-ios";
+ PRODUCT_NAME = sylk;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Release;
+ };
+ 2D02E4971E0B4A5E006451C7 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 545EA2F7DD5FB702AA32A25A /* Pods-sylk-tvOS.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ DEVELOPMENT_TEAM = 4DFEFUDLKZ;
+ ENABLE_TESTABILITY = YES;
+ GCC_NO_COMMON_BLOCKS = YES;
+ INFOPLIST_FILE = "sylk-tvOS/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.agprojects.sylk-ios-tvOS";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 9.2;
+ };
+ name = Debug;
+ };
+ 2D02E4981E0B4A5E006451C7 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 141410F414CAC204556211B0 /* Pods-sylk-tvOS.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ DEVELOPMENT_TEAM = 4DFEFUDLKZ;
+ GCC_NO_COMMON_BLOCKS = YES;
+ INFOPLIST_FILE = "sylk-tvOS/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.agprojects.sylk-ios-tvOS";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 9.2;
+ };
+ name = Release;
+ };
+ 2D02E4991E0B4A5E006451C7 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 5A3CF81527785048E1FCBA8E /* Pods-sylk-tvOSTests.debug.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_TESTABILITY = YES;
+ GCC_NO_COMMON_BLOCKS = YES;
+ INFOPLIST_FILE = "sylk-tvOSTests/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.sylk-tvOSTests";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/sylk-tvOS.app/sylk-tvOS";
+ TVOS_DEPLOYMENT_TARGET = 10.1;
+ };
+ name = Debug;
+ };
+ 2D02E49A1E0B4A5E006451C7 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 289BA370B7241CA5B519D65E /* Pods-sylk-tvOSTests.release.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_NO_COMMON_BLOCKS = YES;
+ INFOPLIST_FILE = "sylk-tvOSTests/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.sylk-tvOSTests";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/sylk-tvOS.app/sylk-tvOS";
+ TVOS_DEPLOYMENT_TARGET = 10.1;
+ };
+ name = Release;
+ };
+ 83CBBA201A601CBA00E9B192 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = NO;
+ ENABLE_BITCODE = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ };
+ name = Debug;
+ };
+ 83CBBA211A601CBA00E9B192 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = YES;
+ DEAD_CODE_STRIPPING = NO;
+ ENABLE_BITCODE = NO;
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "sylkTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 00E356F61AD99517003FC87E /* Debug */,
+ 00E356F71AD99517003FC87E /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "sylk" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 13B07F941A680F5B00A75B9A /* Debug */,
+ 13B07F951A680F5B00A75B9A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "sylk-tvOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2D02E4971E0B4A5E006451C7 /* Debug */,
+ 2D02E4981E0B4A5E006451C7 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "sylk-tvOSTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2D02E4991E0B4A5E006451C7 /* Debug */,
+ 2D02E49A1E0B4A5E006451C7 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "sylk" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 83CBBA201A601CBA00E9B192 /* Debug */,
+ 83CBBA211A601CBA00E9B192 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
+}
diff --git a/ios/sylk.xcodeproj/xcshareddata/xcschemes/sylk-tvOS.xcscheme b/ios/sylk.xcodeproj/xcshareddata/xcschemes/sylk-tvOS.xcscheme
new file mode 100644
index 0000000..e683fd8
--- /dev/null
+++ b/ios/sylk.xcodeproj/xcshareddata/xcschemes/sylk-tvOS.xcscheme
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ LastUpgradeVersion = "0940"
+ version = "1.3">
+ <BuildAction
+ parallelizeBuildables = "NO"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "2D2A28121D9B038B00D4039D"
+ BuildableName = "libReact.a"
+ BlueprintName = "React-tvOS"
+ ReferencedContainer = "container:../node_modules/react-native/React/React.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "2D02E47A1E0B4A5D006451C7"
+ BuildableName = "sylk-tvOS.app"
+ BlueprintName = "sylk-tvOS"
+ ReferencedContainer = "container:sylk.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "NO"
+ buildForArchiving = "NO"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "2D02E48F1E0B4A5D006451C7"
+ BuildableName = "sylk-tvOSTests.xctest"
+ BlueprintName = "sylk-tvOSTests"
+ ReferencedContainer = "container:sylk.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ buildConfiguration = "Debug"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ shouldUseLaunchSchemeArgsEnv = "YES">
+ <Testables>
+ <TestableReference
+ skipped = "NO">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "2D02E48F1E0B4A5D006451C7"
+ BuildableName = "sylk-tvOSTests.xctest"
+ BlueprintName = "sylk-tvOSTests"
+ ReferencedContainer = "container:sylk.xcodeproj">
+ </BuildableReference>
+ </TestableReference>
+ </Testables>
+ <MacroExpansion>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "2D02E47A1E0B4A5D006451C7"
+ BuildableName = "sylk-tvOS.app"
+ BlueprintName = "sylk-tvOS"
+ ReferencedContainer = "container:sylk.xcodeproj">
+ </BuildableReference>
+ </MacroExpansion>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </TestAction>
+ <LaunchAction
+ buildConfiguration = "Debug"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ ignoresPersistentStateOnLaunch = "NO"
+ debugDocumentVersioning = "YES"
+ debugServiceExtension = "internal"
+ allowLocationSimulation = "YES">
+ <BuildableProductRunnable
+ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "2D02E47A1E0B4A5D006451C7"
+ BuildableName = "sylk-tvOS.app"
+ BlueprintName = "sylk-tvOS"
+ ReferencedContainer = "container:sylk.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </LaunchAction>
+ <ProfileAction
+ buildConfiguration = "Release"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ debugDocumentVersioning = "YES">
+ <BuildableProductRunnable
+ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "2D02E47A1E0B4A5D006451C7"
+ BuildableName = "sylk-tvOS.app"
+ BlueprintName = "sylk-tvOS"
+ ReferencedContainer = "container:sylk.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Debug">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
diff --git a/ios/sylk.xcodeproj/xcshareddata/xcschemes/sylk.xcscheme b/ios/sylk.xcodeproj/xcshareddata/xcschemes/sylk.xcscheme
new file mode 100644
index 0000000..437a66c
--- /dev/null
+++ b/ios/sylk.xcodeproj/xcshareddata/xcschemes/sylk.xcscheme
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ LastUpgradeVersion = "0940"
+ version = "1.3">
+ <BuildAction
+ parallelizeBuildables = "NO"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "83CBBA2D1A601D0E00E9B192"
+ BuildableName = "libReact.a"
+ BlueprintName = "React"
+ ReferencedContainer = "container:../node_modules/react-native/React/React.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
+ BuildableName = "sylk.app"
+ BlueprintName = "sylk"
+ ReferencedContainer = "container:sylk.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "NO"
+ buildForArchiving = "NO"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "00E356ED1AD99517003FC87E"
+ BuildableName = "sylkTests.xctest"
+ BlueprintName = "sylkTests"
+ ReferencedContainer = "container:sylk.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ buildConfiguration = "Debug"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ shouldUseLaunchSchemeArgsEnv = "YES">
+ <Testables>
+ <TestableReference
+ skipped = "NO">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "00E356ED1AD99517003FC87E"
+ BuildableName = "sylkTests.xctest"
+ BlueprintName = "sylkTests"
+ ReferencedContainer = "container:sylk.xcodeproj">
+ </BuildableReference>
+ </TestableReference>
+ </Testables>
+ <MacroExpansion>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
+ BuildableName = "sylk.app"
+ BlueprintName = "sylk"
+ ReferencedContainer = "container:sylk.xcodeproj">
+ </BuildableReference>
+ </MacroExpansion>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </TestAction>
+ <LaunchAction
+ buildConfiguration = "Debug"
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ ignoresPersistentStateOnLaunch = "NO"
+ debugDocumentVersioning = "YES"
+ debugServiceExtension = "internal"
+ allowLocationSimulation = "YES">
+ <BuildableProductRunnable
+ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
+ BuildableName = "sylk.app"
+ BlueprintName = "sylk"
+ ReferencedContainer = "container:sylk.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </LaunchAction>
+ <ProfileAction
+ buildConfiguration = "Release"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ debugDocumentVersioning = "YES">
+ <BuildableProductRunnable
+ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
+ BuildableName = "sylk.app"
+ BlueprintName = "sylk"
+ ReferencedContainer = "container:sylk.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Debug">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
diff --git a/ios/sylk.xcworkspace/contents.xcworkspacedata b/ios/sylk.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..1f5e9cb
--- /dev/null
+++ b/ios/sylk.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "group:sylk.xcodeproj">
+ </FileRef>
+ <FileRef
+ location = "group:Pods/Pods.xcodeproj">
+ </FileRef>
+</Workspace>
diff --git a/ios/sylk.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/sylk.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/ios/sylk.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>IDEDidComputeMac32BitWarning</key>
+ <true/>
+</dict>
+</plist>
diff --git a/ios/sylk/AppDelegate.h b/ios/sylk/AppDelegate.h
new file mode 100644
index 0000000..2726d5e
--- /dev/null
+++ b/ios/sylk/AppDelegate.h
@@ -0,0 +1,15 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+#import <React/RCTBridgeDelegate.h>
+#import <UIKit/UIKit.h>
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>
+
+@property (nonatomic, strong) UIWindow *window;
+
+@end
diff --git a/ios/sylk/AppDelegate.m b/ios/sylk/AppDelegate.m
new file mode 100644
index 0000000..8066735
--- /dev/null
+++ b/ios/sylk/AppDelegate.m
@@ -0,0 +1,49 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+#import "AppDelegate.h"
+
+#import <React/RCTBridge.h>
+#import <React/RCTBundleURLProvider.h>
+#import <React/RCTRootView.h>
+#import <WebRTC/RTCLogging.h>
+#import <React/RCTLog.h>
+
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+
+ RCTSetLogThreshold(RCTLogLevelInfo - 1);
+ RTCSetMinDebugLogLevel(RTCLoggingSeverityInfo);
+
+
+ RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
+ RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
+ moduleName:@"Sylk"
+ initialProperties:nil];
+
+ rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
+
+ self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
+ UIViewController *rootViewController = [UIViewController new];
+ rootViewController.view = rootView;
+ self.window.rootViewController = rootViewController;
+ [self.window makeKeyAndVisible];
+ return YES;
+}
+
+- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
+{
+#if DEBUG
+ return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
+#else
+ return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
+#endif
+}
+
+@end
diff --git a/ios/sylk/Base.lproj/LaunchScreen.xib b/ios/sylk/Base.lproj/LaunchScreen.xib
new file mode 100644
index 0000000..e3c57ad
--- /dev/null
+++ b/ios/sylk/Base.lproj/LaunchScreen.xib
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="15702" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES">
+ <device id="retina6_1" orientation="portrait" appearance="light"/>
+ <dependencies>
+ <deployment identifier="iOS"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15704"/>
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+ </dependencies>
+ <objects>
+ <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+ <view userInteractionEnabled="NO" contentMode="scaleToFill" id="iN0-l3-epB">
+ <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Launch Background" translatesAutoresizingMaskIntoConstraints="NO" id="C2O-5c-MKM">
+ <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
+ </imageView>
+ <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Image-1" translatesAutoresizingMaskIntoConstraints="NO" id="R73-ii-6if">
+ <rect key="frame" x="32" y="273" width="350" height="350"/>
+ </imageView>
+ </subviews>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="C2O-5c-MKM" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="FwE-ta-jv5"/>
+ <constraint firstAttribute="bottom" secondItem="C2O-5c-MKM" secondAttribute="bottom" id="Gny-MP-V89"/>
+ <constraint firstAttribute="trailing" secondItem="C2O-5c-MKM" secondAttribute="trailing" id="Kv1-g8-6f3"/>
+ <constraint firstItem="R73-ii-6if" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="PC4-L1-9m4"/>
+ <constraint firstItem="R73-ii-6if" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="SUj-Hv-0qD"/>
+ <constraint firstItem="C2O-5c-MKM" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="Vat-LE-HQE"/>
+ </constraints>
+ <nil key="simulatedStatusBarMetrics"/>
+ <point key="canvasLocation" x="513.04347826086962" y="564.50892857142856"/>
+ </view>
+ </objects>
+ <resources>
+ <image name="Image-1" width="350" height="350"/>
+ <image name="Launch Background" width="512" height="512"/>
+ </resources>
+</document>
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/100.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/100.png
new file mode 100644
index 0000000..f023e58
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/100.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/1024.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/1024.png
new file mode 100644
index 0000000..83955e8
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/1024.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/114.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/114.png
new file mode 100644
index 0000000..74bfa32
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/114.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/120.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/120.png
new file mode 100644
index 0000000..970819d
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/120.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/128.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/128.png
new file mode 100644
index 0000000..92a0130
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/128.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/144.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/144.png
new file mode 100644
index 0000000..a29f136
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/144.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/152.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/152.png
new file mode 100644
index 0000000..e0bd539
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/152.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/16.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/16.png
new file mode 100644
index 0000000..b436608
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/16.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/167.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/167.png
new file mode 100644
index 0000000..b4fb1ac
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/167.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/172.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/172.png
new file mode 100644
index 0000000..28470f5
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/172.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/180.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/180.png
new file mode 100644
index 0000000..25b9239
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/180.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/196.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/196.png
new file mode 100644
index 0000000..4fd4b29
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/196.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/20.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/20.png
new file mode 100644
index 0000000..fe79864
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/20.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/216.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/216.png
new file mode 100644
index 0000000..95d1a74
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/216.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/256.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/256.png
new file mode 100644
index 0000000..14bcd7a
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/256.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/29.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/29.png
new file mode 100644
index 0000000..45506cd
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/29.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/32.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/32.png
new file mode 100644
index 0000000..0e06962
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/32.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/40.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/40.png
new file mode 100644
index 0000000..f6cf5cd
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/40.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/48.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/48.png
new file mode 100644
index 0000000..48214f8
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/48.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/50.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/50.png
new file mode 100644
index 0000000..059b002
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/50.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/512.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/512.png
new file mode 100644
index 0000000..fdc03ff
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/512.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/55.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/55.png
new file mode 100644
index 0000000..96f31a8
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/55.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/57.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/57.png
new file mode 100644
index 0000000..bf0e9cd
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/57.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/58.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/58.png
new file mode 100644
index 0000000..6b79062
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/58.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/60.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/60.png
new file mode 100644
index 0000000..7fdcce4
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/60.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/64.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/64.png
new file mode 100644
index 0000000..b4c1767
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/64.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/72.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/72.png
new file mode 100644
index 0000000..d9e5e42
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/72.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/76.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/76.png
new file mode 100644
index 0000000..7cf837f
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/76.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/80.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/80.png
new file mode 100644
index 0000000..71f1ccc
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/80.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/87.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/87.png
new file mode 100644
index 0000000..40c77ea
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/87.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/88.png b/ios/sylk/Images.xcassets/AppIcon.appiconset/88.png
new file mode 100644
index 0000000..bd30ef2
Binary files /dev/null and b/ios/sylk/Images.xcassets/AppIcon.appiconset/88.png differ
diff --git a/ios/sylk/Images.xcassets/AppIcon.appiconset/Contents.json b/ios/sylk/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..17a07aa
--- /dev/null
+++ b/ios/sylk/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,302 @@
+{
+ "images" : [
+ {
+ "size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "40.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "60.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "29.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "58.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "87.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "80.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "120.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "57x57",
+ "idiom" : "iphone",
+ "filename" : "57.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "57x57",
+ "idiom" : "iphone",
+ "filename" : "114.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "120.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "180.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "20.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "40.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "29.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "58.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "40.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "80.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "50x50",
+ "idiom" : "ipad",
+ "filename" : "50.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "50x50",
+ "idiom" : "ipad",
+ "filename" : "100.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "72x72",
+ "idiom" : "ipad",
+ "filename" : "72.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "72x72",
+ "idiom" : "ipad",
+ "filename" : "144.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "76.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "152.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "83.5x83.5",
+ "idiom" : "ipad",
+ "filename" : "167.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "1024x1024",
+ "idiom" : "ios-marketing",
+ "filename" : "1024.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "24x24",
+ "idiom" : "watch",
+ "filename" : "48.png",
+ "scale" : "2x",
+ "role" : "notificationCenter",
+ "subtype" : "38mm"
+ },
+ {
+ "size" : "27.5x27.5",
+ "idiom" : "watch",
+ "filename" : "55.png",
+ "scale" : "2x",
+ "role" : "notificationCenter",
+ "subtype" : "42mm"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "watch",
+ "filename" : "58.png",
+ "role" : "companionSettings",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "watch",
+ "filename" : "87.png",
+ "role" : "companionSettings",
+ "scale" : "3x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "watch",
+ "filename" : "80.png",
+ "scale" : "2x",
+ "role" : "appLauncher",
+ "subtype" : "38mm"
+ },
+ {
+ "size" : "44x44",
+ "idiom" : "watch",
+ "filename" : "88.png",
+ "scale" : "2x",
+ "role" : "appLauncher",
+ "subtype" : "40mm"
+ },
+ {
+ "size" : "50x50",
+ "idiom" : "watch",
+ "filename" : "100.png",
+ "scale" : "2x",
+ "role" : "appLauncher",
+ "subtype" : "44mm"
+ },
+ {
+ "size" : "86x86",
+ "idiom" : "watch",
+ "filename" : "172.png",
+ "scale" : "2x",
+ "role" : "quickLook",
+ "subtype" : "38mm"
+ },
+ {
+ "size" : "98x98",
+ "idiom" : "watch",
+ "filename" : "196.png",
+ "scale" : "2x",
+ "role" : "quickLook",
+ "subtype" : "42mm"
+ },
+ {
+ "size" : "108x108",
+ "idiom" : "watch",
+ "filename" : "216.png",
+ "scale" : "2x",
+ "role" : "quickLook",
+ "subtype" : "44mm"
+ },
+ {
+ "size" : "1024x1024",
+ "idiom" : "watch-marketing",
+ "filename" : "1024.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "16x16",
+ "idiom" : "mac",
+ "filename" : "16.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "16x16",
+ "idiom" : "mac",
+ "filename" : "32.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "32x32",
+ "idiom" : "mac",
+ "filename" : "32.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "32x32",
+ "idiom" : "mac",
+ "filename" : "64.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "128x128",
+ "idiom" : "mac",
+ "filename" : "128.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "128x128",
+ "idiom" : "mac",
+ "filename" : "256.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "256x256",
+ "idiom" : "mac",
+ "filename" : "256.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "256x256",
+ "idiom" : "mac",
+ "filename" : "512.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "512x512",
+ "idiom" : "mac",
+ "filename" : "512.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "512x512",
+ "idiom" : "mac",
+ "filename" : "1024.png",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/sylk/Images.xcassets/Contents.json b/ios/sylk/Images.xcassets/Contents.json
new file mode 100644
index 0000000..da4a164
--- /dev/null
+++ b/ios/sylk/Images.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/sylk/Images.xcassets/Image-1.imageset/Contents.json b/ios/sylk/Images.xcassets/Image-1.imageset/Contents.json
new file mode 100644
index 0000000..d2e5317
--- /dev/null
+++ b/ios/sylk/Images.xcassets/Image-1.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "blink-white-big-1.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "blink-white-big.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "blink-white-big-2.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/sylk/Images.xcassets/Image-1.imageset/blink-white-big-1.png b/ios/sylk/Images.xcassets/Image-1.imageset/blink-white-big-1.png
new file mode 100644
index 0000000..4dea86d
Binary files /dev/null and b/ios/sylk/Images.xcassets/Image-1.imageset/blink-white-big-1.png differ
diff --git a/ios/sylk/Images.xcassets/Image-1.imageset/blink-white-big-2.png b/ios/sylk/Images.xcassets/Image-1.imageset/blink-white-big-2.png
new file mode 100644
index 0000000..4dea86d
Binary files /dev/null and b/ios/sylk/Images.xcassets/Image-1.imageset/blink-white-big-2.png differ
diff --git a/ios/sylk/Images.xcassets/Image-1.imageset/blink-white-big.png b/ios/sylk/Images.xcassets/Image-1.imageset/blink-white-big.png
new file mode 100644
index 0000000..4dea86d
Binary files /dev/null and b/ios/sylk/Images.xcassets/Image-1.imageset/blink-white-big.png differ
diff --git a/ios/sylk/Images.xcassets/Launch Background.imageset/Contents.json b/ios/sylk/Images.xcassets/Launch Background.imageset/Contents.json
new file mode 100644
index 0000000..816984a
--- /dev/null
+++ b/ios/sylk/Images.xcassets/Launch Background.imageset/Contents.json
@@ -0,0 +1,56 @@
+{
+ "images" : [
+ {
+ "resizing" : {
+ "mode" : "3-part-horizontal",
+ "center" : {
+ "mode" : "tile",
+ "width" : 1024
+ },
+ "cap-insets" : {
+ "right" : 0,
+ "left" : 0
+ }
+ },
+ "idiom" : "universal",
+ "filename" : "dark_linen-1.png",
+ "scale" : "1x"
+ },
+ {
+ "resizing" : {
+ "mode" : "3-part-horizontal",
+ "center" : {
+ "mode" : "tile",
+ "width" : 1024
+ },
+ "cap-insets" : {
+ "right" : 0,
+ "left" : 0
+ }
+ },
+ "idiom" : "universal",
+ "filename" : "dark_linen.png",
+ "scale" : "2x"
+ },
+ {
+ "resizing" : {
+ "mode" : "3-part-horizontal",
+ "center" : {
+ "mode" : "tile",
+ "width" : 1024
+ },
+ "cap-insets" : {
+ "right" : 0,
+ "left" : 0
+ }
+ },
+ "idiom" : "universal",
+ "filename" : "dark_linen-2.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/sylk/Images.xcassets/Launch Background.imageset/dark_linen-1.png b/ios/sylk/Images.xcassets/Launch Background.imageset/dark_linen-1.png
new file mode 100644
index 0000000..4bcaa7a
Binary files /dev/null and b/ios/sylk/Images.xcassets/Launch Background.imageset/dark_linen-1.png differ
diff --git a/ios/sylk/Images.xcassets/Launch Background.imageset/dark_linen-2.png b/ios/sylk/Images.xcassets/Launch Background.imageset/dark_linen-2.png
new file mode 100644
index 0000000..4bcaa7a
Binary files /dev/null and b/ios/sylk/Images.xcassets/Launch Background.imageset/dark_linen-2.png differ
diff --git a/ios/sylk/Images.xcassets/Launch Background.imageset/dark_linen.png b/ios/sylk/Images.xcassets/Launch Background.imageset/dark_linen.png
new file mode 100644
index 0000000..4bcaa7a
Binary files /dev/null and b/ios/sylk/Images.xcassets/Launch Background.imageset/dark_linen.png differ
diff --git a/ios/sylk/Info.plist b/ios/sylk/Info.plist
new file mode 100644
index 0000000..0231b78
--- /dev/null
+++ b/ios/sylk/Info.plist
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleDisplayName</key>
+ <string>sylk</string>
+ <key>CFBundleExecutable</key>
+ <string>$(EXECUTABLE_NAME)</string>
+ <key>CFBundleIdentifier</key>
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>$(PRODUCT_NAME)</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>NSCameraUsageDescription</key>
+ <string>Camera Permission</string>
+ <key>NSMicrophoneUsageDescription</key>
+ <string>Microphone Permission</string>
+ <key>NSAppTransportSecurity</key>
+ <dict>
+ <key>NSAllowsArbitraryLoads</key>
+ <true/>
+ <key>NSExceptionDomains</key>
+ <dict>
+ <key>localhost</key>
+ <dict>
+ <key>NSExceptionAllowsInsecureHTTPLoads</key>
+ <true/>
+ </dict>
+ </dict>
+ </dict>
+ <key>NSLocationWhenInUseUsageDescription</key>
+ <string/>
+ <key>UILaunchStoryboardName</key>
+ <string>LaunchScreen</string>
+ <key>UIRequiredDeviceCapabilities</key>
+ <array>
+ <string>armv7</string>
+ </array>
+ <key>UISupportedInterfaceOrientations</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+ <key>UIViewControllerBasedStatusBarAppearance</key>
+ <false/>
+ <key>UIAppFonts</key>
+ <array>
+ <string>AntDesign.ttf</string>
+ <string>Entypo.ttf</string>
+ <string>EvilIcons.ttf</string>
+ <string>Feather.ttf</string>
+ <string>FontAwesome.ttf</string>
+ <string>FontAwesome5_Brands.ttf</string>
+ <string>FontAwesome5_Regular.ttf</string>
+ <string>FontAwesome5_Solid.ttf</string>
+ <string>Foundation.ttf</string>
+ <string>Ionicons.ttf</string>
+ <string>MaterialIcons.ttf</string>
+ <string>MaterialCommunityIcons.ttf</string>
+ <string>SimpleLineIcons.ttf</string>
+ <string>Octicons.ttf</string>
+ <string>Zocial.ttf</string>
+ <string>Fontisto.ttf</string>
+ </array>
+</dict>
+</plist>
diff --git a/ios/sylk/main.m b/ios/sylk/main.m
new file mode 100644
index 0000000..c316cf8
--- /dev/null
+++ b/ios/sylk/main.m
@@ -0,0 +1,16 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+#import <UIKit/UIKit.h>
+
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+ @autoreleasepool {
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+ }
+}
diff --git a/ios/sylk/sylk.entitlements b/ios/sylk/sylk.entitlements
new file mode 100644
index 0000000..903def2
--- /dev/null
+++ b/ios/sylk/sylk.entitlements
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>aps-environment</key>
+ <string>development</string>
+</dict>
+</plist>
diff --git a/ios/sylkTests/Info.plist b/ios/sylkTests/Info.plist
new file mode 100644
index 0000000..ba72822
--- /dev/null
+++ b/ios/sylkTests/Info.plist
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleExecutable</key>
+ <string>$(EXECUTABLE_NAME)</string>
+ <key>CFBundleIdentifier</key>
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>$(PRODUCT_NAME)</string>
+ <key>CFBundlePackageType</key>
+ <string>BNDL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1</string>
+</dict>
+</plist>
diff --git a/ios/sylkTests/sylkTests.m b/ios/sylkTests/sylkTests.m
new file mode 100644
index 0000000..14c21f0
--- /dev/null
+++ b/ios/sylkTests/sylkTests.m
@@ -0,0 +1,72 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+#import <UIKit/UIKit.h>
+#import <XCTest/XCTest.h>
+
+#import <React/RCTLog.h>
+#import <React/RCTRootView.h>
+
+#define TIMEOUT_SECONDS 600
+#define TEXT_TO_LOOK_FOR @"Welcome to React"
+
+@interface sylkTests : XCTestCase
+
+@end
+
+@implementation sylkTests
+
+- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
+{
+ if (test(view)) {
+ return YES;
+ }
+ for (UIView *subview in [view subviews]) {
+ if ([self findSubviewInView:subview matching:test]) {
+ return YES;
+ }
+ }
+ return NO;
+}
+
+- (void)testRendersWelcomeScreen
+{
+ UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController];
+ NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
+ BOOL foundElement = NO;
+
+ __block NSString *redboxError = nil;
+#ifdef DEBUG
+ RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
+ if (level >= RCTLogLevelError) {
+ redboxError = message;
+ }
+ });
+#endif
+
+ while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
+ [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
+ [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
+
+ foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {
+ if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
+ return YES;
+ }
+ return NO;
+ }];
+ }
+
+#ifdef DEBUG
+ RCTSetLogFunction(RCTDefaultLogFunction);
+#endif
+
+ XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
+ XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
+}
+
+
+@end
diff --git a/metro.config.js b/metro.config.js
new file mode 100644
index 0000000..00a6c7f
--- /dev/null
+++ b/metro.config.js
@@ -0,0 +1,33 @@
+/**
+ * Metro configuration for React Native
+ * https://github.com/facebook/react-native
+ *
+ * @format
+ */
+
+// module.exports = {
+// transformer: {
+// getTransformOptions: async () => ({
+// transform: {
+// experimentalImportSupport: false,
+// inlineRequires: false,
+// },
+// }),
+// },
+// };
+
+const { getDefaultConfig } = require("metro-config");
+
+module.exports = (async () => {
+ const {
+ resolver: { sourceExts }
+ } = await getDefaultConfig();
+ return {
+ transformer: {
+ babelTransformerPath: require.resolve("react-native-sass-transformer")
+ },
+ resolver: {
+ sourceExts: [...sourceExts, "scss", "sass"]
+ }
+ };
+})();
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..a7b42d7
--- /dev/null
+++ b/package.json
@@ -0,0 +1,81 @@
+{
+ "name": "sylk",
+ "version": "1.0.0",
+ "private": true,
+ "scripts": {
+ "android": "react-native run-android",
+ "ios": "react-native run-ios",
+ "start": "react-native start",
+ "test": "jest",
+ "lint": "eslint ."
+ },
+ "dependencies": {
+ "@react-native-community/async-storage": "^1.6.3",
+ "auto-bind": "^4.0.0",
+ "material-bread": "^0.2.5",
+ "react": "16.9.0",
+ "react-native": "0.61.5",
+ "react-native-callkeep": "^3.0.8",
+ "react-native-debug": "^3.0.0",
+ "react-native-dtmf": "nimbleape/react-native-dtmf",
+ "react-native-material-drawer": "^0.0.5",
+ "react-native-paper": "^3.4.0",
+ "react-native-svg": "^10.0.0",
+ "react-native-vector-icons": "^6.6.0",
+ "react-native-webrtc": "^1.75.2",
+ "react-router-native": "^5.1.2"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.7.4",
+ "@babel/runtime": "^7.7.4",
+ "@react-native-community/eslint-config": "^0.0.5",
+ "animate.css": "^3.7.2",
+ "ansi-colors": "^4.1.1",
+ "audio-context": "^1.0.3",
+ "audio-loader": "^1.0.3",
+ "autocomplete.js": "^0.37.0",
+ "babel-jest": "^24.9.0",
+ "bootstrap-css-only": "^3.3.7",
+ "classnames": "^2.2.6",
+ "debug": "^3.2.6",
+ "digest-auth-request": "tijmenNL/digest-auth-request",
+ "envify": "^4.1.0",
+ "eslint": "^6.7.2",
+ "fancy-log": "^1.3.3",
+ "fontawesome-actions": "^0.17.0",
+ "hark": "^1.1.6",
+ "ipaddr.js": "^1.9.1",
+ "jest": "^24.9.0",
+ "lazypipe": "^1.0.2",
+ "localforage": "^1.7.3",
+ "material-ui": "1.0.0-beta.40",
+ "metro-react-native-babel-preset": "^0.57.0",
+ "minimist": "^1.2.0",
+ "moment": "^2.24.0",
+ "moment-duration-format": "^2.3.2",
+ "murmurhash-js": "^1.0.0",
+ "node-sass": "^4.13.0",
+ "notifyjs": "^3.0.0",
+ "prop-types": "^15.7.2",
+ "react": "^16.9.0",
+ "react-mixin": "^4.0.0",
+ "react-native-sass-transformer": "^1.4.0",
+ "react-notification-system": "^0.2.17",
+ "react-router-component": "^0.39.1",
+ "react-test-renderer": "16.9.0",
+ "react-transition-group": "^2.6.0",
+ "react-visibility-sensor": "^5.1.1",
+ "sass-lint": "^1.13.1",
+ "superagent": "^3.8.3",
+ "sylkrtc": "nimbleape/sylkrtc.js",
+ "through2": "^3.0.1",
+ "underscore": "^1.9.1",
+ "uuid": "^3.3.3",
+ "vinyl-buffer": "1.0.1",
+ "vinyl-source-stream": "^2.0.0",
+ "watchify": "^3.11.1"
+ },
+ "jest": {
+ "preset": "react-native"
+ }
+}
diff --git a/react-native.config.js b/react-native.config.js
new file mode 100644
index 0000000..4b46754
--- /dev/null
+++ b/react-native.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ assets: ['react-native-vector-icons']
+};
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..7c3ef80
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,9837 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d"
+ integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==
+ dependencies:
+ "@babel/highlight" "^7.0.0"
+
+"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.7.4":
+ version "7.7.5"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.5.tgz#ae1323cd035b5160293307f50647e83f8ba62f7e"
+ integrity sha512-M42+ScN4+1S9iB6f+TL7QBpoQETxbclx+KNoKJABghnKYE+fMzSGqst0BZJc8CpI625bwPwYgUyRvxZ+0mZzpw==
+ dependencies:
+ "@babel/code-frame" "^7.5.5"
+ "@babel/generator" "^7.7.4"
+ "@babel/helpers" "^7.7.4"
+ "@babel/parser" "^7.7.5"
+ "@babel/template" "^7.7.4"
+ "@babel/traverse" "^7.7.4"
+ "@babel/types" "^7.7.4"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ json5 "^2.1.0"
+ lodash "^4.17.13"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/generator@^7.0.0", "@babel/generator@^7.4.0", "@babel/generator@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.4.tgz#db651e2840ca9aa66f327dcec1dc5f5fa9611369"
+ integrity sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==
+ dependencies:
+ "@babel/types" "^7.7.4"
+ jsesc "^2.5.1"
+ lodash "^4.17.13"
+ source-map "^0.5.0"
+
+"@babel/helper-annotate-as-pure@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce"
+ integrity sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og==
+ dependencies:
+ "@babel/types" "^7.7.4"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz#5f73f2b28580e224b5b9bd03146a4015d6217f5f"
+ integrity sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ==
+ dependencies:
+ "@babel/helper-explode-assignable-expression" "^7.7.4"
+ "@babel/types" "^7.7.4"
+
+"@babel/helper-builder-react-jsx@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.7.4.tgz#da188d247508b65375b2c30cf59de187be6b0c66"
+ integrity sha512-kvbfHJNN9dg4rkEM4xn1s8d1/h6TYNvajy9L1wx4qLn9HFg0IkTsQi4rfBe92nxrPUFcMsHoMV+8rU7MJb3fCA==
+ dependencies:
+ "@babel/types" "^7.7.4"
+ esutils "^2.0.0"
+
+"@babel/helper-call-delegate@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz#621b83e596722b50c0066f9dc37d3232e461b801"
+ integrity sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.7.4"
+ "@babel/traverse" "^7.7.4"
+ "@babel/types" "^7.7.4"
+
+"@babel/helper-create-class-features-plugin@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz#fce60939fd50618610942320a8d951b3b639da2d"
+ integrity sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA==
+ dependencies:
+ "@babel/helper-function-name" "^7.7.4"
+ "@babel/helper-member-expression-to-functions" "^7.7.4"
+ "@babel/helper-optimise-call-expression" "^7.7.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-replace-supers" "^7.7.4"
+ "@babel/helper-split-export-declaration" "^7.7.4"
+
+"@babel/helper-create-regexp-features-plugin@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59"
+ integrity sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A==
+ dependencies:
+ "@babel/helper-regex" "^7.4.4"
+ regexpu-core "^4.6.0"
+
+"@babel/helper-define-map@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz#2841bf92eb8bd9c906851546fe6b9d45e162f176"
+ integrity sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg==
+ dependencies:
+ "@babel/helper-function-name" "^7.7.4"
+ "@babel/types" "^7.7.4"
+ lodash "^4.17.13"
+
+"@babel/helper-explode-assignable-expression@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz#fa700878e008d85dc51ba43e9fb835cddfe05c84"
+ integrity sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg==
+ dependencies:
+ "@babel/traverse" "^7.7.4"
+ "@babel/types" "^7.7.4"
+
+"@babel/helper-function-name@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e"
+ integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.7.4"
+ "@babel/template" "^7.7.4"
+ "@babel/types" "^7.7.4"
+
+"@babel/helper-get-function-arity@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0"
+ integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==
+ dependencies:
+ "@babel/types" "^7.7.4"
+
+"@babel/helper-hoist-variables@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12"
+ integrity sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ==
+ dependencies:
+ "@babel/types" "^7.7.4"
+
+"@babel/helper-member-expression-to-functions@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74"
+ integrity sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw==
+ dependencies:
+ "@babel/types" "^7.7.4"
+
+"@babel/helper-module-imports@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91"
+ integrity sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==
+ dependencies:
+ "@babel/types" "^7.7.4"
+
+"@babel/helper-module-transforms@^7.7.5":
+ version "7.7.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz#d044da7ffd91ec967db25cd6748f704b6b244835"
+ integrity sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.7.4"
+ "@babel/helper-simple-access" "^7.7.4"
+ "@babel/helper-split-export-declaration" "^7.7.4"
+ "@babel/template" "^7.7.4"
+ "@babel/types" "^7.7.4"
+ lodash "^4.17.13"
+
+"@babel/helper-optimise-call-expression@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2"
+ integrity sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg==
+ dependencies:
+ "@babel/types" "^7.7.4"
+
+"@babel/helper-plugin-utils@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
+ integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==
+
+"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351"
+ integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==
+ dependencies:
+ lodash "^4.17.13"
+
+"@babel/helper-remap-async-to-generator@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz#c68c2407350d9af0e061ed6726afb4fff16d0234"
+ integrity sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.7.4"
+ "@babel/helper-wrap-function" "^7.7.4"
+ "@babel/template" "^7.7.4"
+ "@babel/traverse" "^7.7.4"
+ "@babel/types" "^7.7.4"
+
+"@babel/helper-replace-supers@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2"
+ integrity sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.7.4"
+ "@babel/helper-optimise-call-expression" "^7.7.4"
+ "@babel/traverse" "^7.7.4"
+ "@babel/types" "^7.7.4"
+
+"@babel/helper-simple-access@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294"
+ integrity sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A==
+ dependencies:
+ "@babel/template" "^7.7.4"
+ "@babel/types" "^7.7.4"
+
+"@babel/helper-split-export-declaration@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8"
+ integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==
+ dependencies:
+ "@babel/types" "^7.7.4"
+
+"@babel/helper-wrap-function@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace"
+ integrity sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg==
+ dependencies:
+ "@babel/helper-function-name" "^7.7.4"
+ "@babel/template" "^7.7.4"
+ "@babel/traverse" "^7.7.4"
+ "@babel/types" "^7.7.4"
+
+"@babel/helpers@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302"
+ integrity sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==
+ dependencies:
+ "@babel/template" "^7.7.4"
+ "@babel/traverse" "^7.7.4"
+ "@babel/types" "^7.7.4"
+
+"@babel/highlight@^7.0.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540"
+ integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==
+ dependencies:
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.4", "@babel/parser@^7.7.5":
+ version "7.7.5"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.5.tgz#cbf45321619ac12d83363fcf9c94bb67fa646d71"
+ integrity sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==
+
+"@babel/plugin-external-helpers@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.7.4.tgz#8aa7aa402f0e2ecb924611cbf30942a497dfd17e"
+ integrity sha512-RVGNajLaFlknbZLutaP/uv7Q+xmVs2LMlEWFXbcjLnwtBdPqAVpV3nzYIAJqri/VjJCUrhG5nALijtg0aND+XA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-proposal-class-properties@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz#2f964f0cb18b948450362742e33e15211e77c2ba"
+ integrity sha512-EcuXeV4Hv1X3+Q1TsuOmyyxeTRiSqurGJ26+I/FW1WbymmRRapVORm6x1Zl3iDIHyRxEs+VXWp6qnlcfcJSbbw==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.7.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-proposal-export-default-from@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.7.4.tgz#890de3c0c475374638292df31f6582160b54d639"
+ integrity sha512-1t6dh7BHYUz4zD1m4pozYYEZy/3m8dgOr9owx3r0mPPI3iGKRUKUbIxfYmcJ4hwljs/dhd0qOTr1ZDUp43ix+w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-export-default-from" "^7.7.4"
+
+"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.7.4.tgz#7db302c83bc30caa89e38fee935635ef6bd11c28"
+ integrity sha512-TbYHmr1Gl1UC7Vo2HVuj/Naci5BEGNZ0AJhzqD2Vpr6QPFWpUmBRLrIDjedzx7/CShq0bRDS2gI4FIs77VHLVQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.7.4"
+
+"@babel/plugin-proposal-object-rest-spread@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz#cc57849894a5c774214178c8ab64f6334ec8af71"
+ integrity sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.7.4"
+
+"@babel/plugin-proposal-optional-catch-binding@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz#ec21e8aeb09ec6711bc0a39ca49520abee1de379"
+ integrity sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.7.4"
+
+"@babel/plugin-proposal-optional-chaining@^7.0.0":
+ version "7.7.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.7.5.tgz#f0835f044cef85b31071a924010a2a390add11d4"
+ integrity sha512-sOwFqT8JSchtJeDD+CjmWCaiFoLxY4Ps7NjvwHC/U7l4e9i5pTRNt8nDMIFSOUL+ncFbYSwruHM8WknYItWdXw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-optional-chaining" "^7.7.4"
+
+"@babel/plugin-syntax-class-properties@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.7.4.tgz#6048c129ea908a432a1ff85f1dc794dc62ddaa5e"
+ integrity sha512-JH3v5ZOeKT0qqdJ9BeBcZTFQiJOMax8RopSr1bH6ASkZKo2qWsvBML7W1mp89sszBRDBBRO8snqcByGdrMTdMg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-dynamic-import@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec"
+ integrity sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.7.4.tgz#897f05808298060b52873fa804ff853540790ea1"
+ integrity sha512-j888jpjATLEzOWhKawq46UrpXnCRDbdhBd5io4jgwjJ3+CHHGCRb6PNAVEgs+BXIb+dNRAmnkv36zfB992PRVw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.2.0", "@babel/plugin-syntax-flow@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.7.4.tgz#6d91b59e1a0e4c17f36af2e10dd64ef220919d7b"
+ integrity sha512-2AMAWl5PsmM5KPkB22cvOkUyWk6MjUaqhHNU5nSPUl/ns3j5qLfw2SuYP5RbVZ0tfLvePr4zUScbICtDP2CUNw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.7.4.tgz#dab2b56a36fb6c3c222a1fbc71f7bf97f327a9ec"
+ integrity sha512-wuy6fiMe9y7HeZBWXYCGt2RGxZOj0BImZ9EyXJVnVGBKO/Br592rbR3rtIQn0eQhAk9vqaKP5n8tVqEFBQMfLg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.7.4.tgz#e53b751d0c3061b1ba3089242524b65a7a9da12b"
+ integrity sha512-XKh/yIRPiQTOeBg0QJjEus5qiSKucKAiApNtO1psqG7D17xmE+X2i5ZqBEuSvo0HRuyPaKaSN/Gy+Ha9KFQolw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46"
+ integrity sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz#a3e38f59f4b6233867b4a92dcb0ee05b2c334aa6"
+ integrity sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.7.4.tgz#c91fdde6de85d2eb8906daea7b21944c3610c901"
+ integrity sha512-2MqYD5WjZSbJdUagnJvIdSfkb/ucOC9/1fRJxm7GAxY6YQLWlUvkfxoNbUPcPLHJyetKUDQ4+yyuUyAoc0HriA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-syntax-typescript@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.7.4.tgz#5d037ffa10f3b25a16f32570ebbe7a8c2efa304b"
+ integrity sha512-77blgY18Hud4NM1ggTA8xVT/dBENQf17OpiToSa2jSmEY3fWXD2jwrdVlO4kq5yzUTeF15WSQ6b4fByNvJcjpQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-arrow-functions@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12"
+ integrity sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-async-to-generator@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba"
+ integrity sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg==
+ dependencies:
+ "@babel/helper-module-imports" "^7.7.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-remap-async-to-generator" "^7.7.4"
+
+"@babel/plugin-transform-block-scoped-functions@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz#d0d9d5c269c78eaea76227ace214b8d01e4d837b"
+ integrity sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-block-scoping@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz#200aad0dcd6bb80372f94d9e628ea062c58bf224"
+ integrity sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ lodash "^4.17.13"
+
+"@babel/plugin-transform-classes@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz#c92c14be0a1399e15df72667067a8f510c9400ec"
+ integrity sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.7.4"
+ "@babel/helper-define-map" "^7.7.4"
+ "@babel/helper-function-name" "^7.7.4"
+ "@babel/helper-optimise-call-expression" "^7.7.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-replace-supers" "^7.7.4"
+ "@babel/helper-split-export-declaration" "^7.7.4"
+ globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz#e856c1628d3238ffe12d668eb42559f79a81910d"
+ integrity sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-destructuring@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267"
+ integrity sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-exponentiation-operator@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz#dd30c0191e3a1ba19bcc7e389bdfddc0729d5db9"
+ integrity sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.7.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-flow-strip-types@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.7.4.tgz#cc73f85944782df1d77d80977bc097920a8bf31a"
+ integrity sha512-w9dRNlHY5ElNimyMYy0oQowvQpwt/PRHI0QS98ZJCTZU2bvSnKXo5zEiD5u76FBPigTm8TkqzmnUTg16T7qbkA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-flow" "^7.7.4"
+
+"@babel/plugin-transform-for-of@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc"
+ integrity sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-function-name@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz#75a6d3303d50db638ff8b5385d12451c865025b1"
+ integrity sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g==
+ dependencies:
+ "@babel/helper-function-name" "^7.7.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-literals@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz#27fe87d2b5017a2a5a34d1c41a6b9f6a6262643e"
+ integrity sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-member-expression-literals@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a"
+ integrity sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-modules-commonjs@^7.0.0":
+ version "7.7.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz#1d27f5eb0bcf7543e774950e5b2fa782e637b345"
+ integrity sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.7.5"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-simple-access" "^7.7.4"
+ babel-plugin-dynamic-import-node "^2.3.0"
+
+"@babel/plugin-transform-object-assign@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.7.4.tgz#a31b70c434a00a078b2d4d10dbd59992fa70afca"
+ integrity sha512-0TpeUlnhQDwKxPLTIckdaWt46L2s61c/5w5snw1OUod5ehOJywZD98Ha3dFHVjeqkfOFtOTH7cqxddjxUuvcmg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-object-super@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262"
+ integrity sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-replace-supers" "^7.7.4"
+
+"@babel/plugin-transform-parameters@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz#da4555c97f39b51ac089d31c7380f03bca4075ce"
+ integrity sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw==
+ dependencies:
+ "@babel/helper-call-delegate" "^7.7.4"
+ "@babel/helper-get-function-arity" "^7.7.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-property-literals@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2"
+ integrity sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-react-display-name@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.7.4.tgz#9f2b80b14ebc97eef4a9b29b612c58ed9c0d10dd"
+ integrity sha512-sBbIvqYkthai0X0vkD2xsAwluBp+LtNHH+/V4a5ydifmTtb8KOVOlrMIk/MYmIc4uTYDnjZUHQildYNo36SRJw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-react-jsx-source@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.7.4.tgz#8994b1bf6014b133f5a46d3b7d1ee5f5e3e72c10"
+ integrity sha512-5ZU9FnPhqtHsOXxutRtXZAzoEJwDaP32QcobbMP1/qt7NYcsCNK8XgzJcJfoEr/ZnzVvUNInNjIW22Z6I8p9mg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-jsx" "^7.7.4"
+
+"@babel/plugin-transform-react-jsx@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.7.4.tgz#d91205717fae4e2f84d020cd3057ec02a10f11da"
+ integrity sha512-LixU4BS95ZTEAZdPaIuyg/k8FiiqN9laQ0dMHB4MlpydHY53uQdWCUrwjLr5o6ilS6fAgZey4Q14XBjl5tL6xw==
+ dependencies:
+ "@babel/helper-builder-react-jsx" "^7.7.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-jsx" "^7.7.4"
+
+"@babel/plugin-transform-regenerator@^7.0.0":
+ version "7.7.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz#3a8757ee1a2780f390e89f246065ecf59c26fce9"
+ integrity sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw==
+ dependencies:
+ regenerator-transform "^0.14.0"
+
+"@babel/plugin-transform-runtime@^7.0.0":
+ version "7.7.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.7.6.tgz#4f2b548c88922fb98ec1c242afd4733ee3e12f61"
+ integrity sha512-tajQY+YmXR7JjTwRvwL4HePqoL3DYxpYXIHKVvrOIvJmeHe2y1w4tz5qz9ObUDC9m76rCzIMPyn4eERuwA4a4A==
+ dependencies:
+ "@babel/helper-module-imports" "^7.7.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ resolve "^1.8.1"
+ semver "^5.5.1"
+
+"@babel/plugin-transform-shorthand-properties@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz#74a0a9b2f6d67a684c6fbfd5f0458eb7ba99891e"
+ integrity sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-spread@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz#aa673b356fe6b7e70d69b6e33a17fef641008578"
+ integrity sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-sticky-regex@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz#ffb68c05090c30732076b1285dc1401b404a123c"
+ integrity sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-regex" "^7.0.0"
+
+"@babel/plugin-transform-template-literals@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz#1eb6411736dd3fe87dbd20cc6668e5121c17d604"
+ integrity sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.7.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-typescript@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.4.tgz#2974fd05f4e85c695acaf497f432342de9fc0636"
+ integrity sha512-X8e3tcPEKnwwPVG+vP/vSqEShkwODOEeyQGod82qrIuidwIrfnsGn11qPM1jBLF4MqguTXXYzm58d0dY+/wdpg==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.7.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-typescript" "^7.7.4"
+
+"@babel/plugin-transform-unicode-regex@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae"
+ integrity sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.7.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/register@^7.0.0":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.7.4.tgz#45a4956471a9df3b012b747f5781cc084ee8f128"
+ integrity sha512-/fmONZqL6ZMl9KJUYajetCrID6m0xmL4odX7v+Xvoxcv0DdbP/oO0TWIeLUCHqczQ6L6njDMqmqHFy2cp3FFsA==
+ dependencies:
+ find-cache-dir "^2.0.0"
+ lodash "^4.17.13"
+ make-dir "^2.1.0"
+ pirates "^4.0.0"
+ source-map-support "^0.5.16"
+
+"@babel/runtime@7.0.0-beta.42":
+ version "7.0.0-beta.42"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-beta.42.tgz#352e40c92e0460d3e82f49bd7e79f6cda76f919f"
+ integrity sha512-iOGRzUoONLOtmCvjUsZv3mZzgCT6ljHQY5fr1qG1QIiJQwtM7zbPWGGpa3QWETq+UqwWyJnoi5XZDZRwZDFciQ==
+ dependencies:
+ core-js "^2.5.3"
+ regenerator-runtime "^0.11.1"
+
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.4.0", "@babel/runtime@^7.7.4":
+ version "7.7.6"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.6.tgz#d18c511121aff1b4f2cd1d452f1bac9601dd830f"
+ integrity sha512-BWAJxpNVa0QlE5gZdWjSxXtemZyZ9RmrmVozxt3NUXeZhVIJ5ANyqmMc0JDrivBZyxUuQvFxlvH4OWWOogGfUw==
+ dependencies:
+ regenerator-runtime "^0.13.2"
+
+"@babel/runtime@^7.5.5":
+ version "7.7.7"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.7.tgz#194769ca8d6d7790ec23605af9ee3e42a0aa79cf"
+ integrity sha512-uCnC2JEVAu8AKB5do1WRIsvrdJ0flYx/A/9f/6chdacnEZ7LmavjdsDXr5ksYBegxtuTPR5Va9/+13QF/kFkCA==
+ dependencies:
+ regenerator-runtime "^0.13.2"
+
+"@babel/template@^7.0.0", "@babel/template@^7.4.0", "@babel/template@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b"
+ integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/parser" "^7.7.4"
+ "@babel/types" "^7.7.4"
+
+"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558"
+ integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==
+ dependencies:
+ "@babel/code-frame" "^7.5.5"
+ "@babel/generator" "^7.7.4"
+ "@babel/helper-function-name" "^7.7.4"
+ "@babel/helper-split-export-declaration" "^7.7.4"
+ "@babel/parser" "^7.7.4"
+ "@babel/types" "^7.7.4"
+ debug "^4.1.0"
+ globals "^11.1.0"
+ lodash "^4.17.13"
+
+"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.7.4":
+ version "7.7.4"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193"
+ integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==
+ dependencies:
+ esutils "^2.0.2"
+ lodash "^4.17.13"
+ to-fast-properties "^2.0.0"
+
+"@callstack/react-theme-provider@^3.0.5":
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/@callstack/react-theme-provider/-/react-theme-provider-3.0.5.tgz#a173e455e9603c9c45357a3b6ace1273086527ca"
+ integrity sha512-Iec+ybWN0FvNj87sD3oWo/49edGUP0UOSdMnzCJEFJIDYr992ECIuOV89burAAh2/ibPCxgLiK6dmgv2mO/8Tg==
+ dependencies:
+ deepmerge "^3.2.0"
+ hoist-non-react-statics "^3.3.0"
+
+"@cnakazawa/watch@^1.0.3":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef"
+ integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==
+ dependencies:
+ exec-sh "^0.3.2"
+ minimist "^1.2.0"
+
+"@hapi/address@2.x.x":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
+ integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==
+
+"@hapi/bourne@1.x.x":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a"
+ integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==
+
+"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0":
+ version "8.5.0"
+ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.0.tgz#2f9ce301c8898e1c3248b0a8564696b24d1a9a5a"
+ integrity sha512-7XYT10CZfPsH7j9F1Jmg1+d0ezOux2oM2GfArAzLwWe4mE2Dr3hVjsAL6+TFY49RRJlCdJDMw3nJsLFroTc8Kw==
+
+"@hapi/joi@^15.0.3":
+ version "15.1.1"
+ resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7"
+ integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==
+ dependencies:
+ "@hapi/address" "2.x.x"
+ "@hapi/bourne" "1.x.x"
+ "@hapi/hoek" "8.x.x"
+ "@hapi/topo" "3.x.x"
+
+"@hapi/topo@3.x.x":
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29"
+ integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==
+ dependencies:
+ "@hapi/hoek" "^8.3.0"
+
+"@jest/console@^24.7.1", "@jest/console@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0"
+ integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==
+ dependencies:
+ "@jest/source-map" "^24.9.0"
+ chalk "^2.0.1"
+ slash "^2.0.0"
+
+"@jest/core@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4"
+ integrity sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==
+ dependencies:
+ "@jest/console" "^24.7.1"
+ "@jest/reporters" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ graceful-fs "^4.1.15"
+ jest-changed-files "^24.9.0"
+ jest-config "^24.9.0"
+ jest-haste-map "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-regex-util "^24.3.0"
+ jest-resolve "^24.9.0"
+ jest-resolve-dependencies "^24.9.0"
+ jest-runner "^24.9.0"
+ jest-runtime "^24.9.0"
+ jest-snapshot "^24.9.0"
+ jest-util "^24.9.0"
+ jest-validate "^24.9.0"
+ jest-watcher "^24.9.0"
+ micromatch "^3.1.10"
+ p-each-series "^1.0.0"
+ realpath-native "^1.1.0"
+ rimraf "^2.5.4"
+ slash "^2.0.0"
+ strip-ansi "^5.0.0"
+
+"@jest/environment@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18"
+ integrity sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==
+ dependencies:
+ "@jest/fake-timers" "^24.9.0"
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ jest-mock "^24.9.0"
+
+"@jest/fake-timers@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93"
+ integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-mock "^24.9.0"
+
+"@jest/reporters@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43"
+ integrity sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==
+ dependencies:
+ "@jest/environment" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ glob "^7.1.2"
+ istanbul-lib-coverage "^2.0.2"
+ istanbul-lib-instrument "^3.0.1"
+ istanbul-lib-report "^2.0.4"
+ istanbul-lib-source-maps "^3.0.1"
+ istanbul-reports "^2.2.6"
+ jest-haste-map "^24.9.0"
+ jest-resolve "^24.9.0"
+ jest-runtime "^24.9.0"
+ jest-util "^24.9.0"
+ jest-worker "^24.6.0"
+ node-notifier "^5.4.2"
+ slash "^2.0.0"
+ source-map "^0.6.0"
+ string-length "^2.0.0"
+
+"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714"
+ integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==
+ dependencies:
+ callsites "^3.0.0"
+ graceful-fs "^4.1.15"
+ source-map "^0.6.0"
+
+"@jest/test-result@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca"
+ integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==
+ dependencies:
+ "@jest/console" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+
+"@jest/test-sequencer@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31"
+ integrity sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==
+ dependencies:
+ "@jest/test-result" "^24.9.0"
+ jest-haste-map "^24.9.0"
+ jest-runner "^24.9.0"
+ jest-runtime "^24.9.0"
+
+"@jest/transform@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56"
+ integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/types" "^24.9.0"
+ babel-plugin-istanbul "^5.1.0"
+ chalk "^2.0.1"
+ convert-source-map "^1.4.0"
+ fast-json-stable-stringify "^2.0.0"
+ graceful-fs "^4.1.15"
+ jest-haste-map "^24.9.0"
+ jest-regex-util "^24.9.0"
+ jest-util "^24.9.0"
+ micromatch "^3.1.10"
+ pirates "^4.0.1"
+ realpath-native "^1.1.0"
+ slash "^2.0.0"
+ source-map "^0.6.1"
+ write-file-atomic "2.4.1"
+
+"@jest/types@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59"
+ integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^1.1.1"
+ "@types/yargs" "^13.0.0"
+
+"@react-native-community/async-storage@^1.6.3":
+ version "1.7.1"
+ resolved "https://registry.yarnpkg.com/@react-native-community/async-storage/-/async-storage-1.7.1.tgz#ef2104d865de61ad91bba66613e57e689ff4e6a1"
+ integrity sha512-/oX/x+EU4xNaqIaC/epVKzO8XghzImPA7l8cLz3USEFmtFiXFjBbTeeIFjjEm/u4/cv38Wi1xMEa10PHIWygRg==
+
+"@react-native-community/cli-debugger-ui@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-3.0.0.tgz#d01d08d1e5ddc1633d82c7d84d48fff07bd39416"
+ integrity sha512-m3X+iWLsK/H7/b7PpbNO33eQayR/+M26la4ZbYe1KRke5Umg4PIWsvg21O8Tw4uJcY8LA5hsP+rBi/syBkBf0g==
+ dependencies:
+ serve-static "^1.13.1"
+
+"@react-native-community/cli-platform-android@^3.0.0":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-3.0.3.tgz#e652abce79a7c1e3a8280228123e99df2c4b97b6"
+ integrity sha512-rNO9DmRiVhB6aP2DVUjEJv7ecriTARDZND88ny3xNVUkrD1Y+zwF6aZu3eoT52VXOxLCSLiJzz19OiyGmfqxYg==
+ dependencies:
+ "@react-native-community/cli-tools" "^3.0.0"
+ chalk "^2.4.2"
+ execa "^1.0.0"
+ jetifier "^1.6.2"
+ logkitty "^0.6.0"
+ slash "^3.0.0"
+ xmldoc "^1.1.2"
+
+"@react-native-community/cli-platform-ios@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-3.0.0.tgz#3a48a449c0c33af3b0b3d19d3256de99388fe15f"
+ integrity sha512-QoNVlDj8eMXRZk9uktPFsctHurQpv9jKmiu6mQii4NEtT2npE7g1hbWpRNojutBsfgmCdQGDHd9uB54eeCnYgg==
+ dependencies:
+ "@react-native-community/cli-tools" "^3.0.0"
+ chalk "^2.4.2"
+ js-yaml "^3.13.1"
+ xcode "^2.0.0"
+
+"@react-native-community/cli-tools@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-3.0.0.tgz#fe48b80822ed7e49b8af051f9fe41e22a2a710b1"
+ integrity sha512-8IhQKZdf3E4CR8T7HhkPGgorot/cLkRDgneJFDSWk/wCYZAuUh4NEAdumQV7N0jLSMWX7xxiWUPi94lOBxVY9g==
+ dependencies:
+ chalk "^2.4.2"
+ lodash "^4.17.5"
+ mime "^2.4.1"
+ node-fetch "^2.5.0"
+
+"@react-native-community/cli-types@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-3.0.0.tgz#488d46605cb05e88537e030f38da236eeda74652"
+ integrity sha512-ng6Tm537E/M42GjE4TRUxQyL8sRfClcL7bQWblOCoxPZzJ2J3bdALsjeG3vDnVCIfI/R0AeFalN9KjMt0+Z/Zg==
+
+"@react-native-community/cli@^3.0.0":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-3.0.4.tgz#a9dba1bc77855a6e45fccaabb017360645d936bb"
+ integrity sha512-kt+ENtC+eRUSfWPbbpx3r7fAQDcFwgM03VW/lBdVAUjkNxffPFT2GGdK23CJSBOXTjRSiGuwhvwH4Z28PdrlRA==
+ dependencies:
+ "@hapi/joi" "^15.0.3"
+ "@react-native-community/cli-debugger-ui" "^3.0.0"
+ "@react-native-community/cli-tools" "^3.0.0"
+ "@react-native-community/cli-types" "^3.0.0"
+ chalk "^2.4.2"
+ command-exists "^1.2.8"
+ commander "^2.19.0"
+ compression "^1.7.1"
+ connect "^3.6.5"
+ cosmiconfig "^5.1.0"
+ deepmerge "^3.2.0"
+ envinfo "^7.1.0"
+ errorhandler "^1.5.0"
+ execa "^1.0.0"
+ find-up "^4.1.0"
+ fs-extra "^7.0.1"
+ glob "^7.1.1"
+ graceful-fs "^4.1.3"
+ inquirer "^3.0.6"
+ lodash "^4.17.5"
+ metro "^0.56.0"
+ metro-config "^0.56.0"
+ metro-core "^0.56.0"
+ metro-react-native-babel-transformer "^0.56.0"
+ minimist "^1.2.0"
+ mkdirp "^0.5.1"
+ morgan "^1.9.0"
+ node-notifier "^5.2.1"
+ open "^6.2.0"
+ ora "^3.4.0"
+ plist "^3.0.0"
+ semver "^6.3.0"
+ serve-static "^1.13.1"
+ shell-quote "1.6.1"
+ strip-ansi "^5.2.0"
+ sudo-prompt "^9.0.0"
+ wcwidth "^1.0.1"
+ ws "^1.1.0"
+
+"@react-native-community/eslint-config@^0.0.5":
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/@react-native-community/eslint-config/-/eslint-config-0.0.5.tgz#584f6493258202a57efc22e7be66966e43832795"
+ integrity sha512-jwO2tnKaTPTLX5XYXMHGEnFdf543SU7jz98/OF5mDH3b7lP+BOaCD+jVfqqHoDRkcqyPlYiR1CgwVGWpi0vMWg==
+ dependencies:
+ "@typescript-eslint/eslint-plugin" "^1.5.0"
+ "@typescript-eslint/parser" "^1.5.0"
+ babel-eslint "10.0.1"
+ eslint-plugin-eslint-comments "^3.1.1"
+ eslint-plugin-flowtype "2.50.3"
+ eslint-plugin-jest "22.4.1"
+ eslint-plugin-prettier "2.6.2"
+ eslint-plugin-react "7.12.4"
+ eslint-plugin-react-hooks "^1.5.1"
+ eslint-plugin-react-native "3.6.0"
+ prettier "1.16.4"
+
+"@types/babel__core@^7.1.0":
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30"
+ integrity sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+ "@types/babel__generator" "*"
+ "@types/babel__template" "*"
+ "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+ version "7.6.1"
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04"
+ integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307"
+ integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
+ version "7.0.8"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.8.tgz#479a4ee3e291a403a1096106013ec22cf9b64012"
+ integrity sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw==
+ dependencies:
+ "@babel/types" "^7.3.0"
+
+"@types/eslint-visitor-keys@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
+ integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
+
+"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff"
+ integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==
+
+"@types/istanbul-lib-report@*":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c"
+ integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+
+"@types/istanbul-reports@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a"
+ integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+ "@types/istanbul-lib-report" "*"
+
+"@types/json-schema@^7.0.3":
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636"
+ integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==
+
+"@types/jss@^9.3.0":
+ version "9.5.8"
+ resolved "https://registry.yarnpkg.com/@types/jss/-/jss-9.5.8.tgz#258391f42211c042fc965508d505cbdc579baa5b"
+ integrity sha512-bBbHvjhm42UKki+wZpR89j73ykSXg99/bhuKuYYePtpma3ZAnmeGnl0WxXiZhPGsIfzKwCUkpPC0jlrVMBfRxA==
+ dependencies:
+ csstype "^2.0.0"
+ indefinite-observable "^1.0.1"
+
+"@types/prop-types@*":
+ version "15.7.3"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
+ integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
+
+"@types/react-transition-group@^2.0.6":
+ version "2.9.2"
+ resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-2.9.2.tgz#c48cf2a11977c8b4ff539a1c91d259eaa627028d"
+ integrity sha512-5Fv2DQNO+GpdPZcxp2x/OQG/H19A01WlmpjVD9cKvVFmoVLOZ9LvBgSWG6pSXIU4og5fgbvGPaCV5+VGkWAEHA==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react@*":
+ version "16.9.16"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.16.tgz#4f12515707148b1f53a8eaa4341dae5dfefb066d"
+ integrity sha512-dQ3wlehuBbYlfvRXfF5G+5TbZF3xqgkikK7DWAsQXe2KnzV+kjD4W2ea+ThCrKASZn9h98bjjPzoTYzfRqyBkw==
+ dependencies:
+ "@types/prop-types" "*"
+ csstype "^2.2.0"
+
+"@types/stack-utils@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
+ integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
+
+"@types/yargs-parser@*":
+ version "13.1.0"
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228"
+ integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==
+
+"@types/yargs@^13.0.0":
+ version "13.0.3"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.3.tgz#76482af3981d4412d65371a318f992d33464a380"
+ integrity sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ==
+ dependencies:
+ "@types/yargs-parser" "*"
+
+"@typescript-eslint/eslint-plugin@^1.5.0":
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz#22fed9b16ddfeb402fd7bcde56307820f6ebc49f"
+ integrity sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "1.13.0"
+ eslint-utils "^1.3.1"
+ functional-red-black-tree "^1.0.1"
+ regexpp "^2.0.1"
+ tsutils "^3.7.0"
+
+"@typescript-eslint/experimental-utils@1.13.0":
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e"
+ integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==
+ dependencies:
+ "@types/json-schema" "^7.0.3"
+ "@typescript-eslint/typescript-estree" "1.13.0"
+ eslint-scope "^4.0.0"
+
+"@typescript-eslint/parser@^1.5.0":
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.13.0.tgz#61ac7811ea52791c47dc9fd4dd4a184fae9ac355"
+ integrity sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ==
+ dependencies:
+ "@types/eslint-visitor-keys" "^1.0.0"
+ "@typescript-eslint/experimental-utils" "1.13.0"
+ "@typescript-eslint/typescript-estree" "1.13.0"
+ eslint-visitor-keys "^1.0.0"
+
+"@typescript-eslint/typescript-estree@1.13.0":
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e"
+ integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==
+ dependencies:
+ lodash.unescape "4.0.1"
+ semver "5.5.0"
+
+JSONStream@^1.0.3:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
+ integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
+ dependencies:
+ jsonparse "^1.2.0"
+ through ">=2.2.7 <3"
+
+abab@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a"
+ integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==
+
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+abort-controller@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
+ integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
+ dependencies:
+ event-target-shim "^5.0.0"
+
+absolute-path@^0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7"
+ integrity sha1-p4di+9rftSl76ZsV01p4Wy8JW/c=
+
+accepts@~1.3.5, accepts@~1.3.7:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
+ integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
+ dependencies:
+ mime-types "~2.1.24"
+ negotiator "0.6.2"
+
+acorn-globals@^4.1.0:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7"
+ integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==
+ dependencies:
+ acorn "^6.0.1"
+ acorn-walk "^6.0.1"
+
+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-jsx@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384"
+ integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==
+
+acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.6.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8"
+ integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==
+ dependencies:
+ acorn "^7.0.0"
+ acorn-walk "^7.0.0"
+ xtend "^4.0.2"
+
+acorn-walk@^6.0.1:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
+ integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==
+
+acorn-walk@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.0.0.tgz#c8ba6f0f1aac4b0a9e32d1f0af12be769528f36b"
+ integrity sha512-7Bv1We7ZGuU79zZbb6rRqcpxo3OY+zrdtloZWoyD8fmGX+FeXRjE+iuGkZjSXLVovLzrsvMGMy0EkwA0E0umxg==
+
+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.5.0, acorn@^5.5.3:
+ version "5.7.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
+ integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
+
+acorn@^6.0.1:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784"
+ integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==
+
+acorn@^7.0.0, acorn@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c"
+ integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==
+
+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:
+ 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"
+
+ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5:
+ version "6.10.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
+ integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
+ dependencies:
+ fast-deep-equal "^2.0.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+ integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
+
+animate.css@^3.7.2:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/animate.css/-/animate.css-3.7.2.tgz#e73e0d50e92cb1cfef1597d9b38a9481020e08ea"
+ integrity sha512-0bE8zYo7C0KvgOYrSVfrzkbYk6IOTVPNqkiHg2cbyF4Pq/PXzilz4BRWA3hwEUBoMp5VBgrC29lQIZyhRWdBTw==
+
+ansi-colors@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9"
+ integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==
+ dependencies:
+ ansi-wrap "^0.1.0"
+
+ansi-colors@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
+ integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
+
+ansi-cyan@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873"
+ integrity sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=
+ dependencies:
+ ansi-wrap "0.1.0"
+
+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-escapes@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+ integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+
+ansi-escapes@^4.2.1:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d"
+ integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==
+ dependencies:
+ type-fest "^0.8.1"
+
+ansi-fragments@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-fragments/-/ansi-fragments-0.2.1.tgz#24409c56c4cc37817c3d7caa99d8969e2de5a05e"
+ integrity sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==
+ dependencies:
+ colorette "^1.0.7"
+ slice-ansi "^2.0.0"
+ strip-ansi "^5.0.0"
+
+ansi-gray@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251"
+ integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE=
+ dependencies:
+ ansi-wrap "0.1.0"
+
+ansi-red@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c"
+ integrity sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=
+ dependencies:
+ ansi-wrap "0.1.0"
+
+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-regex@^4.0.0, ansi-regex@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+ integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-regex@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
+ integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
+
+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.2.0, ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-wrap@0.1.0, ansi-wrap@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf"
+ integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768=
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+app-root-path@^2.1.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.2.1.tgz#d0df4a682ee408273583d43f6f79e9892624bc9a"
+ integrity sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA==
+
+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.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+arr-diff@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a"
+ integrity sha1-aHwydYFjWI/vfeezb6vklesaOZo=
+ dependencies:
+ arr-flatten "^1.0.1"
+ array-slice "^0.2.3"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.0.1, arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d"
+ integrity sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+ integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=
+
+array-filter@~0.0.0:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
+ integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw=
+
+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-includes@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.0.tgz#48a929ef4c6bb1fa6dc4a92c9b023a261b0ca404"
+ integrity sha512-ONOEQoKrvXPKk7Su92Co0YMqYO32FfqJTzkKU9u2UpIXyYZIzLSvpdg4AwvSw4mSUW0czu6inK+zby6Oj6gDjQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.0"
+
+array-map@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
+ integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=
+
+array-reduce@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
+ integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=
+
+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-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+art@^0.10.0:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/art/-/art-0.10.3.tgz#b01d84a968ccce6208df55a733838c96caeeaea2"
+ integrity sha512-HXwbdofRTiJT6qZX/FnchtldzJjS3vkLJxQilc3Xj+ma2MXjY4UAyQ0ls1XZYVnDvVIBiFZbC6QsvtW86TD6tQ==
+
+asap@~2.0.3:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+ integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
+
+asn1.js@^4.0.0:
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
+ integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+asn1@~0.2.3:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+ dependencies:
+ safer-buffer "~2.1.0"
+
+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@^1.4.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+ integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
+ dependencies:
+ object-assign "^4.1.1"
+ util "0.10.3"
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+astral-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+ integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
+async-each@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+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-limiter@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
+ integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+
+async@^2.4.0:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
+ integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
+ dependencies:
+ lodash "^4.17.14"
+
+async@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/async/-/async-3.1.0.tgz#42b3b12ae1b74927b5217d8c0016baaf62463772"
+ integrity sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ==
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+atob-lite@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696"
+ integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=
+
+atob@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+attachmediastream@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/attachmediastream/-/attachmediastream-2.1.0.tgz#534271f4789f63b577d499dda35ed1822101286f"
+ integrity sha512-8zx/3Bwo/PxqwpNrEm2Zf9ZBCjfkLmLhS7lqzfP1eWH69iD/WyKWFpysben+gYxMSHcO9S94qvseGk4FVxba0g==
+
+audio-buffer-from@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/audio-buffer-from/-/audio-buffer-from-1.1.1.tgz#6ba1dd0d463ce19e7ba19f91f5e1f725178d38d8"
+ integrity sha512-8Wcira24z+26GXDFe7ZFRF1bJm1iWrz8O+XL8iNZxZjxqAPXIoK1IrJiOqStv35ASPbRjG57ZK/T0WO92MDUSg==
+ dependencies:
+ audio-buffer "^4.0.4"
+ audio-context "^1.0.1"
+ audio-format "^2.0.0"
+ is-audio-buffer "^1.0.11"
+ is-plain-obj "^1.1.0"
+ pcm-convert "^1.6.0"
+ pick-by-alias "^1.2.0"
+ string-to-arraybuffer "^1.0.0"
+
+audio-buffer@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/audio-buffer/-/audio-buffer-4.0.4.tgz#cdb03855a951a1c2931ac1e7b00a9d9d3a4d4858"
+ integrity sha512-phH+MR3G+N/PO5ZKKxx7HlU6vJwAJFa0+FCaTjr/4lUZU/RCjUTqlk3nMJTRy5+b+6cbx8m//EtwZOVI5Ht9+w==
+ dependencies:
+ audio-context "^1.0.0"
+
+audio-context@^1.0.0, audio-context@^1.0.1, audio-context@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/audio-context/-/audio-context-1.0.3.tgz#aae5636691a8cdc15fc91059704cbc7c2fb7abf9"
+ integrity sha512-RH3/rM74f2ITlohhjgC7oYZVS97wtv/SEjXLCzEinnrIPIDxc39m2aFc6wmdkM0NYRKo1DMleYPMAIbnTRW0eA==
+
+audio-decode@^1.2.5:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/audio-decode/-/audio-decode-1.4.0.tgz#731c3e66dff71d29962abb4a7484cf5166d06a8b"
+ integrity sha512-twthRe/K9b83xkk+7AVw7n0o1z1jaaVAwIM0m6VFy9Fl7XdQXM2Kb2MMnZoFBrjwpby+rSfqKZCFExDTZNrCHw==
+ dependencies:
+ audio-buffer-from "^1.1.1"
+ audio-context "^1.0.1"
+ audio-type "^1.0.2"
+ av "^0.4.9"
+ is-buffer "^1.1.4"
+ mp3 "^0.1.0"
+ to-array-buffer "^2.0.0"
+ typedarray-to-buffer "^3.1.2"
+ wav-decoder "^1.1.0"
+
+audio-format@^2.0.0, audio-format@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/audio-format/-/audio-format-2.3.2.tgz#f23fc73b308c6dfba1904da6d4cd9c7621731abd"
+ integrity sha512-5IA2grZhaVhpGxX6lbJm8VVh/SKQULMXXrFxuiodi0zhzDPRB8BJfieo89AclEQv4bDxZRH4lv06qNnxqkFhKQ==
+ dependencies:
+ is-audio-buffer "^1.0.11"
+ is-buffer "^1.1.5"
+ is-plain-obj "^1.1.0"
+ pick-by-alias "^1.2.0"
+ sample-rate "^2.0.0"
+
+audio-loader@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/audio-loader/-/audio-loader-1.0.3.tgz#f17d6b71724e27c52b4c3d8d97d139ef360aaadd"
+ integrity sha1-8X1rcXJOJ8UrTD2Nl9E57zYKqt0=
+ dependencies:
+ audio-context "^1.0.0"
+ audio-decode "^1.2.5"
+ is-absolute "^0.2.6"
+ is-audio-buffer "^1.0.8"
+ is-buffer "^1.1.5"
+ is-relative "^0.2.1"
+ is-url "^1.2.2"
+ object-assign "^4.1.1"
+ request "^2.74.0"
+
+audio-type@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/audio-type/-/audio-type-1.0.2.tgz#9fab56b15734a37e56c21ef6ffadb81618af0fc0"
+ integrity sha1-n6tWsVc0o35Wwh72/624FhivD8A=
+ dependencies:
+ is-flac "^1.1.0"
+ is-m4a "^1.1.0"
+ is-mp3 "^1.1.0"
+ is-ogg "^1.1.0"
+ is-wav "^1.1.0"
+ read-chunk "^2.0.0"
+
+auto-bind@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/auto-bind/-/auto-bind-4.0.0.tgz#e3589fc6c2da8f7ca43ba9f84fa52a744fc997fb"
+ integrity sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==
+
+autocomplete.js@^0.37.0:
+ version "0.37.0"
+ resolved "https://registry.yarnpkg.com/autocomplete.js/-/autocomplete.js-0.37.0.tgz#bcfbfd7bcabe90e90fad4c2b1aaa931379a10c38"
+ integrity sha512-MxYfNb89sl7IRhNdEJv6z8dSfA7lVeU7Dk6m/+/ih0/tPLsbxIM7uPVsnWEUh4j7dFqJktlM7hCeU7jmx6VC8A==
+ dependencies:
+ immediate "^3.2.3"
+
+av@^0.4.9:
+ version "0.4.9"
+ resolved "https://registry.yarnpkg.com/av/-/av-0.4.9.tgz#8c7165f739580a541ec95071423492b3ffdc6e20"
+ integrity sha1-jHFl9zlYClQeyVBxQjSSs//cbiA=
+ dependencies:
+ coffeeify "^0.6.0"
+ optionalDependencies:
+ speaker "^0.3.0"
+
+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.8.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.0.tgz#24390e6ad61386b0a747265754d2a17219de862c"
+ integrity sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==
+
+babel-eslint@10.0.1:
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed"
+ integrity sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@babel/parser" "^7.0.0"
+ "@babel/traverse" "^7.0.0"
+ "@babel/types" "^7.0.0"
+ eslint-scope "3.7.1"
+ eslint-visitor-keys "^1.0.0"
+
+babel-jest@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54"
+ integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==
+ dependencies:
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/babel__core" "^7.1.0"
+ babel-plugin-istanbul "^5.1.0"
+ babel-preset-jest "^24.9.0"
+ chalk "^2.4.2"
+ slash "^2.0.0"
+
+babel-plugin-dynamic-import-node@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f"
+ integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==
+ dependencies:
+ object.assign "^4.1.0"
+
+babel-plugin-istanbul@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854"
+ integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ find-up "^3.0.0"
+ istanbul-lib-instrument "^3.3.0"
+ test-exclude "^5.2.3"
+
+babel-plugin-jest-hoist@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756"
+ integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==
+ dependencies:
+ "@types/babel__traverse" "^7.0.6"
+
+babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0:
+ version "7.0.0-beta.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf"
+ integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==
+
+babel-preset-fbjs@^3.1.2, babel-preset-fbjs@^3.2.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541"
+ integrity sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw==
+ dependencies:
+ "@babel/plugin-proposal-class-properties" "^7.0.0"
+ "@babel/plugin-proposal-object-rest-spread" "^7.0.0"
+ "@babel/plugin-syntax-class-properties" "^7.0.0"
+ "@babel/plugin-syntax-flow" "^7.0.0"
+ "@babel/plugin-syntax-jsx" "^7.0.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
+ "@babel/plugin-transform-arrow-functions" "^7.0.0"
+ "@babel/plugin-transform-block-scoped-functions" "^7.0.0"
+ "@babel/plugin-transform-block-scoping" "^7.0.0"
+ "@babel/plugin-transform-classes" "^7.0.0"
+ "@babel/plugin-transform-computed-properties" "^7.0.0"
+ "@babel/plugin-transform-destructuring" "^7.0.0"
+ "@babel/plugin-transform-flow-strip-types" "^7.0.0"
+ "@babel/plugin-transform-for-of" "^7.0.0"
+ "@babel/plugin-transform-function-name" "^7.0.0"
+ "@babel/plugin-transform-literals" "^7.0.0"
+ "@babel/plugin-transform-member-expression-literals" "^7.0.0"
+ "@babel/plugin-transform-modules-commonjs" "^7.0.0"
+ "@babel/plugin-transform-object-super" "^7.0.0"
+ "@babel/plugin-transform-parameters" "^7.0.0"
+ "@babel/plugin-transform-property-literals" "^7.0.0"
+ "@babel/plugin-transform-react-display-name" "^7.0.0"
+ "@babel/plugin-transform-react-jsx" "^7.0.0"
+ "@babel/plugin-transform-shorthand-properties" "^7.0.0"
+ "@babel/plugin-transform-spread" "^7.0.0"
+ "@babel/plugin-transform-template-literals" "^7.0.0"
+ babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0"
+
+babel-preset-jest@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc"
+ integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==
+ dependencies:
+ "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
+ babel-plugin-jest-hoist "^24.9.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"
+
+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-js@^1.0.2, base64-js@^1.1.2, base64-js@^1.2.3:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
+ integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+basic-auth@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a"
+ integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==
+ dependencies:
+ safe-buffer "5.1.2"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+big-integer@^1.6.44:
+ version "1.6.48"
+ resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e"
+ integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==
+
+binary-extensions@^1.0.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+ integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+bindings@^1.2.1, bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
+bl@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c"
+ integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==
+ dependencies:
+ readable-stream "^2.3.5"
+ safe-buffer "^5.1.1"
+
+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"
+
+blueimp-md5@^2.10.0:
+ version "2.12.0"
+ resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.12.0.tgz#be7367938a889dec3ffbb71138617c117e9c130a"
+ integrity sha512-zo+HIdIhzojv6F1siQPqPFROyVy7C50KzHv/k/Iz+BtvtVzSHXiMXOpq2wCfNkeBqdCv+V8XOV96tsEt2W/3rQ==
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+ integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
+
+boolbase@^1.0.0, 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=
+
+bootstrap-css-only@^3.3.7:
+ version "3.3.7"
+ resolved "https://registry.yarnpkg.com/bootstrap-css-only/-/bootstrap-css-only-3.3.7.tgz#68a15925aa7b9b0fc0feb73ff85d8b8c3989c16d"
+ integrity sha1-aKFZJap7mw/A/rc/+F2LjDmJwW0=
+
+bowser@^2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.7.0.tgz#96eab1fa07fab08c1ec4c75977a7c8ddf8e0fe1f"
+ integrity sha512-aIlMvstvu8x+34KEiOHD3AsBgdrzg6sxALYiukOWhFvGMbQI6TRP/iY0LMhUrHs56aD6P1G0Z7h45PUJaa5m9w==
+
+bplist-creator@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c"
+ integrity sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==
+ dependencies:
+ stream-buffers "~2.2.0"
+
+bplist-parser@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e"
+ integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==
+ dependencies:
+ big-integer "^1.6.44"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^2.3.1, braces@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+brcast@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/brcast/-/brcast-3.0.1.tgz#6256a8349b20de9eed44257a9b24d71493cd48dd"
+ integrity sha512-eI3yqf9YEqyGl9PCNTR46MGvDylGtaHjalcz6Q3fAPnP/PhpKkkve52vFdfGpwp4VUvK6LUr4TQN+2stCrEwTg==
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browser-pack@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774"
+ integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==
+ dependencies:
+ JSONStream "^1.0.3"
+ combine-source-map "~0.8.0"
+ defined "^1.0.0"
+ safe-buffer "^5.1.1"
+ through2 "^2.0.0"
+ umd "^3.0.0"
+
+browser-process-hrtime@^0.1.2:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4"
+ integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==
+
+browser-resolve@^1.11.0, browser-resolve@^1.11.3, browser-resolve@^1.7.0:
+ version "1.11.3"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
+ integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==
+ dependencies:
+ resolve "1.1.7"
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+ integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+ integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+ integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-zlib@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+ dependencies:
+ pako "~1.0.5"
+
+browserify@^16.1.0:
+ version "16.5.0"
+ resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.5.0.tgz#a1c2bc0431bec11fd29151941582e3f645ede881"
+ integrity sha512-6bfI3cl76YLAnCZ75AGu/XPOsqUhRyc0F/olGIJeCxtfxF2HvPKEcmjU9M8oAPxl4uBY1U7Nry33Q6koV3f2iw==
+ dependencies:
+ JSONStream "^1.0.3"
+ assert "^1.4.0"
+ browser-pack "^6.0.1"
+ browser-resolve "^1.11.0"
+ browserify-zlib "~0.2.0"
+ buffer "^5.0.2"
+ cached-path-relative "^1.0.0"
+ concat-stream "^1.6.0"
+ console-browserify "^1.1.0"
+ constants-browserify "~1.0.0"
+ crypto-browserify "^3.0.0"
+ defined "^1.0.0"
+ deps-sort "^2.0.0"
+ domain-browser "^1.2.0"
+ duplexer2 "~0.1.2"
+ events "^2.0.0"
+ glob "^7.1.0"
+ has "^1.0.0"
+ htmlescape "^1.1.0"
+ https-browserify "^1.0.0"
+ inherits "~2.0.1"
+ insert-module-globals "^7.0.0"
+ labeled-stream-splicer "^2.0.0"
+ mkdirp "^0.5.0"
+ module-deps "^6.0.0"
+ os-browserify "~0.3.0"
+ parents "^1.0.1"
+ path-browserify "~0.0.0"
+ process "~0.11.0"
+ punycode "^1.3.2"
+ querystring-es3 "~0.2.0"
+ read-only-stream "^2.0.0"
+ readable-stream "^2.0.2"
+ resolve "^1.1.4"
+ shasum "^1.0.0"
+ shell-quote "^1.6.1"
+ stream-browserify "^2.0.0"
+ stream-http "^3.0.0"
+ string_decoder "^1.1.1"
+ subarg "^1.0.0"
+ syntax-error "^1.1.1"
+ through2 "^2.0.0"
+ timers-browserify "^1.0.1"
+ tty-browserify "0.0.1"
+ url "~0.11.0"
+ util "~0.10.1"
+ vm-browserify "^1.0.0"
+ xtend "^4.0.0"
+
+bser@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+ integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
+ dependencies:
+ node-int64 "^0.4.0"
+
+buffer-crc32@^0.2.13:
+ version "0.2.13"
+ resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+ integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^5.0.2:
+ version "5.4.3"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.4.3.tgz#3fbc9c69eb713d323e3fc1a895eee0710c072115"
+ integrity sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+
+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=
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+cached-path-relative@^1.0.0, cached-path-relative@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.2.tgz#a13df4196d26776220cc3356eb147a52dba2c6db"
+ integrity sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==
+
+caller-callsite@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+ integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+ dependencies:
+ callsites "^2.0.0"
+
+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"
+
+caller-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+ integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+ dependencies:
+ caller-callsite "^2.0.0"
+
+callsites@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+ integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
+
+callsites@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+ integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+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"
+
+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=
+
+camelcase@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+ integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
+
+camelcase@^5.0.0, camelcase@^5.3.1:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+camelize@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b"
+ integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=
+
+capture-exit@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
+ integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==
+ dependencies:
+ rsvp "^4.8.4"
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+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"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+change-emitter@^0.1.2:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515"
+ integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=
+
+chardet@^0.4.0:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
+ integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
+
+chardet@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+ integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
+chokidar@^2.1.1:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+ integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^3.1.0"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+ci-info@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+ integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+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==
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+classnames@^2.2.5, classnames@^2.2.6:
+ version "2.2.6"
+ resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
+ integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
+
+cli-cursor@^1.0.1:
+ 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-cursor@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+ integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+ dependencies:
+ restore-cursor "^2.0.0"
+
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+ dependencies:
+ restore-cursor "^3.1.0"
+
+cli-spinners@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77"
+ integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==
+
+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@^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"
+ wrap-ansi "^2.0.0"
+
+cliui@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
+ integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==
+ dependencies:
+ string-width "^2.1.1"
+ strip-ansi "^4.0.0"
+ wrap-ansi "^2.0.0"
+
+cliui@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+ integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+ dependencies:
+ string-width "^3.1.0"
+ strip-ansi "^5.2.0"
+ wrap-ansi "^5.1.0"
+
+clone-buffer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
+ integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg=
+
+clone-stats@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680"
+ integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=
+
+clone@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+ integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
+
+clone@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
+ integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
+
+cloneable-readable@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec"
+ integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==
+ dependencies:
+ inherits "^2.0.1"
+ process-nextick-args "^2.0.0"
+ readable-stream "^2.3.5"
+
+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=
+
+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=
+
+coffee-script@~1.7.0:
+ version "1.7.1"
+ resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.7.1.tgz#62996a861780c75e6d5069d13822723b73404bfc"
+ integrity sha1-YplqhheAx15tUGnROCJyO3NAS/w=
+ dependencies:
+ mkdirp "~0.3.5"
+
+coffeeify@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/coffeeify/-/coffeeify-0.6.0.tgz#75caba9b2e92c7836c92465c883b6acc9d894652"
+ integrity sha1-dcq6my6Sx4NskkZciDtqzJ2JRlI=
+ dependencies:
+ coffee-script "~1.7.0"
+ convert-source-map "~0.3.3"
+ through "~2.3.4"
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0, color-convert@^1.9.1:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+color-name@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+color-string@^1.5.2:
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
+ integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==
+ dependencies:
+ color-name "^1.0.0"
+ simple-swizzle "^0.2.2"
+
+color-support@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
+ integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
+
+color@^3.1.0, color@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10"
+ integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==
+ dependencies:
+ color-convert "^1.9.1"
+ color-string "^1.5.2"
+
+colorette@^1.0.7:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.1.0.tgz#1f943e5a357fac10b4e0f5aaef3b14cdc1af6ec7"
+ integrity sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg==
+
+combine-source-map@^0.8.0, combine-source-map@~0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b"
+ integrity sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=
+ dependencies:
+ convert-source-map "~1.1.0"
+ inline-source-map "~0.6.0"
+ lodash.memoize "~3.0.3"
+ source-map "~0.5.3"
+
+combined-stream@^1.0.6, combined-stream@~1.0.6:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+command-exists@^1.2.8:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291"
+ integrity sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==
+
+commander@^2.19.0, commander@^2.8.1, commander@~2.20.3:
+ version "2.20.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+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-emitter@^1.2.0, component-emitter@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+compressible@~2.0.16:
+ version "2.0.17"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1"
+ integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==
+ dependencies:
+ mime-db ">= 1.40.0 < 2"
+
+compression@^1.7.1:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
+ integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
+ dependencies:
+ accepts "~1.3.5"
+ bytes "3.0.0"
+ compressible "~2.0.16"
+ debug "2.6.9"
+ on-headers "~1.0.2"
+ safe-buffer "5.1.2"
+ vary "~1.1.2"
+
+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.4.6, concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+connect@^3.6.5:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8"
+ integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==
+ dependencies:
+ debug "2.6.9"
+ finalhandler "1.1.2"
+ parseurl "~1.3.3"
+ utils-merge "1.0.1"
+
+console-browserify@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
+ integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
+
+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=
+
+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=
+
+convert-source-map@^1.4.0, convert-source-map@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
+ integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+convert-source-map@~0.3.3:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190"
+ integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA=
+
+convert-source-map@~1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860"
+ integrity sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=
+
+cookiejar@^2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c"
+ integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-js@^1.0.0:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
+ integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=
+
+core-js@^2.2.2, core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.3:
+ version "2.6.11"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
+ integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
+
+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@^5.0.5, cosmiconfig@^5.1.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
+ integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
+ dependencies:
+ import-fresh "^2.0.0"
+ is-directory "^0.3.1"
+ js-yaml "^3.13.1"
+ parse-json "^4.0.0"
+
+create-ecdh@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
+ integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+create-react-class@15.x, create-react-class@^15.5.1, create-react-class@^15.6.3:
+ version "15.6.3"
+ resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036"
+ integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==
+ dependencies:
+ fbjs "^0.8.9"
+ loose-envify "^1.3.1"
+ object-assign "^4.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"
+
+cross-spawn@^5.0.1, cross-spawn@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+crypto-browserify@^3.0.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+crypto-js@^3.1.6:
+ version "3.1.8"
+ resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.1.8.tgz#715f070bf6014f2ae992a98b3929258b713f08d5"
+ integrity sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=
+
+css-color-keywords@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
+ integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=
+
+css-mediaquery@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/css-mediaquery/-/css-mediaquery-0.1.2.tgz#6a2c37344928618631c54bd33cedd301da18bea0"
+ integrity sha1-aiw3NEkoYYYxxUvTPO3TAdoYvqA=
+
+css-select@^2.0.2:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef"
+ integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==
+ dependencies:
+ boolbase "^1.0.0"
+ css-what "^3.2.1"
+ domutils "^1.7.0"
+ nth-check "^1.0.2"
+
+css-to-react-native-transform@^1.8.1:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/css-to-react-native-transform/-/css-to-react-native-transform-1.9.0.tgz#63369f479048ab7662f5320f8010840ad91344e7"
+ integrity sha512-darzotx5xx+Q0bzASkvNBasztLCssNerzf9jpMZx0H4CTY6J/y2Wh50ZtYAJ3FmESEux1bJcGa6T0zfISTuFqw==
+ dependencies:
+ css "^2.2.4"
+ css-mediaquery "^0.1.2"
+ css-to-react-native "^2.3.0"
+
+css-to-react-native@^2.3.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.3.2.tgz#e75e2f8f7aa385b4c3611c52b074b70a002f2e7d"
+ integrity sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw==
+ dependencies:
+ camelize "^1.0.0"
+ css-color-keywords "^1.0.0"
+ postcss-value-parser "^3.3.0"
+
+css-tree@^1.0.0-alpha.37:
+ version "1.0.0-alpha.39"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb"
+ integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==
+ dependencies:
+ mdn-data "2.0.6"
+ source-map "^0.6.1"
+
+css-vendor@^0.3.8:
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-0.3.8.tgz#6421cfd3034ce664fe7673972fd0119fc28941fa"
+ integrity sha1-ZCHP0wNM5mT+dnOXL9ARn8KJQfo=
+ dependencies:
+ is-in-browser "^1.0.2"
+
+css-what@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1"
+ integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==
+
+css@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929"
+ integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==
+ dependencies:
+ inherits "^2.0.3"
+ source-map "^0.6.1"
+ source-map-resolve "^0.5.2"
+ urix "^0.1.0"
+
+cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+ integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1"
+ integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==
+ dependencies:
+ cssom "0.3.x"
+
+csstype@^2.0.0, csstype@^2.2.0:
+ version "2.6.8"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.8.tgz#0fb6fc2417ffd2816a418c9336da74d7f07db431"
+ integrity sha512-msVS9qTuMT5zwAGCVm4mxfrZ18BNc6Csd0oJAtiFMZ1FAx1CCvy2+5MDmYoix63LM/6NDbNtodCiGYGmFgO0dA==
+
+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"
+
+d@1, d@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
+ integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
+ dependencies:
+ es5-ext "^0.10.50"
+ type "^1.0.1"
+
+dash-ast@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-1.0.0.tgz#12029ba5fb2f8aa6f0a861795b23c1b4b6c27d37"
+ integrity sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==
+
+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-urls@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe"
+ integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==
+ dependencies:
+ abab "^2.0.0"
+ whatwg-mimetype "^2.2.0"
+ whatwg-url "^7.0.0"
+
+dayjs@^1.8.15:
+ version "1.8.17"
+ resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.17.tgz#53ec413f2a7b02afbea1846d61bb260fa8567cea"
+ integrity sha512-47VY/htqYqr9GHd7HW/h56PpQzRBSJcxIQFwqL3P20bMF/3az5c3PWdVY3LmPXFl6cQCYHL7c79b9ov+2bOBbw==
+
+debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, 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@^3.1.0, debug@^3.2.6:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+ integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+ integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+ dependencies:
+ ms "^2.1.1"
+
+decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+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=
+
+deepmerge@^2.0.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170"
+ integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==
+
+deepmerge@^3.2.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7"
+ integrity sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==
+
+defaults@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
+ integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=
+ dependencies:
+ clone "^1.0.2"
+
+define-properties@^1.1.2, define-properties@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+defined@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+ integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
+
+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=
+
+denodeify@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631"
+ integrity sha1-OjYof1A05pnnV3kBBSwubJQlFjE=
+
+depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+ integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+
+deps-sort@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.1.tgz#9dfdc876d2bcec3386b6829ac52162cda9fa208d"
+ integrity sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==
+ dependencies:
+ JSONStream "^1.0.3"
+ shasum-object "^1.0.0"
+ subarg "^1.0.0"
+ through2 "^2.0.0"
+
+des.js@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
+ integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+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-newline@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
+ integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=
+
+detective@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b"
+ integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==
+ dependencies:
+ acorn-node "^1.6.1"
+ defined "^1.0.0"
+ minimist "^1.1.1"
+
+diff-sequences@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5"
+ integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==
+
+diffie-hellman@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+ integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+digest-auth-request@tijmenNL/digest-auth-request:
+ version "0.8.0"
+ resolved "https://codeload.github.com/tijmenNL/digest-auth-request/tar.gz/e9d69219088d440c57af69f7ef1fffd5ff7d3527"
+ dependencies:
+ crypto-js "^3.1.6"
+
+doctrine@^1.2.2:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
+doctrine@^2.1.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"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+dom-helpers@^3.2.1, dom-helpers@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8"
+ integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==
+ dependencies:
+ "@babel/runtime" "^7.1.2"
+
+dom-serializer@0:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
+ integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
+ dependencies:
+ domelementtype "^2.0.1"
+ entities "^2.0.0"
+
+dom-walk@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
+ integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=
+
+domain-browser@^1.2.0:
+ 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:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
+ integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
+
+domelementtype@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d"
+ integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==
+
+domexception@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
+ integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==
+ dependencies:
+ webidl-conversions "^4.0.2"
+
+dompurify@^2.0.7:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.0.7.tgz#f8266ad38fe1602fb5b3222f31eedbf5c16c4fd5"
+ integrity sha512-S3O0lk6rFJtO01ZTzMollCOGg+WAtCwS3U5E2WSDY/x/sy7q70RjEC4Dmrih5/UqzLLB9XoKJ8KqwBxaNvBu4A==
+
+domutils@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
+ integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+dtype@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dtype/-/dtype-2.0.0.tgz#cd052323ce061444ecd2e8f5748f69a29be28434"
+ integrity sha1-zQUjI84GFETs0uj1dI9popvihDQ=
+
+duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
+ integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=
+ dependencies:
+ readable-stream "^2.0.2"
+
+duplexer@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+ integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
+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=
+
+elliptic@^6.0.0:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762"
+ integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+emoji-regex@^7.0.1:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+ integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+encodeurl@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+
+encoding@^0.1.11:
+ version "0.1.12"
+ resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
+ integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=
+ dependencies:
+ iconv-lite "~0.4.13"
+
+end-of-stream@^1.1.0:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+entities@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4"
+ integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==
+
+envify@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/envify/-/envify-4.1.0.tgz#f39ad3db9d6801b4e6b478b61028d3f0b6819f7e"
+ integrity sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw==
+ dependencies:
+ esprima "^4.0.0"
+ through "~2.3.4"
+
+envinfo@^7.1.0:
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.0.tgz#91410bb6db262fb4f1409bd506e9ff57e91023f4"
+ integrity sha512-jDgnJaF/Btomk+m3PZDTTCb5XIIIX3zYItnCRfF73zVgvinLoRomuhi75Y4su0PtQxWz4v66XnLLckyvyJTOIQ==
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+errorhandler@^1.5.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.5.1.tgz#b9ba5d17cf90744cd1e851357a6e75bf806a9a91"
+ integrity sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==
+ dependencies:
+ accepts "~1.3.7"
+ escape-html "~1.0.3"
+
+es-abstract@^1.17.0-next.0, es-abstract@^1.17.0-next.1:
+ version "1.17.0-next.1"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0-next.1.tgz#94acc93e20b05a6e96dacb5ab2f1cb3a81fc2172"
+ integrity sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==
+ dependencies:
+ es-to-primitive "^1.2.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ has-symbols "^1.0.1"
+ is-callable "^1.1.4"
+ is-regex "^1.0.4"
+ object-inspect "^1.7.0"
+ object-keys "^1.1.1"
+ object.assign "^4.1.0"
+ string.prototype.trimleft "^2.1.0"
+ string.prototype.trimright "^2.1.0"
+
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14:
+ version "0.10.53"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1"
+ integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==
+ dependencies:
+ es6-iterator "~2.0.3"
+ es6-symbol "~3.1.3"
+ next-tick "~1.0.0"
+
+es6-iterator@^2.0.3, 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"
+ es6-symbol "^3.1.1"
+
+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"
+ es6-iterator "~2.0.1"
+ es6-set "~0.1.5"
+ es6-symbol "~3.1.1"
+ event-emitter "~0.3.5"
+
+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"
+ es6-iterator "~2.0.1"
+ es6-symbol "3.1.1"
+ event-emitter "~0.3.5"
+
+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"
+
+es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
+ integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
+ dependencies:
+ d "^1.0.1"
+ ext "^1.1.2"
+
+es6-weak-map@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53"
+ integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==
+ dependencies:
+ d "1"
+ es5-ext "^0.10.46"
+ es6-iterator "^2.0.3"
+ es6-symbol "^3.1.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.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.9.1:
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541"
+ integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==
+ dependencies:
+ esprima "^3.1.3"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.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"
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-plugin-eslint-comments@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.1.2.tgz#4ef6c488dbe06aa1627fea107b3e5d059fc8a395"
+ integrity sha512-QexaqrNeteFfRTad96W+Vi4Zj1KFbkHHNMMaHZEYcovKav6gdomyGzaxSDSL3GoIyUOo078wRAdYlu1caiauIQ==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ ignore "^5.0.5"
+
+eslint-plugin-flowtype@2.50.3:
+ version "2.50.3"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz#61379d6dce1d010370acd6681740fd913d68175f"
+ integrity sha512-X+AoKVOr7Re0ko/yEXyM5SSZ0tazc6ffdIOocp2fFUlWoDt7DV0Bz99mngOkAFLOAWjqRA5jPwqUCbrx13XoxQ==
+ dependencies:
+ lodash "^4.17.10"
+
+eslint-plugin-jest@22.4.1:
+ version "22.4.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.4.1.tgz#a5fd6f7a2a41388d16f527073b778013c5189a9c"
+ integrity sha512-gcLfn6P2PrFAVx3AobaOzlIEevpAEf9chTpFZz7bYfc7pz8XRv7vuKTIE4hxPKZSha6XWKKplDQ0x9Pq8xX2mg==
+
+eslint-plugin-prettier@2.6.2:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.2.tgz#71998c60aedfa2141f7bfcbf9d1c459bf98b4fad"
+ integrity sha512-tGek5clmW5swrAx1mdPYM8oThrBE83ePh7LeseZHBWfHVGrHPhKn7Y5zgRMbU/9D5Td9K4CEmUPjGxA7iw98Og==
+ dependencies:
+ fast-diff "^1.1.1"
+ jest-docblock "^21.0.0"
+
+eslint-plugin-react-hooks@^1.5.1:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04"
+ integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==
+
+eslint-plugin-react-native-globals@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz#ee1348bc2ceb912303ce6bdbd22e2f045ea86ea2"
+ integrity sha512-9aEPf1JEpiTjcFAmmyw8eiIXmcNZOqaZyHO77wgm0/dWfT/oxC1SrIq8ET38pMxHYrcB6Uew+TzUVsBeczF88g==
+
+eslint-plugin-react-native@3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-3.6.0.tgz#7cad3b7c6159df6d26fe3252c6c5417a17f27b4b"
+ integrity sha512-BEQcHZ06hZSBYWFVuNEq0xuui5VEsWpHDsZGBtfadHfCRqRMUrkYPgdDb3bpc60qShHE83kqIv59uKdinEg91Q==
+ dependencies:
+ eslint-plugin-react-native-globals "^0.1.1"
+
+eslint-plugin-react@7.12.4:
+ version "7.12.4"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz#b1ecf26479d61aee650da612e425c53a99f48c8c"
+ integrity sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==
+ dependencies:
+ array-includes "^3.0.3"
+ doctrine "^2.1.0"
+ has "^1.0.3"
+ jsx-ast-utils "^2.0.1"
+ object.fromentries "^2.0.0"
+ prop-types "^15.6.2"
+ resolve "^1.9.0"
+
+eslint-scope@3.7.1:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
+ integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-scope@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+ integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-scope@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
+ integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-utils@^1.3.1, eslint-utils@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
+ integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
+eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
+ integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
+
+eslint@^2.7.0:
+ version "2.13.1"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-2.13.1.tgz#e4cc8fa0f009fb829aaae23855a29360be1f6c11"
+ integrity sha1-5MyPoPAJ+4KaquI4VaKTYL4fbBE=
+ dependencies:
+ chalk "^1.1.3"
+ concat-stream "^1.4.6"
+ debug "^2.1.1"
+ doctrine "^1.2.2"
+ es6-map "^0.1.3"
+ escope "^3.6.0"
+ espree "^3.1.6"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ file-entry-cache "^1.1.1"
+ glob "^7.0.3"
+ globals "^9.2.0"
+ ignore "^3.1.2"
+ imurmurhash "^0.1.4"
+ inquirer "^0.12.0"
+ is-my-json-valid "^2.10.0"
+ is-resolvable "^1.0.0"
+ js-yaml "^3.5.1"
+ json-stable-stringify "^1.0.0"
+ levn "^0.3.0"
+ lodash "^4.0.0"
+ mkdirp "^0.5.0"
+ optionator "^0.8.1"
+ path-is-absolute "^1.0.0"
+ path-is-inside "^1.0.1"
+ pluralize "^1.2.1"
+ progress "^1.1.8"
+ require-uncached "^1.0.2"
+ shelljs "^0.6.0"
+ strip-json-comments "~1.0.1"
+ table "^3.7.8"
+ text-table "~0.2.0"
+ user-home "^2.0.0"
+
+eslint@^6.7.2:
+ version "6.7.2"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.7.2.tgz#c17707ca4ad7b2d8af986a33feba71e18a9fecd1"
+ integrity sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ ajv "^6.10.0"
+ chalk "^2.1.0"
+ cross-spawn "^6.0.5"
+ debug "^4.0.1"
+ doctrine "^3.0.0"
+ eslint-scope "^5.0.0"
+ eslint-utils "^1.4.3"
+ eslint-visitor-keys "^1.1.0"
+ espree "^6.1.2"
+ esquery "^1.0.1"
+ esutils "^2.0.2"
+ file-entry-cache "^5.0.1"
+ functional-red-black-tree "^1.0.1"
+ glob-parent "^5.0.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ inquirer "^7.0.0"
+ is-glob "^4.0.0"
+ js-yaml "^3.13.1"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.3.0"
+ lodash "^4.17.14"
+ minimatch "^3.0.4"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ optionator "^0.8.3"
+ progress "^2.0.0"
+ regexpp "^2.0.1"
+ semver "^6.1.2"
+ strip-ansi "^5.2.0"
+ strip-json-comments "^3.0.1"
+ table "^5.2.3"
+ text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
+
+espree@^3.1.6:
+ version "3.5.4"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
+ integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==
+ dependencies:
+ acorn "^5.5.0"
+ acorn-jsx "^3.0.0"
+
+espree@^6.1.2:
+ version "6.1.2"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d"
+ integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==
+ dependencies:
+ acorn "^7.1.0"
+ acorn-jsx "^5.1.0"
+ eslint-visitor-keys "^1.1.0"
+
+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.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
+ integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
+ dependencies:
+ estraverse "^4.0.0"
+
+esrecurse@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
+ integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+ dependencies:
+ estraverse "^4.1.0"
+
+estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+esutils@^2.0.0, esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+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"
+
+event-target-shim@^1.0.5:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-1.1.1.tgz#a86e5ee6bdaa16054475da797ccddf0c55698491"
+ integrity sha1-qG5e5r2qFgVEddp5fM3fDFVphJE=
+
+event-target-shim@^5.0.0, event-target-shim@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
+ integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
+
+eventemitter3@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
+ integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
+
+events@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-2.1.0.tgz#2a9a1e18e6106e0e812aa9ebd4a819b3c29c0ba5"
+ integrity sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+exec-sh@^0.3.2:
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5"
+ integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==
+
+execa@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+ integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
+ dependencies:
+ cross-spawn "^5.0.1"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+execa@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+ integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^4.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+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=
+
+exit@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+ integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expect@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca"
+ integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ ansi-styles "^3.2.0"
+ jest-get-type "^24.9.0"
+ jest-matcher-utils "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-regex-util "^24.9.0"
+
+ext@^1.1.2:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244"
+ integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==
+ dependencies:
+ type "^2.0.0"
+
+extend-shallow@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071"
+ integrity sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=
+ dependencies:
+ kind-of "^1.1.0"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@^3.0.0, extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+external-editor@^2.0.4:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
+ integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
+ dependencies:
+ chardet "^0.4.0"
+ iconv-lite "^0.4.17"
+ tmp "^0.0.33"
+
+external-editor@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+ integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+ dependencies:
+ chardet "^0.7.0"
+ iconv-lite "^0.4.24"
+ tmp "^0.0.33"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+ integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
+
+fancy-log@^1.3.2, fancy-log@^1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7"
+ integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==
+ dependencies:
+ ansi-gray "^0.1.1"
+ color-support "^1.1.3"
+ parse-node-version "^1.0.0"
+ time-stamp "^1.0.0"
+
+fast-deep-equal@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
+ integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
+
+fast-diff@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
+ integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+fast-safe-stringify@^2.0.7:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743"
+ integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==
+
+fb-watchman@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
+ integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
+ dependencies:
+ bser "2.1.1"
+
+fbjs-css-vars@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8"
+ integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==
+
+fbjs-scripts@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-1.2.0.tgz#069a0c0634242d10031c6460ef1fccefcdae8b27"
+ integrity sha512-5krZ8T0Bf8uky0abPoCLrfa7Orxd8UH4Qq8hRUF2RZYNMu+FmEOrBc7Ib3YVONmxTXTlLAvyrrdrVmksDb2OqQ==
+ dependencies:
+ "@babel/core" "^7.0.0"
+ ansi-colors "^1.0.1"
+ babel-preset-fbjs "^3.2.0"
+ core-js "^2.4.1"
+ cross-spawn "^5.1.0"
+ fancy-log "^1.3.2"
+ object-assign "^4.0.1"
+ plugin-error "^0.1.2"
+ semver "^5.1.0"
+ through2 "^2.0.0"
+
+fbjs@^0.8.1, fbjs@^0.8.16, fbjs@^0.8.9:
+ version "0.8.17"
+ resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
+ integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=
+ dependencies:
+ core-js "^1.0.0"
+ isomorphic-fetch "^2.1.1"
+ loose-envify "^1.0.0"
+ object-assign "^4.1.0"
+ promise "^7.1.1"
+ setimmediate "^1.0.5"
+ ua-parser-js "^0.7.18"
+
+fbjs@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a"
+ integrity sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==
+ dependencies:
+ core-js "^2.4.1"
+ fbjs-css-vars "^1.0.0"
+ isomorphic-fetch "^2.1.1"
+ loose-envify "^1.0.0"
+ object-assign "^4.1.0"
+ promise "^7.1.1"
+ setimmediate "^1.0.5"
+ ua-parser-js "^0.7.18"
+
+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"
+
+figures@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+ integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+figures@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec"
+ integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+file-entry-cache@^1.1.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-1.3.1.tgz#44c61ea607ae4be9c1402f41f44270cbfe334ff8"
+ integrity sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=
+ dependencies:
+ flat-cache "^1.2.1"
+ object-assign "^4.0.1"
+
+file-entry-cache@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
+ integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+ dependencies:
+ flat-cache "^2.0.1"
+
+file-uri-to-path@1.0.0:
+ 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==
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+finalhandler@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
+ integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
+ dependencies:
+ debug "2.6.9"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ on-finished "~2.3.0"
+ parseurl "~1.3.3"
+ statuses "~1.5.0"
+ unpipe "~1.0.0"
+
+find-cache-dir@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+ integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^2.0.0"
+ pkg-dir "^3.0.0"
+
+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"
+
+find-up@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+ dependencies:
+ locate-path "^2.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+find-up@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+flat-cache@^1.2.1:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"
+ integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==
+ dependencies:
+ circular-json "^0.3.1"
+ graceful-fs "^4.1.2"
+ rimraf "~2.6.2"
+ write "^0.2.1"
+
+flat-cache@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
+ integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+ dependencies:
+ flatted "^2.0.0"
+ rimraf "2.6.3"
+ write "1.0.3"
+
+flatted@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08"
+ integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==
+
+flatten-vertex-data@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz#889fd60bea506006ca33955ee1105175fb620219"
+ integrity sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==
+ dependencies:
+ dtype "^2.0.0"
+
+fontawesome-actions@^0.17.0:
+ version "0.17.0"
+ resolved "https://registry.yarnpkg.com/fontawesome-actions/-/fontawesome-actions-0.17.0.tgz#dde55e148ddf36c4465b707bc54e17eb169b3f91"
+ integrity sha512-79+2rCfkdzc27y6VB1xqjvbgJ6tP6UWe6gHFwYwNqq6q5YkHhm2Algeld/t8v+yJY0wExerKYc3YeNsbBIlKtA==
+
+for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+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.3.1:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4"
+ integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+formidable@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.1.tgz#70fb7ca0290ee6ff961090415f4b3df3d2082659"
+ integrity sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+fresh@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+ integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+
+front-matter@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-2.1.2.tgz#f75983b9f2f413be658c93dfd7bd8ce4078f5cdb"
+ integrity sha1-91mDufL0E75ljJPf172M5AePXNs=
+ dependencies:
+ js-yaml "^3.4.6"
+
+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"
+ klaw "^1.0.0"
+
+fs-extra@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291"
+ integrity sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^3.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
+ integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.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.2.7:
+ version "1.2.11"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3"
+ integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==
+ dependencies:
+ bindings "^1.5.0"
+ nan "^2.12.1"
+
+fstream@^1.0.0, fstream@^1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045"
+ integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+ integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+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"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+gaze@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
+ integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==
+ dependencies:
+ globule "^1.0.0"
+
+generate-function@^2.0.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f"
+ integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==
+ dependencies:
+ is-property "^1.0.2"
+
+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-assigned-identifiers@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1"
+ integrity sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==
+
+get-caller-file@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
+ integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
+
+get-caller-file@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+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-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+ integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+
+get-stream@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ dependencies:
+ pump "^3.0.0"
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+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-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob-parent@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2"
+ integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob@^7.0.0, glob@^7.0.3, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1:
+ version "7.1.6"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
+ integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+global@~4.3.0:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
+ integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=
+ dependencies:
+ min-document "^2.19.0"
+ process "~0.5.1"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^12.1.0:
+ version "12.3.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13"
+ integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==
+ dependencies:
+ type-fest "^0.8.1"
+
+globals@^9.2.0:
+ version "9.18.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
+ integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
+
+globule@^1.0.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d"
+ integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==
+ dependencies:
+ glob "~7.1.1"
+ lodash "~4.17.10"
+ minimatch "~3.0.2"
+
+gonzales-pe-sl@^4.2.3:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/gonzales-pe-sl/-/gonzales-pe-sl-4.2.3.tgz#6a868bc380645f141feeb042c6f97fcc71b59fe6"
+ integrity sha1-aoaLw4BkXxQf7rBCxvl/zHG1n+Y=
+ dependencies:
+ minimist "1.1.x"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
+ integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
+
+growly@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
+ integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
+
+gud@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0"
+ integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==
+
+handlebars@^4.1.2:
+ version "4.5.3"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482"
+ integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==
+ dependencies:
+ neo-async "^2.6.0"
+ optimist "^0.6.1"
+ source-map "^0.6.1"
+ optionalDependencies:
+ uglify-js "^3.1.4"
+
+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@~5.1.0:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
+ integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
+ dependencies:
+ ajv "^6.5.5"
+ har-schema "^2.0.0"
+
+hark@^1.1.6:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/hark/-/hark-1.2.3.tgz#959981400f561be5580ecd4321a9f55b16bacbd0"
+ integrity sha512-u68vz9SCa38ESiFJSDjqK8XbXqWzyot7Cj6Y2b6jk2NJ+II3MY2dIrLMg/kjtIAun4Y1DHF/20hfx4rq1G5GMg==
+ dependencies:
+ wildemitter "^1.2.0"
+
+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-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-symbols@^1.0.0, has-symbols@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
+ integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
+
+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-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.0, has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+hash-base@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
+ integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+hermes-engine@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.2.1.tgz#25c0f1ff852512a92cb5c5cc47cf967e1e722ea2"
+ integrity sha512-eNHUQHuadDMJARpaqvlCZoK/Nitpj6oywq3vQ3wCwEsww5morX34mW5PmKWQTO7aU0ck0hgulxR+EVDlXygGxQ==
+
+history@^4.9.0:
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3"
+ integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==
+ dependencies:
+ "@babel/runtime" "^7.1.2"
+ loose-envify "^1.2.0"
+ resolve-pathname "^3.0.0"
+ tiny-invariant "^1.0.2"
+ tiny-warning "^1.0.0"
+ value-equal "^1.0.1"
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0:
+ version "2.5.5"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
+ integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==
+
+hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#101685d3aff3b23ea213163f6e8e12f4f111e19f"
+ integrity sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw==
+ dependencies:
+ react-is "^16.7.0"
+
+hosted-git-info@^2.1.4:
+ version "2.8.5"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c"
+ integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==
+
+html-encoding-sniffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
+ integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==
+ dependencies:
+ whatwg-encoding "^1.0.1"
+
+htmlescape@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351"
+ integrity sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=
+
+http-errors@~1.7.2:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
+ integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.4"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.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"
+ sshpk "^1.7.0"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+ integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+
+hyphenate-style-name@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48"
+ integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ==
+
+iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@~0.4.13:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+ieee754@^1.1.4:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
+ integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
+
+ignore@^3.1.2:
+ version "3.3.10"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
+ integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
+
+ignore@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+ integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+ignore@^5.0.5:
+ version "5.1.4"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf"
+ integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==
+
+image-size@^0.6.0:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2"
+ integrity sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==
+
+immediate@^3.2.3:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c"
+ integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=
+
+immediate@~3.0.5:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
+ integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=
+
+import-fresh@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+ integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
+ dependencies:
+ caller-path "^2.0.0"
+ resolve-from "^3.0.0"
+
+import-fresh@^3.0.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
+ integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+import-local@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+ integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
+ dependencies:
+ pkg-dir "^3.0.0"
+ resolve-cwd "^2.0.0"
+
+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=
+
+indefinite-observable@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/indefinite-observable/-/indefinite-observable-1.0.2.tgz#0a328793ab2385d4b9dca23eaab4afe6936a73f8"
+ integrity sha512-Mps0898zEduHyPhb7UCgNmfzlqNZknVmaFz5qzr0mm04YQ5FGLhAyK/dJ+NaRxGyR6juQXIxh5Ev0xx+qq0nYA==
+ dependencies:
+ symbol-observable "1.2.0"
+
+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"
+
+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"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+inline-source-map@~0.6.0:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5"
+ integrity sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=
+ dependencies:
+ source-map "~0.5.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"
+ chalk "^1.0.0"
+ cli-cursor "^1.0.1"
+ cli-width "^2.0.0"
+ figures "^1.3.5"
+ lodash "^4.3.0"
+ readline2 "^1.0.1"
+ run-async "^0.1.0"
+ rx-lite "^3.1.2"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.0"
+ through "^2.3.6"
+
+inquirer@^3.0.6:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
+ integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==
+ dependencies:
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.0"
+ cli-cursor "^2.1.0"
+ cli-width "^2.0.0"
+ external-editor "^2.0.4"
+ figures "^2.0.0"
+ lodash "^4.3.0"
+ mute-stream "0.0.7"
+ run-async "^2.2.0"
+ rx-lite "^4.0.8"
+ rx-lite-aggregates "^4.0.8"
+ string-width "^2.1.0"
+ strip-ansi "^4.0.0"
+ through "^2.3.6"
+
+inquirer@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.1.tgz#13f7980eedc73c689feff3994b109c4e799c6ebb"
+ integrity sha512-V1FFQ3TIO15det8PijPLFR9M9baSlnRs9nL7zWu1MNVA2T9YVl9ZbrHJhYs7e9X8jeMZ3lr2JH/rdHFgNCBdYw==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ chalk "^2.4.2"
+ cli-cursor "^3.1.0"
+ cli-width "^2.0.0"
+ external-editor "^3.0.3"
+ figures "^3.0.0"
+ lodash "^4.17.15"
+ mute-stream "0.0.8"
+ run-async "^2.2.0"
+ rxjs "^6.5.3"
+ string-width "^4.1.0"
+ strip-ansi "^5.1.0"
+ through "^2.3.6"
+
+insert-module-globals@^7.0.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.0.tgz#ec87e5b42728479e327bd5c5c71611ddfb4752ba"
+ integrity sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==
+ dependencies:
+ JSONStream "^1.0.3"
+ acorn-node "^1.5.2"
+ combine-source-map "^0.8.0"
+ concat-stream "^1.6.1"
+ is-buffer "^1.1.0"
+ path-is-absolute "^1.0.1"
+ process "~0.11.0"
+ through2 "^2.0.0"
+ undeclared-identifiers "^1.1.2"
+ xtend "^4.0.0"
+
+invariant@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+ integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+ 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=
+
+invert-kv@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
+ integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
+
+ipaddr.js@^1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+ integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
+
+is-absolute@^0.2.6:
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb"
+ integrity sha1-IN5p89uULvLYe5wto28XIjWxtes=
+ dependencies:
+ is-relative "^0.2.1"
+ is-windows "^0.2.0"
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+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-arrayish@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+ integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
+
+is-audio-buffer@^1.0.11, is-audio-buffer@^1.0.8:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-audio-buffer/-/is-audio-buffer-1.1.0.tgz#f4c7f274d20180f993f9b1650768cb77bedd4470"
+ integrity sha512-fmPC/dizJmP4ITCsW5oTQGMJ9wZVE+A/zAe6FQo3XwgERxmXHmm3ON5XkWDAxmyxvsrDmWx3NArpSgamp/59AA==
+
+is-base64@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-base64/-/is-base64-0.1.0.tgz#a6f20610c6ef4863a51cba32bc0222544b932622"
+ integrity sha512-WRRyllsGXJM7ZN7gPTCCQ/6wNPTRDwiWdPK66l5sJzcU/oOzcIcRRf0Rux8bkpox/1yjt0F6VJRsQOIG2qz5sg==
+
+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-blob@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-blob/-/is-blob-2.1.0.tgz#e36cd82c90653f1e1b930f11baf9c64216a05385"
+ integrity sha512-SZ/fTft5eUhQM6oF/ZaASFDEdbFVe89Imltn9uZr03wdKMcWNVYSMjQPFtg05QuNkt5l5c135ElvXEQG0rk4tw==
+
+is-buffer@^1.1.0, is-buffer@^1.1.4, 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-callable@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
+ integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
+
+is-ci@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+ integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
+ dependencies:
+ ci-info "^2.0.0"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+ integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+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-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.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-extendable@^1.0.0, is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ 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-flac@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/is-flac/-/is-flac-1.1.2.tgz#c4c5918fa211e51b7a6e9a7cc751809eae8c002c"
+ integrity sha1-xMWRj6IR5Rt6bpp8x1GAnq6MACw=
+
+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-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-function@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5"
+ integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=
+
+is-generator-fn@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
+ integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+
+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-glob@^4.0.0, is-glob@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-in-browser@^1.0.2, is-in-browser@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835"
+ integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=
+
+is-m4a@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-m4a/-/is-m4a-1.1.0.tgz#0f16c84b3b9fbf1fdf8c39f8846846264ddbdd3c"
+ integrity sha1-DxbISzufvx/fjDn4hGhGJk3b3Tw=
+
+is-mp3@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/is-mp3/-/is-mp3-1.1.3.tgz#62a1e73c20601f46cb1f1bf592504f939f0bd4c8"
+ integrity sha1-YqHnPCBgH0bLHxv1klBPk58L1Mg=
+
+is-my-ip-valid@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824"
+ integrity sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==
+
+is-my-json-valid@^2.10.0:
+ version "2.20.0"
+ resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz#1345a6fca3e8daefc10d0fa77067f54cedafd59a"
+ integrity sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==
+ dependencies:
+ generate-function "^2.0.0"
+ generate-object-property "^1.1.0"
+ is-my-ip-valid "^1.0.0"
+ jsonpointer "^4.0.0"
+ xtend "^4.0.0"
+
+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-ogg@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/is-ogg/-/is-ogg-1.1.2.tgz#956a0e023ce7b5c484fac0e2ff427834f6a76493"
+ integrity sha1-lWoOAjzntcSE+sDi/0J4NPanZJM=
+
+is-plain-obj@^1.1.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-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+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-promise@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+ integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
+
+is-property@^1.0.0, is-property@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+ integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=
+
+is-regex@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae"
+ integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==
+ dependencies:
+ has "^1.0.3"
+
+is-relative@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5"
+ integrity sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=
+ dependencies:
+ is-unc-path "^0.1.1"
+
+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, is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-symbol@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937"
+ integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
+ dependencies:
+ has-symbols "^1.0.1"
+
+is-typedarray@^1.0.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-unc-path@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9"
+ integrity sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=
+ dependencies:
+ unc-path-regex "^0.1.0"
+
+is-url@^1.2.2:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
+ integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
+
+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=
+
+is-wav@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/is-wav/-/is-wav-1.1.2.tgz#d9caccf355a834d7f5b828f009811d097d54050e"
+ integrity sha1-2crM81WoNNf1uCjwCYEdCX1UBQ4=
+
+is-windows@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c"
+ integrity sha1-3hqm1j6indJIc3tp8f+LgALSEIw=
+
+is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+ integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
+
+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=
+
+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=
+
+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"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+isomorphic-fetch@^2.1.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
+ integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
+ dependencies:
+ node-fetch "^1.0.1"
+ whatwg-fetch ">=0.10.0"
+
+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-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49"
+ integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==
+
+istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630"
+ integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==
+ dependencies:
+ "@babel/generator" "^7.4.0"
+ "@babel/parser" "^7.4.3"
+ "@babel/template" "^7.4.0"
+ "@babel/traverse" "^7.4.3"
+ "@babel/types" "^7.4.0"
+ istanbul-lib-coverage "^2.0.5"
+ semver "^6.0.0"
+
+istanbul-lib-report@^2.0.4:
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33"
+ integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==
+ dependencies:
+ istanbul-lib-coverage "^2.0.5"
+ make-dir "^2.1.0"
+ supports-color "^6.1.0"
+
+istanbul-lib-source-maps@^3.0.1:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8"
+ integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==
+ dependencies:
+ debug "^4.1.1"
+ istanbul-lib-coverage "^2.0.5"
+ make-dir "^2.1.0"
+ rimraf "^2.6.3"
+ source-map "^0.6.1"
+
+istanbul-reports@^2.2.6:
+ version "2.2.6"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af"
+ integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==
+ dependencies:
+ handlebars "^4.1.2"
+
+jest-changed-files@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039"
+ integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ execa "^1.0.0"
+ throat "^4.0.0"
+
+jest-cli@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af"
+ integrity sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==
+ dependencies:
+ "@jest/core" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ import-local "^2.0.0"
+ is-ci "^2.0.0"
+ jest-config "^24.9.0"
+ jest-util "^24.9.0"
+ jest-validate "^24.9.0"
+ prompts "^2.0.1"
+ realpath-native "^1.1.0"
+ yargs "^13.3.0"
+
+jest-config@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5"
+ integrity sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/test-sequencer" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ babel-jest "^24.9.0"
+ chalk "^2.0.1"
+ glob "^7.1.1"
+ jest-environment-jsdom "^24.9.0"
+ jest-environment-node "^24.9.0"
+ jest-get-type "^24.9.0"
+ jest-jasmine2 "^24.9.0"
+ jest-regex-util "^24.3.0"
+ jest-resolve "^24.9.0"
+ jest-util "^24.9.0"
+ jest-validate "^24.9.0"
+ micromatch "^3.1.10"
+ pretty-format "^24.9.0"
+ realpath-native "^1.1.0"
+
+jest-diff@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da"
+ integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==
+ dependencies:
+ chalk "^2.0.1"
+ diff-sequences "^24.9.0"
+ jest-get-type "^24.9.0"
+ pretty-format "^24.9.0"
+
+jest-docblock@^21.0.0:
+ version "21.2.0"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414"
+ integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==
+
+jest-docblock@^24.3.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2"
+ integrity sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==
+ dependencies:
+ detect-newline "^2.1.0"
+
+jest-each@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05"
+ integrity sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ jest-get-type "^24.9.0"
+ jest-util "^24.9.0"
+ pretty-format "^24.9.0"
+
+jest-environment-jsdom@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b"
+ integrity sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==
+ dependencies:
+ "@jest/environment" "^24.9.0"
+ "@jest/fake-timers" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ jest-mock "^24.9.0"
+ jest-util "^24.9.0"
+ jsdom "^11.5.1"
+
+jest-environment-node@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3"
+ integrity sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==
+ dependencies:
+ "@jest/environment" "^24.9.0"
+ "@jest/fake-timers" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ jest-mock "^24.9.0"
+ jest-util "^24.9.0"
+
+jest-get-type@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e"
+ integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==
+
+jest-haste-map@^24.7.1, jest-haste-map@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d"
+ integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ anymatch "^2.0.0"
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.1.15"
+ invariant "^2.2.4"
+ jest-serializer "^24.9.0"
+ jest-util "^24.9.0"
+ jest-worker "^24.9.0"
+ micromatch "^3.1.10"
+ sane "^4.0.3"
+ walker "^1.0.7"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+jest-jasmine2@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0"
+ integrity sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==
+ dependencies:
+ "@babel/traverse" "^7.1.0"
+ "@jest/environment" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ co "^4.6.0"
+ expect "^24.9.0"
+ is-generator-fn "^2.0.0"
+ jest-each "^24.9.0"
+ jest-matcher-utils "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-runtime "^24.9.0"
+ jest-snapshot "^24.9.0"
+ jest-util "^24.9.0"
+ pretty-format "^24.9.0"
+ throat "^4.0.0"
+
+jest-leak-detector@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a"
+ integrity sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==
+ dependencies:
+ jest-get-type "^24.9.0"
+ pretty-format "^24.9.0"
+
+jest-matcher-utils@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073"
+ integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==
+ dependencies:
+ chalk "^2.0.1"
+ jest-diff "^24.9.0"
+ jest-get-type "^24.9.0"
+ pretty-format "^24.9.0"
+
+jest-message-util@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3"
+ integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/stack-utils" "^1.0.1"
+ chalk "^2.0.1"
+ micromatch "^3.1.10"
+ slash "^2.0.0"
+ stack-utils "^1.0.1"
+
+jest-mock@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6"
+ integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==
+ dependencies:
+ "@jest/types" "^24.9.0"
+
+jest-pnp-resolver@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a"
+ integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==
+
+jest-regex-util@^24.3.0, jest-regex-util@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636"
+ integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==
+
+jest-resolve-dependencies@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab"
+ integrity sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ jest-regex-util "^24.3.0"
+ jest-snapshot "^24.9.0"
+
+jest-resolve@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321"
+ integrity sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ browser-resolve "^1.11.3"
+ chalk "^2.0.1"
+ jest-pnp-resolver "^1.2.1"
+ realpath-native "^1.1.0"
+
+jest-runner@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42"
+ integrity sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==
+ dependencies:
+ "@jest/console" "^24.7.1"
+ "@jest/environment" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.4.2"
+ exit "^0.1.2"
+ graceful-fs "^4.1.15"
+ jest-config "^24.9.0"
+ jest-docblock "^24.3.0"
+ jest-haste-map "^24.9.0"
+ jest-jasmine2 "^24.9.0"
+ jest-leak-detector "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-resolve "^24.9.0"
+ jest-runtime "^24.9.0"
+ jest-util "^24.9.0"
+ jest-worker "^24.6.0"
+ source-map-support "^0.5.6"
+ throat "^4.0.0"
+
+jest-runtime@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac"
+ integrity sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==
+ dependencies:
+ "@jest/console" "^24.7.1"
+ "@jest/environment" "^24.9.0"
+ "@jest/source-map" "^24.3.0"
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/yargs" "^13.0.0"
+ chalk "^2.0.1"
+ exit "^0.1.2"
+ glob "^7.1.3"
+ graceful-fs "^4.1.15"
+ jest-config "^24.9.0"
+ jest-haste-map "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-mock "^24.9.0"
+ jest-regex-util "^24.3.0"
+ jest-resolve "^24.9.0"
+ jest-snapshot "^24.9.0"
+ jest-util "^24.9.0"
+ jest-validate "^24.9.0"
+ realpath-native "^1.1.0"
+ slash "^2.0.0"
+ strip-bom "^3.0.0"
+ yargs "^13.3.0"
+
+jest-serializer@^24.4.0, jest-serializer@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73"
+ integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==
+
+jest-snapshot@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba"
+ integrity sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==
+ dependencies:
+ "@babel/types" "^7.0.0"
+ "@jest/types" "^24.9.0"
+ chalk "^2.0.1"
+ expect "^24.9.0"
+ jest-diff "^24.9.0"
+ jest-get-type "^24.9.0"
+ jest-matcher-utils "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-resolve "^24.9.0"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ pretty-format "^24.9.0"
+ semver "^6.2.0"
+
+jest-util@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162"
+ integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==
+ dependencies:
+ "@jest/console" "^24.9.0"
+ "@jest/fake-timers" "^24.9.0"
+ "@jest/source-map" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ callsites "^3.0.0"
+ chalk "^2.0.1"
+ graceful-fs "^4.1.15"
+ is-ci "^2.0.0"
+ mkdirp "^0.5.1"
+ slash "^2.0.0"
+ source-map "^0.6.0"
+
+jest-validate@^24.7.0, jest-validate@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab"
+ integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ camelcase "^5.3.1"
+ chalk "^2.0.1"
+ jest-get-type "^24.9.0"
+ leven "^3.1.0"
+ pretty-format "^24.9.0"
+
+jest-watcher@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b"
+ integrity sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==
+ dependencies:
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/yargs" "^13.0.0"
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.1"
+ jest-util "^24.9.0"
+ string-length "^2.0.0"
+
+jest-worker@^24.6.0, jest-worker@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5"
+ integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==
+ dependencies:
+ merge-stream "^2.0.0"
+ supports-color "^6.1.0"
+
+jest@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171"
+ integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==
+ dependencies:
+ import-local "^2.0.0"
+ jest-cli "^24.9.0"
+
+jetifier@^1.6.2:
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-1.6.5.tgz#ea87324a4230bef20a9651178ecab978ee54a8cb"
+ integrity sha512-T7yzBSu9PR+DqjYt+I0KVO1XTb1QhAfHnXV5Nd3xpbXM6Xg4e3vP60Q4qkNU8Fh6PHC2PivPUNN3rY7G2MxcDQ==
+
+js-base64@^2.1.8:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121"
+ integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^3.13.1, js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4:
+ version "3.13.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
+ integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+
+jsc-android@^245459.0.0:
+ version "245459.0.0"
+ resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-245459.0.0.tgz#e584258dd0b04c9159a27fb104cd5d491fd202c9"
+ integrity sha512-wkjURqwaB1daNkDi2OYYbsLnIdC/lUM2nPXQKRs5pqEU9chDg435bjvo+LSaHotDENygHQDHe+ntUkkw2gwMtg==
+
+jsdom@^11.5.1:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8"
+ integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==
+ dependencies:
+ abab "^2.0.0"
+ acorn "^5.5.3"
+ acorn-globals "^4.1.0"
+ array-equal "^1.0.0"
+ cssom ">= 0.3.2 < 0.4.0"
+ cssstyle "^1.0.0"
+ data-urls "^1.0.0"
+ domexception "^1.0.1"
+ escodegen "^1.9.1"
+ html-encoding-sniffer "^1.0.2"
+ left-pad "^1.3.0"
+ nwsapi "^2.0.7"
+ parse5 "4.0.0"
+ pn "^1.1.0"
+ request "^2.87.0"
+ request-promise-native "^1.0.5"
+ sax "^1.2.4"
+ symbol-tree "^3.2.2"
+ tough-cookie "^2.3.4"
+ w3c-hr-time "^1.0.1"
+ webidl-conversions "^4.0.2"
+ whatwg-encoding "^1.0.3"
+ whatwg-mimetype "^2.1.0"
+ whatwg-url "^6.4.1"
+ ws "^5.2.0"
+ xml-name-validator "^3.0.0"
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+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-parse-better-errors@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+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-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+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-stable-stringify@~0.0.0:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45"
+ integrity sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=
+ 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=
+
+json5@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6"
+ integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==
+ dependencies:
+ minimist "^1.2.0"
+
+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"
+
+jsonfile@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66"
+ integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonfile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+ 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=
+
+jsonparse@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
+ integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=
+
+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"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+jss-camel-case@^6.0.0, jss-camel-case@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/jss-camel-case/-/jss-camel-case-6.1.0.tgz#ccb1ff8d6c701c02a1fed6fb6fb6b7896e11ce44"
+ integrity sha512-HPF2Q7wmNW1t79mCqSeU2vdd/vFFGpkazwvfHMOhPlMgXrJDzdj9viA2SaHk9ZbD5pfL63a8ylp4++irYbbzMQ==
+ dependencies:
+ hyphenate-style-name "^1.0.2"
+
+jss-compose@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/jss-compose/-/jss-compose-5.0.0.tgz#ce01b2e4521d65c37ea42cf49116e5f7ab596484"
+ integrity sha512-YofRYuiA0+VbeOw0VjgkyO380sA4+TWDrW52nSluD9n+1FWOlDzNbgpZ/Sb3Y46+DcAbOS21W5jo6SAqUEiuwA==
+ dependencies:
+ warning "^3.0.0"
+
+jss-default-unit@^8.0.2:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/jss-default-unit/-/jss-default-unit-8.0.2.tgz#cc1e889bae4c0b9419327b314ab1c8e2826890e6"
+ integrity sha512-WxNHrF/18CdoAGw2H0FqOEvJdREXVXLazn7PQYU7V6/BWkCV0GkmWsppNiExdw8dP4TU1ma1dT9zBNJ95feLmg==
+
+jss-expand@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/jss-expand/-/jss-expand-5.3.0.tgz#02be076efe650125c842f5bb6fb68786fe441ed6"
+ integrity sha512-NiM4TbDVE0ykXSAw6dfFmB1LIqXP/jdd0ZMnlvlGgEMkMt+weJIl8Ynq1DsuBY9WwkNyzWktdqcEW2VN0RAtQg==
+
+jss-extend@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/jss-extend/-/jss-extend-6.2.0.tgz#4af09d0b72fb98ee229970f8ca852fec1ca2a8dc"
+ integrity sha512-YszrmcB6o9HOsKPszK7NeDBNNjVyiW864jfoiHoMlgMIg2qlxKw70axZHqgczXHDcoyi/0/ikP1XaHDPRvYtEA==
+ dependencies:
+ warning "^3.0.0"
+
+jss-global@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/jss-global/-/jss-global-3.0.0.tgz#e19e5c91ab2b96353c227e30aa2cbd938cdaafa2"
+ integrity sha512-wxYn7vL+TImyQYGAfdplg7yaxnPQ9RaXY/cIA8hawaVnmmWxDHzBK32u1y+RAvWboa3lW83ya3nVZ/C+jyjZ5Q==
+
+jss-nested@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/jss-nested/-/jss-nested-6.0.1.tgz#ef992b79d6e8f63d939c4397b9d99b5cbbe824ca"
+ integrity sha512-rn964TralHOZxoyEgeq3hXY8hyuCElnvQoVrQwKHVmu55VRDd6IqExAx9be5HgK0yN/+hQdgAXQl/GUrBbbSTA==
+ dependencies:
+ warning "^3.0.0"
+
+jss-preset-default@^4.3.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/jss-preset-default/-/jss-preset-default-4.5.0.tgz#d3a457012ccd7a551312014e394c23c4b301cadd"
+ integrity sha512-qZbpRVtHT7hBPpZEBPFfafZKWmq3tA/An5RNqywDsZQGrlinIF/mGD9lmj6jGqu8GrED2SMHZ3pPKLmjCZoiaQ==
+ dependencies:
+ jss-camel-case "^6.1.0"
+ jss-compose "^5.0.0"
+ jss-default-unit "^8.0.2"
+ jss-expand "^5.3.0"
+ jss-extend "^6.2.0"
+ jss-global "^3.0.0"
+ jss-nested "^6.0.1"
+ jss-props-sort "^6.0.0"
+ jss-template "^1.0.1"
+ jss-vendor-prefixer "^7.0.0"
+
+jss-props-sort@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/jss-props-sort/-/jss-props-sort-6.0.0.tgz#9105101a3b5071fab61e2d85ea74cc22e9b16323"
+ integrity sha512-E89UDcrphmI0LzmvYk25Hp4aE5ZBsXqMWlkFXS0EtPkunJkRr+WXdCNYbXbksIPnKlBenGB9OxzQY+mVc70S+g==
+
+jss-template@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/jss-template/-/jss-template-1.0.1.tgz#09aed9d86cc547b07f53ef355d7e1777f7da430a"
+ integrity sha512-m5BqEWha17fmIVXm1z8xbJhY6GFJxNB9H68GVnCWPyGYfxiAgY9WTQyvDAVj+pYRgrXSOfN5V1T4+SzN1sJTeg==
+ dependencies:
+ warning "^3.0.0"
+
+jss-vendor-prefixer@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/jss-vendor-prefixer/-/jss-vendor-prefixer-7.0.0.tgz#0166729650015ef19d9f02437c73667231605c71"
+ integrity sha512-Agd+FKmvsI0HLcYXkvy8GYOw3AAASBUpsmIRvVQheps+JWaN892uFOInTr0DRydwaD91vSSUCU4NssschvF7MA==
+ dependencies:
+ css-vendor "^0.3.8"
+
+jss@^9.3.3, jss@^9.7.0:
+ version "9.8.7"
+ resolved "https://registry.yarnpkg.com/jss/-/jss-9.8.7.tgz#ed9763fc0f2f0260fc8260dac657af61e622ce05"
+ integrity sha512-awj3XRZYxbrmmrx9LUSj5pXSUfm12m8xzi/VKeqI1ZwWBtQ0kVPTs3vYs32t4rFw83CgFDukA8wKzOE9sMQnoQ==
+ dependencies:
+ is-in-browser "^1.1.3"
+ symbol-observable "^1.1.0"
+ warning "^3.0.0"
+
+jsx-ast-utils@^2.0.1:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f"
+ integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==
+ dependencies:
+ array-includes "^3.0.3"
+ object.assign "^4.1.0"
+
+keycode@^2.1.9:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04"
+ integrity sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ=
+
+kind-of@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44"
+ integrity sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ 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"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+ integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
+
+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"
+
+kleur@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+ integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
+known-css-properties@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.3.0.tgz#a3d135bbfc60ee8c6eacf2f7e7e6f2d4755e49a4"
+ integrity sha512-QMQcnKAiQccfQTqtBh/qwquGZ2XK/DXND1jrcN9M8gMMy99Gwla7GQjndVUsEqIaRyP6bsFRuhwRj5poafBGJQ==
+
+labeled-stream-splicer@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz#42a41a16abcd46fd046306cf4f2c3576fffb1c21"
+ integrity sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==
+ dependencies:
+ inherits "^2.0.1"
+ stream-splicer "^2.0.0"
+
+lazypipe@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/lazypipe/-/lazypipe-1.0.2.tgz#b66f64ed7fd8b04869f1f1bcb795dbbaa80e418c"
+ integrity sha512-CrU+NYdFHW8ElaeXCWz5IbmetiYVYq1fOCmpdAeZ8L+khbv1e7EnshyjlKqkO+pJbVPrsJQnHbVxEiLujG6qhQ==
+ dependencies:
+ stream-combiner "*"
+
+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"
+
+lcid@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
+ integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==
+ dependencies:
+ invert-kv "^2.0.0"
+
+left-pad@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e"
+ integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==
+
+leven@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
+ integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
+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"
+
+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"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
+load-json-file@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
+ integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^4.0.0"
+ pify "^3.0.0"
+ strip-bom "^3.0.0"
+
+localforage@^1.7.3:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.7.3.tgz#0082b3ca9734679e1bd534995bdd3b24cf10f204"
+ integrity sha512-1TulyYfc4udS7ECSBT2vwJksWbkwwTX8BzeUIiq8Y07Riy7bDAAnxDaPU/tWyOVmQAcWJIEIFP9lPfBGqVoPgQ==
+ dependencies:
+ lie "3.1.1"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+lodash.capitalize@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9"
+ integrity sha1-+CbJtOKoUR2E46yinbBeGk87cqk=
+
+lodash.kebabcase@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
+ integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY=
+
+lodash.memoize@~3.0.3:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f"
+ integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=
+
+lodash.sortby@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+ integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
+
+lodash.throttle@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
+ integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=
+
+lodash.unescape@4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
+ integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=
+
+lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0, lodash@~4.17.10:
+ version "4.17.15"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+ integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+
+log-symbols@^2.2.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"
+
+logkitty@^0.6.0:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/logkitty/-/logkitty-0.6.1.tgz#fe29209669d261539cbd6bb998a136fc92a1a05c"
+ integrity sha512-cHuXN8qUZuzX/7kB6VyS7kB4xyD24e8gyHXIFNhIv+fjW3P+jEXNUhj0o/7qWJtv7UZpbnPgUqzu/AZQ8RAqxQ==
+ dependencies:
+ ansi-fragments "^0.2.1"
+ dayjs "^1.8.15"
+ yargs "^12.0.5"
+
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.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"
+
+lru-cache@^4.0.1:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+ integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+ dependencies:
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
+make-dir@^2.0.0, make-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+ dependencies:
+ pify "^4.0.1"
+ semver "^5.6.0"
+
+makeerror@1.0.x:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
+ integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=
+ dependencies:
+ tmpl "1.0.x"
+
+map-age-cleaner@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
+ integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==
+ dependencies:
+ p-defer "^1.0.0"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+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=
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+material-bread@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/material-bread/-/material-bread-0.2.5.tgz#558dd7795acb38f6331535275d52ef03930fb001"
+ integrity sha512-Xn1YkC/BS6kg55SNiw4Fs8HDrt6f29CEhmrKyJglHegX/Fxku0+qrzcGELlK6VUHjurLuMxfoe19cBuoG4kzGg==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+ color "^3.1.0"
+ modal-enhanced-react-native-web "^0.2.0"
+ react-native-vector-icons "^6.2.0"
+
+material-ui@1.0.0-beta.40:
+ version "1.0.0-beta.40"
+ resolved "https://registry.yarnpkg.com/material-ui/-/material-ui-1.0.0-beta.40.tgz#eaf0a0b264739c2c4d2cfe82fe100338814962bb"
+ integrity sha512-2hVbeKtAw3Wk2o2EXPMs18K+fEz+oPJrO4AN0JiwjLAiRYsiRIdjeuSx7LWU3z+PuO6+8hh/rrvCcVWwOPV9Gw==
+ dependencies:
+ "@types/jss" "^9.3.0"
+ "@types/react-transition-group" "^2.0.6"
+ babel-runtime "^6.26.0"
+ brcast "^3.0.1"
+ classnames "^2.2.5"
+ deepmerge "^2.0.1"
+ dom-helpers "^3.2.1"
+ hoist-non-react-statics "^2.5.0"
+ jss "^9.3.3"
+ jss-camel-case "^6.0.0"
+ jss-default-unit "^8.0.2"
+ jss-global "^3.0.0"
+ jss-nested "^6.0.1"
+ jss-props-sort "^6.0.0"
+ jss-vendor-prefixer "^7.0.0"
+ keycode "^2.1.9"
+ lodash "^4.2.0"
+ normalize-scroll-left "^0.1.2"
+ prop-types "^15.6.0"
+ react-event-listener "^0.5.1"
+ react-jss "^8.1.0"
+ react-lifecycles-compat "^1.0.2"
+ react-popper "^0.8.0"
+ react-scrollbar-size "^2.0.2"
+ react-transition-group "^2.2.1"
+ recompose "^0.26.0"
+ scroll "^2.0.3"
+ warning "^3.0.0"
+
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+mdn-data@2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978"
+ integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==
+
+mem@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
+ integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=
+ dependencies:
+ mimic-fn "^1.0.0"
+
+mem@^4.0.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
+ integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==
+ dependencies:
+ map-age-cleaner "^0.1.1"
+ mimic-fn "^2.0.0"
+ p-is-promise "^2.0.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"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+merge-stream@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
+ integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=
+ dependencies:
+ readable-stream "^2.0.1"
+
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
+merge@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
+ integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==
+
+methods@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
+
+metro-babel-register@0.56.3, metro-babel-register@^0.56.0:
+ version "0.56.3"
+ resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.56.3.tgz#d0cfb38adf45cb35965649ede794f2308562e20f"
+ integrity sha512-ILCRtNFdW6vzqmLAG2MYWdTSE1vCAZqDKNggiNhlfViuoxmWAIL0vOqixl1CHZF5z4t55+fk46A0jSN7UgPyVw==
+ dependencies:
+ "@babel/core" "^7.0.0"
+ "@babel/plugin-proposal-class-properties" "^7.0.0"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0"
+ "@babel/plugin-proposal-object-rest-spread" "^7.0.0"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.0.0"
+ "@babel/plugin-proposal-optional-chaining" "^7.0.0"
+ "@babel/plugin-transform-async-to-generator" "^7.0.0"
+ "@babel/plugin-transform-flow-strip-types" "^7.0.0"
+ "@babel/plugin-transform-modules-commonjs" "^7.0.0"
+ "@babel/register" "^7.0.0"
+ core-js "^2.2.2"
+ escape-string-regexp "^1.0.5"
+
+metro-babel-transformer@0.56.3:
+ version "0.56.3"
+ resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.56.3.tgz#6559c3a8565238a704a181353cef59fdb974e6db"
+ integrity sha512-N5/ftb3rBkt6uKlgYAv+lwtzYc4dK0tBpfZ8pjec3kcypGuGTuf4LTHEh65EuzySreLngYI0bQzoFSn3G3DYsw==
+ dependencies:
+ "@babel/core" "^7.0.0"
+ metro-source-map "0.56.3"
+
+metro-cache@0.56.3:
+ version "0.56.3"
+ resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.56.3.tgz#1b0759bc45291cc3ffc77736c09dcfbd322edb8b"
+ integrity sha512-SsryVe/TVkt2IkEGnYhB3gQlg9iMlu8WJikQHcCEjMfPEnSIzmeymrX73fwQNPnTnN7F3E0HVjH6Wvq6fh0mcA==
+ dependencies:
+ jest-serializer "^24.4.0"
+ metro-core "0.56.3"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+
+metro-config@0.56.3, metro-config@^0.56.0:
+ version "0.56.3"
+ resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.56.3.tgz#b16e600817c58c768946f24b039d2a1ba6a67651"
+ integrity sha512-C3ZLA5y5gW5auDSQN5dsCTduJg7LXEiX/tLAADOkgXWVImr5P74x9Wt8y1MMWrKx6p+4p5RMDyEwWDMXJt/DwA==
+ dependencies:
+ cosmiconfig "^5.0.5"
+ jest-validate "^24.7.0"
+ metro "0.56.3"
+ metro-cache "0.56.3"
+ metro-core "0.56.3"
+ pretty-format "^24.7.0"
+
+metro-core@0.56.3, metro-core@^0.56.0:
+ version "0.56.3"
+ resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.56.3.tgz#34bb3a92621fd9b1ed3e6a01c6a4324fbb1201d9"
+ integrity sha512-OAaHP3mBdlACMZRwDJzZzYC0o2S3qfb4BBK75L8H4Ds+y3QUSrjsDEpHACcpaMTOds8rBvjzn+jjB5tqNoHfBA==
+ dependencies:
+ jest-haste-map "^24.7.1"
+ lodash.throttle "^4.1.1"
+ metro-resolver "0.56.3"
+ wordwrap "^1.0.0"
+
+metro-inspector-proxy@0.56.3:
+ version "0.56.3"
+ resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.56.3.tgz#48046f9e3f7153be2409e0bee9252dede932ac39"
+ integrity sha512-7WtHinw+VJcunQ3q8El1MqqzYSRvXEjW5QE13VYwcLtnay3pvcqACeiQmGbWI0IqxB1+QH8tf3nkA7z7pQ7Vpw==
+ dependencies:
+ connect "^3.6.5"
+ debug "^2.2.0"
+ rxjs "^5.4.3"
+ ws "^1.1.5"
+ yargs "^9.0.0"
+
+metro-minify-uglify@0.56.3:
+ version "0.56.3"
+ resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.56.3.tgz#763b26895f79d0589d3391dc94083d348cf9c2be"
+ integrity sha512-b9ljyeUpkJWVlFy8M/i4aNbvEBI0zN9vJh1jfU7yx+k9dX7FulLnpGmAQxxQdEszcM//sJrsKNS1oLYBxr0NMQ==
+ dependencies:
+ uglify-es "^3.1.9"
+
+metro-react-native-babel-preset@0.56.3:
+ version "0.56.3"
+ resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.56.3.tgz#5a1097c2f94e8ee0797a8ba2ab8f86d096f4c093"
+ integrity sha512-tGPzX2ZwI8vQ8SiNVBPUIgKqmaRNVB6rtJtHCBQZAYRiMbxh0NHCUoFfKBej6U5qVgxiYYHyN8oB23evG4/Oow==
+ dependencies:
+ "@babel/plugin-proposal-class-properties" "^7.0.0"
+ "@babel/plugin-proposal-export-default-from" "^7.0.0"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0"
+ "@babel/plugin-proposal-object-rest-spread" "^7.0.0"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.0.0"
+ "@babel/plugin-proposal-optional-chaining" "^7.0.0"
+ "@babel/plugin-syntax-dynamic-import" "^7.0.0"
+ "@babel/plugin-syntax-export-default-from" "^7.0.0"
+ "@babel/plugin-syntax-flow" "^7.2.0"
+ "@babel/plugin-transform-arrow-functions" "^7.0.0"
+ "@babel/plugin-transform-block-scoping" "^7.0.0"
+ "@babel/plugin-transform-classes" "^7.0.0"
+ "@babel/plugin-transform-computed-properties" "^7.0.0"
+ "@babel/plugin-transform-destructuring" "^7.0.0"
+ "@babel/plugin-transform-exponentiation-operator" "^7.0.0"
+ "@babel/plugin-transform-flow-strip-types" "^7.0.0"
+ "@babel/plugin-transform-for-of" "^7.0.0"
+ "@babel/plugin-transform-function-name" "^7.0.0"
+ "@babel/plugin-transform-literals" "^7.0.0"
+ "@babel/plugin-transform-modules-commonjs" "^7.0.0"
+ "@babel/plugin-transform-object-assign" "^7.0.0"
+ "@babel/plugin-transform-parameters" "^7.0.0"
+ "@babel/plugin-transform-react-display-name" "^7.0.0"
+ "@babel/plugin-transform-react-jsx" "^7.0.0"
+ "@babel/plugin-transform-react-jsx-source" "^7.0.0"
+ "@babel/plugin-transform-regenerator" "^7.0.0"
+ "@babel/plugin-transform-runtime" "^7.0.0"
+ "@babel/plugin-transform-shorthand-properties" "^7.0.0"
+ "@babel/plugin-transform-spread" "^7.0.0"
+ "@babel/plugin-transform-sticky-regex" "^7.0.0"
+ "@babel/plugin-transform-template-literals" "^7.0.0"
+ "@babel/plugin-transform-typescript" "^7.0.0"
+ "@babel/plugin-transform-unicode-regex" "^7.0.0"
+ "@babel/template" "^7.0.0"
+ react-refresh "^0.4.0"
+
+metro-react-native-babel-preset@^0.57.0:
+ version "0.57.0"
+ resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.57.0.tgz#bbbce26a20d9ca3fdc08f0df564bc982b82651b7"
+ integrity sha512-pvLh1QOwdxsjgYE2a+4aTKs3LSF3+t4jscxHtkND6wsJnKVVspLt8FkDaORa6zr3Fq12tVpEt5NJMdgtWqBpaA==
+ dependencies:
+ "@babel/plugin-proposal-class-properties" "^7.0.0"
+ "@babel/plugin-proposal-export-default-from" "^7.0.0"
+ "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0"
+ "@babel/plugin-proposal-object-rest-spread" "^7.0.0"
+ "@babel/plugin-proposal-optional-catch-binding" "^7.0.0"
+ "@babel/plugin-proposal-optional-chaining" "^7.0.0"
+ "@babel/plugin-syntax-dynamic-import" "^7.0.0"
+ "@babel/plugin-syntax-export-default-from" "^7.0.0"
+ "@babel/plugin-syntax-flow" "^7.2.0"
+ "@babel/plugin-transform-arrow-functions" "^7.0.0"
+ "@babel/plugin-transform-block-scoping" "^7.0.0"
+ "@babel/plugin-transform-classes" "^7.0.0"
+ "@babel/plugin-transform-computed-properties" "^7.0.0"
+ "@babel/plugin-transform-destructuring" "^7.0.0"
+ "@babel/plugin-transform-exponentiation-operator" "^7.0.0"
+ "@babel/plugin-transform-flow-strip-types" "^7.0.0"
+ "@babel/plugin-transform-for-of" "^7.0.0"
+ "@babel/plugin-transform-function-name" "^7.0.0"
+ "@babel/plugin-transform-literals" "^7.0.0"
+ "@babel/plugin-transform-modules-commonjs" "^7.0.0"
+ "@babel/plugin-transform-object-assign" "^7.0.0"
+ "@babel/plugin-transform-parameters" "^7.0.0"
+ "@babel/plugin-transform-react-display-name" "^7.0.0"
+ "@babel/plugin-transform-react-jsx" "^7.0.0"
+ "@babel/plugin-transform-react-jsx-source" "^7.0.0"
+ "@babel/plugin-transform-regenerator" "^7.0.0"
+ "@babel/plugin-transform-runtime" "^7.0.0"
+ "@babel/plugin-transform-shorthand-properties" "^7.0.0"
+ "@babel/plugin-transform-spread" "^7.0.0"
+ "@babel/plugin-transform-sticky-regex" "^7.0.0"
+ "@babel/plugin-transform-template-literals" "^7.0.0"
+ "@babel/plugin-transform-typescript" "^7.0.0"
+ "@babel/plugin-transform-unicode-regex" "^7.0.0"
+ "@babel/template" "^7.0.0"
+ react-refresh "^0.4.0"
+
+metro-react-native-babel-transformer@^0.56.0:
+ version "0.56.3"
+ resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.56.3.tgz#e68205230be65c07290b932f7684226013dae310"
+ integrity sha512-T87m4jDu0gIvJo8kWEvkodWFgQ8XBzJUESs1hUUTBSMIqTa31MdWfA1gs+MipadG7OsEJpcb9m83mGr8K70MWw==
+ dependencies:
+ "@babel/core" "^7.0.0"
+ babel-preset-fbjs "^3.1.2"
+ metro-babel-transformer "0.56.3"
+ metro-react-native-babel-preset "0.56.3"
+ metro-source-map "0.56.3"
+
+metro-resolver@0.56.3:
+ version "0.56.3"
+ resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.56.3.tgz#f18978b919a5ecc67028732609a564880715ef75"
+ integrity sha512-VvMl4xUp0fy76WiP3YDtzMmrn6tN/jwxOBqlTy9MjN6R9sUXrGyO5thwn/uKQqp5vwBTuJev7nZL7OKzwludKA==
+ dependencies:
+ absolute-path "^0.0.0"
+
+metro-source-map@0.56.3, metro-source-map@^0.56.0:
+ version "0.56.3"
+ resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.56.3.tgz#0cadc9f9eca9ece224a6fd28b9e4fa3a9834e24c"
+ integrity sha512-CheqWbJZSM0zjcNBqELUiocwH3XArrOk6alhVuzJ2gV/WTMBQFwP0TtQssSMwjnouMHNEzY8RxErXKXBk/zJmQ==
+ dependencies:
+ "@babel/traverse" "^7.0.0"
+ "@babel/types" "^7.0.0"
+ invariant "^2.2.4"
+ metro-symbolicate "0.56.3"
+ ob1 "0.56.3"
+ source-map "^0.5.6"
+ vlq "^1.0.0"
+
+metro-symbolicate@0.56.3:
+ version "0.56.3"
+ resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.56.3.tgz#20f9dc52fab3209903715716402692b3ac16831c"
+ integrity sha512-fSQtjjy4eiJDThSl9eloxMElhrs+5PQB+DKKzmTFXT8e2GDga+pa1xTBFRUACMO8BXGuWmxR7SnGDw0wo5Ngrw==
+ dependencies:
+ invariant "^2.2.4"
+ metro-source-map "0.56.3"
+ source-map "^0.5.6"
+ through2 "^2.0.1"
+ vlq "^1.0.0"
+
+metro@0.56.3, metro@^0.56.0:
+ version "0.56.3"
+ resolved "https://registry.yarnpkg.com/metro/-/metro-0.56.3.tgz#3a38706bf6b1200421e871a4c53ddc2f359f65a9"
+ integrity sha512-mxHpvBGWanZ46wAEZVLinNO5IYMcFbTdMZIRhC7r+rvoSK6r9iPj95AujBfzLXMAl36RI2O3D7yp5hOYif/gEQ==
+ dependencies:
+ "@babel/core" "^7.0.0"
+ "@babel/generator" "^7.0.0"
+ "@babel/parser" "^7.0.0"
+ "@babel/plugin-external-helpers" "^7.0.0"
+ "@babel/template" "^7.0.0"
+ "@babel/traverse" "^7.0.0"
+ "@babel/types" "^7.0.0"
+ absolute-path "^0.0.0"
+ async "^2.4.0"
+ babel-preset-fbjs "^3.1.2"
+ buffer-crc32 "^0.2.13"
+ chalk "^2.4.1"
+ concat-stream "^1.6.0"
+ connect "^3.6.5"
+ debug "^2.2.0"
+ denodeify "^1.2.1"
+ eventemitter3 "^3.0.0"
+ fbjs "^1.0.0"
+ fs-extra "^1.0.0"
+ graceful-fs "^4.1.3"
+ image-size "^0.6.0"
+ invariant "^2.2.4"
+ jest-haste-map "^24.7.1"
+ jest-worker "^24.6.0"
+ json-stable-stringify "^1.0.1"
+ lodash.throttle "^4.1.1"
+ merge-stream "^1.0.1"
+ metro-babel-register "0.56.3"
+ metro-babel-transformer "0.56.3"
+ metro-cache "0.56.3"
+ metro-config "0.56.3"
+ metro-core "0.56.3"
+ metro-inspector-proxy "0.56.3"
+ metro-minify-uglify "0.56.3"
+ metro-react-native-babel-preset "0.56.3"
+ metro-resolver "0.56.3"
+ metro-source-map "0.56.3"
+ metro-symbolicate "0.56.3"
+ mime-types "2.1.11"
+ mkdirp "^0.5.1"
+ node-fetch "^2.2.0"
+ nullthrows "^1.1.0"
+ resolve "^1.5.0"
+ rimraf "^2.5.4"
+ serialize-error "^2.1.0"
+ source-map "^0.5.6"
+ temp "0.8.3"
+ throat "^4.1.0"
+ wordwrap "^1.0.0"
+ write-file-atomic "^1.2.0"
+ ws "^1.1.5"
+ xpipe "^1.0.5"
+ yargs "^9.0.0"
+
+micromatch@^3.1.10, micromatch@^3.1.4:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+mime-db@1.42.0, "mime-db@>= 1.40.0 < 2":
+ version "1.42.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac"
+ integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==
+
+mime-db@~1.23.0:
+ version "1.23.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659"
+ integrity sha1-oxtAcK2uon1zLqMzdApk0OyaZlk=
+
+mime-types@2.1.11:
+ version "2.1.11"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c"
+ integrity sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw=
+ dependencies:
+ mime-db "~1.23.0"
+
+mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24:
+ version "2.1.25"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437"
+ integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==
+ dependencies:
+ mime-db "1.42.0"
+
+mime@1.6.0, mime@^1.4.1:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mime@^2.4.1:
+ version "2.4.4"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5"
+ integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==
+
+mimic-fn@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+ integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
+mimic-fn@^2.0.0, mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+min-document@^2.19.0:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
+ integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=
+ dependencies:
+ dom-walk "^0.1.0"
+
+mini-create-react-context@^0.3.0:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz#79fc598f283dd623da8e088b05db8cddab250189"
+ integrity sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw==
+ dependencies:
+ "@babel/runtime" "^7.4.0"
+ gud "^1.0.0"
+ tiny-warning "^1.0.2"
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+
+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"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@1.1.x:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8"
+ integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=
+
+minimist@^1.1.0, minimist@^1.1.1, 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=
+
+minimist@~0.0.1:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+ integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
+
+mixin-deep@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+"mkdirp@>=0.5 0", 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"
+
+mkdirp@~0.3.5:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.5.tgz#de3e5f8961c88c787ee1368df849ac4413eca8d7"
+ integrity sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=
+
+modal-enhanced-react-native-web@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/modal-enhanced-react-native-web/-/modal-enhanced-react-native-web-0.2.0.tgz#767d6e8d78da4a6d34e80d9da49bc192016aaca1"
+ integrity sha512-ZJGTt12wqId068TjHNw0yyHEkTlVrZX+mqtr6hpRchH2v4na/UFxOHz+YF86mJ7+LN20UlqpkYVmKWJPw+CO5Q==
+
+module-deps@^6.0.0:
+ version "6.2.2"
+ resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.2.2.tgz#d8a15c2265dfc119153c29bb47386987d0ee423b"
+ integrity sha512-a9y6yDv5u5I4A+IPHTnqFxcaKr4p50/zxTjcQJaX2ws9tN/W6J6YXnEKhqRyPhl494dkcxx951onSKVezmI+3w==
+ dependencies:
+ JSONStream "^1.0.3"
+ browser-resolve "^1.7.0"
+ cached-path-relative "^1.0.2"
+ concat-stream "~1.6.0"
+ defined "^1.0.0"
+ detective "^5.2.0"
+ duplexer2 "^0.1.2"
+ inherits "^2.0.1"
+ parents "^1.0.0"
+ readable-stream "^2.0.2"
+ resolve "^1.4.0"
+ stream-combiner2 "^1.1.1"
+ subarg "^1.0.0"
+ through2 "^2.0.0"
+ xtend "^4.0.0"
+
+moment-duration-format@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/moment-duration-format/-/moment-duration-format-2.3.2.tgz#5fa2b19b941b8d277122ff3f87a12895ec0d6212"
+ integrity sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ==
+
+moment@^2.24.0:
+ version "2.24.0"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
+ integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
+
+morgan@^1.9.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59"
+ integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==
+ dependencies:
+ basic-auth "~2.0.0"
+ debug "2.6.9"
+ depd "~1.1.2"
+ on-finished "~2.3.0"
+ on-headers "~1.0.1"
+
+mp3@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/mp3/-/mp3-0.1.0.tgz#e53e4723e34698ee3ffddcdb60bf88356a4910c1"
+ integrity sha1-5T5HI+NGmO4//dzbYL+INWpJEME=
+
+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@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+ integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+
+ms@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+murmurhash-js@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51"
+ integrity sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E=
+
+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=
+
+mute-stream@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+ integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+
+mute-stream@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
+ integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
+
+nan@^2.12.1, nan@^2.13.2, nan@^2.14.0, nan@^2.2.0:
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
+ integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+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=
+
+negotiator@0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
+ integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
+
+neo-async@^2.6.0:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
+ integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
+
+next-tick@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
+ integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
+
+nice-try@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+node-fetch@^1.0.1:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
+ integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
+ dependencies:
+ encoding "^0.1.11"
+ is-stream "^1.0.1"
+
+node-fetch@^2.2.0, node-fetch@^2.5.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
+ integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
+
+node-gyp@^3.8.0:
+ version "3.8.0"
+ resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c"
+ integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==
+ dependencies:
+ fstream "^1.0.0"
+ glob "^7.0.3"
+ graceful-fs "^4.1.2"
+ mkdirp "^0.5.0"
+ nopt "2 || 3"
+ npmlog "0 || 1 || 2 || 3 || 4"
+ osenv "0"
+ request "^2.87.0"
+ rimraf "2"
+ semver "~5.3.0"
+ tar "^2.0.0"
+ which "1"
+
+node-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+ integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
+
+node-modules-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
+ integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
+
+node-notifier@^5.2.1, node-notifier@^5.4.2:
+ version "5.4.3"
+ resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50"
+ integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==
+ dependencies:
+ growly "^1.3.0"
+ is-wsl "^1.1.0"
+ semver "^5.5.0"
+ shellwords "^0.1.1"
+ which "^1.3.0"
+
+node-sass@^4.13.0:
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.0.tgz#b647288babdd6a1cb726de4545516b31f90da066"
+ integrity sha512-W1XBrvoJ1dy7VsvTAS5q1V45lREbTlZQqFbiHb3R3OTTCma0XBtuG6xZ6Z4506nR4lmHPTqVRwxT6KgtWC97CA==
+ dependencies:
+ async-foreach "^0.1.3"
+ chalk "^1.1.1"
+ cross-spawn "^3.0.0"
+ gaze "^1.0.0"
+ get-stdin "^4.0.1"
+ glob "^7.0.3"
+ in-publish "^2.0.0"
+ lodash "^4.17.15"
+ meow "^3.7.0"
+ mkdirp "^0.5.1"
+ nan "^2.13.2"
+ node-gyp "^3.8.0"
+ npmlog "^4.0.0"
+ request "^2.88.0"
+ sass-graph "^2.2.4"
+ stdout-stream "^1.4.0"
+ "true-case-path" "^1.0.2"
+
+"nopt@2 || 3":
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
+ dependencies:
+ abbrev "1"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ resolve "^1.10.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.1.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-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-scroll-left@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/normalize-scroll-left/-/normalize-scroll-left-0.1.2.tgz#6b79691ba79eb5fb107fa5edfbdc06b55caee2aa"
+ integrity sha512-F9YMRls0zCF6BFIE2YnXDRpHPpfd91nOIaNdDgrx5YMoPLo8Wqj+6jNXHQsYBavJeXP4ww8HCt0xQAKc5qk2Fg==
+
+notifyjs@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/notifyjs/-/notifyjs-3.0.0.tgz#7418c9d6c0533aebaa643414214af53b521d1b28"
+ integrity sha1-dBjJ1sBTOuuqZDQUIUr1O1IdGyg=
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
+"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0:
+ 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"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+nth-check@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+ integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
+ dependencies:
+ boolbase "~1.0.0"
+
+nullthrows@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1"
+ integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==
+
+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=
+
+nwsapi@^2.0.7:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
+ integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
+
+oauth-sign@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+ob1@0.56.3:
+ version "0.56.3"
+ resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.56.3.tgz#5829e446587c9bf89c22ece4f3757b29f2ccfd18"
+ integrity sha512-3JL2ZyWOHDGTEAe4kcG+TxhGPKCCikgyoUIjE82JnXnmpR1LXItM9K3WhGsi4+O7oYngMW6FjpHHoc5xJTMkTQ==
+
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-inspect@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67"
+ integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==
+
+object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
+ integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.1.1"
+ has-symbols "^1.0.0"
+ object-keys "^1.0.11"
+
+object.fromentries@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9"
+ integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+
+object.getownpropertydescriptors@^2.0.3:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649"
+ integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.0-next.1"
+
+object.omit@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-3.0.0.tgz#0e3edc2fce2ba54df5577ff529f6d97bd8a522af"
+ integrity sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==
+ dependencies:
+ is-extendable "^1.0.0"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+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"
+
+on-headers@~1.0.1, on-headers@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+ integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ 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=
+
+onetime@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+ integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+ dependencies:
+ mimic-fn "^1.0.0"
+
+onetime@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
+ integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
+ dependencies:
+ mimic-fn "^2.1.0"
+
+open@^6.2.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9"
+ integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==
+ dependencies:
+ is-wsl "^1.1.0"
+
+optimist@^0.6.1:
+ 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"
+
+optionator@^0.8.1, optionator@^0.8.3:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
+ integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.6"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ word-wrap "~1.2.3"
+
+options@>=0.0.5:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"
+ integrity sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=
+
+ora@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318"
+ integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==
+ dependencies:
+ chalk "^2.4.2"
+ cli-cursor "^2.1.0"
+ cli-spinners "^2.0.0"
+ log-symbols "^2.2.0"
+ strip-ansi "^5.2.0"
+ wcwidth "^1.0.1"
+
+os-browserify@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+ integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
+
+os-homedir@^1.0.0:
+ 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-locale@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
+ integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==
+ dependencies:
+ execa "^0.7.0"
+ lcid "^1.0.0"
+ mem "^1.1.0"
+
+os-locale@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
+ integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
+ dependencies:
+ execa "^1.0.0"
+ lcid "^2.0.0"
+ mem "^4.0.0"
+
+os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
+ 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:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+outpipe@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/outpipe/-/outpipe-1.1.1.tgz#50cf8616365e87e031e29a5ec9339a3da4725fa2"
+ integrity sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=
+ dependencies:
+ shell-quote "^1.4.2"
+
+p-defer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
+ integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
+
+p-each-series@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71"
+ integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=
+ dependencies:
+ p-reduce "^1.0.0"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-is-promise@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
+ integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+ dependencies:
+ p-try "^1.0.0"
+
+p-limit@^2.0.0, p-limit@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537"
+ integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+ dependencies:
+ p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-reduce@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
+ integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+pako@~1.0.5:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732"
+ integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parents@^1.0.0, parents@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751"
+ integrity sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=
+ dependencies:
+ path-platform "~0.11.15"
+
+parse-asn1@^5.0.0:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e"
+ integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+ safe-buffer "^5.1.1"
+
+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"
+
+parse-json@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+ dependencies:
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+
+parse-node-version@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
+ integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
+
+parse5@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
+ integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==
+
+parseurl@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+ integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-browserify@~0.0.0:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
+
+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-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+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-key@^2.0.0, path-key@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-parse@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+path-platform@~0.11.15:
+ version "0.11.15"
+ resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2"
+ integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=
+
+path-to-regexp@^1.7.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a"
+ integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==
+ dependencies:
+ isarray "0.0.1"
+
+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"
+ pinkie-promise "^2.0.0"
+
+path-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
+ dependencies:
+ pify "^2.0.0"
+
+path-type@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+ integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
+ dependencies:
+ pify "^3.0.0"
+
+pbkdf2@^3.0.3:
+ version "3.0.17"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
+ integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+pcm-convert@^1.6.0:
+ version "1.6.5"
+ resolved "https://registry.yarnpkg.com/pcm-convert/-/pcm-convert-1.6.5.tgz#81b5f2d0c2fb386edb8b9f69ce2374e093aeb7cc"
+ integrity sha512-5CEspU4j8aEQ80AhNbcLfpT0apc93E6endFxahWd4sV70I6PN7LPdz8GoYm/1qr400K9bUVsVA+KxNgbFROZPw==
+ dependencies:
+ audio-format "^2.3.2"
+ is-audio-buffer "^1.0.11"
+ is-buffer "^1.1.5"
+ object-assign "^4.1.1"
+
+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=
+
+pick-by-alias@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pick-by-alias/-/pick-by-alias-1.2.0.tgz#5f7cb2b1f21a6e1e884a0c87855aa4a37361107b"
+ integrity sha1-X3yysfIabh6ISgyHhVqko3NhEHs=
+
+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=
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+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=
+
+pirates@^4.0.0, pirates@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
+ integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
+ dependencies:
+ node-modules-regexp "^1.0.0"
+
+pkg-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+ integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+ dependencies:
+ find-up "^3.0.0"
+
+plist@^3.0.0, plist@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c"
+ integrity sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==
+ dependencies:
+ base64-js "^1.2.3"
+ xmlbuilder "^9.0.7"
+ xmldom "0.1.x"
+
+plugin-error@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace"
+ integrity sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=
+ dependencies:
+ ansi-cyan "^0.1.1"
+ ansi-red "^0.1.1"
+ arr-diff "^1.0.1"
+ arr-union "^2.0.1"
+ extend-shallow "^1.1.2"
+
+pluralize@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
+ integrity sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=
+
+pn@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
+ integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==
+
+popper.js@^1.12.9:
+ version "1.16.0"
+ resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.0.tgz#2e1816bcbbaa518ea6c2e15a466f4cb9c6e2fbb3"
+ integrity sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw==
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+postcss-value-parser@^3.3.0:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
+ integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
+
+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=
+
+prettier@1.16.4:
+ version "1.16.4"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.4.tgz#73e37e73e018ad2db9c76742e2647e21790c9717"
+ integrity sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==
+
+pretty-format@^24.7.0, pretty-format@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9"
+ integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ ansi-regex "^4.0.0"
+ ansi-styles "^3.2.0"
+ react-is "^16.8.4"
+
+private@^0.1.6:
+ 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@^2.0.0, process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+process@~0.11.0:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
+process@~0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
+ integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=
+
+progress@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
+ integrity sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=
+
+progress@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise@^7.1.1:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
+ integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
+ dependencies:
+ asap "~2.0.3"
+
+prompts@^2.0.1:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.0.tgz#a444e968fa4cc7e86689a74050685ac8006c4cc4"
+ integrity sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg==
+ dependencies:
+ kleur "^3.0.3"
+ sisteransi "^1.0.3"
+
+prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
+ version "15.7.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.8.1"
+
+pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+ integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+psl@^1.1.24, psl@^1.1.28:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.6.0.tgz#60557582ee23b6c43719d9890fb4170ecd91e110"
+ integrity sha512-SYKKmVel98NCOYXpkwUqZqh0ahZeeKfmisiLIcEZdsb+WbLv02g/dI5BUmZnIyOe7RzZtLax81nnb2HbvC2tzA==
+
+public-encrypt@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+ integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+ safe-buffer "^5.1.2"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+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.3.2, punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0, punycode@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+qs@6.x, qs@^6.5.1:
+ version "6.9.1"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.1.tgz#20082c65cb78223635ab1a9eaca8875a29bf8ec9"
+ integrity sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA==
+
+qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+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:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+rafl@~1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/rafl/-/rafl-1.2.2.tgz#fe930f758211020d47e38815f5196a8be4150740"
+ integrity sha1-/pMPdYIRAg1H44gV9Rlqi+QVB0A=
+ dependencies:
+ global "~4.3.0"
+
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+ integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
+range-parser@~1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+ integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+react-devtools-core@^3.6.3:
+ version "3.6.3"
+ resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.6.3.tgz#977d95b684c6ad28205f0c62e1e12c5f16675814"
+ integrity sha512-+P+eFy/yo8Z/UH9J0DqHZuUM5+RI2wl249TNvMx3J2jpUomLQa4Zxl56GEotGfw3PIP1eI+hVf1s53FlUONStQ==
+ dependencies:
+ shell-quote "^1.6.1"
+ ws "^3.3.1"
+
+react-event-listener@^0.5.1:
+ version "0.5.10"
+ resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.5.10.tgz#378403c555fe616f312891507a742ecbbe2c90de"
+ integrity sha512-YZklRszh9hq3WP3bdNLjFwJcTCVe7qyTf5+LWNaHfZQaZrptsefDK2B5HHpOsEEaMHvjllUPr0+qIFVTSsurow==
+ dependencies:
+ "@babel/runtime" "7.0.0-beta.42"
+ fbjs "^0.8.16"
+ prop-types "^15.6.0"
+ warning "^3.0.0"
+
+react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.9.0:
+ version "16.12.0"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c"
+ integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==
+
+react-jss@^8.1.0:
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/react-jss/-/react-jss-8.6.1.tgz#a06e2e1d2c4d91b4d11befda865e6c07fbd75252"
+ integrity sha512-SH6XrJDJkAphp602J14JTy3puB2Zxz1FkM3bKVE8wON+va99jnUTKWnzGECb3NfIn9JPR5vHykge7K3/A747xQ==
+ dependencies:
+ hoist-non-react-statics "^2.5.0"
+ jss "^9.7.0"
+ jss-preset-default "^4.3.0"
+ prop-types "^15.6.0"
+ theming "^1.3.0"
+
+react-lifecycles-compat@^1.0.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-1.1.4.tgz#fc005c72849b7ed364de20a0f64ff58ebdc2009a"
+ integrity sha512-g3pdexIqkn+CVvSpYIoyON8zUbF9kgfhp672gyz7wQ7PQyXVmJtah+GDYqpHpOrdwex3F77iv+alq79iux9HZw==
+
+react-lifecycles-compat@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
+ integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
+
+react-mixin@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/react-mixin/-/react-mixin-4.0.0.tgz#a19701338301c8bd06a864cb52520c7926d77cc9"
+ integrity sha512-CTCFBhCuS0FeoosmHXgpRaPiUoalvYfT1FkMSkeP9k26IB4WYWalhKoLQA9+18LC2uib3Hxr5PxQ/p3jYZmjFA==
+ dependencies:
+ object-assign "^4.0.1"
+ smart-mixin "^2.0.0"
+
+react-native-callkeep@^3.0.8:
+ version "3.0.8"
+ resolved "https://registry.yarnpkg.com/react-native-callkeep/-/react-native-callkeep-3.0.8.tgz#914b8109c70b26c639bb721d30bbf73b1f8b1eb3"
+ integrity sha512-weuG2h3BQZdfhy8IbzpGxSA9S/FSUr7UsGQ9Q/4NuvrZ5P6sFjdM3/C4/ad1KFyTagRQl3mMr4/quZvCUD/3JA==
+
+react-native-debug@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/react-native-debug/-/react-native-debug-3.0.0.tgz#f525f04c2209e26a5bb8ea845eac61482bab4e10"
+ integrity sha1-9SXwTCIJ4mpbuOqEXqxhSCurThA=
+ dependencies:
+ ms "0.7.1"
+
+react-native-dtmf@nimbleape/react-native-dtmf:
+ version "1.0.2"
+ resolved "https://codeload.github.com/nimbleape/react-native-dtmf/tar.gz/7fda18acc6bfefce7f27fd8f8af79614874b5f33"
+
+react-native-material-drawer@^0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/react-native-material-drawer/-/react-native-material-drawer-0.0.5.tgz#c885887c0c9982d7586f2f453ee0678bf49c45f5"
+ integrity sha512-JqYSivMnY5V0O5I5EMXqnxgsZhBzosQZfyytFRrORZAI8ZUUX0juE+IlJm7WcveRFc6+KuH3R1mRetC0ZObD5A==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+
+react-native-paper@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/react-native-paper/-/react-native-paper-3.4.0.tgz#b8d3643b33177ff41a2505aaa801d313defaf707"
+ integrity sha512-QVd6vZ4iJbUqp1OI1DY/0HwBS4y0SVixa2IeBIVyYM4ZZeoeOOlWCXdgtQk7tlf1ju5t1MJunyRGPOXOXTLGNg==
+ dependencies:
+ "@callstack/react-theme-provider" "^3.0.5"
+ color "^3.1.2"
+ react-native-safe-area-view "^0.14.6"
+
+react-native-safe-area-view@^0.14.6:
+ version "0.14.8"
+ resolved "https://registry.yarnpkg.com/react-native-safe-area-view/-/react-native-safe-area-view-0.14.8.tgz#ef33c46ff8164ae77acad48c3039ec9c34873e5b"
+ integrity sha512-MtRSIcZNstxv87Jet+UsPhEd1tpGe8cVskDXlP657x6rHpSrbrc+y13ZNXrwAgGNNhqQNX7UJT68ZIq//ZRmvw==
+ dependencies:
+ hoist-non-react-statics "^2.3.1"
+
+react-native-sass-transformer@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/react-native-sass-transformer/-/react-native-sass-transformer-1.4.0.tgz#1b6a1ed6f2b6338ba42f2a46afd1f23f9ada3439"
+ integrity sha512-PlRiaJIcDzYpIVDH0OQuabkMGy/zp7N/A14rqhBrFqhADXC0xR2W53Cb7CicL9CsOL4y7Sh2dv4pgMvqgMdwqQ==
+ dependencies:
+ app-root-path "^2.1.0"
+ css-to-react-native-transform "^1.8.1"
+ semver "^5.6.0"
+
+react-native-svg@^10.0.0:
+ version "10.0.0"
+ resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-10.0.0.tgz#085072f492a06a8ad40f1277c89293308d7efa61"
+ integrity sha512-7x56ji3oP8+Bh1jVuBtrq/JGxqLBAVf43BCuAbPMKaBlq78TXCMuln7fiBxCUOD4Z5hoZZaVkILhrJPPszfENA==
+ dependencies:
+ css-select "^2.0.2"
+ css-tree "^1.0.0-alpha.37"
+
+react-native-vector-icons@^6.2.0, react-native-vector-icons@^6.6.0:
+ version "6.6.0"
+ resolved "https://registry.yarnpkg.com/react-native-vector-icons/-/react-native-vector-icons-6.6.0.tgz#66cf004918eb05d90778d64bd42077c1800d481b"
+ integrity sha512-MImKVx8JEvVVBnaShMr7/yTX4Y062JZMupht1T+IEgbqBj4aQeQ1z2SH4VHWKNtWtppk4kz9gYyUiMWqx6tNSw==
+ dependencies:
+ lodash "^4.0.0"
+ prop-types "^15.6.2"
+ yargs "^13.2.2"
+
+react-native-webrtc@^1.75.2:
+ version "1.75.2"
+ resolved "https://registry.yarnpkg.com/react-native-webrtc/-/react-native-webrtc-1.75.2.tgz#c479c6d85d2f21e4082ded9a5fc28d710384077f"
+ integrity sha512-mdEukmHNhiyVIiwdooxk4kVXWG83OOENFV9YIkC7dtGU/sOdL81vDzynqd6Af9YbGMeOr0xdpFuEGsc1OFnKZg==
+ dependencies:
+ base64-js "^1.1.2"
+ event-target-shim "^1.0.5"
+ prop-types "^15.5.10"
+ uuid "^3.3.2"
+
+react-native@0.61.5:
+ version "0.61.5"
+ resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.61.5.tgz#6e21acb56cbd75a3baeb1f70201a66f42600bba8"
+ integrity sha512-MXqE3NoGO0T3dUKIKkIppijBhRRMpfN6ANbhMXHDuyfA+fSilRWgCwYgR/YNCC7ntECoJYikKaNTUBB0DeQy6Q==
+ dependencies:
+ "@babel/runtime" "^7.0.0"
+ "@react-native-community/cli" "^3.0.0"
+ "@react-native-community/cli-platform-android" "^3.0.0"
+ "@react-native-community/cli-platform-ios" "^3.0.0"
+ abort-controller "^3.0.0"
+ art "^0.10.0"
+ base64-js "^1.1.2"
+ connect "^3.6.5"
+ create-react-class "^15.6.3"
+ escape-string-regexp "^1.0.5"
+ event-target-shim "^5.0.1"
+ fbjs "^1.0.0"
+ fbjs-scripts "^1.1.0"
+ hermes-engine "^0.2.1"
+ invariant "^2.2.4"
+ jsc-android "^245459.0.0"
+ metro-babel-register "^0.56.0"
+ metro-react-native-babel-transformer "^0.56.0"
+ metro-source-map "^0.56.0"
+ nullthrows "^1.1.0"
+ pretty-format "^24.7.0"
+ promise "^7.1.1"
+ prop-types "^15.7.2"
+ react-devtools-core "^3.6.3"
+ react-refresh "^0.4.0"
+ regenerator-runtime "^0.13.2"
+ scheduler "0.15.0"
+ stacktrace-parser "^0.1.3"
+ whatwg-fetch "^3.0.0"
+
+react-notification-system@^0.2.17:
+ version "0.2.17"
+ resolved "https://registry.yarnpkg.com/react-notification-system/-/react-notification-system-0.2.17.tgz#a60eddbb62225ad8f9fc5d7837546bf6cdb36818"
+ integrity sha1-pg7du2IiWtj5/F14N1Rr9s2zaBg=
+ dependencies:
+ create-react-class "^15.5.1"
+ object-assign "^4.0.1"
+ prop-types "^15.5.6"
+
+react-popper@^0.8.0:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-0.8.3.tgz#0f73333137c9fb0af6ec4074d2d0585a0a0461e1"
+ integrity sha1-D3MzMTfJ+wr27EB00tBYWgoEYeE=
+ dependencies:
+ popper.js "^1.12.9"
+ prop-types "^15.6.0"
+
+react-refresh@^0.4.0:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.2.tgz#54a277a6caaac2803d88f1d6f13c1dcfbd81e334"
+ integrity sha512-kv5QlFFSZWo7OlJFNYbxRtY66JImuP2LcrFgyJfQaf85gSP+byzG21UbDQEYjU7f//ny8rwiEkO6py2Y+fEgAQ==
+
+react-router-component@^0.39.1:
+ version "0.39.1"
+ resolved "https://registry.yarnpkg.com/react-router-component/-/react-router-component-0.39.1.tgz#9b8392026071e7db2c9703a4b76ef4d30d308aa3"
+ integrity sha512-k3c1AIDInSCUJjy5LnOKJ3b+xJFzEi3jXhrNht+EYj+QttPoN14h0ItTJLofANHA1wxNaPGSkTBhZcCU9fFoXg==
+ dependencies:
+ create-react-class "15.x"
+ is-equal-shallow "^0.1.3"
+ object-assign "^4.1.0"
+ object.omit "^3.0.0"
+ prop-types "15.x"
+ qs "6.x"
+ url-pattern "~1.0.1"
+ urllite "~0.5.0"
+
+react-router-native@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/react-router-native/-/react-router-native-5.1.2.tgz#1ef02785cb396f2b4234b85ab32e551c191ff41b"
+ integrity sha512-0dOsu3qe6CRqLVjgoYvjQrOLzDwS3Z6oWiiKFswEohQ/fLXx/w9168ay7b/q855SrOZdk1ZwcvT3Xdc2Ki29Xg==
+ dependencies:
+ prop-types "^15.6.1"
+ react-router "5.1.2"
+
+react-router@5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.1.2.tgz#6ea51d789cb36a6be1ba5f7c0d48dd9e817d3418"
+ integrity sha512-yjEuMFy1ONK246B+rsa0cUam5OeAQ8pyclRDgpxuSCrAlJ1qN9uZ5IgyKC7gQg0w8OM50NXHEegPh/ks9YuR2A==
+ dependencies:
+ "@babel/runtime" "^7.1.2"
+ history "^4.9.0"
+ hoist-non-react-statics "^3.1.0"
+ loose-envify "^1.3.1"
+ mini-create-react-context "^0.3.0"
+ path-to-regexp "^1.7.0"
+ prop-types "^15.6.2"
+ react-is "^16.6.0"
+ tiny-invariant "^1.0.2"
+ tiny-warning "^1.0.0"
+
+react-scrollbar-size@^2.0.2:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/react-scrollbar-size/-/react-scrollbar-size-2.1.0.tgz#105e797135cab92b1f9e16f00071db7f29f80754"
+ integrity sha512-9dDUJvk7S48r0TRKjlKJ9e/LkLLYgc9LdQR6W21I8ZqtSrEsedPOoMji4nU3DHy7fx2l8YMScJS/N7qiloYzXQ==
+ dependencies:
+ babel-runtime "^6.26.0"
+ prop-types "^15.6.0"
+ react-event-listener "^0.5.1"
+ stifle "^1.0.2"
+
+react-test-renderer@16.9.0:
+ version "16.9.0"
+ resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.9.0.tgz#7ed657a374af47af88f66f33a3ef99c9610c8ae9"
+ integrity sha512-R62stB73qZyhrJo7wmCW9jgl/07ai+YzvouvCXIJLBkRlRqLx4j9RqcLEAfNfU3OxTGucqR2Whmn3/Aad6L3hQ==
+ dependencies:
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+ react-is "^16.9.0"
+ scheduler "^0.15.0"
+
+react-transition-group@^2.2.1, react-transition-group@^2.6.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d"
+ integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==
+ dependencies:
+ dom-helpers "^3.4.0"
+ loose-envify "^1.4.0"
+ prop-types "^15.6.2"
+ react-lifecycles-compat "^3.0.4"
+
+react-visibility-sensor@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/react-visibility-sensor/-/react-visibility-sensor-5.1.1.tgz#5238380960d3a0b2be0b7faddff38541e337f5a9"
+ integrity sha512-cTUHqIK+zDYpeK19rzW6zF9YfT4486TIgizZW53wEZ+/GPBbK7cNS0EHyJVyHYacwFEvvHLEKfgJndbemWhB/w==
+ dependencies:
+ prop-types "^15.7.2"
+
+react@16.9.0:
+ version "16.9.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.9.0.tgz#40ba2f9af13bc1a38d75dbf2f4359a5185c4f7aa"
+ integrity sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+
+read-chunk@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-2.1.0.tgz#6a04c0928005ed9d42e1a6ac5600e19cbc7ff655"
+ integrity sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=
+ dependencies:
+ pify "^3.0.0"
+ safe-buffer "^5.1.1"
+
+read-only-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0"
+ integrity sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=
+ dependencies:
+ readable-stream "^2.0.2"
+
+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"
+
+read-pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^2.0.0"
+
+read-pkg-up@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978"
+ integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==
+ dependencies:
+ find-up "^3.0.0"
+ read-pkg "^3.0.0"
+
+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"
+ path-type "^1.0.0"
+
+read-pkg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
+ dependencies:
+ load-json-file "^2.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^2.0.0"
+
+read-pkg@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
+ integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
+ dependencies:
+ load-json-file "^4.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^3.0.0"
+
+"readable-stream@2 || 3", readable-stream@^3.0.6:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
+ integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@~2.3.6:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
+ integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readdirp@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
+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"
+ mute-stream "0.0.5"
+
+realpath-native@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c"
+ integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==
+ dependencies:
+ util.promisify "^1.0.0"
+
+recompose@^0.26.0:
+ version "0.26.0"
+ resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.26.0.tgz#9babff039cb72ba5bd17366d55d7232fbdfb2d30"
+ integrity sha512-KwOu6ztO0mN5vy3+zDcc45lgnaUoaQse/a5yLVqtzTK13czSWnFGmXbQVmnoMgDkI5POd1EwIKSbjU1V7xdZog==
+ dependencies:
+ change-emitter "^0.1.2"
+ fbjs "^0.8.1"
+ hoist-non-react-statics "^2.3.1"
+ symbol-observable "^1.0.4"
+
+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"
+
+regenerate-unicode-properties@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e"
+ integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==
+ dependencies:
+ regenerate "^1.4.0"
+
+regenerate@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
+ integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
+
+regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+ integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-runtime@^0.13.2:
+ version "0.13.3"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5"
+ integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==
+
+regenerator-transform@^0.14.0:
+ version "0.14.1"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb"
+ integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==
+ dependencies:
+ private "^0.1.6"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexpp@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
+ integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
+
+regexpu-core@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6"
+ integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==
+ dependencies:
+ regenerate "^1.4.0"
+ regenerate-unicode-properties "^8.1.0"
+ regjsgen "^0.5.0"
+ regjsparser "^0.6.0"
+ unicode-match-property-ecmascript "^1.0.4"
+ unicode-match-property-value-ecmascript "^1.1.0"
+
+regjsgen@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c"
+ integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==
+
+regjsparser@^0.6.0:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.1.tgz#5b6b28c418f312ef42898dc6865ae2d4b9f0f7a2"
+ integrity sha512-7LutE94sz/NKSYegK+/4E77+8DipxF+Qn2Tmu362AcmsF2NYq/wx3+ObvU90TKEhjf7hQoFXo23ajjrXP7eUgg==
+ dependencies:
+ jsesc "~0.5.0"
+
+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=
+
+repeat-element@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+ integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+
+repeat-string@^1.6.1:
+ 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"
+
+replace-ext@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
+ integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=
+
+request-promise-core@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9"
+ integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==
+ dependencies:
+ lodash "^4.17.15"
+
+request-promise-native@^1.0.5:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36"
+ integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==
+ dependencies:
+ request-promise-core "1.1.3"
+ stealthy-require "^1.1.1"
+ tough-cookie "^2.3.3"
+
+request@^2.74.0, request@^2.87.0, request@^2.88.0:
+ version "2.88.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
+ integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.0"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.4.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
+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-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-main-filename@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
+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"
+
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
+ dependencies:
+ resolve-from "^3.0.0"
+
+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-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-pathname@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd"
+ integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+ integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
+
+resolve@^1.1.4, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1, resolve@^1.9.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16"
+ integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==
+ dependencies:
+ path-parse "^1.0.6"
+
+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"
+
+restore-cursor@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+ integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
+ dependencies:
+ onetime "^2.0.0"
+ signal-exit "^3.0.2"
+
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+rimraf@2, rimraf@^2.5.4, rimraf@^2.6.3:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@2.6.3, rimraf@~2.6.2:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@~2.2.6:
+ version "2.2.8"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582"
+ integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+rsvp@^4.8.4:
+ version "4.8.5"
+ resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
+ integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
+
+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"
+
+run-async@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
+ integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
+ dependencies:
+ is-promise "^2.1.0"
+
+rx-lite-aggregates@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
+ integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=
+ dependencies:
+ rx-lite "*"
+
+rx-lite@*, rx-lite@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
+ integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=
+
+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=
+
+rxjs@^5.4.3:
+ version "5.5.12"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc"
+ integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==
+ dependencies:
+ symbol-observable "1.0.1"
+
+rxjs@^6.5.3:
+ version "6.5.3"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a"
+ integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==
+ dependencies:
+ tslib "^1.9.0"
+
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
+ integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sample-rate@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/sample-rate/-/sample-rate-2.0.1.tgz#3f508969262b2c729a95d4d42b795a5b33610bd0"
+ integrity sha512-AIK0vVBiAEObmpJOxQu/WCyklnWGqzTSDII4O7nBo+SJHmfgBUiYhgV/Y3Ohz76gfSlU6R5CIAKggj+nAOLSvg==
+
+sane@^4.0.3:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded"
+ integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==
+ dependencies:
+ "@cnakazawa/watch" "^1.0.3"
+ anymatch "^2.0.0"
+ capture-exit "^2.0.0"
+ exec-sh "^0.3.2"
+ execa "^1.0.0"
+ fb-watchman "^2.0.0"
+ micromatch "^3.1.4"
+ minimist "^1.1.1"
+ walker "~1.0.5"
+
+sass-graph@^2.2.4:
+ 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"
+ scss-tokenizer "^0.2.3"
+ yargs "^7.0.0"
+
+sass-lint@^1.13.1:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/sass-lint/-/sass-lint-1.13.1.tgz#5fd2b2792e9215272335eb0f0dc607f61e8acc8f"
+ integrity sha512-DSyah8/MyjzW2BWYmQWekYEKir44BpLqrCFsgs9iaWiVTcwZfwXHF586hh3D1n+/9ihUNMfd8iHAyb9KkGgs7Q==
+ dependencies:
+ commander "^2.8.1"
+ eslint "^2.7.0"
+ front-matter "2.1.2"
+ fs-extra "^3.0.1"
+ glob "^7.0.0"
+ globule "^1.0.0"
+ gonzales-pe-sl "^4.2.3"
+ js-yaml "^3.5.4"
+ known-css-properties "^0.3.0"
+ lodash.capitalize "^4.1.0"
+ lodash.kebabcase "^4.0.0"
+ merge "^1.2.0"
+ path-is-absolute "^1.0.0"
+ util "^0.10.3"
+
+sax@^1.2.1, sax@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+scheduler@0.15.0, scheduler@^0.15.0:
+ version "0.15.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.15.0.tgz#6bfcf80ff850b280fed4aeecc6513bc0b4f17f8e"
+ integrity sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+
+scroll@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/scroll/-/scroll-2.0.3.tgz#0951b785544205fd17753bc3d294738ba16fc2ab"
+ integrity sha512-3ncZzf8gUW739h3LeS68nSssO60O+GGjT3SxzgofQmT8PIoyHzebql9HHPJopZX8iT6TKOdwaWFMqL6LzUN3DQ==
+ dependencies:
+ rafl "~1.2.1"
+
+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"
+
+sdp-transform@^2.3.0:
+ version "2.13.0"
+ resolved "https://registry.yarnpkg.com/sdp-transform/-/sdp-transform-2.13.0.tgz#4d9432f8e327e15a310e570a11fa5a403b9da054"
+ integrity sha512-3zT7pcjR090E0WCV9eOtFX06iojoNKsyMXqXs7clOs8sy+RoegR0cebmCuCrTKdY2jw1XhT9jkraygJrqAUwzA==
+
+sdp@^2.1.0:
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/sdp/-/sdp-2.10.0.tgz#643fff1a43cdba54a739c7b202f56bd854474af2"
+ integrity sha512-H+VjfyQpRz9GezhshJmkXTtCAT9/2g9az3GFDPYfGOz0eAOQU1fCrL3S9Dq/eUT9FtOyLi/czdR9PzK3fKUYOQ==
+
+"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
+semver@5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
+ integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
+
+semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+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.17.1:
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
+ integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
+ dependencies:
+ debug "2.6.9"
+ depd "~1.1.2"
+ destroy "~1.0.4"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "0.5.2"
+ http-errors "~1.7.2"
+ mime "1.6.0"
+ ms "2.1.1"
+ on-finished "~2.3.0"
+ range-parser "~1.2.1"
+ statuses "~1.5.0"
+
+serialize-error@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a"
+ integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=
+
+serve-static@^1.13.1:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
+ integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
+ dependencies:
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ parseurl "~1.3.3"
+ send "0.17.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-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setimmediate@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+setprototypeof@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
+ integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+
+sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+shasum-object@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shasum-object/-/shasum-object-1.0.0.tgz#0b7b74ff5b66ecf9035475522fa05090ac47e29e"
+ integrity sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==
+ dependencies:
+ fast-safe-stringify "^2.0.7"
+
+shasum@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f"
+ integrity sha1-5wEjENj0F/TetXEhUOVni4euVl8=
+ dependencies:
+ json-stable-stringify "~0.0.0"
+ sha.js "~2.4.4"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+shell-quote@1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767"
+ integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=
+ dependencies:
+ array-filter "~0.0.0"
+ array-map "~0.0.0"
+ array-reduce "~0.0.0"
+ jsonify "~0.0.0"
+
+shell-quote@^1.4.2, shell-quote@^1.6.1:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2"
+ integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==
+
+shelljs@^0.6.0:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8"
+ integrity sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=
+
+shellwords@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
+ integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+simple-concat@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6"
+ integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=
+
+simple-plist@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.1.0.tgz#8354ab63eb3922a054c78ce96c209c532e907a23"
+ integrity sha512-2i5Tc0BYAqppM7jVzmNrI+aEUntPolIq4fDgji6WuNNn1D/qYdn2KwoLhZdzQkE04lu9L5tUoeJsjuJAvd+lFg==
+ dependencies:
+ bplist-creator "0.0.8"
+ bplist-parser "0.2.0"
+ plist "^3.0.1"
+
+simple-swizzle@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+ integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=
+ dependencies:
+ is-arrayish "^0.3.1"
+
+sisteransi@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3"
+ integrity sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==
+
+slash@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+ integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+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=
+
+slice-ansi@^2.0.0, slice-ansi@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+ integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+ dependencies:
+ ansi-styles "^3.2.0"
+ astral-regex "^1.0.0"
+ is-fullwidth-code-point "^2.0.0"
+
+slide@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
+ integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=
+
+smart-mixin@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/smart-mixin/-/smart-mixin-2.0.0.tgz#a34a1055e32a75b30d2b4e3ca323dc99cb53f437"
+ integrity sha1-o0oQVeMqdbMNK048oyPcmctT9Dc=
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
+ integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
+ dependencies:
+ atob "^2.1.1"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@^0.5.16, source-map-support@^0.5.6:
+ version "0.5.16"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
+ integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@^0.4.2:
+ 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.5.0, source-map@^0.5.6, source-map@~0.5.3:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, 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==
+
+spdx-correct@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
+ integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
+ integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
+ integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
+ integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
+
+speaker@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/speaker/-/speaker-0.3.1.tgz#19965f87b54be291554826c2c9338e0afd5b7594"
+ integrity sha512-LEqSy+FHYHPZj4kX8NHylzaOmy+VIqj57enm2GS4B568hj0SdKDYa9jALCGQy43LZa/JmQk1iF0nlMVbS1PfPg==
+ dependencies:
+ bindings "^1.2.1"
+ debug "^2.2.0"
+ nan "^2.2.0"
+ readable-stream "^2.0.5"
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+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=
+
+sshpk@^1.7.0:
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
+ integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
+ ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
+ jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
+ tweetnacl "~0.14.0"
+
+stack-utils@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
+ integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==
+
+stacktrace-parser@^0.1.3:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.8.tgz#28b0272bd9aeb41636f0c8265c03ba270c865e1b"
+ integrity sha512-ig5rHJSdJrAsVqdb3oAI/8C6aQ7dEwJXoy/TIEIOTzdJHssmn12o6RsFoeQSLHoKjq0lX+kqhmnLDpyQTuWiJA==
+ dependencies:
+ type-fest "^0.7.1"
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+"statuses@>= 1.5.0 < 2", statuses@~1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+
+stdout-stream@^1.4.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de"
+ integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==
+ dependencies:
+ readable-stream "^2.0.1"
+
+stealthy-require@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
+ integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
+
+stifle@^1.0.2:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stifle/-/stifle-1.1.1.tgz#4e4c565f19dcf9a6efa3a7379a70c42179edb8d6"
+ integrity sha512-INvON4DXLAWxpor+f0ZHnYQYXBqDXQRW1znLpf5/C/AWzJ0eQQAThfdqHQ5BDkiyywD67rQGvbE4LC+Aig6K/Q==
+
+stream-browserify@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
+ integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-buffers@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4"
+ integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=
+
+stream-combiner2@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe"
+ integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4=
+ dependencies:
+ duplexer2 "~0.1.0"
+ readable-stream "^2.0.2"
+
+stream-combiner@*:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.2.2.tgz#aec8cbac177b56b6f4fa479ced8c1912cee52858"
+ integrity sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=
+ dependencies:
+ duplexer "~0.1.1"
+ through "~2.3.4"
+
+stream-http@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.1.0.tgz#22fb33fe9b4056b4eccf58bd8f400c4b993ffe57"
+ integrity sha512-cuB6RgO7BqC4FBYzmnvhob5Do3wIdIsXAgGycHJnW+981gHqoYcYz9lqjJrk8WXRddbwPuqPYRl+bag6mYv4lw==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^3.0.6"
+ xtend "^4.0.0"
+
+stream-splicer@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.1.tgz#0b13b7ee2b5ac7e0609a7463d83899589a363fcd"
+ integrity sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.2"
+
+string-length@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed"
+ integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=
+ dependencies:
+ astral-regex "^1.0.0"
+ strip-ansi "^4.0.0"
+
+string-to-arraybuffer@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-to-arraybuffer/-/string-to-arraybuffer-1.0.2.tgz#161147fbadea02e28b0935002cec4c40f1ca7f0a"
+ integrity sha512-DaGZidzi93dwjQen5I2osxR9ERS/R7B1PFyufNMnzhj+fmlDQAc1DSDIJVJhgI8Oq221efIMbABUBdPHDRt43Q==
+ dependencies:
+ atob-lite "^2.0.0"
+ is-base64 "^0.1.0"
+
+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"
+ strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
+ 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"
+
+string-width@^3.0.0, string-width@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+ integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+ dependencies:
+ emoji-regex "^7.0.1"
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^5.1.0"
+
+string-width@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
+ integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.0"
+
+string.prototype.trimleft@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634"
+ integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==
+ dependencies:
+ define-properties "^1.1.3"
+ function-bind "^1.1.1"
+
+string.prototype.trimright@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58"
+ integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==
+ dependencies:
+ define-properties "^1.1.3"
+ function-bind "^1.1.1"
+
+string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+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@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ dependencies:
+ ansi-regex "^4.1.0"
+
+strip-ansi@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
+ integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
+ dependencies:
+ ansi-regex "^5.0.0"
+
+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-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+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@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
+ integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
+
+strip-json-comments@~1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
+ integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=
+
+subarg@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2"
+ integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI=
+ dependencies:
+ minimist "^1.1.0"
+
+sudo-prompt@^9.0.0:
+ version "9.1.1"
+ resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.1.1.tgz#73853d729770392caec029e2470db9c221754db0"
+ integrity sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==
+
+superagent@^3.8.3:
+ version "3.8.3"
+ resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128"
+ integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==
+ dependencies:
+ component-emitter "^1.2.0"
+ cookiejar "^2.1.0"
+ debug "^3.1.0"
+ extend "^3.0.0"
+ form-data "^2.3.1"
+ formidable "^1.2.0"
+ methods "^1.1.1"
+ mime "^1.4.1"
+ qs "^6.5.1"
+ readable-stream "^2.3.5"
+
+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@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+ integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+ dependencies:
+ has-flag "^3.0.0"
+
+sylkrtc@nimbleape/sylkrtc.js:
+ version "1.2.1"
+ resolved "https://codeload.github.com/nimbleape/sylkrtc.js/tar.gz/ff03fbed5274e4c6a10b658c2da7c391f76fa21e"
+ dependencies:
+ async "^3.1.0"
+ attachmediastream "^2.0.0"
+ blueimp-md5 "^2.10.0"
+ bowser "^2.7.0"
+ debug "^2.6.8"
+ dompurify "^2.0.7"
+ sdp-transform "^2.3.0"
+ uuid "^3.1.0"
+ webrtc-adapter "4.1.1"
+ websocket "^1.0.28"
+
+symbol-observable@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
+ integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=
+
+symbol-observable@1.2.0, symbol-observable@^1.0.4, symbol-observable@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+ integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
+
+symbol-tree@^3.2.2:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+ integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
+syntax-error@^1.1.1:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c"
+ integrity sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==
+ dependencies:
+ acorn-node "^1.2.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"
+ chalk "^1.1.1"
+ lodash "^4.0.0"
+ slice-ansi "0.0.4"
+ string-width "^2.0.0"
+
+table@^5.2.3:
+ version "5.4.6"
+ resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
+ integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
+ dependencies:
+ ajv "^6.10.2"
+ lodash "^4.17.14"
+ slice-ansi "^2.1.0"
+ string-width "^3.0.0"
+
+tar@^2.0.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40"
+ integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.12"
+ inherits "2"
+
+temp@0.8.3:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59"
+ integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=
+ dependencies:
+ os-tmpdir "^1.0.0"
+ rimraf "~2.2.6"
+
+test-exclude@^5.2.3:
+ version "5.2.3"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0"
+ integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==
+ dependencies:
+ glob "^7.1.3"
+ minimatch "^3.0.4"
+ read-pkg-up "^4.0.0"
+ require-main-filename "^2.0.0"
+
+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=
+
+theming@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/theming/-/theming-1.3.0.tgz#286d5bae80be890d0adc645e5ca0498723725bdc"
+ integrity sha512-ya5Ef7XDGbTPBv5ENTwrwkPUexrlPeiAg/EI9kdlUAZhNlRbCdhMKRgjNX1IcmsmiPcqDQZE6BpSaH+cr31FKw==
+ dependencies:
+ brcast "^3.0.1"
+ is-function "^1.0.1"
+ is-plain-object "^2.0.1"
+ prop-types "^15.5.8"
+
+throat@^4.0.0, throat@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
+ integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=
+
+through2@^2.0.0, through2@^2.0.1, through2@^2.0.3:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
+through2@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a"
+ integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==
+ dependencies:
+ readable-stream "2 || 3"
+
+"through@>=2.2.7 <3", through@^2.3.6, through@~2.3.4:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+time-stamp@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3"
+ integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=
+
+timers-browserify@^1.0.1:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d"
+ integrity sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=
+ dependencies:
+ process "~0.11.0"
+
+tiny-invariant@^1.0.2:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73"
+ integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==
+
+tiny-warning@^1.0.0, tiny-warning@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
+ integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
+
+tmp@^0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
+tmpl@1.0.x:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
+ integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
+
+to-array-buffer@^2.0.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/to-array-buffer/-/to-array-buffer-2.2.2.tgz#f9dc6b5a18f232636cf1515b7ca146fdaf88d442"
+ integrity sha512-ZLcA71btdGxBs6WH2559ybYfoQ23756bZACcU9pIUwbBJ4Bwr1DHW96XfXQoKSk87pYo9zp2VsWrcX+At988Bw==
+ dependencies:
+ flatten-vertex-data "^1.0.2"
+ is-blob "^2.0.1"
+ string-to-arraybuffer "^1.0.0"
+
+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=
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+toidentifier@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
+ integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+
+tough-cookie@^2.3.3, tough-cookie@^2.3.4:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+ integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+ dependencies:
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
+tough-cookie@~2.4.3:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
+ integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
+ dependencies:
+ psl "^1.1.24"
+ punycode "^1.4.1"
+
+tr46@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09"
+ integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=
+ dependencies:
+ punycode "^2.1.0"
+
+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=
+
+"true-case-path@^1.0.2":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d"
+ integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==
+ dependencies:
+ glob "^7.1.2"
+
+tslib@^1.8.1, tslib@^1.9.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
+ integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
+
+tsutils@^3.7.0:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
+ integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==
+ dependencies:
+ tslib "^1.8.1"
+
+tty-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811"
+ integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==
+
+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-fest@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48"
+ integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==
+
+type-fest@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+ integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+
+type@^1.0.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
+ integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
+
+type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3"
+ integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==
+
+typedarray-to-buffer@^3.1.2, typedarray-to-buffer@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
+ integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
+ dependencies:
+ is-typedarray "^1.0.0"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+ua-parser-js@^0.7.18:
+ version "0.7.20"
+ resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098"
+ integrity sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw==
+
+uglify-es@^3.1.9:
+ version "3.3.9"
+ resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677"
+ integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==
+ dependencies:
+ commander "~2.13.0"
+ source-map "~0.6.1"
+
+uglify-js@^3.1.4:
+ version "3.7.2"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.2.tgz#cb1a601e67536e9ed094a92dd1e333459643d3f9"
+ integrity sha512-uhRwZcANNWVLrxLfNFEdltoPNhECUR3lc+UdJoG9CBpMcSnKyWA94tc3eAujB1GcMY5Uwq8ZMp4qWpxWYDQmaA==
+ dependencies:
+ commander "~2.20.3"
+ source-map "~0.6.1"
+
+ultron@1.0.x:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
+ integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=
+
+ultron@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
+ integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==
+
+umd@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf"
+ integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==
+
+unc-path-regex@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
+ integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo=
+
+undeclared-identifiers@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f"
+ integrity sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==
+ dependencies:
+ acorn-node "^1.3.0"
+ dash-ast "^1.0.0"
+ get-assigned-identifiers "^1.2.0"
+ simple-concat "^1.0.0"
+ xtend "^4.0.1"
+
+underscore@^1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961"
+ integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==
+
+unicode-canonical-property-names-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
+ integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==
+
+unicode-match-property-ecmascript@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c"
+ integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==
+ dependencies:
+ unicode-canonical-property-names-ecmascript "^1.0.4"
+ unicode-property-aliases-ecmascript "^1.0.4"
+
+unicode-match-property-value-ecmascript@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277"
+ integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==
+
+unicode-property-aliases-ecmascript@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57"
+ integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==
+
+union-value@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
+universalify@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+upath@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+ integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+
+uri-js@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+ integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+url-pattern@~1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/url-pattern/-/url-pattern-1.0.3.tgz#0409292471b24f23c50d65a47931793d2b5acfc1"
+ integrity sha1-BAkpJHGyTyPFDWWkeTF5PStaz8E=
+
+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"
+
+urllite@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/urllite/-/urllite-0.5.0.tgz#1b7bb9ca3fb0db9520de113466bbcf7cc341451a"
+ integrity sha1-G3u5yj+w25Ug3hE0ZrvPfMNBRRo=
+ dependencies:
+ xtend "~4.0.0"
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+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"
+
+util-deprecate@^1.0.1, 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.promisify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
+ integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==
+ dependencies:
+ define-properties "^1.1.2"
+ object.getownpropertydescriptors "^2.0.3"
+
+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"
+
+util@^0.10.3, util@~0.10.1:
+ version "0.10.4"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901"
+ integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==
+ dependencies:
+ inherits "2.0.3"
+
+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.1.0, uuid@^3.3.2, uuid@^3.3.3:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866"
+ integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==
+
+v8-compile-cache@^2.0.3:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e"
+ integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+value-equal@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c"
+ integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==
+
+vary@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+ integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
+
+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"
+ extsprintf "^1.2.0"
+
+vinyl-buffer@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/vinyl-buffer/-/vinyl-buffer-1.0.1.tgz#96c1a3479b8c5392542c612029013b5b27f88bbf"
+ integrity sha1-lsGjR5uMU5JULGEgKQE7Wyf4i78=
+ dependencies:
+ bl "^1.2.1"
+ through2 "^2.0.3"
+
+vinyl-source-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/vinyl-source-stream/-/vinyl-source-stream-2.0.0.tgz#f38a5afb9dd1e93b65d550469ac6182ac4f54b8e"
+ integrity sha1-84pa+53R6Ttl1VBGmsYYKsT1S44=
+ dependencies:
+ through2 "^2.0.3"
+ vinyl "^2.1.0"
+
+vinyl@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86"
+ integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==
+ dependencies:
+ clone "^2.1.1"
+ clone-buffer "^1.0.0"
+ clone-stats "^1.0.0"
+ cloneable-readable "^1.0.0"
+ remove-trailing-separator "^1.0.1"
+ replace-ext "^1.0.0"
+
+vlq@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468"
+ integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==
+
+vm-browserify@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
+ integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
+
+w3c-hr-time@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045"
+ integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=
+ dependencies:
+ browser-process-hrtime "^0.1.2"
+
+walker@^1.0.7, walker@~1.0.5:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
+ integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=
+ dependencies:
+ makeerror "1.0.x"
+
+warning@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c"
+ integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=
+ dependencies:
+ loose-envify "^1.0.0"
+
+watchify@^3.11.1:
+ version "3.11.1"
+ resolved "https://registry.yarnpkg.com/watchify/-/watchify-3.11.1.tgz#8e4665871fff1ef64c0430d1a2c9d084d9721881"
+ integrity sha512-WwnUClyFNRMB2NIiHgJU9RQPQNqVeFk7OmZaWf5dC5EnNa0Mgr7imBydbaJ7tGTuPM2hz1Cb4uiBvK9NVxMfog==
+ dependencies:
+ anymatch "^2.0.0"
+ browserify "^16.1.0"
+ chokidar "^2.1.1"
+ defined "^1.0.0"
+ outpipe "^1.1.0"
+ through2 "^2.0.0"
+ xtend "^4.0.0"
+
+wav-decoder@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/wav-decoder/-/wav-decoder-1.3.0.tgz#1d0bf7195f623661bd182464c434a3e8bc42eb0e"
+ integrity sha512-4U6O/JNb1dPO90CO2YMTQ5N2plJcntm39vNMvRq9VZ4Vy5FzS7Lnx95N2QcYUyKYcZfCbhI//W3dSHA8YnOQyQ==
+
+wcwidth@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
+ integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
+ dependencies:
+ defaults "^1.0.3"
+
+webidl-conversions@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+ integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
+
+webrtc-adapter@4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/webrtc-adapter/-/webrtc-adapter-4.1.1.tgz#bb815b6430b9c36dac9c3756d0c9ce438b34e336"
+ integrity sha1-u4FbZDC5w22snDdW0MnOQ4s04zY=
+ dependencies:
+ sdp "^2.1.0"
+
+websocket@^1.0.28:
+ version "1.0.31"
+ resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.31.tgz#e5d0f16c3340ed87670e489ecae6144c79358730"
+ integrity sha512-VAouplvGKPiKFDTeCCO65vYHsyay8DqoBSlzIO3fayrfOgU94lQN5a1uWVnFrMLceTJw/+fQXR5PGbUVRaHshQ==
+ dependencies:
+ debug "^2.2.0"
+ es5-ext "^0.10.50"
+ nan "^2.14.0"
+ typedarray-to-buffer "^3.1.5"
+ yaeti "^0.0.6"
+
+whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
+ integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
+ dependencies:
+ iconv-lite "0.4.24"
+
+whatwg-fetch@>=0.10.0, whatwg-fetch@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
+ integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==
+
+whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
+ integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+
+whatwg-url@^6.4.1:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8"
+ integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.1"
+ webidl-conversions "^4.0.2"
+
+whatwg-url@^7.0.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"
+ integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^1.0.1"
+ webidl-conversions "^4.0.2"
+
+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-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which@1, which@^1.2.9, which@^1.3.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+ dependencies:
+ string-width "^1.0.2 || 2"
+
+wildemitter@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/wildemitter/-/wildemitter-1.2.1.tgz#9da3b5ca498e4378628d1783145493c70a10b774"
+ integrity sha512-UMmSUoIQSir+XbBpTxOTS53uJ8s/lVhADCkEbhfRjUGFDPme/XGOb0sBWLx5sTz7Wx/2+TlAw1eK9O5lw5PiEw==
+
+word-wrap@~1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+ integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+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"
+
+wrap-ansi@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+ integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+ dependencies:
+ ansi-styles "^3.2.0"
+ string-width "^3.0.0"
+ strip-ansi "^5.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write-file-atomic@2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529"
+ integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.2"
+
+write-file-atomic@^1.2.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f"
+ integrity sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ slide "^1.1.5"
+
+write@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
+ integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+ dependencies:
+ mkdirp "^0.5.1"
+
+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.0, ws@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51"
+ integrity sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==
+ dependencies:
+ options ">=0.0.5"
+ ultron "1.0.x"
+
+ws@^3.3.1:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"
+ integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==
+ dependencies:
+ async-limiter "~1.0.0"
+ safe-buffer "~5.1.0"
+ ultron "~1.1.0"
+
+ws@^5.2.0:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
+ integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==
+ dependencies:
+ async-limiter "~1.0.0"
+
+xcode@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/xcode/-/xcode-2.0.0.tgz#134f1f94c26fbfe8a9aaa9724bfb2772419da1a2"
+ integrity sha512-5xF6RCjAdDEiEsbbZaS/gBRt3jZ/177otZcpoLCjGN/u1LrfgH7/Sgeeavpr/jELpyDqN2im3AKosl2G2W8hfw==
+ dependencies:
+ simple-plist "^1.0.0"
+ uuid "^3.3.2"
+
+xml-name-validator@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
+ integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+
+xmlbuilder@^9.0.7:
+ version "9.0.7"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
+ integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=
+
+xmldoc@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-1.1.2.tgz#6666e029fe25470d599cd30e23ff0d1ed50466d7"
+ integrity sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ==
+ dependencies:
+ sax "^1.2.1"
+
+xmldom@0.1.x:
+ version "0.1.27"
+ resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9"
+ integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk=
+
+xpipe@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf"
+ integrity sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98=
+
+xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+y18n@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+ integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
+
+"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+ integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+
+yaeti@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577"
+ integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=
+
+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@^11.1.1:
+ version "11.1.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
+ integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs-parser@^13.1.1:
+ version "13.1.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
+ integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+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-parser@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9"
+ integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k=
+ dependencies:
+ camelcase "^4.1.0"
+
+yargs@^12.0.5:
+ version "12.0.5"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
+ integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==
+ dependencies:
+ cliui "^4.0.0"
+ decamelize "^1.2.0"
+ find-up "^3.0.0"
+ get-caller-file "^1.0.1"
+ os-locale "^3.0.0"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
+ y18n "^3.2.1 || ^4.0.0"
+ yargs-parser "^11.1.1"
+
+yargs@^13.2.2, yargs@^13.3.0:
+ version "13.3.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83"
+ integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==
+ dependencies:
+ cliui "^5.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^13.1.1"
+
+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"
+ decamelize "^1.1.1"
+ get-caller-file "^1.0.1"
+ os-locale "^1.4.0"
+ read-pkg-up "^1.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^1.0.2"
+ which-module "^1.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^5.0.0"
+
+yargs@^9.0.0:
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c"
+ integrity sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=
+ dependencies:
+ camelcase "^4.1.0"
+ cliui "^3.2.0"
+ decamelize "^1.1.1"
+ get-caller-file "^1.0.1"
+ os-locale "^2.0.0"
+ read-pkg-up "^2.0.0"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^7.0.0"

File Metadata

Mime Type
text/x-diff
Expires
Sat, Nov 23, 4:12 AM (21 h, 8 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3393437
Default Alt Text
(867 KB)

Event Timeline