diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 51873bc7..00000000 --- a/.editorconfig +++ /dev/null @@ -1,17 +0,0 @@ -# EditorConfig helps developers define and maintain consistent coding styles between different editors and IDEs -# editorconfig.org - -root = true - -[*] -indent_style = space -indent_size = 2 - -# We recommend you to keep these unchanged -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.md] -trim_trailing_whitespace = false \ No newline at end of file diff --git a/.gitignore b/.gitignore index 0a4eae97..eb6ccae0 100644 --- a/.gitignore +++ b/.gitignore @@ -13,12 +13,13 @@ log.txt npm-debug.log* .idea/ +.ionic/ .sourcemaps/ .sass-cache/ .tmp/ .versions/ coverage/ -dist/ +www/ node_modules/ tmp/ temp/ @@ -26,19 +27,10 @@ platforms/ plugins/ plugins/android.json plugins/ios.json -www/ $RECYCLE.BIN/ -lintReport.json -lcov.info -reports/ .DS_Store Thumbs.db UserInterfaceState.xcuserstate -e2e-reports/* - -build.json -exportOptions.plist -airgap_cordova_secure_storage_deploy -airgap_cordova_secure_storage_deploy.pub +src/assets/libs/airgap-coin-lib.browserify.js diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index eb04f3ff..ea008343 100755 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -12,6 +12,7 @@ stages: - test - native_build - qa + build_ionic: stage: build before_script: @@ -53,7 +54,7 @@ build_android: - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY script: - sed -i -e "s/version=\"0.0.0\"/version=\"$VERSION\"/g" config.xml - - docker build -f build/android/Dockerfile -t $IMAGE_TAG_ANDROID_CURRENT --build-arg KEYSTORE_PASSWORD="$KEYSTORE_PASSWORD" --build-arg KEYSTORE_ALIAS="$KEYSTORE_ALIAS" --build-arg BUILD_NR="$CI_PIPELINE_ID" . + - docker build -f build/android/Dockerfile -t $IMAGE_TAG_ANDROID_CURRENT --build-arg BUILD_NR="$CI_PIPELINE_ID" --build-arg VERSION="$VERSION" . - docker run --name $CI_PIPELINE_ID $IMAGE_TAG_ANDROID_CURRENT echo "container ran." - docker cp $CI_PIPELINE_ID:/app/android-release-unsigned.apk android-release-unsigned-$CI_PIPELINE_ID.apk - docker cp $CI_PIPELINE_ID:/app/android-debug.apk android-debug-$CI_PIPELINE_ID.apk @@ -76,6 +77,8 @@ build_ios: - sed -i -e "s/version=\"0.0.0\"/version=\"$VERSION\"/g" config.xml - nvm use v10.13.0 - npm install + - npm run disable-pure-getters + - npm run configure-mangle - ionic cordova build ios --prod --release - find ./resources/ -name "*.png" -exec convert "{}" -alpha off "{}" \; - xcodebuild -workspace platforms/ios/AirGap\ Vault.xcworkspace -scheme "AirGap Vault" -destination generic/platform=iOS build -allowProvisioningUpdates @@ -84,7 +87,7 @@ build_ios: - /Applications/Xcode_10.1.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool --upload-app -f platforms/ios/AirGap\ Vault.ipa -u $IOS_USERNAME -p $IOS_PASSWORD artifacts: paths: - - AirGap\ Vault.ipa + - platforms/ios/AirGap\ Vault.ipa tags: - ios @@ -98,7 +101,7 @@ qa: -Dsonar.typescript.tslint.reportPaths=lintReport.json -Dsonar.test.inclusions=**/*.spec.ts -Dsonar.tests=src/ - -Dsonar.exclusions=**/node_modules/**,**/*.spec.ts + -Dsonar.exclusions=**/node_modules/**,**/*.spec.ts,src/assets/libs/** -Dsonar.sources=src/ -Dsonar.host.url=$SONAR_URL -Dsonar.login=$SONAR_LOGIN diff --git a/.prettierignore b/.prettierignore index c0d13d92..a19df8d2 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,13 +1 @@ -src/assets/ - -.history/ -.vscode/ -apple/ -build/ -e2e/ -electron/ -hooks/ -node_modules/ -platforms/ -plugins/ -www/ \ No newline at end of file +src/assets/ \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index 03020513..c3c37e23 100644 --- a/.prettierrc +++ b/.prettierrc @@ -3,5 +3,6 @@ "trailingComma": "none", "singleQuote": true, "semi": false, - "htmlWhitespaceSensitivity": "ignore" + "htmlWhitespaceSensitivity": "ignore", + "endOfLine": "lf" } diff --git a/Dockerfile b/Dockerfile index df8056e1..759bbc1a 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:9-slim +FROM node:10 # See https://crbug.com/795759 RUN apt-get update && apt-get install -yq libgconf-2-4 bzip2 build-essential @@ -17,12 +17,6 @@ RUN apt-get update && apt-get install -y wget --no-install-recommends \ && apt-get purge --auto-remove -y curl \ && rm -rf /src/*.deb -# install npm -RUN npm install -g npm@6.4.1 - -# install static webserver -RUN npm install -g node-static - # create app directory RUN mkdir /app WORKDIR /app @@ -34,13 +28,22 @@ COPY package-lock.json /app # install dependencies RUN npm install +# install static webserver +RUN npm install node-static -g + +# browserify coin-lib +# RUN npm run browserify-coinlib + # Bundle app source COPY . /app # set to production RUN export NODE_ENV=production +# post-install hook, to be safe if it got cached +# RUN node config/patch_crypto.js + # build -RUN npm run build +RUN npm run build --prod CMD ["static", "-p", "8100", "-a", "0.0.0.0", "www"] diff --git a/angular.json b/angular.json new file mode 100644 index 00000000..42b54182 --- /dev/null +++ b/angular.json @@ -0,0 +1,200 @@ +{ + "$schema": "./node_modules/@angular-devkit/core/src/workspace/workspace-schema.json", + "version": 1, + "defaultProject": "app", + "newProjectRoot": "projects", + "projects": { + "app": { + "root": "", + "sourceRoot": "src", + "projectType": "application", + "prefix": "app", + "schematics": {}, + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "www", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "src/tsconfig.app.json", + "assets": [ + { + "glob": "**/*", + "input": "src/assets", + "output": "assets" + }, + { + "glob": "**/*.svg", + "input": "node_modules/ionicons/dist/ionicons/svg", + "output": "./svg" + } + ], + "styles": [ + { + "input": "src/theme/variables.scss" + }, + { + "input": "src/global.scss" + }, + { + "input": "src/app/app.scss" + } + ], + "scripts": [], + "es5BrowserSupport": true + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "extractCss": true, + "namedChunks": false, + "aot": true, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + } + ] + }, + "ci": { + "progress": false + } + } + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "app:build" + }, + "configurations": { + "production": { + "browserTarget": "app:build:production" + }, + "ci": { + "progress": false + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "app:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "src/tsconfig.spec.json", + "karmaConfig": "src/karma.conf.js", + "styles": [], + "scripts": [], + "assets": [ + { + "glob": "favicon.ico", + "input": "src/", + "output": "/" + }, + { + "glob": "**/*", + "input": "src/assets", + "output": "/assets" + } + ] + }, + "configurations": { + "ci": { + "progress": false, + "watch": false + } + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": ["src/tsconfig.app.json", "src/tsconfig.spec.json"], + "exclude": ["**/node_modules/**"] + } + }, + "ionic-cordova-build": { + "builder": "@ionic/angular-toolkit:cordova-build", + "options": { + "browserTarget": "app:build" + }, + "configurations": { + "production": { + "browserTarget": "app:build:production" + } + } + }, + "ionic-cordova-serve": { + "builder": "@ionic/angular-toolkit:cordova-serve", + "options": { + "cordovaBuildTarget": "app:ionic-cordova-build", + "devServerTarget": "app:serve" + }, + "configurations": { + "production": { + "cordovaBuildTarget": "app:ionic-cordova-build:production", + "devServerTarget": "app:serve:production" + } + } + } + } + }, + "app-e2e": { + "root": "e2e/", + "projectType": "application", + "architect": { + "e2e": { + "builder": "@angular-devkit/build-angular:protractor", + "options": { + "protractorConfig": "e2e/protractor.conf.js", + "devServerTarget": "app:serve" + }, + "configurations": { + "production": { + "devServerTarget": "app:serve:production" + }, + "ci": { + "devServerTarget": "app:serve:ci" + } + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": "e2e/tsconfig.e2e.json", + "exclude": ["**/node_modules/**"] + } + } + } + } + }, + "cli": { + "defaultCollection": "@ionic/angular-toolkit" + }, + "schematics": { + "@ionic/angular-toolkit:component": { + "styleext": "scss" + }, + "@ionic/angular-toolkit:page": { + "styleext": "scss" + } + } +} diff --git a/build/android/Dockerfile b/build/android/Dockerfile index 02e80ac5..34a1512b 100644 --- a/build/android/Dockerfile +++ b/build/android/Dockerfile @@ -1,9 +1,11 @@ FROM agileek/ionic-framework:3.19.1 -RUN apt-get update -y -RUN apt-get install -y bzip2 build-essential -RUN apt-get install -y pkg-config libcairo2-dev -RUN apt-get install -y libjpeg-dev +RUN apt-get update -y && apt-get install -y \ + bzip2 \ + build-essential \ + pkg-config \ + libcairo2-dev \ + libjpeg-dev # android build tools version RUN ["/opt/tools/android-accept-licenses.sh", "android update sdk --all --no-ui --filter build-tools-26.0.2,android-27"] @@ -12,22 +14,15 @@ RUN ["/opt/tools/android-accept-licenses.sh", "android update sdk --all --no-ui RUN mkdir /app WORKDIR /app -# echo -RUN npm install -g npm@6.4.1 -RUN npm cache verify - -# install ionic -RUN npm install -g ionic@3.20.0 - -# install cordova -RUN npm install -g cordova@8.1.2 +# using npm 6.5.0 to fix installing certain cordova/ionic plugins +RUN npm install -g npm@6.5.0 ionic@4.6.0 # Install app dependencies, using wildcard if package-lock exists COPY package.json /app/package.json COPY package-lock.json /app/package-lock.json # install dependencies -RUN npm install --no-optional +RUN npm ci # copy config.xml, ionic configs and resources to allow plugin installation COPY config.xml /app/config.xml @@ -39,7 +34,7 @@ RUN mkdir www # run ionic android build RUN ionic info -# Bundle app source +# Copy hooks (used to remove permissions) COPY ./hooks /app/hooks # add android platform @@ -48,10 +43,19 @@ RUN ionic cordova platforms add android # Bundle app source COPY . /app +# post-install hook, to be safe if it got cached +RUN node config/patch_crypto.js + # set version code ARG BUILD_NR RUN sed -i -e "s/android-versionCode=\"1\"/android-versionCode=\"$BUILD_NR\"/g" config.xml +# disable pure getters due to https://github.com/angular/angular-cli/issues/11439 +RUN npm run disable-pure-getters + +# configure mangle (keep_fnames) for bitcoinjs https://github.com/bitcoinjs/bitcoinjs-lib/issues/959 +RUN npm run configure-mangle + # build apk RUN ionic cordova build android --prod --release --no-interactive diff --git a/config.xml b/config.xml index 59636e1d..836e9ae6 100644 --- a/config.xml +++ b/config.xml @@ -1,7 +1,7 @@ AirGap Vault - An awesome Ionic/Cordova app. + A secure crypto wallet Papers.ch Team @@ -27,12 +27,22 @@ + + + + + + + + + + @@ -82,6 +92,10 @@ + + + + @@ -89,26 +103,26 @@ - - - - - - + + + + + + - - - + + + - + @@ -127,15 +141,15 @@ - - + + - + - - + + - + diff --git a/copy.config.js b/copy.config.js deleted file mode 100644 index 049b1711..00000000 --- a/copy.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - copyMaterialIcons: { - src: ['{{ROOT}}/node_modules/ionic2-material-icons/fonts/**/*'], - dest: '{{WWW}}/assets/fonts' - } -} diff --git a/e2e/app.e2e-spec.ts b/e2e/app.e2e-spec.ts deleted file mode 100755 index 8a325c31..00000000 --- a/e2e/app.e2e-spec.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Page } from './app.po' -import { browser, element, by, protractor } from 'protractor' -import * as fs from 'fs' - -describe('App', () => { - let page: Page - - beforeEach(() => { - page = new Page() - }) - - describe('Home Screen', () => { - beforeEach(() => { - page.navigateTo('/') - browser.executeScript(() => { - localStorage.clear() - localStorage.setItem('__airgap_storage/_ionickv/DISCLAIMER_INITIAL', 'true') - }) - }) - - it('should have a title saying "Ionic App"', () => { - page.getTitle().then(title => { - expect(title).toEqual('Ionic App') - }) - }) - }) -}) diff --git a/e2e/app.po.ts b/e2e/app.po.ts deleted file mode 100755 index bc21f4da..00000000 --- a/e2e/app.po.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { browser } from 'protractor' - -export class Page { - navigateTo(destination) { - return browser.get(destination) - } - - getTitle() { - return browser.getTitle() - } -} diff --git a/e2e/protractor.conf.js b/e2e/protractor.conf.js new file mode 100644 index 00000000..c0d8ae86 --- /dev/null +++ b/e2e/protractor.conf.js @@ -0,0 +1,26 @@ +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter } = require('jasmine-spec-reporter') + +exports.config = { + allScriptsTimeout: 11000, + specs: ['./src/**/*.e2e-spec.ts'], + capabilities: { + browserName: 'chrome' + }, + directConnect: true, + baseUrl: 'http://localhost:4200/', + framework: 'jasmine', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + onPrepare() { + require('ts-node').register({ + project: require('path').join(__dirname, './tsconfig.e2e.json') + }) + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })) + } +} diff --git a/e2e/src/app.e2e-spec.ts b/e2e/src/app.e2e-spec.ts new file mode 100644 index 00000000..2310cce7 --- /dev/null +++ b/e2e/src/app.e2e-spec.ts @@ -0,0 +1,14 @@ +import { AppPage } from './app.po' + +describe('new App', () => { + let page: AppPage + + beforeEach(() => { + page = new AppPage() + }) + + it('should display welcome message', () => { + page.navigateTo() + expect(page.getPageTitle()).toContain('Tab One') + }) +}) diff --git a/e2e/src/app.po.ts b/e2e/src/app.po.ts new file mode 100644 index 00000000..8cfcbe74 --- /dev/null +++ b/e2e/src/app.po.ts @@ -0,0 +1,11 @@ +import { browser, by, element } from 'protractor' + +export class AppPage { + navigateTo() { + return browser.get('/') + } + + getPageTitle() { + return element(by.css('ion-title')).getText() + } +} diff --git a/e2e/tsconfig.e2e.json b/e2e/tsconfig.e2e.json new file mode 100644 index 00000000..22e04cb1 --- /dev/null +++ b/e2e/tsconfig.e2e.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/app", + "module": "commonjs", + "target": "es5", + "types": ["jasmine", "jasminewd2", "node"] + } +} diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json deleted file mode 100755 index 2825d28c..00000000 --- a/e2e/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "declaration": false, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "module": "commonjs", - "moduleResolution": "node", - "outDir": "../dist/out-tsc-e2e", - "sourceMap": true, - "target": "es2015", - "typeRoots": ["../node_modules/@types"] - } -} diff --git a/ionic.config.json b/ionic.config.json index d9b7e2ba..5456b995 100644 --- a/ionic.config.json +++ b/ionic.config.json @@ -1,7 +1,7 @@ { - "name": "ionic-boilerplate", + "name": "AirGap Vault", "integrations": { "cordova": {} }, - "type": "ionic-angular" + "type": "angular" } diff --git a/package-lock.json b/package-lock.json index 136247f1..bad0f100 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,353 +4,308 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "7zip-bin": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-4.1.0.tgz", - "integrity": "sha512-AsnBZN3a8/JcNt+KPkGGODaA4c7l3W5+WpeKgGSbstSLxqWtTXqd1ieJGBQ8IFCtRg8DmmKUcSkIkUc0A4p3YA==", - "dev": true - }, - "@aeternity/hd-wallet": { - "version": "github:dschoeni/hd-wallet-js#b216450e56954a6e82ace0aade9474673de5d9d5", - "requires": { - "@babel/runtime": "7.2.0", - "bip32-path": "0.4.2", - "postinstall-build": "5.0.3", - "tweetnacl": "1.0.1", - "tweetnacl-auth": "1.0.1" - } - }, - "@angular-devkit/build-optimizer": { - "version": "0.0.35", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.0.35.tgz", - "integrity": "sha512-7JxZZAYFSCc0tP6+NrRn3b2Cd1b9d+a3+OfwVNyNsNd2unelqUMko2hm0KLbC8BXcXt/OILg1E/ZgLAXSS47nw==", + "@angular-devkit/architect": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.9.tgz", + "integrity": "sha512-EAFtCs9dsGhpMRC45PoYsrkiExpWz9Ax15qXfzwdDRacz5DmdOVt+QpkLW1beUOwiyj/bhFyj23eaONK2RTn/w==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "source-map": "0.5.7", - "typescript": "2.6.2", - "webpack-sources": "1.3.0" + "@angular-devkit/core": "7.3.9", + "rxjs": "6.3.3" }, "dependencies": { - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "tslib": "1.9.3" } - }, - "typescript": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz", - "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=", - "dev": true } } }, - "@angular/common": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-5.0.1.tgz", - "integrity": "sha1-QwBas8i4/68Xaq+zuGupMcPkvfk=", + "@angular-devkit/build-angular": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.13.9.tgz", + "integrity": "sha512-onh07LhdxotDFjja0KKsDWNCwgpM/ymuRr5h0e+vT4AgklP2Uioz1CpzVOgxPIKkdVdGR9QgDinVsWAmY90J8g==", + "dev": true, "requires": { - "tslib": "1.9.3" + "@angular-devkit/architect": "0.13.9", + "@angular-devkit/build-optimizer": "0.13.9", + "@angular-devkit/build-webpack": "0.13.9", + "@angular-devkit/core": "7.3.9", + "@ngtools/webpack": "7.3.9", + "ajv": "6.9.1", + "autoprefixer": "9.4.6", + "circular-dependency-plugin": "5.0.2", + "clean-css": "4.2.1", + "copy-webpack-plugin": "4.6.0", + "file-loader": "3.0.1", + "glob": "7.1.3", + "istanbul-instrumenter-loader": "3.0.1", + "karma-source-map-support": "1.3.0", + "less": "3.9.0", + "less-loader": "4.1.0", + "license-webpack-plugin": "2.1.0", + "loader-utils": "1.2.3", + "mini-css-extract-plugin": "0.5.0", + "minimatch": "3.0.4", + "node-sass": "4.12.0", + "open": "6.0.0", + "parse5": "4.0.0", + "postcss": "7.0.14", + "postcss-import": "12.0.1", + "postcss-loader": "3.0.0", + "raw-loader": "1.0.0", + "rxjs": "6.3.3", + "sass-loader": "7.1.0", + "semver": "5.6.0", + "source-map-loader": "0.2.4", + "source-map-support": "0.5.10", + "speed-measure-webpack-plugin": "1.3.1", + "stats-webpack-plugin": "0.7.0", + "style-loader": "0.23.1", + "stylus": "0.54.5", + "stylus-loader": "3.0.2", + "terser-webpack-plugin": "1.2.2", + "tree-kill": "1.2.1", + "webpack": "4.29.0", + "webpack-dev-middleware": "3.5.1", + "webpack-dev-server": "3.1.14", + "webpack-merge": "4.2.1", + "webpack-sources": "1.3.0", + "webpack-subresource-integrity": "1.1.0-rc.6" + }, + "dependencies": { + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "1.9.3" + } + } } }, - "@angular/compiler": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-5.0.1.tgz", - "integrity": "sha1-f9TH+ku770wUaWL6lGuCczCmyO0=", + "@angular-devkit/build-optimizer": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.13.9.tgz", + "integrity": "sha512-GQtCntthQHSBv5l1ZY5p00JOECb/WcE1qUBo5kFjp84z0fszDkhOy52M1kcWCX4PFzJaY4DKk58hbUE/2UN0jw==", + "dev": true, "requires": { - "tslib": "1.9.3" + "loader-utils": "1.2.3", + "source-map": "0.5.6", + "typescript": "3.2.4", + "webpack-sources": "1.3.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + }, + "typescript": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", + "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", + "dev": true + } } }, - "@angular/compiler-cli": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-5.0.1.tgz", - "integrity": "sha1-Um3BuzlPsWrZFmAe6pqgDrRLT/8=", + "@angular-devkit/build-webpack": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.13.9.tgz", + "integrity": "sha512-6ypu6pzNmQxzATF4rTWEhGSl5hyGQ8a/3aCZF/ux+XGc3d4hi2HW+NWlDm1UEna6ZjNtgEPlgfP4q8BKrjRmfA==", + "dev": true, "requires": { - "chokidar": "1.7.0", - "minimist": "1.2.0", - "reflect-metadata": "0.1.12", - "tsickle": "0.24.1" + "@angular-devkit/architect": "0.13.9", + "@angular-devkit/core": "7.3.9", + "rxjs": "6.3.3" + }, + "dependencies": { + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "1.9.3" + } + } } }, - "@angular/core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-5.0.1.tgz", - "integrity": "sha1-pKdK/H4gWNMLgmPrbWbarOn0J7o=", + "@angular-devkit/core": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.9.tgz", + "integrity": "sha512-SaxD+nKFW3iCBKsxNR7+66J30EexW/y7tm8m5AvUH+GwSAgIj0ZYmRUzFEPggcaLVA4WnE/YWqIXZMJW5dT7gw==", + "dev": true, "requires": { - "tslib": "1.9.3" + "ajv": "6.9.1", + "chokidar": "2.0.4", + "fast-json-stable-stringify": "2.0.0", + "rxjs": "6.3.3", + "source-map": "0.7.3" + }, + "dependencies": { + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "1.9.3" + } + } } }, - "@angular/forms": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-5.0.1.tgz", - "integrity": "sha1-afMDxME9o8qg3mNDdYg4i2rWKyE=", + "@angular-devkit/schematics": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.3.9.tgz", + "integrity": "sha512-xzROGCYp7aQbeJ3V6YC0MND7wKEAdWqmm/GaCufEk0dDS8ZGe0sQhcM2oBRa2nQqGQNeThFIH51kx+FayrJP0w==", + "dev": true, "requires": { - "tslib": "1.9.3" + "@angular-devkit/core": "7.3.9", + "rxjs": "6.3.3" + }, + "dependencies": { + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "1.9.3" + } + } } }, - "@angular/http": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@angular/http/-/http-5.0.1.tgz", - "integrity": "sha1-NQy99jz6yJOWE9dT/wce1YpgVhs=", + "@angular/cli": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.3.9.tgz", + "integrity": "sha512-7oJj7CKDlFUbQav1x1CV4xKKcbt0pnxY4unKcm7Q1tVXhu8bU2bc3cDA0aJnbofcYb6TJcd/C2qHgCt78q7edA==", + "dev": true, "requires": { - "tslib": "1.9.3" + "@angular-devkit/architect": "0.13.9", + "@angular-devkit/core": "7.3.9", + "@angular-devkit/schematics": "7.3.9", + "@schematics/angular": "7.3.9", + "@schematics/update": "0.13.9", + "@yarnpkg/lockfile": "1.1.0", + "ini": "1.3.5", + "inquirer": "6.2.1", + "npm-package-arg": "6.1.0", + "open": "6.0.0", + "pacote": "9.4.0", + "semver": "5.6.0", + "symbol-observable": "1.2.0" } }, - "@angular/platform-browser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-5.0.1.tgz", - "integrity": "sha1-FIld0w7Sow7nuZx2t2R0j0bBqGI=", + "@angular/common": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.2.15.tgz", + "integrity": "sha512-2b5JY2HWVHCf3D1GZjmde7jdAXSTXkYtmjLtA9tQkjOOTr80eHpNSujQqnzb97dk9VT9OjfjqTQd7K3pxZz8jw==", "requires": { "tslib": "1.9.3" } }, - "@angular/platform-browser-dynamic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.0.1.tgz", - "integrity": "sha1-Fttn1S1FMVY6sVQpxr3+GLwb7cg=", + "@angular/compiler": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.2.15.tgz", + "integrity": "sha512-5yb4NcLk8GuXkYf7Dcor4XkGueYp4dgihzDmMjYDUrV0NPhubKlr+SwGtLOtzgRBWJ1I2bO0S3zwa0q0OgIPOw==", + "dev": true, "requires": { "tslib": "1.9.3" } }, - "@babel/runtime": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.2.0.tgz", - "integrity": "sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==", - "requires": { - "regenerator-runtime": "0.12.1" - } - }, - "@download/blockies": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@download/blockies/-/blockies-1.0.3.tgz", - "integrity": "sha512-iGDh2M6pFuXg9kyW+U//963LKylSLFpLG5hZvUppCjhkiDwsYquQPyamxCQlLASYySS3gGKAki2eWG9qIHKCew==" - }, - "@ionic-native/app-version": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@ionic-native/app-version/-/app-version-4.18.0.tgz", - "integrity": "sha512-8zm0jFNk5UNLSoeNUdjIRjbC9zTMmWggsm457Tj9EfELjn3OBbOGJBT3DnkVVWoRHOjcOmERkCld6m5kgfth3Q==" - }, - "@ionic-native/camera-preview": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@ionic-native/camera-preview/-/camera-preview-4.17.0.tgz", - "integrity": "sha512-0b38kl3hQIzr33Q8xn0yoLRrqTeuMkbIXs3R+b4Xm/lOorMLeu17vl+QnkUQhZu73z0mf56/ExpFoQvaDsmryg==" - }, - "@ionic-native/clipboard": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@ionic-native/clipboard/-/clipboard-4.17.0.tgz", - "integrity": "sha512-spDY3NIPg+nDDYgy63NLwJWVs37d1iZMYHfzcf/8CAK+H+VeSnS3CDoXdsL9ga3Y/YuR6uItf3Q8xhUTUPgljA==" - }, - "@ionic-native/core": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@ionic-native/core/-/core-4.17.0.tgz", - "integrity": "sha512-GByYdUiQPKdDzW5iovVGxnFvDUrh8si5Fb9NescnudkiQcJCYpG47uD489HugfBoqXF+U+3FUoArJnLE9PjM8g==" - }, - "@ionic-native/deeplinks": { - "version": "4.20.0", - "resolved": "https://registry.npmjs.org/@ionic-native/deeplinks/-/deeplinks-4.20.0.tgz", - "integrity": "sha512-lBbdLkxvzpzIyNF6HCW8RwZ3N8bvosZLYi9jBgdrmr+w/PtA+FInr+5D1FmTF8ljsB2hdpbciivVjclCuuhgJg==" - }, - "@ionic-native/device-motion": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@ionic-native/device-motion/-/device-motion-4.17.0.tgz", - "integrity": "sha512-HOfD8ljb6n2/PUAeM33jZVhxRJXsVw+CQKI7Glyp4YiYHeUxosKDxb9XluhFDy2rSKYoEc92TYO338ZWPyQjgg==" - }, - "@ionic-native/diagnostic": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@ionic-native/diagnostic/-/diagnostic-4.17.0.tgz", - "integrity": "sha512-wyYq9jfEfMw24AgnhS54VWELWnXTIFaBXjkxXekJJtJ5kLk2RPWL53zftIoIIuueVIzDiQed354JATAKqc0YbQ==" - }, - "@ionic-native/gyroscope": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@ionic-native/gyroscope/-/gyroscope-4.17.0.tgz", - "integrity": "sha512-hjvtPAMsnPxzcFopcurub8gArPTMDRf487J8FeiWlj/Zt8Wge7kFSPMP79O+n/tODYzOJZRwkdtT22Qk1ak6GQ==" - }, - "@ionic-native/qr-scanner": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@ionic-native/qr-scanner/-/qr-scanner-4.17.0.tgz", - "integrity": "sha512-doKxn68rUyrnBmgQ5CvZG7sW0jHXdbamINrfMxSyPeivYe8CptC+gPqZeSUY49XlxRPkKEXzKjDevU/DRR+KdA==" - }, - "@ionic-native/splash-screen": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@ionic-native/splash-screen/-/splash-screen-4.4.0.tgz", - "integrity": "sha512-M/O9dp4KpMEjkp9UaCXIRE6N/Ok94JSieQ6wu1/c7wVyRlSJ0ve8Rjco1iCDxJNmtzWK0vDF5unNydKG40xAaw==" - }, - "@ionic-native/status-bar": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@ionic-native/status-bar/-/status-bar-4.17.0.tgz", - "integrity": "sha512-lFlhDRNbErvJorHl0qUzRCEmmGd2j8LHpvNZJLwD3IvKI4v+IgethSCA+R5V0pmOpN+aVSLDUgr3aJW439en0w==" - }, - "@ionic/app-scripts": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@ionic/app-scripts/-/app-scripts-3.2.0.tgz", - "integrity": "sha512-JZkRPg/qtOW3u3Dy/Z2EQ8D41ytK14tnuNck782JBAyL4kc6cCju589YNuiJc3DionAGu/B0Qsmv9czw/McHQg==", + "@angular/compiler-cli": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.2.15.tgz", + "integrity": "sha512-+AsfyKawmj/sa+m4Pz8VSRFbCfx/3IOjAuuEjhopbyr154YpPDSu8NTbcwzq3yfbVcPwK4/4exmbQzpsndaCTg==", "dev": true, "requires": { - "@angular-devkit/build-optimizer": "0.0.35", - "autoprefixer": "7.2.6", - "chalk": "2.4.1", - "chokidar": "1.7.0", - "clean-css": "4.2.1", - "cross-spawn": "5.1.0", - "dotenv-webpack": "1.5.7", - "express": "4.16.4", - "fs-extra": "4.0.3", - "glob": "7.1.3", - "json-loader": "0.5.7", - "node-sass": "4.9.0", - "os-name": "2.0.1", - "postcss": "6.0.23", - "proxy-middleware": "0.15.0", - "reflect-metadata": "0.1.12", - "rollup": "0.50.0", - "rollup-plugin-commonjs": "8.2.6", - "rollup-plugin-node-resolve": "3.0.0", + "canonical-path": "1.0.0", + "chokidar": "2.1.6", + "convert-source-map": "1.6.0", + "dependency-graph": "0.7.2", + "magic-string": "0.25.2", + "minimist": "1.2.0", + "reflect-metadata": "0.1.13", + "shelljs": "0.8.3", "source-map": "0.6.1", - "tiny-lr": "1.1.1", - "tslint": "5.11.0", - "tslint-eslint-rules": "4.1.1", - "uglify-es": "3.2.2", - "webpack": "3.8.1", - "ws": "3.3.2", - "xml2js": "0.4.19" + "tslib": "1.9.3", + "yargs": "9.0.1" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "chokidar": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", + "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } + "anymatch": "2.0.0", + "async-each": "1.0.3", + "braces": "2.3.2", + "fsevents": "1.2.9", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.1", + "normalize-path": "3.0.0", + "path-is-absolute": "1.0.1", + "readdirp": "2.2.1", + "upath": "1.1.2" } }, - "commander": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", - "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "locate-path": "2.0.0" + "lru-cache": "4.1.5", + "shebang-command": "1.2.0", + "which": "1.3.1" } }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "graceful-fs": "4.1.15", - "jsonfile": "4.0.0", - "universalify": "0.1.2" + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "4.1.15" - } - }, "load-json-file": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { @@ -360,17 +315,27 @@ "strip-bom": "3.0.0" } }, - "loader-utils": { + "mem": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "mimic-fn": "1.2.0" } }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, "os-locale": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", @@ -391,6 +356,12 @@ "pify": "2.3.0" } }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -398,7 +369,7 @@ "dev": true, "requires": { "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", + "normalize-package-data": "2.5.0", "path-type": "2.0.0" } }, @@ -426,23 +397,15 @@ "requires": { "is-fullwidth-code-point": "2.0.0", "strip-ansi": "4.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" } }, "strip-bom": { @@ -451,99 +414,22 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true }, - "uglify-es": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.2.2.tgz", - "integrity": "sha512-l+s5VLzFwGJfS+fbqaGf/Dfwo1MF13jLOF2ekL0PytzqEqQ6cVppvHf4jquqFok+35USMpKjqkYxy6pQyUcuug==", - "dev": true, - "requires": { - "commander": "2.12.2", - "source-map": "0.6.1" - } - }, - "webpack": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.8.1.tgz", - "integrity": "sha512-5ZXLWWsMqHKFr5y0N3Eo5IIisxeEeRAajNq4mELb/WELOR7srdbQk2N5XiyNy2A/AgvlR3AmeBCZJW8lHrolbw==", - "dev": true, - "requires": { - "acorn": "5.7.3", - "acorn-dynamic-import": "2.0.2", - "ajv": "5.5.2", - "ajv-keywords": "2.1.1", - "async": "2.6.1", - "enhanced-resolve": "3.4.1", - "escope": "3.6.0", - "interpret": "1.1.0", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.1", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.5.0", - "tapable": "0.2.8", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.6.0", - "webpack-sources": "1.3.0", - "yargs": "8.0.2" - }, - "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "ws": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.2.tgz", - "integrity": "sha512-t+WGpsNxhMR4v6EClXS8r8km5ZljKJzyGhJf7goJz9k5Ye3+b5Bvno5rjqPuIBn5mnn5GBb7o8IrIWHxX1qOLQ==", - "dev": true, - "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.2", - "ultron": "1.1.1" - } - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", + "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", "dev": true, "requires": { "camelcase": "4.1.0", @@ -572,1276 +458,1089 @@ } } }, - "@ionic/cli-utils": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@ionic/cli-utils/-/cli-utils-1.9.1.tgz", - "integrity": "sha512-DAheqKm1CRWF2jokzo+lXIv6HNGfaYnICZb03VpFratJbWxpsXZxqqUu8vDRAVRSAb3XCYAZPer5js7zfE5n0w==", - "requires": { - "@types/gulp": "3.8.36", - "archiver": "2.1.1", - "chalk": "2.4.1", - "chokidar": "1.7.0", - "ci-info": "1.6.0", - "cross-spawn": "5.1.0", - "dargs": "5.1.0", - "diff": "3.5.0", - "elementtree": "0.1.7", - "express": "4.16.4", - "inquirer": "3.3.0", - "leek": "0.0.24", - "lodash": "4.17.11", - "minimist": "1.2.0", - "ncp": "2.0.0", - "opn": "5.4.0", - "proxy-middleware": "0.15.0", - "semver": "5.6.0", - "slice-ansi": "1.0.0", - "ssh-config": "1.1.3", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "superagent": "3.8.3", - "tar": "2.2.1", - "tiny-lr": "1.1.1", - "tslib": "1.9.3", - "uuid": "3.3.2", - "wrap-ansi": "3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.3" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "3.0.0" - } - }, - "wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", - "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0" - } - } + "@angular/core": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.2.15.tgz", + "integrity": "sha512-XsuYm0jEU/mOqwDOk2utThv8J9kESkAerfuCHClE9rB2TtHUOGCfekF7lJWqjjypu6/J9ygoPFo7hdAE058ZGg==", + "requires": { + "tslib": "1.9.3" } }, - "@ionic/storage": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ionic/storage/-/storage-2.2.0.tgz", - "integrity": "sha512-2pszrzmI+fAar2Rx0WmJDVpc15D1k5tvLkB49NLYWJ2pOMaO/3/vp7mg/mEbg3rdsPE9FRbYI6vdKjQ2pP1EWA==", + "@angular/forms": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.2.15.tgz", + "integrity": "sha512-p0kcIQLtBBC1qeTA6M3nOuXf/k91E80FKquVM9zEsO2kDjI0oZJVfFYL2UMov5samlJOPN+t6lRHEIUa7ApPsw==", "requires": { - "localforage": "1.7.1", - "localforage-cordovasqlitedriver": "1.7.0", "tslib": "1.9.3" } }, - "@ngx-translate/core": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-8.0.0.tgz", - "integrity": "sha1-dR/WtRLYDzp0jS3o38lt/vopr+A=" - }, - "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", - "dev": true - }, - "@types/gulp": { - "version": "3.8.36", - "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-3.8.36.tgz", - "integrity": "sha512-u6/zWPzYRNPAtvyFJ3/RSXjmBaBM1dVs5kW22/jU6J786ZGLfSndhLoNOpFI6FGQvqTA+QzFHjSMhpkAN+wxcQ==", + "@angular/http": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/http/-/http-7.2.15.tgz", + "integrity": "sha512-TR7PEdmLWNIre3Zn8lvyb4lSrvPUJhKLystLnp4hBMcWsJqq5iK8S3bnlR4viZ9HMlf7bW7+Hm4SI6aB3tdUtw==", "requires": { - "@types/node": "10.12.3", - "@types/orchestrator": "0.3.2", - "@types/vinyl": "2.0.2" - }, - "dependencies": { - "@types/node": { - "version": "10.12.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.3.tgz", - "integrity": "sha512-sfGmOtSMSbQ/AKG8V9xD1gmjquC9awIIZ/Kj309pHb2n3bcRAcGMQv5nJ6gCXZVsneGE4+ve8DXKRCsrg3TFzg==" - } + "tslib": "1.9.3" } }, - "@types/jasmine": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.9.tgz", - "integrity": "sha512-8dPZwjosElZOGGYw1nwTvOEMof4gjwAWNFS93nBI091BoEfd5drnHOLRMiRF/LOPuMTn5LgEdv0bTUO8QFVuHQ==", + "@angular/language-service": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-7.2.15.tgz", + "integrity": "sha512-Ig5Jr7mnDelaZvSbUd9YhI5am3q1ku9xelAuwvtyDKvQJeKQj3BtTagcOgWrnQBfrJ/FsA/M5Zo48ncSsV0tqQ==", "dev": true }, - "@types/node": { - "version": "9.6.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.36.tgz", - "integrity": "sha512-Fbw+AdRLL01vv7Rk7bYaNPecqmKoinJHGbpKnDpbUZmUj/0vj3nLqPQ4CNBzr3q2zso6Cq/4jHoCAdH78fvJrw==", - "dev": true + "@angular/platform-browser": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.2.15.tgz", + "integrity": "sha512-aYgmPsbC9Tvp9vmKWD8voeAp4crwCay7/D6lM3ClEe2EeK934LuEXq3/uczMrFVbnIX7BBIo8fh03Tl7wbiGPw==", + "requires": { + "tslib": "1.9.3" + } }, - "@types/orchestrator": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@types/orchestrator/-/orchestrator-0.3.2.tgz", - "integrity": "sha512-cKB4yTX0wGaRCSkdHDX2fkGQbMAA8UOshC2U7DQky1CE5o+5q2iQQ8VkbPbE/88uaTtsusvBPMcCX7dgmjxBhQ==", + "@angular/platform-browser-dynamic": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.2.15.tgz", + "integrity": "sha512-UL2PqhzXMD769NQ6Lh6pxlBDKvN9Qol3XLRFil80lwJ1GRW16ITeYbCamcafIH2GOyd88IhmYcbMfUQ/6q4MMQ==", "requires": { - "@types/node": "10.12.3", - "@types/q": "1.5.1" - }, - "dependencies": { - "@types/node": { - "version": "10.12.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.3.tgz", - "integrity": "sha512-sfGmOtSMSbQ/AKG8V9xD1gmjquC9awIIZ/Kj309pHb2n3bcRAcGMQv5nJ6gCXZVsneGE4+ve8DXKRCsrg3TFzg==" - } + "tslib": "1.9.3" } }, - "@types/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz", - "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA==" + "@angular/router": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.2.15.tgz", + "integrity": "sha512-qAubRJRQanguUqJQ76J9GSZ4JFtoyhJKRmX5P23ANZJXpB6YLzF2fJmOGi+E6cV8F0tKBMEq1pjxFTisx0MXwQ==", + "requires": { + "tslib": "1.9.3" + } }, - "@types/selenium-webdriver": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.13.tgz", - "integrity": "sha512-rI0LGoMiZGUM+tjDakQpwZOvcmQoubiJ7hxqrYU12VRxBuGGvOThxrBOU/QmJKlKg1WG6FMzuvcEyLffvVSsmw==", - "dev": true + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "7.0.0" + } }, - "@types/vinyl": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.2.tgz", - "integrity": "sha512-2iYpNuOl98SrLPBZfEN9Mh2JCJ2EI9HU35SfgBEb51DcmaHkhp8cKMblYeBqMQiwXMgAD3W60DbQ4i/UdLiXhw==", + "@babel/generator": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", + "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "dev": true, "requires": { - "@types/node": "10.12.3" + "@babel/types": "7.4.4", + "jsesc": "2.5.2", + "lodash": "4.17.11", + "source-map": "0.5.7", + "trim-right": "1.0.1" }, "dependencies": { - "@types/node": { - "version": "10.12.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.3.tgz", - "integrity": "sha512-sfGmOtSMSbQ/AKG8V9xD1gmjquC9awIIZ/Kj309pHb2n3bcRAcGMQv5nJ6gCXZVsneGE4+ve8DXKRCsrg3TFzg==" + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, - "@zxing/library": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@zxing/library/-/library-0.7.0.tgz", - "integrity": "sha512-VJ1cJaCWVF8MspnuyaZKGKlrSQLqQ5usgSap8uuCAvWGQ6W6OwN1NeGvnjhT+9hmnwkHK8XjaflvzaDBC7nKnw==", + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, "requires": { - "text-encoding": "0.6.4", - "ts-custom-error": "2.2.1" + "@babel/helper-get-function-arity": "7.0.0", + "@babel/template": "7.4.4", + "@babel/types": "7.4.4" } }, - "@zxing/ngx-scanner": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@zxing/ngx-scanner/-/ngx-scanner-1.3.0.tgz", - "integrity": "sha512-CA62X8eR+2FnF0XFzVAjhH8U//Quw5ACkUM2/WryXMWaT8v+uapBhKkpUldXfKav5L5ADCO2nv2MLcuhD55QlQ==", + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "dev": true, "requires": { - "@zxing/library": "0.7.0", - "tslib": "1.9.3" + "@babel/types": "7.4.4" } }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "@babel/helper-split-export-declaration": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "dev": true, + "requires": { + "@babel/types": "7.4.4" + } }, - "abi-decoder": { - "version": "github:laurentjacob/abi-decoder#a4b60b35d12af863026d6d723bec73b172c4e5b7", - "requires": { - "babel-core": "6.26.3", - "babel-loader": "6.4.1", - "babel-plugin-add-module-exports": "0.2.1", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-runtime": "6.23.0", - "babel-preset-es2015": "6.24.1", - "chai": "3.5.0", - "web3": "1.0.0-beta.30", - "webpack": "2.7.0" + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "esutils": "2.0.2", + "js-tokens": "4.0.0" }, "dependencies": { - "web3": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.30.tgz", - "integrity": "sha1-rT52GEWusvQKd2DN51eTdzpDHs0=", - "requires": { - "web3-bzz": "1.0.0-beta.30", - "web3-core": "1.0.0-beta.30", - "web3-eth": "1.0.0-beta.30", - "web3-eth-personal": "1.0.0-beta.30", - "web3-net": "1.0.0-beta.30", - "web3-shh": "1.0.0-beta.30", - "web3-utils": "1.0.0-beta.30" - } + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true } } }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "@babel/parser": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", + "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==", + "dev": true + }, + "@babel/template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "dev": true, "requires": { - "mime-types": "2.1.21", - "negotiator": "0.6.1" + "@babel/code-frame": "7.0.0", + "@babel/parser": "7.4.5", + "@babel/types": "7.4.4" } }, - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" - }, - "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "@babel/traverse": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz", + "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==", + "dev": true, "requires": { - "acorn": "4.0.13" + "@babel/code-frame": "7.0.0", + "@babel/generator": "7.4.4", + "@babel/helper-function-name": "7.1.0", + "@babel/helper-split-export-declaration": "7.4.4", + "@babel/parser": "7.4.5", + "@babel/types": "7.4.4", + "debug": "4.1.1", + "globals": "11.12.0", + "lodash": "4.17.11" }, "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true } } }, - "adm-zip": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.11.tgz", - "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==", - "dev": true - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "@babel/types": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", "dev": true, "requires": { - "es6-promisify": "5.0.0" + "esutils": "2.0.2", + "lodash": "4.17.11", + "to-fast-properties": "2.0.0" + }, + "dependencies": { + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + } } }, - "airgap-coin-lib": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/airgap-coin-lib/-/airgap-coin-lib-0.4.4.tgz", - "integrity": "sha512-fFMyOWf2DbTtAx1mgvr6q/OPjGbyF6KQq7+Xq3uKsTDXiybiTY6tWgZw7mK4jxJlQ3B6LOSkjycgid8Bx0S1dA==", - "requires": { - "@aeternity/hd-wallet": "github:dschoeni/hd-wallet-js#b216450e56954a6e82ace0aade9474673de5d9d5", - "abi-decoder": "github:laurentjacob/abi-decoder#a4b60b35d12af863026d6d723bec73b172c4e5b7", - "axios": "0.18.0", - "bignumber.js": "8.0.1", - "bip39": "2.5.0", - "bitcoinjs-lib": "3.3.2", - "bitcoinjs-lib-zcash": "3.6.1", - "bitgo-utxo-lib": "git+https://github.com/Groestlcoin/bitgo-utxo-lib.git#5d91049fd7a988382df81c8260e244ee56d57aac", - "bs58check": "2.1.2", - "create-hash": "1.2.0", - "cryptocompare": "0.5.0", - "ethereumjs-tx": "1.3.7", - "ethereumjs-util": "5.2.0", - "libsodium-wrappers": "0.7.4", - "rlp": "2.2.3", - "tweetnacl": "1.0.1", - "validate.js": "0.12.0", - "validator": "10.11.0", - "web3": "1.0.0-beta.36" + "@ionic-native/core": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ionic-native/core/-/core-5.7.0.tgz", + "integrity": "sha512-UjSNnS6dPZjzBXrHqY2+UWBwfm8kGctq2l8di16m0+kDZrrSblH73lgjTHeNx/wlkpmZCJoatRwmV6CwiAK4hw==", + "requires": { + "@types/cordova": "0.0.34" } }, - "ajv": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", - "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==", + "@ionic-native/splash-screen": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ionic-native/splash-screen/-/splash-screen-5.7.0.tgz", + "integrity": "sha512-+bWYKN6WSIlP9TwqKV/pILf0A4jdZs/sZD0EO8NyWVVq+FypwNLDsIQ0eDU0oENyu9+I/JghvcrlDExC/hyZwQ==", "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "@types/cordova": "0.0.34" } }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=" - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "@ionic-native/status-bar": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ionic-native/status-bar/-/status-bar-5.7.0.tgz", + "integrity": "sha512-8Ak4Mm2IrX3QebaIahFyJv+SS7GZx/Lf1r3X0cEfJeZ3k04F1CFuRF27PAx2eidQYl0VaJwlxoiqGhq31LY25A==", "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "@types/cordova": "0.0.34" } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "angular2-template-loader": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/angular2-template-loader/-/angular2-template-loader-0.6.2.tgz", - "integrity": "sha1-wNROkP/w+sleiyPwQ6zaf9HFHXw=", + "@ionic/angular": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-4.4.2.tgz", + "integrity": "sha512-ihjhvPFXqDS3HURvAfSH5vMlCersP08pnxfek36IOKX1sYOYq6VI/2miTv+jr7GuIZlmyZan0PibiRZPg7DIqA==", "requires": { - "loader-utils": "0.2.17" + "@ionic/core": "4.4.2", + "tslib": "1.9.3" } }, - "angular2-uuid": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/angular2-uuid/-/angular2-uuid-1.1.1.tgz", - "integrity": "sha1-cvA81TK39AAy6x7PufhFc4S+lW4=" - }, - "angularx-qrcode": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/angularx-qrcode/-/angularx-qrcode-1.5.3.tgz", - "integrity": "sha512-9WTsnOGNv3IvSriVSHOc7k6PIBcqqjivAQXhEF9SjDYgcio63zCkcsAC627vSaTqUoDkgE5MRoT4PO2UMROk2w==", + "@ionic/angular-toolkit": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@ionic/angular-toolkit/-/angular-toolkit-1.5.1.tgz", + "integrity": "sha512-B5LHuzEv/lgFP7yxfOA3/wggDM/X1mDkWFX8rZtaBRZBbC0vtZwdwDu73RnkfFZ0jTFyIgtoBW8qTrrCyd5MLA==", + "dev": true, "requires": { - "qrcodejs2": "0.0.2" + "@schematics/angular": "7.3.9", + "tslib": "1.9.3", + "typescript": "3.3.4000", + "ws": "6.2.1" + }, + "dependencies": { + "typescript": { + "version": "3.3.4000", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.4000.tgz", + "integrity": "sha512-jjOcCZvpkl2+z7JFn0yBOoLQyLoIkNZAs/fYJkUG6VKy6zLPHJGfQJYFHzibB6GJaF/8QrcECtlQ5cpvRHSMEA==", + "dev": true + } } }, - "ansi": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" + "@ionic/core": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-4.4.2.tgz", + "integrity": "sha512-B6cA8Nz29hB+FxRHZ78em1Zlo2r1NqTl6HfiIA8lQtfI9tj4VQe7R1mF/Qb9jaati1U2k4eaHbxiwJ50Hez/4w==", + "requires": { + "ionicons": "4.5.8" + } }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "@ngtools/webpack": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.3.9.tgz", + "integrity": "sha512-+ROpqfCXLdQwfP+UNDLk4p959ZrocpStkdd2Iy9CeOJ8yDkityqpstTwQC3oHzzu/95BiyZ0hrHbM6AsPPIvJg==", "dev": true, "requires": { - "string-width": "2.1.1" + "@angular-devkit/core": "7.3.9", + "enhanced-resolve": "4.1.0", + "rxjs": "6.3.3", + "tree-kill": "1.2.1", + "webpack-sources": "1.3.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "tslib": "1.9.3" } } } }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==" - }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "@schematics/angular": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.3.9.tgz", + "integrity": "sha512-B3lytFtFeYNLfWdlrIzvy3ulFRccD2/zkoL0734J+DAGfUz7vbysJ50RwYL46sQUcKdZdvb48ktfu1S8yooP6Q==", "dev": true, "requires": { - "ansi-wrap": "0.1.0" + "@angular-devkit/core": "7.3.9", + "@angular-devkit/schematics": "7.3.9", + "typescript": "3.2.4" + }, + "dependencies": { + "typescript": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", + "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", + "dev": true + } } }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "@schematics/update": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.13.9.tgz", + "integrity": "sha512-4MQcaKFxhMzZyE//+DknDh3h3duy3avg2oxSHxdwXlCZ8Q92+4lpegjJcSRiqlEwO4qeJ5XnrjrvzfIiaIZOmA==", + "dev": true, "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" - } - }, - "app-builder-bin": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-2.5.1.tgz", - "integrity": "sha512-Hm+eyyfQCs5N5avLAw3w9Cf1S5TX/t6ecAfHusbzCDh/rLKLKYso2vwDWH4OQZ8uWLnuJwaAUDf3PstRcn0H+A==", - "dev": true - }, - "app-builder-lib": { - "version": "20.36.2", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-20.36.2.tgz", - "integrity": "sha512-5FxLnWI13t0LLmh2QjmPx3KW/xhj67su7UxdCzQgULsUmYurdPx8yAOb9YxoX+RpR08inqt+H3GBOJlqSSrVgg==", - "dev": true, - "requires": { - "7zip-bin": "4.1.0", - "app-builder-bin": "2.5.1", - "async-exit-hook": "2.0.1", - "bluebird-lst": "1.0.6", - "builder-util": "9.3.0", - "builder-util-runtime": "8.0.2", - "chromium-pickle-js": "0.2.0", - "debug": "4.1.0", - "ejs": "2.6.1", - "electron-osx-sign": "0.4.11", - "electron-publish": "20.36.0", - "fs-extra-p": "7.0.0", - "hosted-git-info": "2.7.1", - "is-ci": "1.2.1", - "isbinaryfile": "3.0.3", - "js-yaml": "3.12.0", - "lazy-val": "1.0.3", - "minimatch": "3.0.4", - "normalize-package-data": "2.4.0", - "plist": "3.0.1", - "read-config-file": "3.2.0", - "sanitize-filename": "1.6.1", + "@angular-devkit/core": "7.3.9", + "@angular-devkit/schematics": "7.3.9", + "@yarnpkg/lockfile": "1.1.0", + "ini": "1.3.5", + "pacote": "9.4.0", + "rxjs": "6.3.3", "semver": "5.6.0", - "temp-file": "3.3.2" + "semver-intersect": "1.4.0" }, "dependencies": { - "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", "dev": true, "requires": { - "ms": "2.1.1" + "tslib": "1.9.3" } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true } } }, - "append-transform": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + }, + "@types/jasmine": { + "version": "2.8.16", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.16.tgz", + "integrity": "sha512-056oRlBBp7MDzr+HoU5su099s/s7wjZ3KcHxLfv+Byqb9MwdLUvsfLgw1VS97hsh3ddxSPyQu+olHMnoVTUY6g==", + "dev": true + }, + "@types/jasminewd2": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.6.tgz", + "integrity": "sha512-2ZOKrxb8bKRmP/po5ObYnRDgFE4i+lQiEB27bAMmtMWLgJSqlIDqlLx6S0IRorpOmOPRQ6O80NujTmQAtBkeNw==", "dev": true, "requires": { - "default-require-extensions": "1.0.0" + "@types/jasmine": "2.8.16" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "@types/node": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.4.tgz", + "integrity": "sha512-j8YL2C0fXq7IONwl/Ud5Kt0PeXw22zGERt+HSSnwbKOJVsAGkEz3sFCYwaF9IOuoG1HOtE0vKCj6sXF7Q0+Vaw==", "dev": true }, - "archiver": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz", - "integrity": "sha1-/2YrSnggFJSj7lRNOjP+dJZQnrw=", - "requires": { - "archiver-utils": "1.3.0", - "async": "2.6.1", - "buffer-crc32": "0.2.13", - "glob": "7.1.3", - "lodash": "4.17.11", - "readable-stream": "2.3.6", - "tar-stream": "1.6.2", - "zip-stream": "1.2.0" - } + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true }, - "archiver-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", - "requires": { - "glob": "7.1.3", - "graceful-fs": "4.1.15", - "lazystream": "1.0.0", - "lodash": "4.17.11", - "normalize-path": "2.1.1", - "readable-stream": "2.3.6" - } + "@types/q": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", + "dev": true }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" - } + "@types/selenium-webdriver": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.16.tgz", + "integrity": "sha512-lMC2G0ItF2xv4UCiwbJGbnJlIuUixHrioOhNGHSCsYCJ8l4t9hMCUimCytvFv7qy6AfSzRxhRHoGa+UqaqwyeA==", + "dev": true }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/webpack-sources": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.5.tgz", + "integrity": "sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "@types/node": "12.0.4", + "@types/source-list-map": "0.1.2", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "@webassemblyjs/ast": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", + "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", + "dev": true, "requires": { - "arr-flatten": "1.1.0" + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11" } }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", + "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==", "dev": true }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "@webassemblyjs/helper-api-error": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", + "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==", + "dev": true }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "@webassemblyjs/helper-buffer": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", + "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==", "dev": true }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "@webassemblyjs/helper-code-frame": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", + "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", "dev": true, "requires": { - "array-uniq": "1.0.3" + "@webassemblyjs/wast-printer": "1.7.11" } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "@webassemblyjs/helper-fsm": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", + "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==", "dev": true }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "arraybuffer.slice": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "@webassemblyjs/helper-module-context": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", + "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==", "dev": true }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", + "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==", "dev": true }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "@webassemblyjs/helper-wasm-section": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", + "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", + "dev": true, "requires": { - "safer-buffer": "2.1.2" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11" } }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "@webassemblyjs/ieee754": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", + "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", + "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "@xtuc/ieee754": "1.2.0" } }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "@webassemblyjs/leb128": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", + "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", + "dev": true, "requires": { - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - } - } + "@xtuc/long": "4.2.1" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "@webassemblyjs/utf8": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", + "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==", + "dev": true }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + "@webassemblyjs/wasm-edit": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", + "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/helper-wasm-section": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-opt": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "@webassemblyjs/wast-printer": "1.7.11" + } }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "@webassemblyjs/wasm-gen": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", + "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" + } }, - "ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=" + "@webassemblyjs/wasm-opt": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", + "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11" + } }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "@webassemblyjs/wasm-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", + "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", + "dev": true, "requires": { - "lodash": "4.17.11" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" } }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" + "@webassemblyjs/wast-parser": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", + "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/floating-point-hex-parser": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-code-frame": "1.7.11", + "@webassemblyjs/helper-fsm": "1.7.11", + "@xtuc/long": "4.2.1" + } }, - "async-exit-hook": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", - "dev": true + "@webassemblyjs/wast-printer": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", + "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11", + "@xtuc/long": "4.2.1" + } }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "@xtuc/long": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", + "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", + "dev": true }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true }, - "autoprefixer": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", - "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "requires": { - "browserslist": "2.11.3", - "caniuse-lite": "1.0.30000910", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "6.0.23", - "postcss-value-parser": "3.3.1" + "jsonparse": "1.3.1", + "through": "2.3.8" } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "axios": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", - "requires": { - "follow-redirects": "1.5.9", - "is-buffer": "1.1.6" - } + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "mime-types": "2.1.24", + "negotiator": "0.6.2" } }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.6.0", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.11", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" - } + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.11", - "source-map": "0.5.7", - "trim-right": "1.0.1" - } + "acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "dev": true }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } + "adm-zip": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz", + "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==", + "dev": true }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.11" - } + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "es6-promisify": "5.0.0" } }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "agentkeepalive": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", + "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "humanize-ms": "1.2.1" } }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "ajv": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", + "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" } }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.11" - } + "ajv-keywords": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", + "dev": true }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } + "ansi": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", + "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" }, - "babel-loader": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-6.4.1.tgz", - "integrity": "sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=", - "requires": { - "find-cache-dir": "0.1.1", - "loader-utils": "0.2.17", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" - } + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "requires": { - "babel-runtime": "6.26.0" - } + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true }, - "babel-plugin-add-module-exports": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz", - "integrity": "sha1-mumh9KjcZ/DN7E9K7aHkOl/2XiU=" + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "requires": { - "babel-runtime": "6.26.0" - } + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { - "babel-runtime": "6.26.0" + "color-convert": "1.9.3" } }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, "requires": { - "babel-runtime": "6.26.0" + "micromatch": "3.1.10", + "normalize-path": "2.1.1" } }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.11" - } + "app-root-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.2.1.tgz", + "integrity": "sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA==", + "dev": true }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "append-transform": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "dev": true, "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "default-require-extensions": "2.0.0" } }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, "requires": { - "babel-runtime": "6.26.0" + "delegates": "1.0.0", + "readable-stream": "2.3.6" } }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } + "arg": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", + "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", + "dev": true }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "requires": { - "babel-runtime": "6.26.0" + "sprintf-js": "1.0.3" } }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "requires": { - "babel-runtime": "6.26.0" - } + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" - } + "array-differ": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-2.1.0.tgz", + "integrity": "sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w==", + "dev": true }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true, + "optional": true }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" + "array-uniq": "1.0.3" } }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true, + "optional": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, "requires": { - "babel-runtime": "6.26.0" + "safer-buffer": "2.1.2" } }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, "requires": { - "babel-runtime": "6.26.0" + "object-assign": "4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } } }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "dev": true, "requires": { - "babel-runtime": "6.26.0" + "lodash": "4.17.11" } }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true, + "optional": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "9.4.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.6.tgz", + "integrity": "sha512-Yp51mevbOEdxDUy5WjiKtpQaecqYq9OqZSL04rSoCiry7Tc5I9FEyo3bfxiTJc1DfHeKwSFCUYbBAiOQ2VGfiw==", + "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" + "browserslist": "4.6.1", + "caniuse-lite": "1.0.30000971", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1" } }, - "babel-plugin-transform-regenerator": { + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "babel-code-frame": { "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, "requires": { - "regenerator-transform": "0.10.1" + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } } }, - "babel-plugin-transform-runtime": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", - "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.11", + "source-map": "0.5.7", + "trim-right": "1.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-preset-es2015": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", - "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, "requires": { - "babel-core": "6.26.3", - "babel-runtime": "6.26.0", - "core-js": "2.5.7", - "home-or-tmp": "2.0.0", - "lodash": "4.17.11", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" + "babel-runtime": "6.26.0" } }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, "requires": { - "core-js": "2.5.7", + "core-js": "2.6.9", "regenerator-runtime": "0.11.1" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } } }, "babel-template": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-traverse": "6.26.0", @@ -1854,6 +1553,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, "requires": { "babel-code-frame": "6.26.0", "babel-messages": "6.23.0", @@ -1870,6 +1570,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", @@ -1880,7 +1581,8 @@ "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true }, "backo2": { "version": "1.0.2", @@ -1897,10 +1599,11 @@ "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, "requires": { "cache-base": "1.0.1", "class-utils": "0.3.6", - "component-emitter": "1.2.1", + "component-emitter": "1.3.0", "define-property": "1.0.0", "isobject": "3.0.1", "mixin-deep": "1.3.1", @@ -1911,6 +1614,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "1.0.2" } @@ -1919,6 +1623,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "6.0.2" } @@ -1927,6 +1632,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "6.0.2" } @@ -1935,32 +1641,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "1.0.0", "is-data-descriptor": "1.0.0", "kind-of": "6.0.2" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, - "base-x": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.5.tgz", - "integrity": "sha512-C3picSgzPSLE+jW3tcBzJoGwitOtazb5B+5YmAxZm2ybmTi9LNgAtDO/jjVEBZwHoXmDBZ9m/IELj3elJVRBcA==", - "requires": { - "safe-buffer": "5.1.2" - } - }, "base64-arraybuffer": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", @@ -1978,26 +1667,21 @@ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", "dev": true }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, "requires": { "tweetnacl": "0.14.5" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - } } }, - "bech32": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.3.tgz", - "integrity": "sha512-yuVFUvrNcoJi0sv5phmqc6P+Fl1HjRDRNOOkHY2X/3LBy2bIGNSFx4fZ95HMaXHupuS7cZR15AsvtmCIF4UEyg==" - }, "better-assert": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", @@ -2008,419 +1692,105 @@ } }, "big-integer": { - "version": "1.6.36", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.36.tgz", - "integrity": "sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==" + "version": "1.6.43", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.43.tgz", + "integrity": "sha512-9dULc9jsKmXl0Aeunug8wbF+58n+hQoFjqClN7WeZwGLh0XJUWyJJ9Ee+Ep+Ql/J9fRsTVaeThp8MhiCCrY0Jg==" }, "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" - }, - "bigi": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz", - "integrity": "sha1-nGZalfiLiwj8Bc/XMfVhhZ1yWCU=" - }, - "bignumber.js": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-8.0.1.tgz", - "integrity": "sha512-zAySveTJXkgLYCBi0b14xzfnOs+f3G6x36I8w2a1+PFQpWk/dp0mI0F+ZZK2bu+3ELewDcSyP+Cfq++NcHX7sg==" + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true }, "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==" + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "optional": true, "requires": { - "file-uri-to-path": "1.0.0" + "inherits": "2.0.3" } }, - "binstring": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/binstring/-/binstring-0.2.1.tgz", - "integrity": "sha1-ihdNMB9tVO/aVQ3Zi7TLUk6s110=" - }, - "bip32-path": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/bip32-path/-/bip32-path-0.4.2.tgz", - "integrity": "sha1-XbBBataCJxLwd4NuJVe4aXwMfJk=" - }, - "bip39": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-2.5.0.tgz", - "integrity": "sha512-xwIx/8JKoT2+IPJpFEfXoWdYwP7UVAoUxxLNfGCfVowaJE7yg1Y5B1BVPqlUNsBq5/nGwmFkwRJ8xDW4sX8OdA==", + "blocking-proxy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", + "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", + "dev": true, "requires": { - "create-hash": "1.2.0", - "pbkdf2": "3.0.17", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2", - "unorm": "1.4.1" - } - }, - "bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "bitcoin-ops": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz", - "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==" - }, - "bitcoin-script": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/bitcoin-script/-/bitcoin-script-0.1.1.tgz", - "integrity": "sha1-UsUE3dweOxMXp7ZWeoiYGz7zkpw=", - "requires": { - "big-integer": "1.6.36", - "bigi": "1.4.2", - "coinkey": "0.1.0", - "ecdsa": "0.6.0", - "js-beautify": "1.10.0", - "ripemd160": "0.2.1", - "secure-random": "1.1.2", - "sha1": "1.1.1", - "sha256": "0.1.1" - }, - "dependencies": { - "ripemd160": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.1.tgz", - "integrity": "sha1-3uGSSKPhyBX/muo551OjN/VqJD0=" - } - } - }, - "bitcoinjs-lib": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-3.3.2.tgz", - "integrity": "sha512-l5qqvbaK8wwtANPf6oEffykycg4383XgEYdia1rI7/JpGf1jfRWlOUCvx5TiTZS7kyIvY4j/UhIQ2urLsvGkzw==", - "requires": { - "bech32": "1.1.3", - "bigi": "1.4.2", - "bip66": "1.1.5", - "bitcoin-ops": "1.4.1", - "bs58check": "2.1.2", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ecurve": "1.0.6", - "merkle-lib": "2.0.10", - "pushdata-bitcoin": "1.0.1", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2", - "typeforce": "1.18.0", - "varuint-bitcoin": "1.1.0", - "wif": "2.0.6" - } - }, - "bitcoinjs-lib-zcash": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib-zcash/-/bitcoinjs-lib-zcash-3.6.1.tgz", - "integrity": "sha512-p09YKY2l0sNf1LjJOO82s4tgxLNdNTwOMN1yRzFm3ozGC87Odx1iq8vD6XTBs/g3nAOsXlmD2VJc2hHCHyH7xg==", - "requires": { - "bech32": "1.1.3", - "bigi": "1.4.2", - "bip66": "1.1.5", - "bitcoin-ops": "1.4.1", - "bitcoin-script": "0.1.1", - "blake2b": "2.1.3", - "bs58check": "2.1.2", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ecurve": "1.0.6", - "merkle-lib": "2.0.10", - "pushdata-bitcoin": "1.0.1", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2", - "typeforce": "1.11.3", - "varuint-bitcoin": "1.1.0", - "wif": "2.0.6" - }, - "dependencies": { - "typeforce": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.11.3.tgz", - "integrity": "sha512-+vllWbxe1AKLkO3KNyZPjb51NRHwRE/8bAi/cmF6TK24VqrPiQPRiHrFV19j1xHxxCHQbIvN4Zfco+skuiXSWQ==", - "requires": { - "inherits": "2.0.3" - } - } - } - }, - "bitgo-utxo-lib": { - "version": "git+https://github.com/Groestlcoin/bitgo-utxo-lib.git#5d91049fd7a988382df81c8260e244ee56d57aac", - "requires": { - "bech32": "0.0.3", - "bigi": "1.4.2", - "bip66": "1.1.5", - "bitcoin-ops": "1.4.1", - "blake2b": "git+https://github.com/BitGo/blake2b.git#6268e6dd678661e0acc4359e9171b97eb1ebf8ac", - "bs58check": "2.1.2", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "debug": "3.1.0", - "ecurve": "1.0.6", - "groestl-hash-js": "git+https://github.com/Groestlcoin/groestl-hash-js.git#ef6a04f1c4d2f0448f0882b5f213ef7a0659baee", - "merkle-lib": "2.0.10", - "pushdata-bitcoin": "1.0.1", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2", - "secp256k1": "3.7.1", - "typeforce": "1.18.0", - "varuint-bitcoin": "1.1.0", - "wif": "2.0.6" - }, - "dependencies": { - "bech32": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-0.0.3.tgz", - "integrity": "sha512-O+K1w8P/aAOLcYwwQ4sbiPYZ51ZIW95lnS4/6nE8Aib/z+OOddQIIPdu2qi94qGDp4HhYy/wJotttXKkak1lXg==" - }, - "blake2b": { - "version": "git+https://github.com/BitGo/blake2b.git#6268e6dd678661e0acc4359e9171b97eb1ebf8ac", - "requires": { - "blake2b-wasm": "git+https://github.com/BitGo/blake2b-wasm.git#193cdb71656c1a6c7f89b05d0327bb9b758d071b", - "nanoassert": "1.1.0" - } - }, - "blake2b-wasm": { - "version": "git+https://github.com/BitGo/blake2b-wasm.git#193cdb71656c1a6c7f89b05d0327bb9b758d071b", - "requires": { - "nanoassert": "1.1.0" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "requires": { - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2" - } - }, - "blake2b": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.3.tgz", - "integrity": "sha512-pkDss4xFVbMb4270aCyGD3qLv92314Et+FsKzilCLxDz5DuZ2/1g3w4nmBbu6nKApPspnjG7JcwTjGZnduB1yg==", - "requires": { - "blake2b-wasm": "1.1.7", - "nanoassert": "1.1.0" - } - }, - "blake2b-wasm": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-1.1.7.tgz", - "integrity": "sha512-oFIHvXhlz/DUgF0kq5B1CqxIDjIJwh9iDeUUGQUcvgiGz7Wdw03McEO7CfLBy7QKGdsydcMCgO9jFNBAFCtFcA==", - "requires": { - "nanoassert": "1.1.0" - } - }, - "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", - "dev": true - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "requires": { - "inherits": "2.0.3" - } - }, - "blocking-proxy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", - "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", - "dev": true, - "requires": { - "minimist": "1.2.0" + "minimist": "1.2.0" } }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" - }, - "bluebird-lst": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.6.tgz", - "integrity": "sha512-CBWFoPuUPpcvMUxfyr8DKdI5d4kjxFl1h39+VbKxP3KJWJHEsLtuT4pPLkjpxCGU6Ask21tvbnftWXdqIxYldQ==", - "dev": true, - "requires": { - "bluebird": "3.5.3" - } + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", + "dev": true }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "body": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", - "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", - "requires": { - "continuable-cache": "0.3.1", - "error": "7.0.2", - "raw-body": "1.1.7", - "safe-json-parse": "1.0.1" - }, - "dependencies": { - "bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", - "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=" - }, - "raw-body": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", - "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", - "requires": { - "bytes": "1.0.0", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true }, "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, "requires": { - "bytes": "3.0.0", + "bytes": "3.1.0", "content-type": "1.0.4", "debug": "2.6.9", "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "on-finished": "2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "1.6.16" - } - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "2.0.0", - "camelcase": "4.1.0", - "chalk": "2.4.1", - "cli-boxes": "1.0.0", - "string-width": "2.1.1", - "term-size": "1.2.0", - "widest-line": "2.0.1" + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "1.6.18" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "2.1.2", + "deep-equal": "1.0.1", + "dns-equal": "1.0.0", + "dns-txt": "2.0.2", + "multicast-dns": "6.2.3", + "multicast-dns-service-types": "1.1.0" + } + }, "bplist-creator": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz", @@ -2434,7 +1804,7 @@ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=", "requires": { - "big-integer": "1.6.36" + "big-integer": "1.6.43" } }, "brace-expansion": { @@ -2447,41 +1817,45 @@ } }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.3" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "resolve": "1.1.7" + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" }, "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } } } }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, "browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, "requires": { "buffer-xor": "1.0.3", "cipher-base": "1.0.4", @@ -2495,6 +1869,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, "requires": { "browserify-aes": "1.2.0", "browserify-des": "1.0.2", @@ -2505,6 +1880,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, "requires": { "cipher-base": "1.0.4", "des.js": "1.0.0", @@ -2516,31 +1892,17 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, "requires": { "bn.js": "4.11.8", - "randombytes": "2.0.6" - } - }, - "browserify-sha3": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.4.tgz", - "integrity": "sha1-CGxHuMgjFsnUcCLCYYWVRXbdjiY=", - "requires": { - "js-sha3": "0.6.1", - "safe-buffer": "5.1.2" - }, - "dependencies": { - "js-sha3": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.6.1.tgz", - "integrity": "sha1-W4n3enR3Z5h39YxKB1JAk0sflcA=" - } + "randombytes": "2.1.0" } }, "browserify-sign": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, "requires": { "bn.js": "4.11.8", "browserify-rsa": "4.0.1", @@ -2548,67 +1910,54 @@ "create-hmac": "1.1.7", "elliptic": "6.4.1", "inherits": "2.0.3", - "parse-asn1": "5.1.1" + "parse-asn1": "5.1.4" } }, "browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, "requires": { - "pako": "1.0.6" + "pako": "1.0.10" } }, "browserslist": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", - "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.1.tgz", + "integrity": "sha512-1MC18ooMPRG2UuVFJTHFIAkk6mpByJfxCrnUyvSlu/hyQSFHMrlhM02SzNuCV+quTP4CKmqtOMAIjrifrpBJXQ==", "dev": true, "requires": { - "caniuse-lite": "1.0.30000910", - "electron-to-chromium": "1.3.84" + "caniuse-lite": "1.0.30000971", + "electron-to-chromium": "1.3.143", + "node-releases": "1.1.22" } }, "browserstack": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.1.tgz", - "integrity": "sha512-O8VMT64P9NOLhuIoD4YngyxBURefaSdR4QdhG8l6HZ9VxtU7jc3m6jLufFwKA5gaf7fetfB2TnRJnMxyob+heg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.2.tgz", + "integrity": "sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg==", "dev": true, "requires": { "https-proxy-agent": "2.2.1" } }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "requires": { - "base-x": "3.0.5" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "4.0.1", - "create-hash": "1.2.0", - "safe-buffer": "5.1.2" - } - }, "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, "requires": { "base64-js": "1.3.0", - "ieee754": "1.1.12" + "ieee754": "1.1.13", + "isarray": "1.0.0" } }, "buffer-alloc": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, "requires": { "buffer-alloc-unsafe": "1.1.0", "buffer-fill": "1.0.0" @@ -2617,17 +1966,14 @@ "buffer-alloc-unsafe": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true }, "buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true }, "buffer-from": { "version": "1.1.1", @@ -2635,155 +1981,71 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "builder-util": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-9.3.0.tgz", - "integrity": "sha512-K+kj5vWj4Mk3jOm6kVT9ZwNcECLHe449vdMxYuZpCnn7CSxRm+TeZm9P9ZFCQUID5Hww/Sy4NMFo+VVJh6+Ptw==", - "dev": true, - "requires": { - "7zip-bin": "4.1.0", - "app-builder-bin": "2.5.1", - "bluebird-lst": "1.0.6", - "builder-util-runtime": "8.0.2", - "chalk": "2.4.1", - "debug": "4.1.0", - "fs-extra-p": "7.0.0", - "is-ci": "1.2.1", - "js-yaml": "3.12.0", - "source-map-support": "0.5.9", - "stat-mode": "0.2.2", - "temp-file": "3.3.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", - "dev": true, - "requires": { - "ms": "2.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", - "dev": true, - "requires": { - "buffer-from": "1.1.1", - "source-map": "0.6.1" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "builder-util-runtime": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.0.2.tgz", - "integrity": "sha512-46AjyMQ1/yBvGnXWmqNGlg8te7jCPCs7TJ0zDC2+4vV/t5iZp2dR1H9UfVpcBxlvBq3dlAOmwb9fz1d9xZN1+Q==", - "dev": true, - "requires": { - "bluebird-lst": "1.0.6", - "debug": "4.1.0", - "fs-extra-p": "7.0.0", - "sax": "1.2.4" - }, - "dependencies": { - "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", - "dev": true, - "requires": { - "ms": "2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "3.5.5", + "chownr": "1.1.1", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "lru-cache": "4.1.5", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.3", + "ssri": "5.3.0", + "unique-filename": "1.1.1", + "y18n": "4.0.0" + } }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, "requires": { "collection-visit": "1.0.0", - "component-emitter": "1.2.1", + "component-emitter": "1.3.0", "get-value": "2.0.6", "has-value": "1.0.0", "isobject": "3.0.1", @@ -2791,36 +2053,24 @@ "to-object-path": "0.3.0", "union-value": "1.0.0", "unset-value": "1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } } }, - "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "dev": true, "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - } + "callsites": "2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "2.0.0" } }, "callsite": { @@ -2829,122 +2079,95 @@ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", "dev": true }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" - } + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true }, "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true, + "optional": true }, "camelcase-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, + "optional": true, "requires": { "camelcase": "2.1.1", "map-obj": "1.0.1" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } } }, "caniuse-lite": { - "version": "1.0.30000910", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000910.tgz", - "integrity": "sha512-u/nxtHGAzCGZzIxt3dA/tpSPOcirBZFWKwz1EPz4aaupnBI2XR0Rbr74g0zc6Hzy41OEM4uMoZ38k56TpYAWjQ==", + "version": "1.0.30000971", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000971.tgz", + "integrity": "sha512-TQFYFhRS0O5rdsmSbF1Wn+16latXYsQJat66f7S7lizXW1PVpWJeZw9wqqVLIjuxDRz7s7xRUj13QCfd8hKn6g==", "dev": true }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "canonical-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", + "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", "dev": true }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "caw": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", - "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", - "dev": true, - "requires": { - "get-proxy": "2.1.0", - "isurl": "1.0.0", - "tunnel-agent": "0.6.0", - "url-to-options": "1.0.1" - } - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } - }, - "chai": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", - "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", - "requires": { - "assertion-error": "1.1.0", - "deep-eql": "0.1.3", - "type-detect": "1.0.0" - } + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { - "ansi-styles": "2.2.1", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "supports-color": "5.5.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } } }, "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true }, "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.2.4", - "glob-parent": "2.0.0", + "anymatch": "2.0.0", + "async-each": "1.0.3", + "braces": "2.3.2", + "fsevents": "1.2.9", + "glob-parent": "3.1.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", - "is-glob": "2.0.1", + "is-glob": "4.0.1", + "lodash.debounce": "4.0.8", + "normalize-path": "2.1.1", "path-is-absolute": "1.0.1", - "readdirp": "2.2.1" + "readdirp": "2.2.1", + "upath": "1.1.2" } }, "chownr": { @@ -2953,30 +2176,42 @@ "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", "dev": true }, - "chromium-pickle-js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", - "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=", - "dev": true + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "1.9.3" + } }, "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, "requires": { "inherits": "2.0.3", "safe-buffer": "5.1.2" } }, + "circular-dependency-plugin": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.0.2.tgz", + "integrity": "sha512-oC7/DVAyfcY3UWKm0sN/oVoDedQDQiw/vIiAnuTWTpE5s0zWf7l3WY417Xw/Fbi/QbAjctAkxgMiS9P0s3zkmA==", + "dev": true + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, "requires": { "arr-union": "3.1.0", "define-property": "0.2.5", @@ -2988,14 +2223,10 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "0.1.6" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, @@ -3003,6 +2234,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "dev": true, "requires": { "source-map": "0.6.1" }, @@ -3010,20 +2242,16 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, "requires": { "restore-cursor": "2.0.0" } @@ -3031,76 +2259,75 @@ "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true }, "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" } }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-deep": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", + "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", "dev": true, "requires": { - "mimic-response": "1.0.1" + "for-own": "1.0.0", + "is-plain-object": "2.0.4", + "kind-of": "6.0.2", + "shallow-clone": "1.0.0" } }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "coinkey": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/coinkey/-/coinkey-0.1.0.tgz", - "integrity": "sha1-vfKpU9z+T9cP26MADHh/82nYKUw=", - "requires": { - "coinstring": "0.2.0", - "eckey": "0.4.2", - "secure-random": "0.2.1" - }, - "dependencies": { - "secure-random": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/secure-random/-/secure-random-0.2.1.tgz", - "integrity": "sha1-HC8Iy5TYwG3v9SchpgRbupb4Wpo=" - } - } + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true }, - "coinstring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/coinstring/-/coinstring-0.2.0.tgz", - "integrity": "sha1-+iggSXu541t8+hFvBIIZym8/NI8=", + "codelyzer": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.5.0.tgz", + "integrity": "sha512-oO6vCkjqsVrEsmh58oNlnJkRXuA30hF8cdNAQV9DytEalDwyOFRvHMnlKFzmOStNerOmPGZU9GAHnBo4tGvtiQ==", + "dev": true, "requires": { - "bs58": "0.3.0", - "crypto-hashing": "0.3.1" + "app-root-path": "2.2.1", + "css-selector-tokenizer": "0.7.1", + "cssauron": "1.4.0", + "semver-dsl": "1.0.1", + "source-map": "0.5.7", + "sprintf-js": "1.1.2" }, "dependencies": { - "bigi": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bigi/-/bigi-0.2.0.tgz", - "integrity": "sha1-i+4mNIuZxK4u0gSB+xI4TDJ5L3Q=" + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true }, - "bs58": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-0.3.0.tgz", - "integrity": "sha1-y0gQe/RGcn0+F7IRAtpzyokQlYg=", - "requires": { - "bigi": "0.2.0", - "binstring": "0.2.1" - } + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true } } }, @@ -3108,6 +2335,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, "requires": { "map-visit": "1.0.0", "object-visit": "1.0.1" @@ -3117,6 +2345,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -3124,58 +2353,40 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "colors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" - }, - "com.lampa.startapp": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/com.lampa.startapp/-/com.lampa.startapp-6.1.6.tgz", - "integrity": "sha1-tcmoVMn36q68zRJkCMp7Vf40p5Y=" - }, - "combine-lists": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", - "dev": true, - "requires": { - "lodash": "4.17.11" - } + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "requires": { "delayed-stream": "1.0.0" } }, "commander": { - "version": "2.8.1", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "requires": { - "graceful-readlink": "1.0.1" - } + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true }, - "compare-version": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", - "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=", + "compare-versions": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.4.0.tgz", + "integrity": "sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg==", "dev": true }, "component-bind": { @@ -3185,9 +2396,10 @@ "dev": true }, "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true }, "component-inherit": { "version": "0.0.3", @@ -3195,15 +2407,28 @@ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", "dev": true }, - "compress-commons": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", - "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", + "compressible": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "dev": true, "requires": { - "buffer-crc32": "0.2.13", - "crc32-stream": "2.0.0", - "normalize-path": "2.1.1", - "readable-stream": "2.3.6" + "mime-db": "1.40.0" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "1.3.7", + "bytes": "3.0.0", + "compressible": "2.0.17", + "debug": "2.6.9", + "on-headers": "1.0.2", + "safe-buffer": "5.1.2", + "vary": "1.1.2" } }, "concat-map": { @@ -3223,68 +2448,29 @@ "typedarray": "0.0.6" } }, - "config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, "requires": { - "ini": "1.3.5", - "proto-list": "1.2.4" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "1.3.3", + "utils-merge": "1.0.1" } }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "4.2.0", - "graceful-fs": "4.1.15", - "make-dir": "1.3.0", - "unique-string": "1.0.0", - "write-file-atomic": "2.3.0", - "xdg-basedir": "3.0.0" - } - }, - "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "1.3.2", - "utils-merge": "1.0.1" - }, - "dependencies": { - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" - } - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - } - } + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, "requires": { "date-now": "0.1.4" } @@ -3298,1666 +2484,1184 @@ "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true }, "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } }, "content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "continuable-cache": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", - "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=" - }, - "conventional-commit-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-2.2.0.tgz", - "integrity": "sha1-XblXOdbCEqy+e29lahG5QLqmiUY=", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true }, - "convert-hex": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/convert-hex/-/convert-hex-0.1.0.tgz", - "integrity": "sha1-CMBFaJIsJ3drii6BqV05M2LqC2U=" - }, "convert-source-map": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, "requires": { "safe-buffer": "5.1.2" } }, - "convert-string": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/convert-string/-/convert-string-0.1.0.tgz", - "integrity": "sha1-ec5BqbsNA7z3LNxqjzxW+7xkQQo=" - }, "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "run-queue": "1.0.3" + } }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz", + "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==", + "dev": true, + "requires": { + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "globby": "7.1.1", + "is-glob": "4.0.1", + "loader-utils": "1.2.3", + "minimatch": "3.0.4", + "p-limit": "1.3.0", + "serialize-javascript": "1.7.0" + } }, - "cordova-android": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-7.1.2.tgz", - "integrity": "sha512-w28HJGtfAZCT96hVH9BMppWMnmDTZplKu2NRQZN2dCr5e9r7aHpay41MYy9IBkh8+7E7lMo/jZkRwBDNr4VnEg==", + "cordova-common": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-3.1.0.tgz", + "integrity": "sha512-J2MM1ioyLlBYdwdXH40OZL4hN7XEBOfurddKYifF4aTkb2PkbeM+KVORt53eyU+8ScA0QmRLuTG0EM55eLms0A==", "requires": { - "abbrev": "1.1.1", - "android-versions": "1.3.0", "ansi": "0.3.1", - "balanced-match": "1.0.0", - "base64-js": "1.2.0", - "big-integer": "1.6.32", "bplist-parser": "0.1.1", - "brace-expansion": "1.1.11", - "concat-map": "0.0.1", - "cordova-common": "2.2.5", - "cordova-registry-mapper": "1.1.15", - "elementtree": "0.1.6", - "glob": "5.0.15", - "inflight": "1.0.6", - "inherits": "2.0.3", + "cross-spawn": "6.0.5", + "elementtree": "0.1.7", + "endent": "1.3.0", + "fs-extra": "7.0.1", + "glob": "7.1.3", "minimatch": "3.0.4", - "nopt": "3.0.1", - "once": "1.4.0", - "path-is-absolute": "1.0.1", - "plist": "2.1.0", - "properties-parser": "0.2.3", + "plist": "3.0.1", "q": "1.4.1", - "sax": "0.3.5", - "semver": "5.5.0", - "shelljs": "0.5.3", + "strip-bom": "3.0.0", "underscore": "1.9.1", - "unorm": "1.4.1", - "wrappy": "1.0.2", - "xmlbuilder": "8.2.2", - "xmldom": "0.1.27" + "which": "1.3.1" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "android-versions": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.3.0.tgz", - "integrity": "sha512-d/i1G16Oaw/T1EvskUA7Oo1vIQVK/0ZlpQgZfYVBwg6v/9FBE3QV66g5N1/bTHpRml8tFLxh+KoTw5DokK9c+A==", - "requires": { - "semver": "5.5.0" - } - }, - "ansi": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz", - "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=" - }, - "big-integer": { - "version": "1.6.32", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.32.tgz", - "integrity": "sha512-ljKJdR3wk9thHfLj4DtrNiOSTxvGFaMjWrG4pW75juXC4j7+XuKJVFdg4kgFMYp85PVkO05dFMj2dk2xVsH4xw==" - }, - "bplist-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", - "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=", - "requires": { - "big-integer": "1.6.32" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "cordova-common": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-2.2.5.tgz", - "integrity": "sha1-+TzvKtSUz8v1bEbj1hKqqctfzDI=", - "requires": { - "ansi": "0.3.1", - "bplist-parser": "0.1.1", - "cordova-registry-mapper": "1.1.15", - "elementtree": "0.1.6", - "glob": "5.0.15", - "minimatch": "3.0.4", - "plist": "2.1.0", - "q": "1.4.1", - "shelljs": "0.5.3", - "underscore": "1.9.1", - "unorm": "1.4.1" - } - }, - "cordova-registry-mapper": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.15.tgz", - "integrity": "sha1-4kS5GFuBdUc7/2B5MkkFEV+D3Hw=" - }, - "elementtree": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz", - "integrity": "sha1-KsTEbqMFFsjEy9teOsdBjlkt4gw=", - "requires": { - "sax": "0.3.5" - } - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "requires": { - "brace-expansion": "1.1.11" + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.6.0", + "shebang-command": "1.2.0", + "which": "1.3.1" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + } + } + }, + "cordova-ios": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-5.0.1.tgz", + "integrity": "sha512-JcFyDmlyzY2OQJo0eHpuFERFqvO4daHl8HL96RhUVjJVtuoqXHsOF0xTuQSAqIbefelMPEWwY3Lc/dvT4ttTwQ==", + "requires": { + "cordova-common": "3.1.0", + "ios-sim": "8.0.1", + "nopt": "4.0.1", + "plist": "3.0.1", + "q": "1.5.1", + "shelljs": "0.5.3", + "unorm": "1.5.0", + "xcode": "2.0.0", + "xml-escape": "1.1.0" + }, + "dependencies": { "nopt": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.1.tgz", - "integrity": "sha1-vOXEJEajKR9HYio3CrvxWPu6y/0=", - "requires": { - "abbrev": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "plist": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz", - "integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "requires": { - "base64-js": "1.2.0", - "xmlbuilder": "8.2.2", - "xmldom": "0.1.27" + "abbrev": "1.1.1", + "osenv": "0.1.5" } }, - "properties-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.2.3.tgz", - "integrity": "sha1-91kSVfcHq7/yJ8e1a2N9uwNzoQ8=" - }, "q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=" - }, - "sax": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.3.5.tgz", - "integrity": "sha1-iPz8H3PAyLvVt8d2ttPzUB7tBz0=" - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, "shelljs": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz", "integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM=" - }, - "underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" - }, - "unorm": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", - "integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA=" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "xmlbuilder": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", - "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=" - }, - "xmldom": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", - "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" } } }, - "cordova-android-support-gradle-release": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/cordova-android-support-gradle-release/-/cordova-android-support-gradle-release-1.4.7.tgz", - "integrity": "sha512-3hDS3mBjSAEzKM4gZBze8G02/aNQgcww1CyUneuYPOYvleTPk3Q4OYkjmHHuE4FEgr4v9EY6j6bJqoX9pMZHgg==", + "core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", + "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", + "dev": true, "requires": { - "semver": "5.1.0", - "xml2js": "0.4.19" + "is-directory": "0.3.1", + "js-yaml": "3.13.1", + "parse-json": "4.0.0", + "require-from-string": "2.0.2" }, "dependencies": { - "semver": { - "version": "5.1.0", - "resolved": "http://registry.npmjs.org/semver/-/semver-5.1.0.tgz", - "integrity": "sha1-hfLPhVBGXE3wAM99hvawVBBqueU=" + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "1.3.2", + "json-parse-better-errors": "1.0.2" + } } } }, - "cordova-browser": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cordova-browser/-/cordova-browser-5.0.4.tgz", - "integrity": "sha512-EDuG+9NGsaYpNSY6wF0kR34m1m38V+nRglGXxQ609fgMYrMHEYR2lg38nDr1Os4qeF0LJz8UQ7nq7Y+idg6Aig==", + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, "requires": { - "abbrev": "1.1.1", - "accepts": "1.3.5", - "ansi": "0.3.1", - "ansi-regex": "2.1.1", - "ansi-styles": "2.2.1", - "array-flatten": "1.1.1", - "balanced-match": "1.0.0", - "base64-js": "1.2.0", - "big-integer": "1.6.32", - "body-parser": "1.18.2", - "bplist-parser": "0.1.1", - "brace-expansion": "1.1.11", - "bytes": "3.0.0", - "chalk": "1.1.3", - "compressible": "2.0.14", - "compression": "1.7.2", - "concat-map": "0.0.1", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "cordova-common": "2.2.5", - "cordova-registry-mapper": "1.1.15", - "cordova-serve": "2.0.1", - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "ee-first": "1.1.1", - "elementtree": "0.1.6", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "escape-string-regexp": "1.0.5", - "etag": "1.8.1", - "express": "4.16.3", - "finalhandler": "1.1.1", - "forwarded": "0.1.2", - "fresh": "0.5.2", - "glob": "5.0.15", - "has-ansi": "2.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.19", - "inflight": "1.0.6", + "bn.js": "4.11.8", + "elliptic": "6.4.1" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "1.0.4", "inherits": "2.0.3", - "ipaddr.js": "1.6.0", - "is-wsl": "1.1.0", - "media-typer": "0.3.0", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "mime": "1.4.1", - "mime-db": "1.33.0", - "mime-types": "2.1.18", - "minimatch": "3.0.4", - "ms": "2.0.0", - "negotiator": "0.6.1", - "nopt": "3.0.6", - "on-finished": "2.3.0", - "on-headers": "1.0.1", - "once": "1.4.0", - "opn": "5.3.0", - "parseurl": "1.3.2", - "path-is-absolute": "1.0.1", - "path-to-regexp": "0.1.7", - "plist": "2.1.0", - "proxy-addr": "2.0.3", - "q": "1.5.1", - "qs": "6.5.1", - "range-parser": "1.2.0", - "raw-body": "2.3.2", - "safe-buffer": "5.1.1", - "sax": "0.3.5", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "shelljs": "0.5.3", - "statuses": "1.4.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0", - "type-is": "1.6.16", - "underscore": "1.9.1", - "unorm": "1.4.1", - "unpipe": "1.0.0", - "utils-merge": "1.0.1", - "vary": "1.1.2", - "wrappy": "1.0.2", - "xmlbuilder": "8.2.2", - "xmldom": "0.1.27" + "md5.js": "1.3.5", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "4.1.5", + "which": "1.3.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.17", + "public-encrypt": "4.0.3", + "randombytes": "2.1.0", + "randomfill": "1.0.4" + } + }, + "css-parse": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", + "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", + "dev": true + }, + "css-selector-tokenizer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", + "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", + "dev": true, + "requires": { + "cssesc": "0.1.0", + "fastparse": "1.1.2", + "regexpu-core": "1.0.0" + } + }, + "cssauron": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "optional": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "date-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.0.0.tgz", + "integrity": "sha512-M6UqVvZVgFYqZL1SfHsRGIQSz3ZL+qgbsV5Lp1Vj61LZVYuEwcMXYay7DRDtYs2HQQBK5hQtQ0fD9aEJ89V0LA==", + "dev": true + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "default-gateway": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz", + "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", + "dev": true, + "requires": { + "execa": "0.10.0", + "ip-regex": "2.1.0" + } + }, + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "dev": true, + "requires": { + "strip-bom": "3.0.0" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "requires": { - "mime-types": "2.1.18", - "negotiator": "0.6.1" - } - }, - "ansi": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "balanced-match": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "1.1.1" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz", - "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=" - }, - "big-integer": { - "version": "1.6.32", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.32.tgz", - "integrity": "sha512-ljKJdR3wk9thHfLj4DtrNiOSTxvGFaMjWrG4pW75juXC4j7+XuKJVFdg4kgFMYp85PVkO05dFMj2dk2xVsH4xw==" - }, - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.16" - } - }, - "bplist-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", - "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { - "big-integer": "1.6.32" + "kind-of": "6.0.2" } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" + "kind-of": "6.0.2" } }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } - }, - "compressible": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz", - "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=", + } + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "requires": { + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "p-map": "1.2.0", + "pify": "3.0.0", + "rimraf": "2.6.3" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, "requires": { - "mime-db": "1.34.0" + "array-union": "1.0.2", + "glob": "7.1.3", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" }, "dependencies": { - "mime-db": { - "version": "1.34.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.34.0.tgz", - "integrity": "sha1-RS0Oz/XDA0am3B5kseruDTcZ/5o=" + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true } } - }, - "compression": { - "version": "1.7.2", - "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", - "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", - "requires": { - "accepts": "1.3.5", - "bytes": "3.0.0", - "compressible": "2.0.14", - "debug": "2.6.9", - "on-headers": "1.0.1", - "safe-buffer": "5.1.1", - "vary": "1.1.2" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "dependency-graph": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", + "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", + "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.1.0" + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "1.1.5", + "safe-buffer": "5.1.2" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "1.1.1" + } + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "1.0.1", + "ent": "2.2.0", + "extend": "3.0.2", + "void-elements": "2.0.1" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "stream-shift": "1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.143", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.143.tgz", + "integrity": "sha512-J9jOpxIljQZlV6GIP2fwAWq0T69syawU0sH3EW3O2Bgxquiy+veeIT5mBDRz+i3oHUSL1tvVgRKH3/4QiQh9Pg==", + "dev": true + }, + "elementtree": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", + "integrity": "sha1-mskb5uUvtuYkTE5UpKw+2K6OKcA=", + "requires": { + "sax": "1.1.4" + }, + "dependencies": { + "sax": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", + "integrity": "sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk=" + } + } + }, + "elliptic": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "endent": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/endent/-/endent-1.3.0.tgz", + "integrity": "sha512-C8AryqPPwtydqcpO5AF6k9Bd1EpFkQtvsefJqS3y3n8TG13Jy63MascDxTOULZYqrUde+dK6BjNc6LIMr3iI2A==", + "requires": { + "dedent": "0.7.0", + "fast-json-parse": "1.0.3", + "objectorarray": "1.0.3" + } + }, + "engine.io": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "dev": true, + "requires": { + "accepts": "1.3.7", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "3.1.0", + "engine.io-parser": "2.1.3", + "ws": "3.3.3" + }, + "dependencies": { "cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "cordova-common": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-2.2.5.tgz", - "integrity": "sha1-+TzvKtSUz8v1bEbj1hKqqctfzDI=", - "requires": { - "ansi": "0.3.1", - "bplist-parser": "0.1.1", - "cordova-registry-mapper": "1.1.15", - "elementtree": "0.1.6", - "glob": "5.0.15", - "minimatch": "3.0.4", - "plist": "2.1.0", - "q": "1.5.1", - "shelljs": "0.5.3", - "underscore": "1.9.1", - "unorm": "1.4.1" + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" } }, - "cordova-registry-mapper": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.15.tgz", - "integrity": "sha1-4kS5GFuBdUc7/2B5MkkFEV+D3Hw=" - }, - "cordova-serve": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cordova-serve/-/cordova-serve-2.0.1.tgz", - "integrity": "sha512-3Xl1D5eyiQlY5ow6Kn/say0us2TqSw/zgQmyTLxbewTngQZ1CIqxmqD7EFGoCNBrB4HsdPmpiSpFCitybKQN9g==", + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, "requires": { - "chalk": "1.1.3", - "compression": "1.7.2", - "express": "4.16.3", - "opn": "5.3.0", - "shelljs": "0.5.3" + "async-limiter": "1.0.0", + "safe-buffer": "5.1.2", + "ultron": "1.1.1" } + } + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "3.1.0", + "engine.io-parser": "2.1.3", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "3.3.3", + "xmlhttprequest-ssl": "1.5.5", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, "requires": { "ms": "2.0.0" } }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "elementtree": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz", - "integrity": "sha1-KsTEbqMFFsjEy9teOsdBjlkt4gw=", - "requires": { - "sax": "0.3.5" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "express": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", - "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", - "requires": { - "accepts": "1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.3", - "qs": "6.5.1", - "range-parser": "1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", - "utils-merge": "1.0.1", - "vary": "1.1.2" - } - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": "1.4.0" - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "requires": { - "mime-db": "1.33.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "1.1.11" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "requires": { - "abbrev": "1.1.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1.0.2" - } - }, - "opn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", - "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", - "requires": { - "is-wsl": "1.1.0" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "plist": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz", - "integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=", - "requires": { - "base64-js": "1.2.0", - "xmlbuilder": "8.2.2", - "xmldom": "0.1.27" - } - }, - "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.6.0" - } - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.4.0" - } - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" - } - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "sax": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.3.5.tgz", - "integrity": "sha1-iPz8H3PAyLvVt8d2ttPzUB7tBz0=" - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.3", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.2" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "shelljs": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz", - "integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM=" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.18" + "async-limiter": "1.0.0", + "safe-buffer": "5.1.2", + "ultron": "1.1.1" } - }, - "underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" - }, - "unorm": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", - "integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA=" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "xmlbuilder": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", - "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=" - }, - "xmldom": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", - "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" } } }, - "cordova-clipboard": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cordova-clipboard/-/cordova-clipboard-1.2.1.tgz", - "integrity": "sha512-WTGxyQJYsgmll8wDEo0u4XevZDUH1ZH1VPoOwwNkQ8YOtCNQS8gRIIVtZ70Kan+Vo+CiUMV0oJXdNAdARb8JwQ==" + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "1.0.3" + } }, - "cordova-common": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-3.1.0.tgz", - "integrity": "sha512-J2MM1ioyLlBYdwdXH40OZL4hN7XEBOfurddKYifF4aTkb2PkbeM+KVORt53eyU+8ScA0QmRLuTG0EM55eLms0A==", + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, "requires": { - "ansi": "0.3.1", - "bplist-parser": "0.1.1", - "cross-spawn": "6.0.5", - "elementtree": "0.1.7", - "endent": "1.3.0", - "fs-extra": "7.0.1", - "glob": "7.1.3", - "minimatch": "3.0.4", - "plist": "3.0.1", - "q": "1.4.1", - "strip-bom": "3.0.0", - "underscore": "1.8.3", - "which": "1.3.1" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.6.0", - "shebang-command": "1.2.0", - "which": "1.3.1" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "4.1.15", - "jsonfile": "4.0.0", - "universalify": "0.1.2" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "4.1.15" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - } + "graceful-fs": "4.1.15", + "memory-fs": "0.4.1", + "tapable": "1.1.3" } }, - "cordova-ios": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-5.0.0.tgz", - "integrity": "sha512-ImEOdi4/+qBge+m8gXB2XB7k36+8hHfRWSsoLhvHLnn/0JDyihAacyoaUruvG4bMljs8ZEn/ShsdQwevoZUHgw==", + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, "requires": { - "cordova-common": "3.1.0", - "ios-sim": "7.0.0", - "nopt": "4.0.1", - "plist": "3.0.1", - "q": "1.5.1", - "shelljs": "0.5.3", - "unorm": "1.4.1", - "xcode": "2.0.0", - "xml-escape": "1.1.0" - }, - "dependencies": { - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" - }, - "simple-plist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.0.0.tgz", - "integrity": "sha512-043L2rO80LVF7zfZ+fqhsEkoJFvW8o59rt/l4ctx1TJWoTx7/jkiS1R5TatD15Z1oYnuLJytzE7gcnnBuIPL2g==", - "requires": { - "bplist-creator": "0.0.7", - "bplist-parser": "0.1.1", - "plist": "3.0.1" - } - }, - "xcode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xcode/-/xcode-2.0.0.tgz", - "integrity": "sha512-5xF6RCjAdDEiEsbbZaS/gBRt3jZ/177otZcpoLCjGN/u1LrfgH7/Sgeeavpr/jELpyDqN2im3AKosl2G2W8hfw==", - "requires": { - "simple-plist": "1.0.0", - "uuid": "3.3.2" - } - } + "prr": "1.0.1" } }, - "cordova-plugin-add-swift-support": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/cordova-plugin-add-swift-support/-/cordova-plugin-add-swift-support-1.7.2.tgz", - "integrity": "sha512-4syQ0srjXvlH07sAxQlwMAAqIRTI28IWLYI44RFAKFRdYoIyopjQDqUWdieBK2ELvxgffkn6Rr0r0hMdRyGz/w==" - }, - "cordova-plugin-airgap-secure-storage": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/cordova-plugin-airgap-secure-storage/-/cordova-plugin-airgap-secure-storage-0.1.7.tgz", - "integrity": "sha512-5rnDc7cdcq5j5erWrcJg143u5cngtbWojEEEd8S84idC1VSdNMuxIVKBl56G+2pkKf6YsDlHl71c18Nu2BBpnA==" - }, - "cordova-plugin-airgap-webview": { - "version": "git+https://github.com/airgap-it/cordova-plugin-airgap-webview.git#ad0cc2824120d6373d479b38c60e7927de071107" - }, - "cordova-plugin-android-permissions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cordova-plugin-android-permissions/-/cordova-plugin-android-permissions-1.0.0.tgz", - "integrity": "sha1-nnwRa+Zo6336QUkbE9jUfalUgUk=" - }, - "cordova-plugin-app-version": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/cordova-plugin-app-version/-/cordova-plugin-app-version-0.1.9.tgz", - "integrity": "sha1-nbBgeGMzenEEiTAuX1CpBPFEm9s=" - }, - "cordova-plugin-audioinput": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cordova-plugin-audioinput/-/cordova-plugin-audioinput-1.0.1.tgz", - "integrity": "sha512-CUCaI0mBQWHAJmF9/4n9cPk7D9y7+Iot1K2JA/7UgJouyao1i2bvLFIkIjF14x+vlfD/mhgvAs0Y9nsUcdWmqA==" - }, - "cordova-plugin-camera-preview": { - "version": "git+https://github.com/cordova-plugin-camera-preview/cordova-plugin-camera-preview.git#e3347ed9757dd07545d4ebb1f4a81cc244768d9b" - }, - "cordova-plugin-compat": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/cordova-plugin-compat/-/cordova-plugin-compat-1.2.0.tgz", - "integrity": "sha1-C8ZXVyduvZIMASzpIOJ0F3V2Nz4=" - }, - "cordova-plugin-device": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-1.1.7.tgz", - "integrity": "sha1-/JQRG+aTJijGaGiTjd89yCyfv+Y=" - }, - "cordova-plugin-device-motion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cordova-plugin-device-motion/-/cordova-plugin-device-motion-2.0.1.tgz", - "integrity": "sha1-f22XTE64/Frljpqt1j2fpQLt7G0=" - }, - "cordova-plugin-gyroscope": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/cordova-plugin-gyroscope/-/cordova-plugin-gyroscope-0.1.4.tgz", - "integrity": "sha1-1OQ+fI54qLTZCQRgvme1FhgWglk=" - }, - "cordova-plugin-ionic-keyboard": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cordova-plugin-ionic-keyboard/-/cordova-plugin-ionic-keyboard-2.1.3.tgz", - "integrity": "sha512-6ucQ6FdlLdBm8kJfFnzozmBTjru/0xekHP/dAhjoCZggkGRlgs8TsUJFkxa/bV+qi7Dlo50JjmpE4UMWAO+aOQ==" - }, - "cordova-plugin-ios-camera-permissions": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/cordova-plugin-ios-camera-permissions/-/cordova-plugin-ios-camera-permissions-1.2.0.tgz", - "integrity": "sha1-lGEsfeX9z1m4YwBXtQc5tJCeCsk=" - }, - "cordova-plugin-jailbreak-detection": { - "version": "git+https://github.com/leecrossley/cordova-plugin-jailbreak-detection.git#d436992c2fc164d3da9558623b6bb37b70dadd58" - }, - "cordova-plugin-qrscanner": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/cordova-plugin-qrscanner/-/cordova-plugin-qrscanner-2.6.2.tgz", - "integrity": "sha512-wUdgNgjDMNQPFEi47Ft3SRFD8eIS8pCnnIijzIRZaoVj/nhixfI/Dtna8u3IYPX4lOMdlo9GX4/7lz/Q6C0Yhw==", + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "requires": { - "qrcode-reader": "1.0.4", - "webrtc-adapter": "3.4.3" + "is-arrayish": "0.2.1" } }, - "cordova-plugin-root-detection": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/cordova-plugin-root-detection/-/cordova-plugin-root-detection-0.1.1.tgz", - "integrity": "sha1-75Fu96AKMOMR6lWT17L0q1TSzq8=" - }, - "cordova-plugin-splashscreen": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cordova-plugin-splashscreen/-/cordova-plugin-splashscreen-4.1.0.tgz", - "integrity": "sha1-gQKKt2Q+YVWT0n8q0CRFYR8ZRrY=" - }, - "cordova-plugin-statusbar": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/cordova-plugin-statusbar/-/cordova-plugin-statusbar-2.4.2.tgz", - "integrity": "sha1-/B+9wNjXAzp+jh8ff/FnrJvU+vY=" - }, - "cordova-plugin-whitelist": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/cordova-plugin-whitelist/-/cordova-plugin-whitelist-1.3.3.tgz", - "integrity": "sha1-tehezbv+Wu3tQKG/TuI3LmfZb7Q=" - }, - "cordova-sqlite-storage": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/cordova-sqlite-storage/-/cordova-sqlite-storage-2.5.1.tgz", - "integrity": "sha512-RMZcheSs9ihxcXUEmcAg8inG0UHZ5rQKQZqLY40jFES8rpiH5/sYeqaTmnuATx5w2apGB7fFLQHWMG2qaxAVtw==", + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", "requires": { - "cordova-sqlite-storage-dependencies": "1.2.0" + "es-to-primitive": "1.2.0", + "function-bind": "1.1.1", + "has": "1.0.3", + "is-callable": "1.1.4", + "is-regex": "1.0.4", + "object-keys": "1.1.1" } }, - "cordova-sqlite-storage-dependencies": { + "es-to-primitive": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/cordova-sqlite-storage-dependencies/-/cordova-sqlite-storage-dependencies-1.2.0.tgz", - "integrity": "sha512-lJl5uJFrCWrCYYGhpSEXe6sepjgOOzbeh8fFur3LqaSRvx+xFNYtfMYumE0+xqZwSmPODzex+y6I7ixwcBn73Q==" - }, - "cordova.plugins.diagnostic": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/cordova.plugins.diagnostic/-/cordova.plugins.diagnostic-4.0.10.tgz", - "integrity": "sha512-t+3+s/7oD3gn0E5hXVmpkttIi70rvicMzYpYAjyzZD6orROYw5lNsG3qOI2VIxBJxd2S+kMBm7cYkcdRHqYU6g==", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "requires": { - "colors": "1.1.2", - "elementtree": "0.1.7", - "minimist": "1.2.0" + "is-callable": "1.1.4", + "is-date-object": "1.0.1", + "is-symbol": "1.0.2" } }, - "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "es6-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", + "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", + "dev": true }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, "requires": { - "object-assign": "4.1.1", - "vary": "1.1.2" + "es6-promise": "4.2.6" } }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "requires": { - "buffer": "5.2.1" - } + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true }, - "crc32-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", - "requires": { - "crc": "3.8.0", - "readable-stream": "2.3.6" - } + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, - "create-ecdh": { + "eslint-scope": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { - "capture-stack-trace": "1.0.1" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.5", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "4.1.3", - "shebang-command": "1.2.0", - "which": "1.3.1" + "esrecurse": "4.2.1", + "estraverse": "4.2.0" } }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "boom": "2.10.1" + "estraverse": "4.2.0" } }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.17", - "public-encrypt": "4.0.3", - "randombytes": "2.0.6", - "randomfill": "1.0.4" - } + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true }, - "crypto-hashing": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/crypto-hashing/-/crypto-hashing-0.3.1.tgz", - "integrity": "sha1-AZVUjbi971CqnVJlFMxUbh5i+84=", - "requires": { - "binstring": "0.2.1", - "ripemd160": "0.2.1" - }, - "dependencies": { - "ripemd160": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.1.tgz", - "integrity": "sha1-3uGSSKPhyBX/muo551OjN/VqJD0=" - } - } + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true }, - "cryptocompare": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cryptocompare/-/cryptocompare-0.5.0.tgz", - "integrity": "sha512-n6+5VgegBe+b6hG2IUT3oeUFMEofLrhh5Q1mNrj7O3M39kE+rncXxsRiZvgyprGiYAu+fXNs+j26yvGpvbPkAA==" + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "dev": true }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dev": true, "requires": { - "array-find-index": "1.0.2" + "original": "1.0.2" } }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "cz-conventional-changelog": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-2.1.0.tgz", - "integrity": "sha1-L0vHOQ4yROTfKT5ro1Hkx0Cnx2Q=", + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "conventional-commit-types": "2.2.0", - "lodash.map": "4.6.0", - "longest": "1.0.1", - "right-pad": "1.0.1", - "word-wrap": "1.2.3" + "md5.js": "1.3.5", + "safe-buffer": "5.1.2" } }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "dev": true, "requires": { - "es5-ext": "0.10.46" + "cross-spawn": "6.0.5", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.6.0", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + } } }, - "dargs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz", - "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=" + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, "requires": { - "assert-plus": "1.0.0" - } - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", - "requires": { - "decompress-tar": "4.1.1", - "decompress-tarbz2": "4.1.1", - "decompress-targz": "4.1.1", - "decompress-unzip": "4.0.1", - "graceful-fs": "4.1.15", - "make-dir": "1.3.0", - "pify": "2.3.0", - "strip-dirs": "2.1.0" - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "1.0.1" - } - }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "requires": { - "file-type": "5.2.0", - "is-stream": "1.1.0", - "tar-stream": "1.6.2" - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "requires": { - "decompress-tar": "4.1.1", - "file-type": "6.2.0", - "is-stream": "1.1.0", - "seek-bzip": "1.0.5", - "unbzip2-stream": "1.3.1" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "requires": { - "decompress-tar": "4.1.1", - "file-type": "5.2.0", - "is-stream": "1.1.0" - } - }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "requires": { - "file-type": "3.9.0", - "get-stream": "2.3.1", - "pify": "2.3.0", - "yauzl": "2.10.0" + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { - "object-assign": "4.1.1", - "pinkie-promise": "2.0.1" + "is-extendable": "0.1.1" } } } }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" - }, - "deep-eql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, "requires": { - "type-detect": "0.1.1" + "accepts": "1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.5", + "qs": "6.7.0", + "range-parser": "1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "1.5.0", + "type-is": "1.6.18", + "utils-merge": "1.0.1", + "vary": "1.1.2" }, "dependencies": { - "type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=" + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true } } }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "default-require-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", - "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "strip-bom": "2.0.0" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "1.1.1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" }, "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } } } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "chardet": "0.7.0", + "iconv-lite": "0.4.24", + "tmp": "0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "6.0.2" } @@ -4966,6 +3670,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "6.0.2" } @@ -4974,10750 +3679,7464 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "1.0.0", "is-data-descriptor": "1.0.0", "kind-of": "6.0.2" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" } } }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" - } + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "fast-json-parse": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", + "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==" }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, - "depd": { + "fastparse": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "websocket-driver": "0.7.0" } }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "requires": { - "repeating": "2.0.1" - } - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + "file-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", + "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", + "dev": true, + "requires": { + "loader-utils": "1.2.3", + "schema-utils": "1.0.0" + } }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "glob": "7.1.3", + "minimatch": "3.0.4" } }, - "dmg-builder": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-6.4.0.tgz", - "integrity": "sha512-q84fMrMm9mXh2qH0Sb3+o0gCvfeJRBI+46y+CpQystqgRyB+3bZB11WqCf5d8+qsENhzpi786jR82xbHG1Vvag==", + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "app-builder-lib": "20.36.2", - "bluebird-lst": "1.0.6", - "builder-util": "9.3.0", - "fs-extra-p": "7.0.0", - "iconv-lite": "0.4.24", - "js-yaml": "3.12.0", - "parse-color": "1.0.0", - "sanitize-filename": "1.6.1" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" }, "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "is-extendable": "0.1.1" } } } }, - "doctrine": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz", - "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=", + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "requires": { - "esutils": "1.1.6", - "isarray": "0.0.1" - }, - "dependencies": { - "esutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz", - "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } + "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" } }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "custom-event": "1.0.1", - "ent": "2.2.0", - "extend": "3.0.2", - "void-elements": "2.0.1" + "commondir": "1.0.1", + "make-dir": "1.3.0", + "pkg-dir": "2.0.0" } }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "is-obj": "1.0.1" + "locate-path": "2.0.0" } }, - "dotenv": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.1.0.tgz", - "integrity": "sha512-/veDn2ztgRlB7gKmE3i9f6CmDIyXAy6d5nBq+whO9SLX+Zs1sXEgFLPi+aSuWqUuusMfbi84fT8j34fs1HaYUw==", - "dev": true - }, - "dotenv-expand": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz", - "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=", + "flatted": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", + "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", "dev": true }, - "dotenv-webpack": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-1.5.7.tgz", - "integrity": "sha1-xEOVqyHR/SjXmpCUKnsUsd69FF8=", + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "requires": { - "dotenv": "5.0.1" - }, - "dependencies": { - "dotenv": { - "version": "5.0.1", - "resolved": "http://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", - "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==", - "dev": true - } + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, - "download": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/download/-/download-7.0.0.tgz", - "integrity": "sha512-0Fe/CAjKycx12IG9We9gYlLP03BEcWTpttg7P5mwfOiQTg584kpuHqP7F61RkUJM+mfEdEU9TJonm0PJp5rQLw==", + "follow-redirects": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", + "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", "dev": true, "requires": { - "caw": "2.0.1", - "content-disposition": "0.5.2", - "decompress": "4.2.0", - "ext-name": "5.0.0", - "file-type": "7.7.1", - "filenamify": "2.1.0", - "get-stream": "3.0.0", - "got": "8.3.2", - "make-dir": "1.3.0", - "p-event": "1.3.0", - "pify": "3.0.0" + "debug": "3.2.6" }, "dependencies": { - "file-type": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-7.7.1.tgz", - "integrity": "sha512-bTrKkzzZI6wH+NXhyD3SOXtb2zXTw2SbwI2RxUlRcXVsnN7jNL5hJzVQLYv7FOQhxFkK4XWdAflEaWFpaLLWpQ==", - "dev": true - }, - "got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "dev": true, - "requires": { - "@sindresorhus/is": "0.7.0", - "cacheable-request": "2.1.4", - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "into-stream": "3.1.0", - "is-retry-allowed": "1.1.0", - "isurl": "1.0.0", - "lowercase-keys": "1.0.1", - "mimic-response": "1.0.1", - "p-cancelable": "0.4.1", - "p-timeout": "2.0.1", - "pify": "3.0.0", - "safe-buffer": "5.1.2", - "timed-out": "4.0.1", - "url-parse-lax": "3.0.0", - "url-to-options": "1.0.1" - } - }, - "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", - "dev": true - }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "p-finally": "1.0.0" + "ms": "2.1.1" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "2.0.0" - } } } }, - "drbg.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", - "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "requires": { - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "create-hmac": "1.1.7" + "is-callable": "1.1.4" } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, "requires": { - "jsbn": "0.1.1", - "safer-buffer": "2.1.2" + "for-in": "1.0.2" } }, - "ecdsa": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/ecdsa/-/ecdsa-0.6.0.tgz", - "integrity": "sha1-NemIe29Bjse5g4AXAzTcJ2Omsxc=", + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, "requires": { - "bigi": "1.4.2", - "ecurve": "1.0.6" + "asynckit": "0.4.0", + "combined-stream": "1.0.8", + "mime-types": "2.1.24" } }, - "eckey": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/eckey/-/eckey-0.4.2.tgz", - "integrity": "sha1-zqU7fVKeQhaPLIWXp+jTK8njlDY=", + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, "requires": { - "bigi": "0.2.0", - "ecurve": "0.3.2", - "ecurve-names": "0.3.0" - }, - "dependencies": { - "bigi": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bigi/-/bigi-0.2.0.tgz", - "integrity": "sha1-i+4mNIuZxK4u0gSB+xI4TDJ5L3Q=" - }, - "ecurve": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ecurve/-/ecurve-0.3.2.tgz", - "integrity": "sha1-ut7/nvlTme6i4X0bUz8BBIQkC1A=", - "requires": { - "bigi": "0.2.0" - } - } + "map-cache": "0.2.2" } }, - "ecurve": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/ecurve/-/ecurve-1.0.6.tgz", - "integrity": "sha512-/BzEjNfiSuB7jIWKcS/z8FK9jNjmEWvUV2YZ4RLSmcDtP7Lq0m6FvDuSnJpBlDpGRpfRQeTLGLBI8H+kEv0r+w==", + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, "requires": { - "bigi": "1.4.2", - "safe-buffer": "5.1.2" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, - "ecurve-names": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ecurve-names/-/ecurve-names-0.3.0.tgz", - "integrity": "sha1-+VJeQD9Eo197wXVX/35BCRkx1Zw=", + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, "requires": { - "bigi": "0.2.0", - "ecurve": "0.3.2" - }, - "dependencies": { - "bigi": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bigi/-/bigi-0.2.0.tgz", - "integrity": "sha1-i+4mNIuZxK4u0gSB+xI4TDJ5L3Q=" - }, - "ecurve": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ecurve/-/ecurve-0.3.2.tgz", - "integrity": "sha1-ut7/nvlTme6i4X0bUz8BBIQkC1A=", - "requires": { - "bigi": "0.2.0" - } - } + "null-check": "1.0.0" } }, - "editorconfig": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", - "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "requires": { - "commander": "2.20.0", - "lru-cache": "4.1.5", - "semver": "5.6.0", - "sigmund": "1.0.1" - }, - "dependencies": { - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - } + "graceful-fs": "4.1.15", + "jsonfile": "4.0.0", + "universalify": "0.1.2" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", - "dev": true + "fs-minipass": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", + "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", + "dev": true, + "requires": { + "minipass": "2.3.5" + } }, - "electron": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/electron/-/electron-3.0.10.tgz", - "integrity": "sha512-I39IeQP3NOlbjKzTDK8uK2JdiHDfhV5SruCS2Gttkn2MaKCY+yIzQ6Wr4DyBXLeTEkL1sbZxbqQVhCavAliv5w==", + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "@types/node": "8.10.38", - "electron-download": "4.1.1", - "extract-zip": "1.6.7" - }, - "dependencies": { - "@types/node": { - "version": "8.10.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.38.tgz", - "integrity": "sha512-EibsnbJerd0hBFaDjJStFrVbVBAtOy4dgL8zZFw0uOvPqzBAX59Ci8cgjg3+RgJIWhsB5A4c+pi+D4P9tQQh/A==", - "dev": true - } + "graceful-fs": "4.1.15", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.6" } }, - "electron-builder": { - "version": "20.36.2", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-20.36.2.tgz", - "integrity": "sha512-xPJNt3ZBn5IYlp3pCP0Rvi00JYAKdTeOSLWFrkST1xqWfRZxXrI4uisVD9HQjzRN8hBHhTgTfXtb9uhWPha9eA==", - "dev": true, - "requires": { - "app-builder-lib": "20.36.2", - "bluebird-lst": "1.0.6", - "builder-util": "9.3.0", - "builder-util-runtime": "8.0.2", - "chalk": "2.4.1", - "dmg-builder": "6.4.0", - "fs-extra-p": "7.0.0", - "is-ci": "1.2.1", - "lazy-val": "1.0.3", - "read-config-file": "3.2.0", - "sanitize-filename": "1.6.1", - "update-notifier": "2.5.0", - "yargs": "12.0.5" + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.14.0", + "node-pre-gyp": "0.12.0" }, "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "2.1.1", + "bundled": true, "dev": true }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "aproba": { + "version": "1.2.0", + "bundled": true, "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, "requires": { - "color-convert": "1.9.3" + "delegates": "1.0.0", + "readable-stream": "2.3.6" } }, - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "balanced-match": { + "version": "1.0.0", + "bundled": true, "dev": true }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "brace-expansion": { + "version": "1.1.11", + "bundled": true, "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "balanced-match": "1.0.0", + "concat-map": "0.0.1" } }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "chownr": { + "version": "1.1.1", + "bundled": true, "dev": true, - "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" - } + "optional": true }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.6.0", - "shebang-command": "1.2.0", - "which": "1.3.1" - } + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true }, - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, "dev": true, - "requires": { - "cross-spawn": "6.0.5", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } + "optional": true }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "debug": { + "version": "4.1.1", + "bundled": true, "dev": true, + "optional": true, "requires": { - "locate-path": "3.0.0" + "ms": "2.1.1" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "fs-minipass": { + "version": "1.2.5", + "bundled": true, "dev": true, + "optional": true, "requires": { - "invert-kv": "2.0.0" + "minipass": "2.3.5" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, "dev": true, + "optional": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.3" } }, - "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", + "glob": { + "version": "7.1.3", + "bundled": true, "dev": true, + "optional": true, "requires": { - "map-age-cleaner": "0.1.3", - "mimic-fn": "1.2.0", - "p-is-promise": "1.1.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, - "os-locale": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz", - "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, "dev": true, + "optional": true, "requires": { - "execa": "0.10.0", - "lcid": "2.0.0", - "mem": "4.0.0" + "safer-buffer": "2.1.2" } }, - "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "ignore-walk": { + "version": "3.0.1", + "bundled": true, "dev": true, + "optional": true, "requires": { - "p-try": "2.0.0" + "minimatch": "3.0.4" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "inflight": { + "version": "1.0.6", + "bundled": true, "dev": true, + "optional": true, "requires": { - "p-limit": "2.0.0" + "once": "1.4.0", + "wrappy": "1.0.2" } }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "inherits": { + "version": "2.0.3", + "bundled": true, "dev": true }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "number-is-nan": "1.0.1" } }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "isarray": { + "version": "1.0.0", + "bundled": true, "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } + "optional": true }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "minimatch": { + "version": "3.0.4", + "bundled": true, "dev": true, "requires": { - "has-flag": "3.0.0" + "brace-expansion": "1.1.11" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "minimist": { + "version": "0.0.8", + "bundled": true, "dev": true }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "minipass": { + "version": "2.3.5", + "bundled": true, "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "5.0.0", - "decamelize": "1.2.0" - } - } - } - }, - "electron-download": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz", - "integrity": "sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg==", - "dev": true, - "requires": { - "debug": "3.2.6", - "env-paths": "1.0.0", - "fs-extra": "4.0.3", - "minimist": "1.2.0", - "nugget": "2.0.1", - "path-exists": "3.0.0", - "rc": "1.2.8", - "semver": "5.6.0", - "sumchecker": "2.0.2" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "2.1.1" + "safe-buffer": "5.1.2", + "yallist": "3.0.3" } }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "minizlib": { + "version": "1.2.1", + "bundled": true, "dev": true, + "optional": true, "requires": { - "graceful-fs": "4.1.15", - "jsonfile": "4.0.0", - "universalify": "0.1.2" + "minipass": "2.3.5" } }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "mkdirp": { + "version": "0.5.1", + "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.15" + "minimist": "0.0.8" } }, "ms": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "bundled": true, + "dev": true, + "optional": true }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "electron-osx-sign": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.11.tgz", - "integrity": "sha512-VVd40nrnVqymvFrY9ZkOYgHJOvexHHYTR3di/SN+mjJ0OWhR1I8BRVj3U+Yamw6hnkZZNKZp52rqL5EFAAPFkQ==", - "dev": true, - "requires": { - "bluebird": "3.5.3", - "compare-version": "0.1.2", - "debug": "2.6.9", - "isbinaryfile": "3.0.3", - "minimist": "1.2.0", - "plist": "3.0.1" - } - }, - "electron-publish": { - "version": "20.36.0", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-20.36.0.tgz", - "integrity": "sha512-LjJ4KoApSLtKyGWotv0B+PoTzpLEdHHXzDF9HLxatPlfoZCmrOexqm7Qiv1ODuYWPac7Zpf2OHitJp8WIOcZRQ==", - "dev": true, - "requires": { - "bluebird-lst": "1.0.6", - "builder-util": "9.3.0", - "builder-util-runtime": "8.0.2", - "chalk": "2.4.1", - "fs-extra-p": "7.0.0", - "lazy-val": "1.0.3", - "mime": "2.3.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "needle": { + "version": "2.3.0", + "bundled": true, "dev": true, + "optional": true, "requires": { - "color-convert": "1.9.3" + "debug": "4.1.1", + "iconv-lite": "0.4.24", + "sax": "1.2.4" } }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, "dev": true, + "optional": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.3.0", + "nopt": "4.0.1", + "npm-packlist": "1.4.1", + "npmlog": "4.1.2", + "rc": "1.2.8", + "rimraf": "2.6.3", + "semver": "5.7.0", + "tar": "4.4.8" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "nopt": { + "version": "4.0.1", + "bundled": true, "dev": true, + "optional": true, "requires": { - "has-flag": "3.0.0" + "abbrev": "1.1.1", + "osenv": "0.1.5" } - } - } - }, - "electron-to-chromium": { - "version": "1.3.84", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.84.tgz", - "integrity": "sha512-IYhbzJYOopiTaNWMBp7RjbecUBsbnbDneOP86f3qvS0G0xfzwNSvMJpTrvi5/Y1gU7tg2NAgeg8a8rCYvW9Whw==", - "dev": true - }, - "elementtree": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", - "integrity": "sha1-mskb5uUvtuYkTE5UpKw+2K6OKcA=", - "requires": { - "sax": "1.1.4" - }, - "dependencies": { - "sax": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", - "integrity": "sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk=" - } - } - }, - "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.5", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "1.4.0" - } - }, - "endent": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/endent/-/endent-1.3.0.tgz", - "integrity": "sha512-C8AryqPPwtydqcpO5AF6k9Bd1EpFkQtvsefJqS3y3n8TG13Jy63MascDxTOULZYqrUde+dK6BjNc6LIMr3iI2A==", - "requires": { - "dedent": "0.7.0", - "fast-json-parse": "1.0.3", - "objectorarray": "1.0.3" - } - }, - "engine.io": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", - "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", - "dev": true, - "requires": { - "accepts": "1.3.3", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "ws": "1.1.2" - }, - "dependencies": { - "accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, "dev": true, + "optional": true, "requires": { - "mime-types": "2.1.21", - "negotiator": "0.6.1" + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.6" } }, - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "npmlog": { + "version": "4.1.2", + "bundled": true, "dev": true, + "optional": true, "requires": { - "ms": "0.7.2" + "are-we-there-yet": "1.1.5", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" } }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "number-is-nan": { + "version": "1.0.1", + "bundled": true, "dev": true }, - "ws": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", - "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "object-assign": { + "version": "4.1.1", + "bundled": true, "dev": true, - "requires": { - "options": "0.0.6", - "ultron": "1.0.2" - } - } - } - }, - "engine.io-client": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", - "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parsejson": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "1.1.2", - "xmlhttprequest-ssl": "1.5.3", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, "dev": true, "requires": { - "ms": "0.7.2" + "wrappy": "1.0.2" } }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true }, - "ultron": { + "os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", - "dev": true + "bundled": true, + "dev": true, + "optional": true }, - "ws": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", - "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "osenv": { + "version": "0.1.5", + "bundled": true, "dev": true, + "optional": true, "requires": { - "options": "0.0.6", - "ultron": "1.0.2" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } - } - } - }, - "engine.io-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", - "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.6", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary": "0.1.7", - "wtf-8": "1.0.0" - } - }, - "enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", - "requires": { - "graceful-fs": "4.1.15", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.8" - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "env-paths": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", - "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=", - "dev": true - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "requires": { - "prr": "1.0.1" - } - }, - "error": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", - "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", - "requires": { - "string-template": "0.2.1", - "xtend": "4.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "requires": { - "es-to-primitive": "1.2.0", - "function-bind": "1.1.1", - "has": "1.0.3", - "is-callable": "1.1.4", - "is-regex": "1.0.4", - "object-keys": "1.1.1" - }, - "dependencies": { - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - } - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "requires": { - "is-callable": "1.1.4", - "is-date-object": "1.0.1", - "is-symbol": "1.0.2" - } - }, - "es5-ext": { - "version": "0.10.46", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", - "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", - "dev": true, - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "next-tick": "1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46", - "es6-symbol": "3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-promise": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", - "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==", - "dev": true - }, - "es6-promise-plugin": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/es6-promise-plugin/-/es6-promise-plugin-4.2.2.tgz", - "integrity": "sha512-uoA4aVplXI9oqUYJFBAVRwAqIN9/n9JgrTAUGX3qPbnSZVE5yY1+6/MsoN5f4xsaPO62WjPHOdtts6okMN6tNA==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "4.2.5" - } - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46" - } - }, - "es6-templates": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", - "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", - "requires": { - "recast": "0.11.23", - "through": "2.3.8" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.1", - "estraverse": "4.2.0" - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "estree-walker": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", - "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", - "requires": { - "idna-uts46-hx": "2.3.1", - "js-sha3": "0.5.7" - }, - "dependencies": { - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" - } - } - }, - "eth-lib": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", - "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1", - "keccakjs": "0.2.3", - "nano-json-stream-parser": "0.1.2", - "servify": "0.1.12", - "ws": "3.3.3", - "xhr-request-promise": "0.1.2" - } - }, - "ethereum-common": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", - "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=" - }, - "ethereumjs-tx": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", - "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", - "requires": { - "ethereum-common": "0.0.18", - "ethereumjs-util": "5.2.0" - } - }, - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "ethjs-util": "0.1.6", - "keccak": "1.4.0", - "rlp": "2.2.3", - "safe-buffer": "5.1.2", - "secp256k1": "3.7.1" - } - }, - "ethers": { - "version": "4.0.0-beta.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.1.tgz", - "integrity": "sha512-SoYhktEbLxf+fiux5SfCEwdzWENMvgIbMZD90I62s4GZD9nEjgEWy8ZboI3hck193Vs0bDoTohDISx84f2H2tw==", - "requires": { - "@types/node": "10.12.26", - "aes-js": "3.0.0", - "bn.js": "4.11.8", - "elliptic": "6.3.3", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.3", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - }, - "dependencies": { - "@types/node": { - "version": "10.12.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.26.tgz", - "integrity": "sha512-nMRqS+mL1TOnIJrL6LKJcNZPB8V3eTfRo9FQA2b5gDvrHurC8XbSA86KNe0dShlEL7ReWJv/OU9NL7Z0dnqWTg==" }, - "elliptic": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", - "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "inherits": "2.0.3" + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } } }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, "requires": { + "core-util-is": "1.0.2", "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" - } - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.46" - } - }, - "eventemitter3": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", - "integrity": "sha1-R3hr2qCHyvext15zq8XH1UAVjNA=" - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", - "dev": true, - "requires": { - "array-slice": "0.2.3", - "array-unique": "0.2.1", - "braces": "0.1.5" - }, - "dependencies": { - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true, - "requires": { - "expand-range": "0.1.1" - } - }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true, - "requires": { - "is-number": "0.1.1", - "repeat-string": "0.2.2" - } - }, - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "dev": true - } - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "requires": { - "fill-range": "2.2.4" - } - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "requires": { - "accepts": "1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", - "qs": "6.5.2", - "range-parser": "1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", - "dev": true, - "requires": { - "mime-db": "1.37.0" - } - }, - "ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", - "dev": true, - "requires": { - "ext-list": "2.2.2", - "sort-keys-length": "1.0.1" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "2.0.4" - } - } - } - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.23", - "tmp": "0.0.33" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "1.0.0" - } - }, - "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", - "dev": true, - "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", - "mkdirp": "0.5.1", - "yauzl": "2.4.1" - }, - "dependencies": { - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true, - "requires": { - "pend": "1.2.0" - } - }, - "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", - "dev": true, - "requires": { - "fd-slicer": "1.0.1" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fancy-log": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", - "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", - "dev": true, - "requires": { - "ansi-gray": "0.1.1", - "color-support": "1.1.3", - "time-stamp": "1.1.0" - }, - "dependencies": { - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true - } - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-parse": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", - "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "requires": { - "websocket-driver": "0.7.0" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "requires": { - "pend": "1.2.0" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "requires": { - "escape-string-regexp": "1.0.5" - } - }, - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" - }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", - "dev": true - }, - "filenamify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", - "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", - "dev": true, - "requires": { - "filename-reserved-regex": "2.0.0", - "strip-outer": "1.0.1", - "trim-repeated": "1.0.0" - } - }, - "fileset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", - "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", - "dev": true, - "requires": { - "glob": "7.1.3", - "minimatch": "3.0.4" - } - }, - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "3.1.1", - "repeat-element": "1.1.3", - "repeat-string": "1.6.1" - } - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", - "requires": { - "commondir": "1.0.1", - "mkdirp": "0.5.1", - "pkg-dir": "1.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "follow-redirects": { - "version": "1.5.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.9.tgz", - "integrity": "sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w==", - "requires": { - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "1.1.4" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "1.0.2" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.7", - "mime-types": "2.1.21" - } - }, - "formidable": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", - "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==" - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" - } - }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true, - "requires": { - "null-check": "1.0.0" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", - "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", - "requires": { - "graceful-fs": "4.1.15", - "jsonfile": "2.4.0" - } - }, - "fs-extra-p": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-7.0.0.tgz", - "integrity": "sha512-5tg5jBOd0xIXjwj4PDnafOXL5TyPVzjxLby4DPKev53wurEXp7IsojBaD4Lj5M5w7jxw0pbkEU0fFEPmcKoMnA==", - "dev": true, - "requires": { - "bluebird-lst": "1.0.6", - "fs-extra": "7.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "jsonfile": "4.0.0", - "universalify": "0.1.2" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "4.1.15" - } - } - } - }, - "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "dev": true, - "requires": { - "minipass": "2.3.5" - } - }, - "fs-promise": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fs-promise/-/fs-promise-2.0.3.tgz", - "integrity": "sha1-9k5PhUvPaJqovdy6JokW2z20aFQ=", - "requires": { - "any-promise": "1.3.0", - "fs-extra": "2.1.2", - "mz": "2.7.0", - "thenify-all": "1.6.0" - }, - "dependencies": { - "fs-extra": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", - "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", - "requires": { - "graceful-fs": "4.1.15", - "jsonfile": "2.4.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "requires": { - "graceful-fs": "4.1.15" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", - "optional": true, - "requires": { - "nan": "2.11.1", - "node-pre-gyp": "0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "optional": true, - "requires": { - "minipass": "2.2.4" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "optional": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": "2.1.2" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" - } - }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "optional": true, - "requires": { - "minipass": "2.2.4" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.0", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.7", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" - } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.7", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "optional": true, - "requires": { - "core-util-is": "1.0.2", - "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.2" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "optional": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.1", - "bundled": true, - "optional": true, - "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true - } - } - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "requires": { - "graceful-fs": "4.1.15", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.3" - } - }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "requires": { - "globule": "1.2.1" - } - }, - "generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", - "dev": true, - "requires": { - "is-property": "1.0.2" - } - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "1.0.2" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" - }, - "get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", - "dev": true, - "requires": { - "npm-conf": "1.1.3" - } - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "2.0.1" - } - }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "requires": { - "min-document": "2.19.0", - "process": "0.5.2" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "1.3.5" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.3", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", - "dev": true, - "requires": { - "glob": "7.1.3", - "lodash": "4.17.11", - "minimatch": "3.0.4" - } - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "requires": { - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-plain-obj": "1.1.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "isurl": "1.0.0", - "lowercase-keys": "1.0.1", - "p-cancelable": "0.3.0", - "p-timeout": "1.2.1", - "safe-buffer": "5.1.2", - "timed-out": "4.0.1", - "url-parse-lax": "1.0.0", - "url-to-options": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - }, - "groestl-hash-js": { - "version": "git+https://github.com/Groestlcoin/groestl-hash-js.git#ef6a04f1c4d2f0448f0882b5f213ef7a0659baee" - }, - "handlebars": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", - "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", - "dev": true, - "requires": { - "async": "2.6.1", - "optimist": "0.6.1", - "source-map": "0.6.1", - "uglify-js": "3.4.9" - }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true, - "optional": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", - "dev": true, - "optional": true, - "requires": { - "commander": "2.17.1", - "source-map": "0.6.1" - } - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "6.5.5", - "har-schema": "2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", - "dev": true, - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "requires": { - "has-symbol-support-x": "1.4.2" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "hash.js": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", - "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" - } - }, - "hat": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/hat/-/hat-0.0.3.tgz", - "integrity": "sha1-uwFKnmSzeIrtgAWRdBPU/z1QLYo=", - "dev": true - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "1.1.5", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "1.0.0" - } - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" - }, - "html-loader": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz", - "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==", - "requires": { - "es6-templates": "0.2.3", - "fastparse": "1.1.2", - "html-minifier": "3.5.21", - "loader-utils": "1.1.0", - "object-assign": "4.1.1" - }, - "dependencies": { - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - } - } - }, - "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", - "requires": { - "camel-case": "3.0.0", - "clean-css": "4.2.1", - "commander": "2.17.1", - "he": "1.2.0", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.4.9" - }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", - "requires": { - "commander": "2.17.1", - "source-map": "0.6.1" - } - } - } - }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": "1.5.0" - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=" - }, - "http-parser-js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", - "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==" - }, - "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", - "dev": true, - "requires": { - "eventemitter3": "3.1.0", - "follow-redirects": "1.5.9", - "requires-port": "1.0.0" - }, - "dependencies": { - "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", - "dev": true - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.15.2" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - }, - "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", - "dev": true, - "requires": { - "agent-base": "4.2.1", - "debug": "3.2.6" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": "2.1.2" - } - }, - "idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "requires": { - "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" - } - } - }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "dev": true, - "requires": { - "minimatch": "3.0.4" - } - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" - }, - "immutable": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", - "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "requires": { - "ansi-escapes": "3.1.0", - "chalk": "2.4.1", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.2.0", - "figures": "2.0.0", - "lodash": "4.17.11", - "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.3" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=" - }, - "into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", - "dev": true, - "requires": { - "from2": "2.3.0", - "p-is-promise": "1.1.0" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "1.4.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - }, - "ionic": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/ionic/-/ionic-3.9.1.tgz", - "integrity": "sha512-VJ2kx+nmOvRjUMYRuU6/XFmrnL/0A/+dt0ZPRvEx2f/StUOHRpoVG8wQJl69tvrlvSeT0OJ58GGEdYDJS/PVxw==", - "requires": { - "@ionic/cli-utils": "1.9.1", - "chalk": "2.4.1", - "opn": "5.4.0", - "os-name": "2.0.1", - "rimraf": "2.6.2", - "semver": "5.6.0", - "tslib": "1.9.3" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.3" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "ionic-angular": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/ionic-angular/-/ionic-angular-3.9.2.tgz", - "integrity": "sha512-BEZ6magY1i5GwM9ki/MOpszUz62+g518HsGICtw9TE1D4v9Eb6n/o7e+X0vtvpK4TdouFjQ8r5XA9VPAKW9/+Q==" - }, - "ionic-mocks": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ionic-mocks/-/ionic-mocks-1.3.0.tgz", - "integrity": "sha1-OYuuJeAfI6sxttN5dU7p08S/sGY=", - "dev": true - }, - "ionic-plugin-deeplinks": { - "version": "git+https://github.com/airgap-it/ionic-plugin-deeplinks.git#99ed0482b4d3992742f9b297fdb3ef4ca10a7fbd", - "requires": { - "mkpath": "1.0.0", - "node-version-compare": "1.0.2", - "plist": "3.0.1", - "xml2js": "0.4.19" - } - }, - "ionic2-material-icons": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ionic2-material-icons/-/ionic2-material-icons-1.0.3.tgz", - "integrity": "sha1-VfZ2ofOl2YMMiIDWZgQj3EF6UjE=" - }, - "ionicons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-3.0.0.tgz", - "integrity": "sha1-QLja9P16MRUL0AIWD2ZJbiKpjDw=" - }, - "ios-sim": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ios-sim/-/ios-sim-7.0.0.tgz", - "integrity": "sha512-VloxT+AARztnhkGQcfxPjMU8puewPULVA+qzAOrK5JspiWTvi7JhBV8t19x42It+tsX35ZabF1WyUZhorLDbvQ==", - "requires": { - "bplist-parser": "0.0.6", - "nopt": "1.0.9", - "plist": "3.0.1", - "simctl": "1.1.1" - }, - "dependencies": { - "bplist-parser": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz", - "integrity": "sha1-ONo0cYF9+dRKs4kuJ3B7u9daEbk=" - }, - "nopt": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.9.tgz", - "integrity": "sha1-O8DXy6e/sNWmdtvtfA6+SKT9RU4=", - "requires": { - "abbrev": "1.1.1" - } - } - } - }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "requires": { - "binary-extensions": "1.12.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "1.6.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "0.1.1", - "is-path-inside": "1.0.1" - } - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true - }, - "is-my-json-valid": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.19.0.tgz", - "integrity": "sha512-mG0f/unGX1HZ5ep4uhRaPOS8EkAY8/j6mDRMJrutq4CqhoJWYp7qAlonIPy3TV7p3ju4TK9fo/PbnoksWmsp5Q==", - "dev": true, - "requires": { - "generate-function": "2.3.1", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "requires": { - "kind-of": "3.2.2" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "1.0.1" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "1.0.3" - } - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "requires": { - "has-symbols": "1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", - "dev": true, - "requires": { - "buffer-alloc": "1.2.0" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "istanbul-api": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz", - "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==", - "dev": true, - "requires": { - "async": "2.6.1", - "fileset": "2.0.3", - "istanbul-lib-coverage": "1.2.1", - "istanbul-lib-hook": "1.2.2", - "istanbul-lib-instrument": "1.10.2", - "istanbul-lib-report": "1.1.5", - "istanbul-lib-source-maps": "1.2.6", - "istanbul-reports": "1.5.1", - "js-yaml": "3.12.0", - "mkdirp": "0.5.1", - "once": "1.4.0" - } - }, - "istanbul-instrumenter-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz", - "integrity": "sha512-a5SPObZgS0jB/ixaKSMdn6n/gXSrK2S6q/UfRJBT3e6gQmVjwZROTODQsYW5ZNwOu78hG62Y3fWlebaVOL0C+w==", - "dev": true, - "requires": { - "convert-source-map": "1.6.0", - "istanbul-lib-instrument": "1.10.2", - "loader-utils": "1.1.0", - "schema-utils": "0.3.0" - }, - "dependencies": { - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, "dev": true, + "optional": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "glob": "7.1.3" } - } - } - }, - "istanbul-lib-coverage": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", - "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz", - "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==", - "dev": true, - "requires": { - "append-transform": "0.4.0" - } - }, - "istanbul-lib-instrument": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", - "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", - "dev": true, - "requires": { - "babel-generator": "6.26.1", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "istanbul-lib-coverage": "1.2.1", - "semver": "5.6.0" - } - }, - "istanbul-lib-report": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz", - "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "1.2.1", - "mkdirp": "0.5.1", - "path-parse": "1.0.6", - "supports-color": "3.2.3" - }, - "dependencies": { - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, "dev": true, "requires": { - "has-flag": "1.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } - } - } - }, - "istanbul-lib-source-maps": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz", - "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==", - "dev": true, - "requires": { - "debug": "3.2.6", - "istanbul-lib-coverage": "1.2.1", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "source-map": "0.5.7" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, "dev": true, + "optional": true, "requires": { - "ms": "2.1.1" + "safe-buffer": "5.1.2" } }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "1.1.1", + "fs-minipass": "1.2.5", + "minipass": "2.3.5", + "minizlib": "1.2.1", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.2", + "yallist": "3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, "dev": true } } }, - "istanbul-reports": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz", - "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==", - "dev": true, - "requires": { - "handlebars": "4.0.12" - } - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "requires": { - "has-to-string-tag-x": "1.4.1", - "is-object": "1.0.1" - } - }, - "jasmine": { - "version": "2.99.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.99.0.tgz", - "integrity": "sha1-jKctEC5jm4Z8ZImFbg4YqceqQrc=", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "7.1.3", - "jasmine-core": "2.99.1" - } - }, - "jasmine-core": { - "version": "2.99.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", - "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=", - "dev": true - }, - "jasmine-spec-reporter": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz", - "integrity": "sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg==", + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "dev": true, "requires": { - "colors": "1.1.2" - } - }, - "jasminewd2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", - "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", - "dev": true - }, - "js-base64": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", - "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==", - "dev": true - }, - "js-beautify": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.0.tgz", - "integrity": "sha512-OMwf/tPDpE/BLlYKqZOhqWsd3/z2N3KOlyn1wsCRGFwViE8LOQTcDtathQvHvZc+q+zWmcNAbwKSC+iJoMaH2Q==", - "requires": { - "config-chain": "1.1.12", - "editorconfig": "0.15.3", - "glob": "7.1.3", + "graceful-fs": "4.1.15", + "inherits": "2.0.3", "mkdirp": "0.5.1", - "nopt": "4.0.1" + "rimraf": "2.6.3" } }, - "js-sha3": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.7.0.tgz", - "integrity": "sha512-Wpks3yBDm0UcL5qlVhwW9Jr9n9i4FfeWBFOOXP5puDS/SiudJGhw7DPyBqn3487qD4F0lsC0q3zxink37f7zeA==" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - } + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.3" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "optional": true, "requires": { - "jsonify": "0.0.0" + "globule": "1.2.1" } }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "genfun": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", + "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", "dev": true }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "requires": { - "graceful-fs": "4.1.15" - } + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "assert-plus": "1.0.0" } }, - "jszip": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", - "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", - "dev": true, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "requires": { - "core-js": "2.3.0", - "es6-promise": "3.0.2", - "lie": "3.1.1", - "pako": "1.0.6", - "readable-stream": "2.0.6" - }, - "dependencies": { - "core-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", - "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", - "dev": true - }, - "es6-promise": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", - "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, - "karma": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", - "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "bluebird": "3.5.3", - "body-parser": "1.18.3", - "chokidar": "1.7.0", - "colors": "1.1.2", - "combine-lists": "1.0.1", - "connect": "3.6.6", - "core-js": "2.5.7", - "di": "0.0.1", - "dom-serialize": "2.2.1", - "expand-braces": "0.1.2", - "glob": "7.1.3", - "graceful-fs": "4.1.15", - "http-proxy": "1.17.0", - "isbinaryfile": "3.0.3", - "lodash": "3.10.1", - "log4js": "0.6.38", - "mime": "1.4.1", - "minimatch": "3.0.4", - "optimist": "0.6.1", - "qjobs": "1.2.0", - "range-parser": "1.2.0", - "rimraf": "2.6.2", - "safe-buffer": "5.1.2", - "socket.io": "1.7.3", - "source-map": "0.5.7", - "tmp": "0.0.31", - "useragent": "2.3.0" + "is-glob": "3.1.0", + "path-dirname": "1.0.2" }, "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "is-extglob": "2.1.1" } } } }, - "karma-chrome-launcher": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", - "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", "dev": true, "requires": { - "fs-access": "1.0.1", - "which": "1.3.1" + "array-union": "1.0.2", + "dir-glob": "2.2.2", + "glob": "7.1.3", + "ignore": "3.3.10", + "pify": "3.0.0", + "slash": "1.0.0" } }, - "karma-coverage-istanbul-reporter": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-1.4.3.tgz", - "integrity": "sha1-O13/RmT6W41RlrmInj9hwforgNk=", + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", "dev": true, + "optional": true, "requires": { - "istanbul-api": "1.3.7", + "glob": "7.1.3", + "lodash": "4.17.11", "minimatch": "3.0.4" } }, - "karma-jasmine": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz", - "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=", - "dev": true - }, - "karma-sourcemap-loader": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", - "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.15" - } + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, - "karma-spec-reporter": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.31.tgz", - "integrity": "sha1-SDDccUihVcfXoYbmMjOaDYD63sM=", - "dev": true, - "requires": { - "colors": "1.1.2" - } + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "dev": true }, - "karma-webpack": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-2.0.13.tgz", - "integrity": "sha512-2cyII34jfrAabbI2+4Rk4j95Nazl98FvZQhgSiqKUDarT317rxfv/EdzZ60CyATN4PQxJdO5ucR5bOOXkEVrXw==", + "handlebars": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", "dev": true, "requires": { - "async": "2.6.1", - "babel-runtime": "6.26.0", - "loader-utils": "1.1.0", - "lodash": "4.17.11", - "source-map": "0.5.7", - "webpack-dev-middleware": "1.12.2" + "neo-async": "2.6.1", + "optimist": "0.6.1", + "source-map": "0.6.1", + "uglify-js": "3.6.0" }, "dependencies": { - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "1.5.0", - "inherits": "2.0.3", - "nan": "2.11.1", - "safe-buffer": "5.1.2" - } + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true }, - "keccakjs": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.3.tgz", - "integrity": "sha512-BjLkNDcfaZ6l8HBG9tH0tpmDv3sS2mA7FNQxFHpCdzP3Gb2MVruXBSuoM66SnVxKJpAr5dKGdkHD+bDokt8fTg==", + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, "requires": { - "browserify-sha3": "0.0.4", - "sha3": "1.2.2" + "ajv": "6.9.1", + "har-schema": "2.0.0" } }, - "keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", - "dev": true, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { - "json-buffer": "3.0.0" + "function-bind": "1.1.1" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, "requires": { - "is-buffer": "1.1.6" + "ansi-regex": "2.1.1" } }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", "dev": true, "requires": { - "package-json": "4.0.1" + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true }, - "lazy-val": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.3.tgz", - "integrity": "sha512-pjCf3BYk+uv3ZcPzEVM0BFvO9Uw58TmlrU0oG5tTrr9Kcid3+kdKxapH8CjdYmVa2nO5wOoZn2rdvZx2PKj/xg==", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true }, - "lazystream": { + "has-value": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, "requires": { - "readable-stream": "2.3.6" + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } } }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, "requires": { - "invert-kv": "1.0.0" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, - "leek": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/leek/-/leek-0.0.24.tgz", - "integrity": "sha1-5ADlfw5g2O8r1NBo3EKKVDRdvNo=", + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, "requires": { - "debug": "2.6.9", - "lodash.assign": "3.2.0", - "rsvp": "3.6.2" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, - "libsodium": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.4.tgz", - "integrity": "sha512-fTU3vUdrxQzhPAAjmTSqKk4LzYbR0OtcYjp1P92AlH50JIxXZFEIXWh1yryCmU6RLGfwS2IzBdZjbmpYf/TlyQ==" - }, - "libsodium-wrappers": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.4.tgz", - "integrity": "sha512-axKkW01L0q+urLeE7UMSZKWwk4LrRbi6s5pjKBAvbgDBYnsSaolK1oN/Syilm1dqJFkJQNi6qodwOp8dzSoc9Q==", + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, "requires": { - "libsodium": "0.7.4" + "hash.js": "1.1.7", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, - "lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, "requires": { - "immediate": "3.0.6" + "inherits": "2.0.3", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "wbuf": "1.7.3" } }, - "livereload-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", - "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==" + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "4.1.15", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true }, - "loader-runner": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz", - "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==" + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": "1.5.0", + "toidentifier": "1.0.0" } }, - "localforage": { - "version": "1.7.1", - "resolved": "http://registry.npmjs.org/localforage/-/localforage-1.7.1.tgz", - "integrity": "sha1-5JJ+BCMCuGTbMPMhHxO1xvDell0=", - "requires": { - "lie": "3.1.1" - } + "http-parser-js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", + "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==", + "dev": true }, - "localforage-cordovasqlitedriver": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/localforage-cordovasqlitedriver/-/localforage-cordovasqlitedriver-1.7.0.tgz", - "integrity": "sha1-i5OVd1nuaI06WNW6fAR39sy1ODg=", + "http-proxy": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "dev": true, "requires": { - "localforage": "1.7.1" + "eventemitter3": "3.1.2", + "follow-redirects": "1.7.0", + "requires-port": "1.0.0" } }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "agent-base": "4.2.1", + "debug": "3.1.0" }, "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } } } }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "http-proxy-middleware": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", + "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", + "dev": true, "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keys": "3.1.2" + "http-proxy": "1.17.0", + "is-glob": "4.0.1", + "lodash": "4.17.11", + "micromatch": "3.1.10" } }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" - }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=" - }, - "lodash._createassigner": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", - "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, "requires": { - "lodash._bindcallback": "3.0.1", - "lodash._isiterateecall": "3.0.9", - "lodash.restparam": "3.6.1" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.16.1" } }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true }, - "lodash.assign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", - "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", + "https-proxy-agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "dev": true, "requires": { - "lodash._baseassign": "3.2.0", - "lodash._createassigner": "3.1.1", - "lodash.keys": "3.1.2" + "agent-base": "4.2.1", + "debug": "3.2.6" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } } }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" + "ms": "2.0.0" } }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", - "dev": true - }, - "lodash.mergewith": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", - "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", - "dev": true - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "log4js": { - "version": "0.6.38", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", - "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "husky": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-2.3.0.tgz", + "integrity": "sha512-A/ZQSEILoq+mQM3yC3RIBSaw1bYXdkKnyyKVSUiJl+iBjVZc5LQEXdGY1ZjrDxC4IzfRPiJ0IqzEQGCN5TQa/A==", "dev": true, "requires": { - "readable-stream": "1.0.34", - "semver": "4.3.6" + "cosmiconfig": "5.2.1", + "execa": "1.0.0", + "find-up": "3.0.0", + "get-stdin": "7.0.0", + "is-ci": "2.0.0", + "pkg-dir": "4.2.0", + "please-upgrade-node": "3.1.1", + "read-pkg": "5.1.1", + "run-node": "1.0.0", + "slash": "3.0.0" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "2.0.0", + "is-directory": "0.3.1", + "js-yaml": "3.13.1", + "parse-json": "4.0.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.6.0", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "6.0.5", + "get-stream": "4.1.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "3.0.0" + } + }, + "get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "3.0.0", + "path-exists": "3.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "2.2.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "error-ex": "1.3.2", + "json-parse-better-errors": "1.0.2" } }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.0.0.tgz", + "integrity": "sha512-zoH7ZWPkRdgwYCDVoQTzqjG8JSPANhtvLhh4KVUHyKnaUJJrNeFmWIkTcNuJmR3GLMEmGYEf2S2bjgx26JTF+Q==", + "dev": true, + "requires": { + "locate-path": "5.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "2.2.0" + } + } + } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "read-pkg": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.1.1.tgz", + "integrity": "sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w==", + "dev": true, + "requires": { + "@types/normalize-package-data": "2.4.0", + "normalize-package-data": "2.5.0", + "parse-json": "4.0.0", + "type-fest": "0.4.1" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true } } }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "requires": { - "js-tokens": "3.0.2" + "safer-buffer": "2.1.2" } }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "dev": true, "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "minimatch": "3.0.4" } }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "import-from": "2.1.0" } }, - "macos-release": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-1.1.0.tgz", - "integrity": "sha512-mmLbumEYMi5nXReB9js3WGsB8UE6cDBWyIO62Z4DNx6GbRhDxHNjA1MlzSpJ2S2KM1wyiPRA0d19uHWYYvMHjA==" + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "2.0.0", + "resolve-from": "3.0.0" + } }, - "magic-string": { - "version": "0.22.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", - "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", "dev": true, "requires": { - "vlq": "0.2.3" + "resolve-from": "3.0.0" } }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, "requires": { - "pify": "3.0.0" + "pkg-dir": "3.0.0", + "resolve-cwd": "2.0.0" }, "dependencies": { - "pify": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "3.0.0", + "path-exists": "3.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "2.2.0" + } + }, + "p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "3.0.0" + } } } }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true, + "optional": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, + "optional": true, "requires": { - "p-defer": "1.0.0" + "repeating": "2.0.1" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", "dev": true }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "object-visit": "1.0.1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=" + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "md5.js": { + "ini": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inquirer": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", + "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "ansi-escapes": "3.2.0", + "chalk": "2.4.2", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "3.0.3", + "figures": "2.0.0", + "lodash": "4.17.11", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rxjs": "6.5.2", + "string-width": "2.1.1", + "strip-ansi": "5.2.0", + "through": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + } + } + } } }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "internal-ip": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz", + "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "default-gateway": "2.7.2", + "ipaddr.js": "1.9.0" } }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.6" - } + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "dev": true }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" + "loose-envify": "1.4.0" } }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "merkle-lib": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/merkle-lib/-/merkle-lib-2.0.10.tgz", - "integrity": "sha1-grjbrnXieneFOItz+ddyXQ9vMyY=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - } + "ionicons": { + "version": "4.5.8", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-4.5.8.tgz", + "integrity": "sha512-Zib/fFGHt+r9tWrvZnrxVj22cO4NVj+ZOb76v5yiOyvb0LSTbbReECDg7lEU8e+YR69qCtWHruStJ+b4G/OWxg==" }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "ios-sim": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ios-sim/-/ios-sim-8.0.1.tgz", + "integrity": "sha512-BdDMehHmLxbbOWAi98OZRquctkfpcVWBt3wu7FQHJ5RSuN4drY4tvhOtOzQMRy127irReTpyN4WY5kHF9iC9Ig==", "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bplist-parser": "0.0.6", + "nopt": "1.0.9", + "plist": "3.0.1", + "simctl": "2.0.0" + }, + "dependencies": { + "bplist-parser": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz", + "integrity": "sha1-ONo0cYF9+dRKs4kuJ3B7u9daEbk=" + }, + "nopt": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.9.tgz", + "integrity": "sha1-O8DXy6e/sNWmdtvtfA6+SKT9RU4=", + "requires": { + "abbrev": "1.1.1" + } + } } }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "requires": { - "mime-db": "1.37.0" + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true }, - "mimic-response": { + "is-binary-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, "requires": { - "dom-walk": "0.1.1" + "binary-extensions": "1.13.1" } }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, "requires": { - "brace-expansion": "1.1.11" + "ci-info": "2.0.0" } }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } }, - "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "safe-buffer": "5.1.2", - "yallist": "3.0.3" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" }, "dependencies": { - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true } } }, - "minizlib": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.1.tgz", - "integrity": "sha512-TrfjCjk4jLhcJyGMYymBH6oTXcWjYbUAXTHDbtnWHjZC25h0cdajHuPE1zxb4DVmu8crfh+HwH/WMuyLG0nHBg==", + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "minipass": "2.3.5" + "number-is-nan": "1.0.1" } }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" }, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-buffer": "1.1.6" } } } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } + "path-is-inside": "1.0.2" } }, - "mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, "requires": { - "mkdirp": "0.5.1" + "isobject": "3.0.1" } }, - "mkpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-1.0.0.tgz", - "integrity": "sha1-67Opd+evHGg65v2hK1Raa6bFhT0=" - }, - "mock-fs": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.8.0.tgz", - "integrity": "sha512-Gwj4KnJOW15YeTJKO5frFd/WDO5Mc0zxXqL9oHx3+e9rBqW8EVARqQHSaIXznUdljrD6pvbNGW2ZGXKPEfYJfw==" - }, - "mout": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/mout/-/mout-0.11.1.tgz", - "integrity": "sha1-ujYR318OWx/7/QEWa48C0fX6K5k=" - }, - "mri": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.1.tgz", - "integrity": "sha1-haom09ru7t+A3FmEr5XMXKXK2fE=", + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, - "myetherwallet-blockies": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/myetherwallet-blockies/-/myetherwallet-blockies-0.1.1.tgz", - "integrity": "sha512-2UPR88/+L7rTVLqTM1Fu3Er9+m6XLMGaanP5wyq5+dGyv9TFbB5ohXRJA0jeYf+30gtlOlhlvzAWtwB6BiHWxQ==" - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "requires": { - "any-promise": "1.3.0", - "object-assign": "4.1.1", - "thenify-all": "1.6.0" + "has": "1.0.3" } }, - "nan": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", - "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==" - }, - "nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" - }, - "nanoassert": { + "is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", - "integrity": "sha1-TzFS4JVA/eKMdvRLGbvNHVpCR40=" + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } + "has-symbols": "1.0.0" } }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=" + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, - "needle": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", - "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.23", - "sax": "1.2.4" - } + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true }, - "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==" + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true }, - "next-tick": { + "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, "requires": { - "lower-case": "1.1.4" + "buffer-alloc": "1.2.0" } }, - "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-api": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.6.tgz", + "integrity": "sha512-x0Eicp6KsShG1k1rMgBAi/1GgY7kFGEBwQpw3PXGEmu+rBcBNhqU8g2DgY9mlepAsLPzrzrbqSgCGANnki4POA==", "dev": true, "requires": { - "fstream": "1.0.11", - "glob": "7.1.3", - "graceful-fs": "4.1.15", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "4.1.2", - "osenv": "0.1.5", - "request": "2.88.0", - "rimraf": "2.6.2", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.3.1" + "async": "2.6.2", + "compare-versions": "3.4.0", + "fileset": "2.0.3", + "istanbul-lib-coverage": "2.0.5", + "istanbul-lib-hook": "2.0.7", + "istanbul-lib-instrument": "3.3.0", + "istanbul-lib-report": "2.0.8", + "istanbul-lib-source-maps": "3.0.6", + "istanbul-reports": "2.2.6", + "js-yaml": "3.13.1", + "make-dir": "2.1.0", + "minimatch": "3.0.4", + "once": "1.4.0" }, "dependencies": { - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "dev": true, "requires": { - "abbrev": "1.1.1" + "@babel/generator": "7.4.4", + "@babel/parser": "7.4.5", + "@babel/template": "7.4.4", + "@babel/traverse": "7.4.5", + "@babel/types": "7.4.4", + "istanbul-lib-coverage": "2.0.5", + "semver": "6.1.1" } }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "4.0.1", + "semver": "5.7.0" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", + "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==", "dev": true } } }, - "node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "istanbul-instrumenter-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz", + "integrity": "sha512-a5SPObZgS0jB/ixaKSMdn6n/gXSrK2S6q/UfRJBT3e6gQmVjwZROTODQsYW5ZNwOu78hG62Y3fWlebaVOL0C+w==", + "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.3", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.4", - "vm-browserify": "0.0.4" + "convert-source-map": "1.6.0", + "istanbul-lib-instrument": "1.10.2", + "loader-utils": "1.2.3", + "schema-utils": "0.3.0" }, "dependencies": { - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12", - "isarray": "1.0.0" + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "5.5.2" + } } } }, - "node-pre-gyp": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", - "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", + "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", + "dev": true, + "requires": { + "append-transform": "1.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", + "dev": true, + "requires": { + "babel-generator": "6.26.1", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.2.1", + "semver": "5.6.0" + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.4", - "nopt": "4.0.1", - "npm-packlist": "1.1.12", - "npmlog": "4.1.2", - "rc": "1.2.8", - "rimraf": "2.6.2", - "semver": "5.6.0", - "tar": "4.4.8" + "istanbul-lib-coverage": "2.0.5", + "make-dir": "2.1.0", + "supports-color": "6.1.0" }, "dependencies": { - "tar": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "chownr": "1.1.1", - "fs-minipass": "1.2.5", - "minipass": "2.3.5", - "minizlib": "1.1.1", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.2", - "yallist": "3.0.3" + "pify": "4.0.1", + "semver": "5.6.0" } }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true } } }, - "node-sass": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.0.tgz", - "integrity": "sha512-QFHfrZl6lqRU3csypwviz2XLgGNOoWQbo2GOvtsfQqOfL4cy1BtWnhx/XUeAO9LT3ahBzSRXcEO6DdvAH9DzSg==", + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "requires": { - "async-foreach": "0.1.3", - "chalk": "1.1.3", - "cross-spawn": "3.0.1", - "gaze": "1.1.3", - "get-stdin": "4.0.1", - "glob": "7.1.3", - "in-publish": "2.0.0", - "lodash.assign": "4.2.0", - "lodash.clonedeep": "4.5.0", - "lodash.mergewith": "4.6.1", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "nan": "2.11.1", - "node-gyp": "3.8.0", - "npmlog": "4.1.2", - "request": "2.79.0", - "sass-graph": "2.2.4", - "stdout-stream": "1.4.1", - "true-case-path": "1.0.3" + "debug": "4.1.1", + "istanbul-lib-coverage": "2.0.5", + "make-dir": "2.1.0", + "rimraf": "2.6.3", + "source-map": "0.6.1" }, "dependencies": { - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true - }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, - "requires": { - "lru-cache": "4.1.3", - "which": "1.3.1" - } - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.7", - "mime-types": "2.1.21" + "ms": "2.1.1" } }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "commander": "2.19.0", - "is-my-json-valid": "2.19.0", - "pinkie-promise": "2.0.1" - } + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.15.2" + "pify": "4.0.1", + "semver": "5.6.0" } }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", + } + } + }, + "istanbul-reports": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "dev": true, + "requires": { + "handlebars": "4.1.2" + } + }, + "jasmine": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", + "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", + "dev": true, + "requires": { + "exit": "0.1.2", + "glob": "7.1.3", + "jasmine-core": "2.8.0" + }, + "dependencies": { + "jasmine-core": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", + "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", + "dev": true + } + } + }, + "jasmine-core": { + "version": "2.99.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", + "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=", + "dev": true + }, + "jasmine-spec-reporter": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz", + "integrity": "sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg==", + "dev": true, + "requires": { + "colors": "1.1.2" + } + }, + "jasminewd2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", + "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", + "dev": true + }, + "js-base64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", + "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", + "dev": true, + "optional": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "4.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "4.1.15" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jszip": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.1.tgz", + "integrity": "sha512-iCMBbo4eE5rb1VCpm5qXOAaUiRKRUKiItn8ah2YQQx9qymmSAY98eyQfioChEYcVQLh0zxJ3wS4A0mh90AVPvw==", + "dev": true, + "requires": { + "lie": "3.3.0", + "pako": "1.0.10", + "readable-stream": "2.3.6", + "set-immediate-shim": "1.0.1" + } + }, + "karma": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-4.1.0.tgz", + "integrity": "sha512-xckiDqyNi512U4dXGOOSyLKPwek6X/vUizSy2f3geYevbLj+UIdvNwbn7IwfUIL2g1GXEPWt/87qFD1fBbl/Uw==", + "dev": true, + "requires": { + "bluebird": "3.5.5", + "body-parser": "1.19.0", + "braces": "2.3.2", + "chokidar": "2.0.4", + "colors": "1.1.2", + "connect": "3.7.0", + "core-js": "2.6.9", + "di": "0.0.1", + "dom-serialize": "2.2.1", + "flatted": "2.0.0", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "http-proxy": "1.17.0", + "isbinaryfile": "3.0.3", + "lodash": "4.17.11", + "log4js": "4.3.1", + "mime": "2.4.3", + "minimatch": "3.0.4", + "optimist": "0.6.1", + "qjobs": "1.2.0", + "range-parser": "1.2.1", + "rimraf": "2.6.3", + "safe-buffer": "5.1.2", + "socket.io": "2.1.1", + "source-map": "0.6.1", + "tmp": "0.0.33", + "useragent": "2.3.0" + }, + "dependencies": { + "mime": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", + "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==", "dev": true }, - "request": { - "version": "2.79.0", - "resolved": "http://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.8.0", - "caseless": "0.11.0", - "combined-stream": "1.0.7", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.21", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.6", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.4.3", - "uuid": "3.3.2" - } - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "dev": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "node-version-compare": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/node-version-compare/-/node-version-compare-1.0.2.tgz", - "integrity": "sha512-OVcHSPS3nROlBQXcALptOR0j2lOabC9wE2S+y+Fvr7nSDqoO/LCNzRdVGVovipeHUXs5jAqq7GelWE1X4J1sEw==" - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "dev": true, + "requires": { + "fs-access": "1.0.1", + "which": "1.3.1" + } + }, + "karma-coverage-istanbul-reporter": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.5.tgz", + "integrity": "sha512-yPvAlKtY3y+rKKWbOo0CzBMVTvJEeMOgbMXuVv3yWvS8YtYKC98AU9vFF0mVBZ2RP1E9SgS90+PT6Kf14P3S4w==", + "dev": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "istanbul-api": "2.1.6", + "minimatch": "3.0.4" } }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "karma-jasmine": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz", + "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=", + "dev": true + }, + "karma-jasmine-html-reporter": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz", + "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=", + "dev": true, "requires": { - "hosted-git-info": "2.7.1", - "is-builtin-module": "1.0.0", - "semver": "5.6.0", - "validate-npm-package-license": "3.0.4" + "karma-jasmine": "1.1.2" } }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "karma-source-map-support": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.3.0.tgz", + "integrity": "sha512-HcPqdAusNez/ywa+biN4EphGz62MmQyPggUsDfsHqa7tSe4jdsxgvTKuDfIazjL+IOxpVWyT7Pr4dhAV+sxX5Q==", + "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "source-map-support": "0.5.10" } }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", "dev": true }, - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "less": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz", + "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==", "dev": true, "requires": { - "prepend-http": "2.0.0", - "query-string": "5.1.1", - "sort-keys": "2.0.0" + "clone": "2.1.2", + "errno": "0.1.7", + "graceful-fs": "4.1.15", + "image-size": "0.5.5", + "mime": "1.6.0", + "mkdirp": "0.5.1", + "promise": "7.3.1", + "request": "2.88.0", + "source-map": "0.6.1" }, "dependencies": { - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "requires": { - "is-plain-obj": "1.1.0" - } + "optional": true } } }, - "npm-bundled": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz", - "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==", - "dev": true - }, - "npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "less-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz", + "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==", "dev": true, "requires": { - "config-chain": "1.1.12", + "clone": "2.1.2", + "loader-utils": "1.2.3", "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } } }, - "npm-packlist": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.12.tgz", - "integrity": "sha512-WJKFOVMeAlsU/pjXuqVdzU0WfgtIBCupkEVwn+1Y0ERAbUfWw8R4GjgVbaKnUjRoD2FoQbHOCbOyT5Mbs9Lw4g==", + "license-webpack-plugin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.1.0.tgz", + "integrity": "sha512-vDiBeMWxjE9n6TabQ9J4FH8urFdsRK0Nvxn1cit9biCiR9aq1zBR0X2BlAkEiIG6qPamLeU0GzvIgLkrFc398A==", "dev": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.5" + "@types/webpack-sources": "0.1.5", + "webpack-sources": "1.3.0" } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, "requires": { - "path-key": "2.0.1" + "immediate": "3.0.6" } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "are-we-there-yet": "1.1.5", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "graceful-fs": "4.1.15", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, - "nugget": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", - "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "dev": true, "requires": { - "debug": "2.6.9", - "minimist": "1.2.0", - "pretty-bytes": "1.0.4", - "progress-stream": "1.2.0", - "request": "2.88.0", - "single-line-log": "1.1.2", - "throttleit": "0.0.2" + "big.js": "5.2.2", + "emojis-list": "2.1.0", + "json5": "1.0.1" } }, - "null-check": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true }, - "null-loader": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-0.1.1.tgz", - "integrity": "sha1-F76av80/8OFRL2/Er8sfUDk3j64=", + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "lodash.tail": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", + "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", + "dev": true }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "log4js": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.3.1.tgz", + "integrity": "sha512-nPGS7w7kBnzNm1j8JycFxwLCbIMae8tHCo0cCdx/khB20Tcod8SZThYEB9E0c27ObcTGA1mlPowaf3hantQ/FA==", + "dev": true, "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" + "date-format": "2.0.0", + "debug": "4.1.1", + "flatted": "2.0.0", + "rfdc": "1.1.4", + "streamroller": "1.0.5" }, "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true } } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "loglevel": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.2.tgz", + "integrity": "sha512-Jt2MHrCNdtIe1W6co3tF5KXGRkzF+TYffiQstfXa04mrss9IKXzAAXYWak8LbZseAQY03sH2GzMCMU0ZOUc9bg==", + "dev": true }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "optional": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "magic-string": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.2.tgz", + "integrity": "sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==", + "dev": true, + "requires": { + "sourcemap-codec": "1.4.4" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "make-fetch-happen": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz", + "integrity": "sha512-7R5ivfy9ilRJ1EMKIOziwrns9fGeAD4bAha8EB7BIiBBLHm2KeTUGCrICFt2rbHfzheTLynv50GnNTK1zDTrcQ==", + "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "agentkeepalive": "3.5.2", + "cacache": "11.3.2", + "http-cache-semantics": "3.8.1", + "http-proxy-agent": "2.1.0", + "https-proxy-agent": "2.2.1", + "lru-cache": "4.1.5", + "mississippi": "3.0.0", + "node-fetch-npm": "2.0.2", + "promise-retry": "1.1.1", + "socks-proxy-agent": "4.0.2", + "ssri": "6.0.1" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "cacache": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "dev": true, + "requires": { + "bluebird": "3.5.5", + "chownr": "1.1.1", + "figgy-pudding": "3.5.1", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "lru-cache": "5.1.1", + "mississippi": "3.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.3", + "ssri": "6.0.1", + "unique-filename": "1.1.1", + "y18n": "4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "3.0.3" + } + } + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, "requires": { - "is-descriptor": "0.1.6" + "concat-stream": "1.6.2", + "duplexify": "3.7.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.1.1", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "3.0.0", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "3.5.1" } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true } } }, - "object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==" + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "1.0.0" + } }, - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "object-visit": { + "map-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "object-visit": "1.0.1" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } + "hash-base": "3.0.4", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, - "objectorarray": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.3.tgz", - "integrity": "sha512-kPoflSYkAf/Onvjr4ZLaq37vDuOXjVzfwLCRuORRzYGdXkHa/vacPT0RgR+KmtkwOYFcxTMM62BRrZk8GGKHjw==", - "requires": { - "tape": "4.10.1" - } + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true }, - "oboe": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.3.tgz", - "integrity": "sha1-K0hl29Rr6BIlcT9Om/5Lz09oCk8=", + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, "requires": { - "http-https": "1.0.0" + "map-age-cleaner": "0.1.3", + "mimic-fn": "2.1.0", + "p-is-promise": "2.1.0" } }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, "requires": { - "ee-first": "1.1.1" + "errno": "0.1.7", + "readable-stream": "2.3.6" } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "optional": true, "requires": { - "wrappy": "1.0.2" + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.5.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "requires": { - "mimic-fn": "1.2.0" - } + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true }, - "opn": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", - "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, "requires": { - "is-wsl": "1.1.0" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } + "bn.js": "4.11.8", + "brorand": "1.1.0" } }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "requires": { - "lcid": "1.0.0" - } + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true }, - "os-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-2.0.1.tgz", - "integrity": "sha1-uaOGNhwXrjohc27wWZQFyajF3F4=", + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dev": true, "requires": { - "macos-release": "1.1.0", - "win-release": "1.1.1" + "mime-db": "1.40.0" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "mini-css-extract-plugin": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz", + "integrity": "sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==", + "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "loader-utils": "1.2.3", + "schema-utils": "1.0.0", + "webpack-sources": "1.3.0" } }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", "dev": true }, - "p-event": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", - "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=", - "dev": true, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "p-timeout": "1.2.1" + "brace-expansion": "1.1.11" } }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2", + "yallist": "3.0.3" + }, + "dependencies": { + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", "dev": true, "requires": { - "p-try": "1.0.0" + "minipass": "2.3.5" } }, - "p-locate": { + "mississippi": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "p-limit": "1.3.0" - } - }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", - "requires": { - "p-finally": "1.0.0" + "concat-stream": "1.6.2", + "duplexify": "3.7.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.1.1", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" } }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "got": "6.7.1", - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0", - "semver": "5.6.0" + "for-in": "1.0.2", + "is-extendable": "1.0.1" }, "dependencies": { - "got": { - "version": "6.7.1", - "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "create-error-class": "3.0.2", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.1", - "safe-buffer": "5.1.2", - "timed-out": "4.0.1", - "unzip-response": "2.0.1", - "url-parse-lax": "1.0.0" + "is-plain-object": "2.0.4" } } } }, - "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "requires": { - "no-case": "2.3.2" - } - }, - "parse-asn1": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", - "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.17" - } - }, - "parse-color": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-color/-/parse-color-1.0.0.tgz", - "integrity": "sha1-e3SLlag/A/FqlPU15S1/PZRlhhk=", + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", "dev": true, "requires": { - "color-convert": "0.5.3" + "for-in": "0.1.8", + "is-extendable": "0.1.1" }, "dependencies": { - "color-convert": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", - "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=", + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", "dev": true } } }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } } }, - "parse-headers": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz", - "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=", + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, "requires": { - "for-each": "0.3.3", - "trim": "0.0.1" + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "run-queue": "1.0.3" } }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "1.3.2" - } + "mri": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", + "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", + "dev": true }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "parsejson": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "better-assert": "1.0.2" + "dns-packet": "1.3.1", + "thunky": "1.0.3" } }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "multimatch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-3.0.0.tgz", + "integrity": "sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA==", "dev": true, "requires": { - "better-assert": "1.0.2" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "2.0.1" + "array-differ": "2.1.0", + "array-union": "1.0.2", + "arrify": "1.0.1", + "minimatch": "3.0.4" } }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "requires": { - "graceful-fs": "4.1.15", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, - "pegjs": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", - "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=", + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "node-fetch-npm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", + "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", + "dev": true, "requires": { - "pinkie": "2.0.4" + "encoding": "0.1.12", + "json-parse-better-errors": "1.0.2", + "safe-buffer": "5.1.2" } }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "requires": { - "find-up": "1.1.2" - } + "node-forge": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", + "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", + "dev": true }, - "plist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz", - "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==", + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "optional": true, "requires": { - "base64-js": "1.3.0", - "xmlbuilder": "9.0.7", - "xmldom": "0.1.27" + "fstream": "1.0.12", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.1.2", + "osenv": "0.1.5", + "request": "2.88.0", + "rimraf": "2.6.3", + "semver": "5.3.0", + "tar": "2.2.2", + "which": "1.3.1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true, + "optional": true + } } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "node-libs-browser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", + "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.5.0" + "assert": "1.5.0", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "3.0.0", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.6", + "stream-browserify": "2.0.2", + "stream-http": "2.8.3", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.10", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.11.1", + "vm-browserify": "0.0.4" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "postinstall-build": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postinstall-build/-/postinstall-build-5.0.3.tgz", - "integrity": "sha512-vPvPe8TKgp4FLgY3+DfxCE5PIfoXBK2lyLfNCxsRbDsV6vS4oU5RG/IWxrblMn6heagbnMED3MemUQllQ2bQUg==" - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" - }, - "prettier": { - "version": "1.16.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", - "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", - "dev": true - }, - "pretty-bytes": { - "version": "1.0.4", - "resolved": "http://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", - "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", + "node-releases": { + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.22.tgz", + "integrity": "sha512-O6XpteBuntW1j86mw6LlovBIwTe+sO2+7vi9avQffNeIW4upgnaCVm6xrBWH+KATz7mNNRNNeEpuWB7dT6Cr3w==", "dev": true, "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" + "semver": "5.6.0" } }, - "pretty-quick": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-1.8.0.tgz", - "integrity": "sha512-qV25sQF/ivJpdZ5efwemQYkQJa7sp3HqT/Vf/7z5vGYMcq1VrT2lDpFKAxJPf6219N1YAdR8mGkIhPAZ1odTmQ==", + "node-sass": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz", + "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==", "dev": true, + "optional": true, "requires": { - "chalk": "2.4.1", - "execa": "0.8.0", - "find-up": "2.1.0", - "ignore": "3.3.10", - "mri": "1.1.1" + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.3", + "get-stdin": "4.0.1", + "glob": "7.1.3", + "in-publish": "2.0.0", + "lodash": "4.17.11", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.14.0", + "node-gyp": "3.8.0", + "npmlog": "4.1.2", + "request": "2.88.0", + "sass-graph": "2.2.4", + "stdout-stream": "1.4.1", + "true-case-path": "1.0.3" }, "dependencies": { "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true, - "requires": { - "color-convert": "1.9.3" - } + "optional": true }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, + "optional": true, "requires": { - "ansi-styles": "3.2.1", + "ansi-styles": "2.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", - "dev": true, - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true, - "requires": { - "has-flag": "3.0.0" - } + "optional": true } } }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.1" + } }, - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "2.7.1", + "resolve": "1.11.0", + "semver": "5.6.0", + "validate-npm-package-license": "3.0.4" + } }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } }, - "progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", - "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "dev": true }, - "progress-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", - "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", + "npm-bundled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "dev": true + }, + "npm-package-arg": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz", + "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", "dev": true, "requires": { - "speedometer": "0.1.4", - "through2": "0.2.3" + "hosted-git-info": "2.7.1", + "osenv": "0.1.5", + "semver": "5.6.0", + "validate-npm-package-name": "3.0.0" } }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + "npm-packlist": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", + "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", + "dev": true, + "requires": { + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.6" + } }, - "protractor": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.1.tgz", - "integrity": "sha512-ORey5ewQMYiXQxcQohsqEiKYOg/r5yJoJbt0tuROmmgajdg/CA3gTOZNIFJncUVMAJIk5YFqBBLUjKVmQO6tfA==", + "npm-pick-manifest": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz", + "integrity": "sha512-+IluBC5K201+gRU85vFlUwX3PFShZAbAgDNp2ewJdWMVSppdo/Zih0ul2Ecky/X7b51J7LrrUAP+XOmOCvYZqA==", "dev": true, "requires": { - "@types/node": "6.14.1", - "@types/q": "0.0.32", - "@types/selenium-webdriver": "3.0.13", - "blocking-proxy": "1.0.1", - "browserstack": "1.5.1", - "chalk": "1.1.3", - "glob": "7.1.3", - "jasmine": "2.8.0", - "jasminewd2": "2.2.0", - "optimist": "0.6.1", - "q": "1.4.1", - "saucelabs": "1.5.0", - "selenium-webdriver": "3.6.0", - "source-map-support": "0.4.18", - "webdriver-js-extender": "2.1.0", - "webdriver-manager": "12.1.0" - }, - "dependencies": { - "@types/node": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.14.1.tgz", - "integrity": "sha512-lfydm+Ul6buYjF6AmcenFjqVYB+tpNlGlwWLr43J1Cok4ybLQimrM8rdB1MdrjtyWdYRceZNgsAeSRZhFxNajQ==", - "dev": true - }, - "@types/q": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", - "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", - "dev": true - }, - "jasmine": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", - "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "7.1.3", - "jasmine-core": "2.8.0" - } - }, - "jasmine-core": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", - "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", - "dev": true - }, - "webdriver-manager": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.0.tgz", - "integrity": "sha512-oEc5fmkpz6Yh6udhwir5m0eN5mgRPq9P/NU5YWuT3Up5slt6Zz+znhLU7q4+8rwCZz/Qq3Fgpr/4oao7NPCm2A==", - "dev": true, - "requires": { - "adm-zip": "0.4.11", - "chalk": "1.1.3", - "del": "2.2.2", - "glob": "7.1.3", - "ini": "1.3.5", - "minimist": "1.2.0", - "q": "1.4.1", - "request": "2.88.0", - "rimraf": "2.6.2", - "semver": "5.6.0", - "xml2js": "0.4.19" - } - } + "figgy-pudding": "3.5.1", + "npm-package-arg": "6.1.0", + "semver": "5.6.0" } }, - "protractor-jasmine2-screenshot-reporter": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/protractor-jasmine2-screenshot-reporter/-/protractor-jasmine2-screenshot-reporter-0.5.0.tgz", - "integrity": "sha512-8Vno7kwR0lq0gdki9J5oKvP8o0XNXGeeNpjBBtZifg+7fpsDffrZqpPer9DhVOcIoe/axOJWnwtMwUWCQl/d1g==", + "npm-registry-fetch": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-3.9.0.tgz", + "integrity": "sha512-srwmt8YhNajAoSAaDWndmZgx89lJwIZ1GWxOuckH4Coek4uHv5S+o/l9FLQe/awA+JwTnj4FJHldxhlXdZEBmw==", + "dev": true, + "requires": { + "JSONStream": "1.3.5", + "bluebird": "3.5.5", + "figgy-pudding": "3.5.1", + "lru-cache": "4.1.5", + "make-fetch-happen": "4.0.1", + "npm-package-arg": "6.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "hat": "0.0.3", - "lodash": "4.17.11", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "string.prototype.startswith": "0.2.0", - "uuid": "2.0.3" - }, - "dependencies": { - "uuid": { - "version": "2.0.3", - "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - } + "path-key": "2.0.1" } }, - "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.8.0" + "are-we-there-yet": "1.1.5", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" } }, - "proxy-from-env": { + "null-check": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", "dev": true }, - "proxy-middleware": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", - "integrity": "sha1-o/3xvvtzD5UZZYcqwvYHTGFHelY=" + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true }, - "prr": { + "number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true }, - "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" - } + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true }, - "puppeteer": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.10.0.tgz", - "integrity": "sha512-3i28X/ucX8t3eL4TZA60FLMOQNKqudFSOGDHr0cT7T4dE027CrcS885aAqjdxNybhMPliM5yImNsKJ6SQrPzhw==", + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "debug": "3.2.6", - "extract-zip": "1.6.7", - "https-proxy-agent": "2.2.1", - "mime": "2.3.1", - "progress": "2.0.1", - "proxy-from-env": "1.0.0", - "rimraf": "2.6.2", - "ws": "5.2.2" + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "ms": "2.1.1" + "is-descriptor": "0.1.6" } }, - "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "async-limiter": "1.0.0" + "is-buffer": "1.1.6" } } } }, - "pushdata-bitcoin": { + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz", - "integrity": "sha1-FZMdPNlnreUiBvUjqnMxrvfUOvc=", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, "requires": { - "bitcoin-ops": "1.4.1" + "isobject": "3.0.1" } }, - "q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=" + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + } }, - "qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "objectorarray": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.3.tgz", + "integrity": "sha512-kPoflSYkAf/Onvjr4ZLaq37vDuOXjVzfwLCRuORRzYGdXkHa/vacPT0RgR+KmtkwOYFcxTMM62BRrZk8GGKHjw==", + "requires": { + "tape": "4.10.2" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, - "qrcode-reader": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/qrcode-reader/-/qrcode-reader-1.0.4.tgz", - "integrity": "sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ==" + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } }, - "qrcodejs2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/qrcodejs2/-/qrcodejs2-0.0.2.tgz", - "integrity": "sha1-Rlr+Xjnxn6zsuTLBH3oYYQkUauE=" + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, "requires": { - "decode-uri-component": "0.2.0", - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "mimic-fn": "1.2.0" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + } } }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + "open": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.0.0.tgz", + "integrity": "sha512-/yb5mVZBz7mHLySMiSj2DcLtMBbFPJk5JBKEkHVZFxZAPzeg3L026O0T+lbdz1B2nyDnkClRSwRQJdeVUIF7zw==", + "dev": true, + "requires": { + "is-wsl": "1.1.0" + } }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "1.1.0" + } }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, "requires": { - "is-number": "4.0.0", - "kind-of": "6.0.2", - "math-random": "1.0.1" + "minimist": "0.0.10", + "wordwrap": "0.0.3" }, "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true } } }, - "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, "requires": { - "safe-buffer": "5.1.2" + "url-parse": "1.4.7" } }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "optional": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "lcid": "1.0.0" } }, - "randomhex": { + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", - "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=" + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" + "p-try": "1.0.0" } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "deep-extend": "0.6.0", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - } - }, - "read-config-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-3.2.0.tgz", - "integrity": "sha512-i1QRc5jy4sHm9YBGb6ArA5SU1mDrc5wu2mnm3r9gPnm+LVZhBGbpTCKqAXyvV4TJHnBR3Yaaww+9b3DyRZcfww==", - "dev": true, - "requires": { - "ajv": "6.5.5", - "ajv-keywords": "3.2.0", - "bluebird-lst": "1.0.6", - "dotenv": "6.1.0", - "dotenv-expand": "4.2.0", - "fs-extra-p": "7.0.0", - "js-yaml": "3.12.0", - "json5": "2.1.0", - "lazy-val": "1.0.3" - }, - "dependencies": { - "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "dev": true, - "requires": { - "minimist": "1.2.0" - } - } + "p-limit": "1.3.0" } }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "pacote": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.4.0.tgz", + "integrity": "sha512-WQ1KL/phGMkedYEQx9ODsjj7xvwLSpdFJJdEXrLyw5SILMxcTNt5DTxT2Z93fXuLFYJBlZJdnwdalrQdB/rX5w==", + "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", + "bluebird": "3.5.5", + "cacache": "11.3.2", + "figgy-pudding": "3.5.1", + "get-stream": "4.1.0", + "glob": "7.1.3", + "lru-cache": "5.1.1", + "make-fetch-happen": "4.0.1", + "minimatch": "3.0.4", + "minipass": "2.3.5", + "mississippi": "3.0.0", + "mkdirp": "0.5.1", + "normalize-package-data": "2.5.0", + "npm-package-arg": "6.1.0", + "npm-packlist": "1.4.1", + "npm-pick-manifest": "2.2.3", + "npm-registry-fetch": "3.9.0", + "osenv": "0.1.5", + "promise-inflight": "1.0.1", + "promise-retry": "1.1.1", + "protoduck": "5.0.1", + "rimraf": "2.6.3", "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "requires": { - "graceful-fs": "4.1.15", - "micromatch": "3.1.10", - "readable-stream": "2.3.6" + "semver": "5.6.0", + "ssri": "6.0.1", + "tar": "4.4.9", + "unique-filename": "1.1.1", + "which": "1.3.1" }, "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "cacache": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } + "bluebird": "3.5.5", + "chownr": "1.1.1", + "figgy-pudding": "3.5.1", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "lru-cache": "5.1.1", + "mississippi": "3.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.3", + "ssri": "6.0.1", + "unique-filename": "1.1.1", + "y18n": "4.0.0" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "1.0.2" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } + "pump": "3.0.0" } }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } + "yallist": "3.0.3" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, "requires": { - "kind-of": "6.0.2" + "concat-stream": "1.6.2", + "duplexify": "3.7.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.1.1", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "3.0.0", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "requires": { - "kind-of": "6.0.2" + "end-of-stream": "1.4.1", + "once": "1.4.0" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "figgy-pudding": "3.5.1" } }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "tar": { + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.9.tgz", + "integrity": "sha512-xisFa7Q2i3HOgfn+nmnWLGHD6Tm23hxjkx6wwGmgxkJFr6wxwXnJOdJYcZjL453PSdF0+bemO03+flAzkIdLBQ==", + "dev": true, "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } + "chownr": "1.1.1", + "fs-minipass": "1.2.6", + "minipass": "2.3.5", + "minizlib": "1.2.1", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.2", + "yallist": "3.0.3" } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true } } }, - "recast": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", - "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", - "requires": { - "ast-types": "0.9.6", - "esprima": "3.1.3", - "private": "0.1.8", - "source-map": "0.5.7" - } + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "parse-asn1": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "dev": true, + "requires": { + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.17", + "safe-buffer": "5.1.2" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.2" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" - } + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, - "reflect-metadata": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.12.tgz", - "integrity": "sha512-n+IyV+nGz3+0q3/Yf1ra12KpCyi001bi4XFxSjbiWWjfqb52iTTtpGXmCCAOWWIAn9KEuFZKGqBERHmrtScZ3A==" + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, - "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" + "pify": "3.0.0" } }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "pinkie": "2.0.4" } }, - "regexpu-core": { + "pkg-dir": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "find-up": "2.1.0" } }, - "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "please-upgrade-node": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", + "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", "dev": true, "requires": { - "rc": "1.2.8", - "safe-buffer": "5.1.2" + "semver-compare": "1.0.0" } }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, + "plist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz", + "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==", "requires": { - "rc": "1.2.8" + "base64-js": "1.3.0", + "xmlbuilder": "9.0.7", + "xmldom": "0.1.27" } }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "portfinder": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", + "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", + "dev": true, "requires": { - "jsesc": "0.5.0" + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.1" }, "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true } } }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "postcss": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "dev": true, "requires": { - "is-finite": "1.0.2" + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "postcss-import": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", + "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", + "dev": true, "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.8.0", - "caseless": "0.12.0", - "combined-stream": "1.0.7", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.3.3", - "har-validator": "5.1.3", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.21", - "oauth-sign": "0.9.0", - "performance-now": "2.1.0", - "qs": "6.5.2", - "safe-buffer": "5.1.2", - "tough-cookie": "2.4.3", - "tunnel-agent": "0.6.0", - "uuid": "3.3.2" + "postcss": "7.0.14", + "postcss-value-parser": "3.3.1", + "read-cache": "1.0.0", + "resolve": "1.11.0" } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "postcss-load-config": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", + "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", "dev": true, "requires": { - "path-parse": "1.0.6" + "cosmiconfig": "4.0.0", + "import-cwd": "2.1.0" } }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", "dev": true, "requires": { - "lowercase-keys": "1.0.1" + "loader-utils": "1.2.3", + "postcss": "7.0.14", + "postcss-load-config": "2.0.0", + "schema-utils": "1.0.0" } }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" - } + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true }, - "resumer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "prettier": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.17.1.tgz", + "integrity": "sha512-TzGRNvuUSmPgwivDqkZ9tM/qTGW9hqDKWOE9YHiyQdixlKbv7kvEqsmDPrcHJTKwthU774TQwZXVtaQ/mMsvjg==", + "dev": true + }, + "pretty-quick": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-1.11.0.tgz", + "integrity": "sha512-hy0yOSnqVykrgoHcCcB72p3B5ERQJcjQI6ExeSGSTFE2cDrPwCQtFb3kXA1F+jUPrbt7orra8U+fjS/Emjgpuw==", + "dev": true, "requires": { - "through": "2.3.8" + "chalk": "2.4.2", + "execa": "0.8.0", + "find-up": "2.1.0", + "ignore": "3.3.10", + "mri": "1.1.4", + "multimatch": "3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.5", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + }, + "execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + } } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "optional": true, "requires": { - "align-text": "0.1.4" + "asap": "2.0.6" } }, - "right-pad": { + "promise-inflight": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/right-pad/-/right-pad-1.0.1.tgz", - "integrity": "sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA=", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", "dev": true }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "dev": true, "requires": { - "glob": "7.1.3" + "err-code": "1.1.2", + "retry": "0.10.1" } }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "protoduck": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", + "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", + "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "genfun": "5.0.0" } }, - "rlp": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.3.tgz", - "integrity": "sha512-l6YVrI7+d2vpW6D6rS05x2Xrmq8oW7v3pieZOJKBEdjuTF4Kz/iwk55Zyh1Zaz+KOB2kC8+2jZlp2u9L4tTzCQ==", + "protractor": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.2.tgz", + "integrity": "sha512-zlIj64Cr6IOWP7RwxVeD8O4UskLYPoyIcg0HboWJL9T79F1F0VWtKkGTr/9GN6BKL+/Q/GmM7C9kFVCfDbP5sA==", + "dev": true, "requires": { - "bn.js": "4.11.8", - "safe-buffer": "5.1.2" + "@types/q": "0.0.32", + "@types/selenium-webdriver": "3.0.16", + "blocking-proxy": "1.0.1", + "browserstack": "1.5.2", + "chalk": "1.1.3", + "glob": "7.1.3", + "jasmine": "2.8.0", + "jasminewd2": "2.2.0", + "optimist": "0.6.1", + "q": "1.4.1", + "saucelabs": "1.5.0", + "selenium-webdriver": "3.6.0", + "source-map-support": "0.4.18", + "webdriver-js-extender": "2.1.0", + "webdriver-manager": "12.1.4" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.3" + } + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.3", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "webdriver-manager": { + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.4.tgz", + "integrity": "sha512-aNUzdimlHSl3EotUTdE2QwP9sBUjZgWPCy8C+m1wMmF9jBDKuO/24nnpr2O25Db8dYtsjvj9drPTpSIGqRrNnQ==", + "dev": true, + "requires": { + "adm-zip": "0.4.13", + "chalk": "1.1.3", + "del": "2.2.2", + "glob": "7.1.3", + "ini": "1.3.5", + "minimist": "1.2.0", + "q": "1.4.1", + "request": "2.88.0", + "rimraf": "2.6.3", + "semver": "5.6.0", + "xml2js": "0.4.19" + } + } + } + }, + "proxy-addr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "dev": true, + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.9.0" } }, - "rollup": { - "version": "0.50.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.50.0.tgz", - "integrity": "sha512-7RqCBQ9iwsOBPkjYgoIaeUij606mSkDMExP0NT7QDI3bqkHYQHrQ83uoNIXwPcQm/vP2VbsUz3kiyZZ1qPlLTQ==", + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.1.32", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.32.tgz", + "integrity": "sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g==", "dev": true }, - "rollup-plugin-commonjs": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.2.6.tgz", - "integrity": "sha512-qK0+uhktmnAgZkHkqFuajNmPw93fjrO7+CysDaxWE5jrUR9XSlSvuao5ZJP+XizxA8weakhgYYBtbVz9SGBpjA==", + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "acorn": "5.7.3", - "estree-walker": "0.5.2", - "magic-string": "0.22.5", - "resolve": "1.8.1", - "rollup-pluginutils": "2.3.3" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.4", + "randombytes": "2.1.0", + "safe-buffer": "5.1.2" } }, - "rollup-plugin-node-resolve": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.0.0.tgz", - "integrity": "sha1-i4l8TDAw1QASd7BRSyXSygloPuA=", + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "browser-resolve": "1.11.3", - "builtin-modules": "1.1.1", - "is-module": "1.0.0", - "resolve": "1.8.1" + "end-of-stream": "1.4.1", + "once": "1.4.0" } }, - "rollup-pluginutils": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz", - "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==", + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "estree-walker": "0.5.2", - "micromatch": "2.3.11" + "duplexify": "3.7.1", + "inherits": "2.0.3", + "pump": "2.0.1" } }, - "rsvp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", - "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==" + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "requires": { - "is-promise": "2.1.0" - } + "q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=" }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "requires": { - "rx-lite": "4.0.8" - } + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true }, - "rxjs": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.2.tgz", - "integrity": "sha512-oRYoIKWBU3Ic37fLA5VJu31VqQO4bWubRntcHSJ+cwaDQBwdnZ9x4zmhJfm/nFQ2E82/I4loSioHnACamrKGgA==", - "requires": { - "symbol-observable": "1.2.0" - } + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true }, - "safe-json-parse": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", - "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=" + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "dev": true }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "requires": { - "ret": "0.1.15" + "safe-buffer": "5.1.2" } }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sanitize-filename": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz", - "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=", + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "truncate-utf8-bytes": "1.0.2" + "randombytes": "2.1.0", + "safe-buffer": "5.1.2" } }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, "requires": { - "glob": "7.1.3", - "lodash": "4.17.11", - "scss-tokenizer": "0.2.3", - "yargs": "7.1.0" + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.3", - "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-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "3.0.0" - } + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true } } }, - "saucelabs": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", - "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", + "raw-loader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-1.0.0.tgz", + "integrity": "sha512-Uqy5AqELpytJTRxYT4fhltcKPj0TyaEpzJDcGz7DFJi+pQOOi3GjR/DOdxTkTsF+NzhnldIoG6TORaBlInUuqA==", "dev": true, "requires": { - "https-proxy-agent": "2.2.1" + "loader-utils": "1.2.3", + "schema-utils": "1.0.0" } }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } }, - "schema-utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", - "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "ajv": "5.5.2" + "load-json-file": "1.1.0", + "normalize-package-data": "2.5.0", + "path-type": "1.1.0" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "graceful-fs": "4.1.15", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" } }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } } }, - "scrypt": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", - "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, "requires": { - "nan": "2.11.1" + "find-up": "1.1.2", + "read-pkg": "1.1.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + } } }, - "scrypt-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", - "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=" - }, - "scrypt.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", - "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, "requires": { - "scrypt": "6.0.3", - "scryptsy": "1.2.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, - "scryptsy": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", - "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, "requires": { - "pbkdf2": "3.0.17" + "graceful-fs": "4.1.15", + "micromatch": "3.1.10", + "readable-stream": "2.3.6" } }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "js-base64": "2.4.9", - "source-map": "0.4.4" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } + "resolve": "1.11.0" } }, - "sdp": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/sdp/-/sdp-1.5.4.tgz", - "integrity": "sha1-jgOPbdsUvXZa4fS1IW4SCUUR4NA=" - }, - "secp256k1": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.7.1.tgz", - "integrity": "sha512-1cf8sbnRreXrQFdH6qsg2H71Xw91fCCS9Yp021GnUNJzWJS/py96fS4lHbnTnouLp08Xj6jBoBB6V78Tdbdu5g==", + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "optional": true, "requires": { - "bindings": "1.5.0", - "bip66": "1.1.5", - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "drbg.js": "1.0.1", - "elliptic": "6.4.1", - "nan": "2.14.0", - "safe-buffer": "5.1.2" - }, - "dependencies": { - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" - } + "indent-string": "2.1.0", + "strip-indent": "1.0.1" } }, - "secrets.js-grempe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/secrets.js-grempe/-/secrets.js-grempe-1.1.0.tgz", - "integrity": "sha1-uztgbdaGN8okRoGhD97mxRIEkpQ=" + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true }, - "secure-random": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/secure-random/-/secure-random-1.1.2.tgz", - "integrity": "sha512-H2bdSKERKdBV1SwoqYm6C0y+9EA94v6SUBOWO8kDndc4NoUih7Dv6Tsgma7zO1lv27wIvjlD0ZpMQk7um5dheQ==" + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true }, - "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", - "requires": { - "commander": "2.8.1" - } + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true }, - "selenium-webdriver": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", - "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "jszip": "3.1.5", - "rimraf": "2.6.2", - "tmp": "0.0.30", - "xml2js": "0.4.19" - }, - "dependencies": { - "tmp": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", - "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - } + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" } }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { - "semver": "5.6.0" + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" } }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.3", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" + "jsesc": "0.5.0" }, "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true } } }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.2" + "is-finite": "1.0.2" } }, - "serviceworker-cache-polyfill": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz", - "integrity": "sha1-3hnuc77yGrPAdAo3sz22JGS6ves=" - }, - "servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, "requires": { - "body-parser": "1.18.3", - "cors": "2.8.5", - "express": "4.16.4", - "request": "2.88.0", - "xhr": "2.5.0" + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.8", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.3", + "har-validator": "5.1.3", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.24", + "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" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } - } + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "resolve": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", + "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", + "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "path-parse": "1.0.6" } }, - "sha1": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", - "integrity": "sha1-rdqnqTFo85PxnrKxUJFhjicA+Eg=", + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2" + "resolve-from": "3.0.0" } }, - "sha256": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/sha256/-/sha256-0.1.1.tgz", - "integrity": "sha1-NClvkEmNo+jGsG//6Ohg26KZ+QI=", - "requires": { - "convert-hex": "0.1.0", - "convert-string": "0.1.0" - } + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true }, - "sha3": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.2.tgz", - "integrity": "sha1-pmxQmN5MJbyIM27ItIF9AFvKe6k=", + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, "requires": { - "nan": "2.10.0" - }, - "dependencies": { - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - } + "onetime": "2.0.1", + "signal-exit": "3.0.2" } }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "resumer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", + "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", "requires": { - "shebang-regex": "1.0.0" + "through": "2.3.8" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "shelljs": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz", - "integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM=" - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true }, - "simctl": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/simctl/-/simctl-1.1.1.tgz", - "integrity": "sha512-yY1WQMq/pneY5jQb2+lFp45qEtcz4yKBu1NOPo2OFDVCkwSkQhpkoaAaO1fWhq4IU0+8TQ2r1PMGSTedP0A/Og==", - "requires": { - "shelljs": "0.2.6", - "tail": "0.4.0" - }, - "dependencies": { - "shelljs": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz", - "integrity": "sha1-kEktcv/MgVmXa6umL7D2iE8MM3g=" - } - } + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true }, - "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" + "rfdc": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", + "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", + "dev": true }, - "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, "requires": { - "decompress-response": "3.3.0", - "once": "1.4.0", - "simple-concat": "1.0.0" + "glob": "7.1.3" } }, - "simple-plist": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.2.1.tgz", - "integrity": "sha1-cXZts1IyaSjPOoByQrp2IyJjZyM=", + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "bplist-creator": "0.0.7", - "bplist-parser": "0.1.1", - "plist": "2.0.1" - }, - "dependencies": { - "base64-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.1.2.tgz", - "integrity": "sha1-1kAMrBxMZgl22Q0HoENR2JOV9eg=", - "dev": true - }, - "plist": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/plist/-/plist-2.0.1.tgz", - "integrity": "sha1-CjLKlIGxw2TpLhjcVch23p0B2os=", - "dev": true, - "requires": { - "base64-js": "1.1.2", - "xmlbuilder": "8.2.2", - "xmldom": "0.1.27" - } - }, - "xmlbuilder": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", - "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=", - "dev": true - } + "hash-base": "3.0.4", + "inherits": "2.0.3" } }, - "single-line-log": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", - "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "string-width": "1.0.2" + "is-promise": "2.1.0" } }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" - }, - "slice-ansi": { + "run-node": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "requires": { - "is-fullwidth-code-point": "2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - } - } - }, - "slugify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.3.1.tgz", - "integrity": "sha512-6BwyhjF5tG5P8s+0DPNyJmBSBePG6iMyhjvIW5zGdA3tFik9PtK+yNkZgTeiroCRGZYgkHftFA62tGVK1EI9Kw==", + "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", + "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", "dev": true }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } + "aproba": "1.2.0" } }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "rxjs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "1.0.2" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } + "tslib": "1.9.3" } }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, "requires": { - "kind-of": "3.2.2" + "ret": "0.1.15" } }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", "dev": true, + "optional": true, "requires": { - "hoek": "2.16.3" + "glob": "7.1.3", + "lodash": "4.17.11", + "scss-tokenizer": "0.2.3", + "yargs": "7.1.0" } }, - "socket.io": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", - "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "sass-loader": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", + "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", "dev": true, "requires": { - "debug": "2.3.3", - "engine.io": "1.8.3", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", - "dev": true - } + "clone-deep": "2.0.2", + "loader-utils": "1.2.3", + "lodash.tail": "4.1.1", + "neo-async": "2.6.1", + "pify": "3.0.0", + "semver": "5.6.0" } }, - "socket.io-adapter": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "saucelabs": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", "dev": true, "requires": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } + "https-proxy-agent": "2.2.1" } }, - "socket.io-client": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", - "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "sax": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "1.8.3", - "has-binary": "0.1.7", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } + "ajv": "6.9.1", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.4.0" } }, - "socket.io-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", "dev": true, + "optional": true, "requires": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" + "js-base64": "2.5.1", + "source-map": "0.4.4" }, "dependencies": { - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", - "dev": true - }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, + "optional": true, "requires": { - "ms": "0.7.1" + "amdefine": "1.0.1" } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true } } }, - "sonarqube-scanner": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/sonarqube-scanner/-/sonarqube-scanner-2.1.2.tgz", - "integrity": "sha512-4Sf01R7zOnR3YTofaQI5HH6UTz46l0kUov7cJvWmhD9Hi+U16komI/e61GjOyC2JrVrFiWqFsO/o15ceHbKd/Q==", + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selenium-webdriver": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", "dev": true, "requires": { - "download": "7.0.0", - "extend": "3.0.1", - "fancy-log": "1.3.2", - "lodash.get": "4.4.2", - "lodash.uniq": "4.5.0", - "mkdirp": "0.5.1", - "progress": "2.0.1", - "read-pkg": "2.0.0", - "slugify": "1.3.1" + "jszip": "3.2.1", + "rimraf": "2.6.3", + "tmp": "0.0.30", + "xml2js": "0.4.19" }, "dependencies": { - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "tmp": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "os-tmpdir": "1.0.2" } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true } } }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "1.1.0" - } - }, - "sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "selfsigned": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", + "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", "dev": true, "requires": { - "sort-keys": "1.1.2" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" - } - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "requires": { - "source-map": "0.5.7" + "node-forge": "0.7.5" } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "spdx-correct": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", - "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", - "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.2" - } + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "semver-dsl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "dev": true, "requires": { - "spdx-exceptions": "2.2.0", - "spdx-license-ids": "3.0.2" + "semver": "5.6.0" } }, - "spdx-license-ids": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", - "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==" - }, - "speedometer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", - "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "semver-intersect": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz", + "integrity": "sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==", + "dev": true, "requires": { - "extend-shallow": "3.0.2" + "semver": "5.6.0" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "ssh-config": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ssh-config/-/ssh-config-1.1.3.tgz", - "integrity": "sha1-KxljCvhbFmZoi51o9uQhiQD4H4w=" - }, - "sshpk": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", - "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==", + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, "requires": { - "asn1": "0.2.4", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.2", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.2", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "safer-buffer": "2.1.2", - "tweetnacl": "0.14.5" + "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" }, "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true } } }, - "stat-mode": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", - "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", + "serialize-javascript": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", + "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", "dev": true }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "accepts": "1.3.7", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "1.0.3", + "http-errors": "1.6.3", + "mime-types": "2.1.24", + "parseurl": "1.3.3" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, "requires": { - "is-descriptor": "0.1.6" + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.5.0" } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true } } }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dev": true, "requires": { - "readable-stream": "2.3.6" - } - }, - "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" - } - }, - "stream-buffers": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=" - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.3", + "send": "0.17.1" } }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, - "string-template": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", - "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=" + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } } }, - "string.prototype.startswith": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/string.prototype.startswith/-/string.prototype.startswith-0.2.0.tgz", - "integrity": "sha1-2miYLjU6TprEpDtFCiBF0cRFrns=", + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", "dev": true }, - "string.prototype.trim": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", - "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.13.0", - "function-bind": "1.1.1" - } - }, - "string_decoder": { + "setprototypeof": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, "requires": { - "ansi-regex": "2.1.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "shallow-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", + "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-extendable": "0.1.1", + "kind-of": "5.1.0", + "mixin-object": "2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } } }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { - "is-natural-number": "4.0.1" + "shebang-regex": "1.0.0" } }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-hex-prefix": { + "shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", - "requires": { - "is-hex-prefixed": "1.0.0" - } + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "shelljs": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", + "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", "dev": true, "requires": { - "get-stdin": "4.0.1" + "glob": "7.1.3", + "interpret": "1.2.0", + "rechoir": "0.6.2" } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, - "strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, + "simctl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simctl/-/simctl-2.0.0.tgz", + "integrity": "sha512-5rB7rN4N3b0z0nFdy9eczVssXqrv2aAgdVRksPVqVoiDtvXmfzNvebp3EMdId2sAUzXIflarQlx4P0hjVQEzKQ==", "requires": { - "escape-string-regexp": "1.0.5" + "shelljs": "0.2.6", + "tail": "0.4.0" + }, + "dependencies": { + "shelljs": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz", + "integrity": "sha1-kEktcv/MgVmXa6umL7D2iE8MM3g=" + } } }, - "sumchecker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz", - "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=", - "dev": true, + "simple-plist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.0.0.tgz", + "integrity": "sha512-043L2rO80LVF7zfZ+fqhsEkoJFvW8o59rt/l4ctx1TJWoTx7/jkiS1R5TatD15Z1oYnuLJytzE7gcnnBuIPL2g==", "requires": { - "debug": "2.6.9" + "bplist-creator": "0.0.7", + "bplist-parser": "0.1.1", + "plist": "3.0.1" } }, - "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "smart-buffer": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.2.tgz", + "integrity": "sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, "requires": { - "component-emitter": "1.2.1", - "cookiejar": "2.1.2", - "debug": "3.2.6", - "extend": "3.0.2", - "form-data": "2.3.3", - "formidable": "1.2.1", - "methods": "1.1.2", - "mime": "1.4.1", - "qs": "6.5.2", - "readable-stream": "2.3.6" + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.2", + "use": "3.1.1" }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { - "ms": "2.1.1" + "is-extendable": "0.1.1" } }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "sw-toolbox": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/sw-toolbox/-/sw-toolbox-3.6.0.tgz", - "integrity": "sha1-Jt8dHHA0hljk3qKIQxkUm3sxg7U=", + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, "requires": { - "path-to-regexp": "1.7.0", - "serviceworker-cache-polyfill": "4.0.0" + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { - "isarray": "0.0.1" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } } } }, - "swarm-js": { - "version": "0.1.37", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.37.tgz", - "integrity": "sha512-G8gi5fcXP/2upwiuOShJ258sIufBVztekgobr3cVgYXObZwJ5AXLqZn52AI+/ffft29pJexF9WNdUxjlkVehoQ==", - "requires": { - "bluebird": "3.5.3", - "buffer": "5.2.1", - "decompress": "4.2.0", - "eth-lib": "0.1.27", - "fs-extra": "2.1.2", - "fs-promise": "2.0.3", - "got": "7.1.0", - "mime-types": "2.1.21", - "mkdirp-promise": "5.0.1", - "mock-fs": "4.8.0", - "setimmediate": "1.0.5", - "tar.gz": "1.0.7", - "xhr-request-promise": "0.1.2" - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, - "tail": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/tail/-/tail-0.4.0.tgz", - "integrity": "sha1-0p3nJ1DMmdseBTr/E8NZ7PtxMAI=" - }, - "tapable": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=" - }, - "tape": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.10.1.tgz", - "integrity": "sha512-G0DywYV1jQeY3axeYnXUOt6ktnxS9OPJh97FGR3nrua8lhWi1zPflLxcAHavZ7Jf3qUfY7cxcVIVFa4mY2IY1w==", + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, "requires": { - "deep-equal": "1.0.1", - "defined": "1.0.0", - "for-each": "0.3.3", - "function-bind": "1.1.1", - "glob": "7.1.3", - "has": "1.0.3", - "inherits": "2.0.3", - "minimist": "1.2.0", - "object-inspect": "1.6.0", - "resolve": "1.10.1", - "resumer": "0.0.0", - "string.prototype.trim": "1.1.2", - "through": "2.3.8" + "kind-of": "3.2.2" }, "dependencies": { - "resolve": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", - "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { - "path-parse": "1.0.6" + "is-buffer": "1.1.6" } } } }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "dev": true, "requires": { - "bl": "1.2.2", - "buffer-alloc": "1.2.0", - "end-of-stream": "1.4.1", - "fs-constants": "1.0.0", - "readable-stream": "2.3.6", - "to-buffer": "1.1.1", - "xtend": "4.0.1" - } - }, - "tar.gz": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/tar.gz/-/tar.gz-1.0.7.tgz", - "integrity": "sha512-uhGatJvds/3diZrETqMj4RxBR779LKlIE74SsMcn5JProZsfs9j0QBwWO1RW+IWNJxS2x8Zzra1+AW6OQHWphg==", - "requires": { - "bluebird": "2.11.0", - "commander": "2.8.1", - "fstream": "1.0.11", - "mout": "0.11.1", - "tar": "2.2.1" + "debug": "3.1.0", + "engine.io": "3.2.1", + "has-binary2": "1.0.3", + "socket.io-adapter": "1.1.1", + "socket.io-client": "2.1.1", + "socket.io-parser": "3.2.0" }, "dependencies": { - "bluebird": { - "version": "2.11.0", - "resolved": "http://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } } } }, - "temp-file": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.3.2.tgz", - "integrity": "sha512-FGKccAW0Mux9hC/2bdUIe4bJRv4OyVo4RpVcuplFird1V/YoplIFbnPZjfzbJSf/qNvRZIRB9/4n/RkI0GziuQ==", - "dev": true, - "requires": { - "async-exit-hook": "2.0.1", - "bluebird-lst": "1.0.6", - "fs-extra-p": "7.0.0" - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "0.7.0" - } - }, - "text-encoding": { - "version": "0.6.4", - "resolved": "http://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", - "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", - "optional": true - }, - "thenify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", - "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", - "requires": { - "any-promise": "1.3.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "requires": { - "thenify": "3.3.0" - } - }, - "throttleit": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", - "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "0.2.3", - "resolved": "http://registry.npmjs.org/through2/-/through2-0.2.3.tgz", - "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", + "socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", "dev": true, "requires": { - "readable-stream": "1.1.14", - "xtend": "2.1.2" + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "3.1.0", + "engine.io-client": "3.2.1", + "has-binary2": "1.0.3", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "3.2.0", + "to-array": "0.1.4" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, - "readable-stream": { - "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "ms": "2.0.0" } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + } + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "object-keys": "0.4.0" + "ms": "2.0.0" } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true } } }, - "time-stamp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.2.0.tgz", - "integrity": "sha512-zxke8goJQpBeEgD82CXABeMh0LSJcj7CXEd0OHOg45HgcofF7pxNwZm9+RknpxpDhwN4gFpySkApKfFYfRQnUA==", - "dev": true - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "dev": true, "requires": { - "setimmediate": "1.0.5" + "faye-websocket": "0.10.0", + "uuid": "3.3.2" } }, - "tiny-lr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", - "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", + "sockjs-client": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", + "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "dev": true, "requires": { - "body": "5.1.0", "debug": "3.2.6", - "faye-websocket": "0.10.0", - "livereload-js": "2.4.0", - "object-assign": "4.1.1", - "qs": "6.5.2" + "eventsource": "1.0.7", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.3", + "url-parse": "1.4.7" }, "dependencies": { "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, "requires": { "ms": "2.1.1" } }, + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true } - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + } }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "socks": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.2.tgz", + "integrity": "sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ==", + "dev": true, "requires": { - "kind-of": "3.2.2" + "ip": "1.1.5", + "smart-buffer": "4.0.2" } }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "socks-proxy-agent": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "agent-base": "4.2.1", + "socks": "2.3.2" } }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "source-map-loader": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.4.tgz", + "integrity": "sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ==", + "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "3.2.2" - } - } + "async": "2.6.2", + "loader-utils": "1.2.3" } }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, "requires": { - "psl": "1.1.29", - "punycode": "1.4.1" + "atob": "2.1.2", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-support": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", + "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", + "dev": true, + "requires": { + "buffer-from": "1.1.1", + "source-map": "0.6.1" }, "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "sourcemap-codec": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz", + "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==", "dev": true }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.4" } }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" - }, - "true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "dev": true, - "requires": { - "glob": "7.1.3" - } + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true }, - "truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "utf8-byte-length": "1.0.4" + "spdx-exceptions": "2.2.0", + "spdx-license-ids": "3.0.4" } }, - "ts-custom-error": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-2.2.1.tgz", - "integrity": "sha512-lHKZtU+PXkVuap6nlFZybIAFLUO8B3jbCs1VynBL8AUSAHfeG6HpztcBTDRp5I+fN5820N9kGg+eTIvr+le2yg==" + "spdx-license-ids": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", + "dev": true }, - "ts-loader": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-2.3.7.tgz", - "integrity": "sha512-8t3bu2FcEkXb+D4L+Cn8qiK2E2C6Ms4/GQChvz6IMbVurcFHLXrhW4EMtfaol1a1ASQACZGDUGit4NHnX9g7hQ==", + "spdy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", + "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", "dev": true, "requires": { - "chalk": "2.4.1", - "enhanced-resolve": "3.4.1", - "loader-utils": "1.1.0", - "semver": "5.6.0" + "debug": "4.1.1", + "handle-thing": "2.0.0", + "http-deceiver": "1.2.7", + "select-hose": "2.0.0", + "spdy-transport": "3.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ms": "2.1.1" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true - }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, - "ts-node": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.3.0.tgz", - "integrity": "sha1-wTxqMCTjC+EYDdUwOPwgkonUv2k=", + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { - "arrify": "1.0.1", - "chalk": "2.4.1", - "diff": "3.5.0", - "make-error": "1.3.5", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18", - "tsconfig": "6.0.0", - "v8flags": "3.1.1", - "yn": "2.0.0" + "debug": "4.1.1", + "detect-node": "2.0.4", + "hpack.js": "2.1.6", + "obuf": "1.1.2", + "readable-stream": "3.4.0", + "wbuf": "1.7.3" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ms": "2.1.1" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", "dev": true, "requires": { - "has-flag": "3.0.0" + "inherits": "2.0.3", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } } } }, - "tsconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz", - "integrity": "sha1-aw6DdgA9evGGT434+J3QBZ/80DI=", + "speed-measure-webpack-plugin": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.1.tgz", + "integrity": "sha512-qVIkJvbtS9j/UeZumbdfz0vg+QfG/zxonAjzefZrqzkr7xOncLVXkeGbTpzd1gjCBM4PmVNkWlkeTVhgskAGSQ==", "dev": true, "requires": { - "strip-bom": "3.0.0", - "strip-json-comments": "2.0.1" + "chalk": "2.4.2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "0.2.4", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" + } + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" }, "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } } } }, - "tsickle": { - "version": "0.24.1", - "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.24.1.tgz", - "integrity": "sha512-XloFQZhVhgjpQsi3u2ORNRJvuID5sflOg6HfP093IqAbhE1+fIUXznULpdDwHgG4p+v8w78KdHruQtkWUKx5AQ==", + "stats-webpack-plugin": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/stats-webpack-plugin/-/stats-webpack-plugin-0.7.0.tgz", + "integrity": "sha512-NT0YGhwuQ0EOX+uPhhUcI6/+1Sq/pMzNuSCBVT4GbFl/ac6I/JZefBcjlECNfAb1t3GOx5dEj1Z7x0cAxeeVLQ==", + "dev": true, + "requires": { + "lodash": "4.17.11" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "2.3.6" + } + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, "requires": { - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "source-map": "0.5.7", - "source-map-support": "0.4.18" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + "stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=" }, - "tslint": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", - "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "builtin-modules": "1.1.1", - "chalk": "2.4.1", - "commander": "2.19.0", - "diff": "3.5.0", - "glob": "7.1.3", - "js-yaml": "3.12.0", - "minimatch": "3.0.4", - "resolve": "1.8.1", - "semver": "5.6.0", - "tslib": "1.9.3", - "tsutils": "2.29.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" } }, - "tslint-config-prettier": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.16.0.tgz", - "integrity": "sha512-zu6RAcpBtqdvhT6KpBh9kRPYATjOf9BnRi718kNqVKFjEgSE4rFrPprFju1YJrkOa3RbtbWI1ZSuLd2NBX1MDw==", + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, - "tslint-config-standard": { - "version": "github:papers-ch/tslint-config-standard#f54d368deef5526ac14f76257ddf9d8027a0188a", + "streamroller": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.5.tgz", + "integrity": "sha512-iGVaMcyF5PcUY0cPbW3xFQUXnr9O4RZXNBBjhuLZgrjLO4XCLLGfx4T2sGqygSeylUjwgWRsnNbT9aV0Zb8AYw==", "dev": true, "requires": { - "tslint-eslint-rules": "5.4.0" + "async": "2.6.2", + "date-format": "2.0.0", + "debug": "3.2.6", + "fs-extra": "7.0.1", + "lodash": "4.17.11" }, "dependencies": { - "tslib": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", - "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", - "dev": true - }, - "tslint-eslint-rules": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz", - "integrity": "sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w==", + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "doctrine": "0.7.2", - "tslib": "1.9.0", - "tsutils": "3.12.0" + "ms": "2.1.1" } }, - "tsutils": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.12.0.tgz", - "integrity": "sha512-64KxDOb3+5ZVbz6NDZlCtOHstLk9+W96Y7d5Z/s5ge92gLaunxDeXYahvB7Rhl1dbaa3ifyq/W53o4mshIV1Tw==", - "dev": true, - "requires": { - "tslib": "1.9.0" - } + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true } } }, - "tslint-eslint-rules": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-4.1.1.tgz", - "integrity": "sha1-fDDniC8mvCdr/5HSOEl1xp2viLo=", + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "doctrine": "0.7.2", - "tslib": "1.9.3", - "tsutils": "1.9.1" - }, - "dependencies": { - "tsutils": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-1.9.1.tgz", - "integrity": "sha1-ufmrROVa+WgYMdXyjQrur1x1DLA=", - "dev": true - } + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, - "tslint-microsoft-contrib": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.2.1.tgz", - "integrity": "sha512-PDYjvpo0gN9IfMULwKk0KpVOPMhU6cNoT9VwCOLeDl/QS8v8W2yspRpFFuUS7/c5EIH/n8ApMi8TxJAz1tfFUA==", - "dev": true, + "string.prototype.trim": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", + "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", "requires": { - "tsutils": "2.28.0" - }, - "dependencies": { - "tsutils": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.28.0.tgz", - "integrity": "sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA==", - "dev": true, - "requires": { - "tslib": "1.9.3" - } - } + "define-properties": "1.1.3", + "es-abstract": "1.13.0", + "function-bind": "1.1.1" } }, - "tslint-sonarts": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/tslint-sonarts/-/tslint-sonarts-1.8.0.tgz", - "integrity": "sha512-tpijO5VR18e+Ny99uMNNov3Hw7diiYQ8KoJkezpHGw9hSFFrO5g2PhwdQQo7O9puhJKMIutLl9g+ICMgg+bh0w==", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "immutable": "3.8.2" + "safe-buffer": "5.1.2" } }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "tslib": "1.9.3" + "ansi-regex": "2.1.1" } }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, "requires": { - "safe-buffer": "5.1.2" + "is-utf8": "0.2.1" } }, - "tweetnacl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.1.tgz", - "integrity": "sha512-kcoMoKTPYnoeS50tzoqjPY3Uv9axeuuFAZY9M/9zFnhoVvRfxz9K29IMPD7jGmt2c8SW7i3gT9WqDl2+nV7p4A==" + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true }, - "tweetnacl-auth": { + "strip-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tweetnacl-auth/-/tweetnacl-auth-1.0.1.tgz", - "integrity": "sha512-Qu2JonS5VUh5oJBnGsFohfel8O4gqN2QwdrsLjaZEZOU/25iIr3zU7jFOFbtOM5Wak5jiIViAqMvRvuxk9Lhmg==", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "optional": true, "requires": { - "tweetnacl": "1.0.1" + "get-stdin": "4.0.1" } }, - "type-detect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", - "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=" - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "style-loader": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", + "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", + "dev": true, "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.21" + "loader-utils": "1.2.3", + "schema-utils": "1.0.0" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "stylus": { + "version": "0.54.5", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", + "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", + "dev": true, "requires": { - "is-typedarray": "1.0.0" + "css-parse": "1.7.0", + "debug": "2.6.9", + "glob": "7.0.6", + "mkdirp": "0.5.1", + "sax": "0.5.8", + "source-map": "0.1.43" + }, + "dependencies": { + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } } }, - "typeforce": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", - "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" - }, - "typescript": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.4.2.tgz", - "integrity": "sha1-+DlfhdRZJ2BnyYiqQYN6j4KHCEQ=", - "dev": true + "stylus-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz", + "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==", + "dev": true, + "requires": { + "loader-utils": "1.2.3", + "lodash.clonedeep": "4.5.0", + "when": "3.6.4" + } }, - "typestrict": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typestrict/-/typestrict-1.0.1.tgz", - "integrity": "sha512-ECgO3o9BYYtHIbUwv3s/oNCekulLH3dbhU7E50gxelnB9Td7pTtp34WH9DBPCX6YaAEZDTGxnbfS6pprV1x1gg==", + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "tslint-microsoft-contrib": "5.2.1", - "tslint-sonarts": "1.8.0" + "has-flag": "3.0.0" } }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "dev": true + }, + "tail": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/tail/-/tail-0.4.0.tgz", + "integrity": "sha1-0p3nJ1DMmdseBTr/E8NZ7PtxMAI=" + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "tape": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.10.2.tgz", + "integrity": "sha512-mgl23h7W2yuk3N85FOYrin2OvThTYWdwbk6XQ1pr2PMJieyW2FM/4Bu/+kD/wecb3aZ0Enm+Syinyq467OPq2w==", "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "deep-equal": "1.0.1", + "defined": "1.0.0", + "for-each": "0.3.3", + "function-bind": "1.1.1", + "glob": "7.1.4", + "has": "1.0.3", + "inherits": "2.0.3", + "minimist": "1.2.0", + "object-inspect": "1.6.0", + "resolve": "1.10.1", + "resumer": "0.0.0", + "string.prototype.trim": "1.1.2", + "through": "2.3.8" }, "dependencies": { - "yargs": { - "version": "3.10.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "resolve": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", + "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", + "requires": { + "path-parse": "1.0.6" } } } }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "optional": true - }, - "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", "dev": true, + "optional": true, "requires": { - "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.3.0" + "block-stream": "0.0.9", + "fstream": "1.0.12", + "inherits": "2.0.3" } }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, - "unbzip2-stream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.1.tgz", - "integrity": "sha512-fIZnvdjblYs7Cru/xC6tCPVhz7JkYcVQQkePwMLyQELzYTds2Xn8QefPVnvdVhhZqubxNA1cASXEH5wcK0Bucw==", + "terser": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "dev": true, "requires": { - "buffer": "3.6.0", - "through": "2.3.8" + "commander": "2.20.0", + "source-map": "0.6.1", + "source-map-support": "0.5.10" }, "dependencies": { - "base64-js": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", - "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=" - }, - "buffer": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", - "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", - "requires": { - "base64-js": "0.0.8", - "ieee754": "1.1.12", - "isarray": "1.0.0" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "terser-webpack-plugin": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.2.tgz", + "integrity": "sha512-1DMkTk286BzmfylAvLXwpJrI7dWa5BnFmscV/2dCr8+c56egFcbaeFAl7+sujAjdmpLam21XRdhA4oifLyiWWg==", + "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "cacache": "11.3.2", + "find-cache-dir": "2.1.0", + "schema-utils": "1.0.0", + "serialize-javascript": "1.7.0", + "source-map": "0.6.1", + "terser": "3.17.0", + "webpack-sources": "1.3.0", + "worker-farm": "1.7.0" }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "cacache": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "dev": true, "requires": { - "is-extendable": "0.1.1" + "bluebird": "3.5.5", + "chownr": "1.1.1", + "figgy-pudding": "3.5.1", + "glob": "7.1.3", + "graceful-fs": "4.1.15", + "lru-cache": "5.1.1", + "mississippi": "3.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.3", + "ssri": "6.0.1", + "unique-filename": "1.1.1", + "y18n": "4.0.0" } }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "commondir": "1.0.1", + "make-dir": "2.1.0", + "pkg-dir": "3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "3.0.0", + "path-exists": "3.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "3.0.3" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "4.0.1", + "semver": "5.6.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "duplexify": "3.7.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.1.1", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "3.0.0", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "2.2.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "3.0.0" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "3.5.1" } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true } } }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "crypto-random-string": "1.0.0" + "readable-stream": "2.3.6", + "xtend": "4.0.1" } }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unorm": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", - "integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA=" + "thunky": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", + "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", + "dev": true }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "timers-browserify": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } + "os-tmpdir": "1.0.2" } }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", "dev": true }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==" + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "1.3.0", - "chalk": "2.4.1", - "configstore": "3.1.2", - "import-lazy": "2.1.0", - "is-ci": "1.2.1", - "is-installed-globally": "0.1.0", - "is-npm": "1.0.0", - "latest-version": "3.1.0", - "semver-diff": "2.1.0", - "xdg-basedir": "3.0.0" + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "3.2.2" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "has-flag": "3.0.0" + "is-buffer": "1.1.6" } } } }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, "requires": { - "punycode": "2.1.1" + "is-number": "3.0.0", + "repeat-string": "1.6.1" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "psl": "1.1.32", + "punycode": "1.4.1" }, "dependencies": { "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true } } }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "requires": { - "prepend-http": "1.0.4" - } + "tree-kill": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz", + "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==", + "dev": true }, - "url-set-query": { + "trim-newlines": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true, + "optional": true }, - "url-to-options": { + "trim-right": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true }, - "useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", "dev": true, + "optional": true, "requires": { - "lru-cache": "4.1.3", - "tmp": "0.0.33" + "glob": "7.1.3" } }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=" - }, - "utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", - "dev": true - }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "ts-node": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.1.1.tgz", + "integrity": "sha512-nd+mdxDP2BjQlyumBCMSU3IQLEjSla1X3uSzDfQ4M5OEZ3iDC01gjhs0FX29jyolATwLKB7YoRJ1Asbxd9EEoA==", + "dev": true, "requires": { - "inherits": "2.0.3" + "arg": "4.1.0", + "diff": "4.0.1", + "make-error": "1.3.5", + "source-map-support": "0.5.10", + "yn": "3.1.0" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" }, - "v8flags": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.1.tgz", - "integrity": "sha512-iw/1ViSEaff8NJ3HLyEjawk/8hjJib3E7pvG4pddVXfUg1983s3VGsiClDjhK64MQVDGqc1Q8r18S4VKQZS9EQ==", + "tslint": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.17.0.tgz", + "integrity": "sha512-pflx87WfVoYepTet3xLfDOLDm9Jqi61UXIKePOuca0qoAZyrGWonDG9VTbji58Fy+8gciUn8Bt7y69+KEVjc/w==", "dev": true, "requires": { - "homedir-polyfill": "1.0.1" + "@babel/code-frame": "7.0.0", + "builtin-modules": "1.1.1", + "chalk": "2.4.2", + "commander": "2.20.0", + "diff": "3.5.0", + "glob": "7.1.3", + "js-yaml": "3.13.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "resolve": "1.11.0", + "semver": "5.6.0", + "tslib": "1.9.3", + "tsutils": "2.29.0" + }, + "dependencies": { + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + } } }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, "requires": { - "spdx-correct": "3.0.2", - "spdx-expression-parse": "3.0.0" + "tslib": "1.9.3" } }, - "validate.js": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/validate.js/-/validate.js-0.12.0.tgz", - "integrity": "sha512-/x2RJSvbqEyxKj0RPN4xaRquK+EggjeVXiDDEyrJzsJogjtiZ9ov7lj/svVb4DM5Q5braQF4cooAryQbUwOxlA==" - }, - "validator": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", - "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true }, - "varuint-bitcoin": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.0.tgz", - "integrity": "sha512-jCEPG+COU/1Rp84neKTyDJQr478/hAfVp5xxYn09QEH0yBjbmPeMfuuQIrp+BUD83hybtYZKhr5elV3bvdV1bA==", + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, "requires": { "safe-buffer": "5.1.2" } }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - } + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true }, - "vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", "dev": true }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, "requires": { - "indexof": "0.0.1" + "media-typer": "0.3.0", + "mime-types": "2.1.24" } }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "typescript": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.6.tgz", + "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==", + "dev": true + }, + "uglify-js": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", + "dev": true, + "optional": true, "requires": { - "chokidar": "2.0.4", - "graceful-fs": "4.1.15", - "neo-async": "2.6.0" + "commander": "2.20.0", + "source-map": "0.6.1" }, "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.4", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "lodash.debounce": "4.0.8", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.1.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "1.0.2" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } + "is-extendable": "0.1.1" } }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, "requires": { "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "2.1.1" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "6.0.2" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "6.0.2" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "requires": { - "is-extglob": "2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" } } } }, - "web3": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.36.tgz", - "integrity": "sha512-fZDunw1V0AQS27r5pUN3eOVP7u8YAvyo6vOapdgVRolAu5LgaweP7jncYyLINqIX9ZgWdS5A090bt+ymgaYHsw==", + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "2.0.1" + } + }, + "unique-slug": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", + "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", + "dev": true, + "requires": { + "imurmurhash": "0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unorm": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.5.0.tgz", + "integrity": "sha512-sMfSWoiRaXXeDZSXC+YRZ23H4xchQpwxjpw1tmfR+kgbBCaOgln4NI0LXejJIhnBuKINrB3WRn+ZI8IWssirVw==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, "requires": { - "web3-bzz": "1.0.0-beta.36", - "web3-core": "1.0.0-beta.36", - "web3-eth": "1.0.0-beta.36", - "web3-eth-personal": "1.0.0-beta.36", - "web3-net": "1.0.0-beta.36", - "web3-shh": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" + "has-value": "0.3.1", + "isobject": "3.0.1" }, "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" - }, - "web3-bzz": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.36.tgz", - "integrity": "sha512-clDRS/ziboJ5ytnrfxq80YSu9HQsT0vggnT3BkoXadrauyEE/9JNLxRu016jjUxqdkfdv4MgIPDdOS3Bv2ghiw==", - "requires": { - "got": "7.1.0", - "swarm-js": "0.1.37", - "underscore": "1.8.3" - } - }, - "web3-core": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.36.tgz", - "integrity": "sha512-C2QW9CMMRZdYAiKiLkMrKRSp+gekSqTDgZTNvlxAdN1hXn4d9UmcmWSJXOmIHqr5N2ISbRod+bW+qChODxVE3Q==", - "requires": { - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-core-requestmanager": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-core-helpers": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.36.tgz", - "integrity": "sha512-gu74l0htiGWuxLQuMnZqKToFvkSM+UFPE7qUuy1ZosH/h2Jd+VBWg6k4CyNYVYfP0hL5x3CN8SBmB+HMowo55A==", - "requires": { - "underscore": "1.8.3", - "web3-eth-iban": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-core-method": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.36.tgz", - "integrity": "sha512-dJsP3KkGaqBBSdxfzvLsYPOmVaSs1lR/3oKob/gtUYG7UyTnwquwliAc7OXj+gqRA2E/FHZcM83cWdl31ltdSA==", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-promievent": "1.0.0-beta.36", - "web3-core-subscriptions": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-core-promievent": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.36.tgz", - "integrity": "sha512-RGIL6TjcOeJTullFLMurChPTsg94cPF6LI763y/sPYtXTDol1vVa+J5aGLp/4WW8v+s+1bSQO6zYq2ZtkbmtEQ==", - "requires": { - "any-promise": "1.3.0", - "eventemitter3": "1.1.1" - } - }, - "web3-core-requestmanager": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.36.tgz", - "integrity": "sha512-/CHuaMbiMDu1v8ANGYI7yFCnh1GaCWx5pKnUPJf+QTk2xAAw+Bvd97yZJIWPOK5AOPUIzxgwx9Ob/5ln6mTmYA==", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36", - "web3-providers-http": "1.0.0-beta.36", - "web3-providers-ipc": "1.0.0-beta.36", - "web3-providers-ws": "1.0.0-beta.36" - } - }, - "web3-core-subscriptions": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.36.tgz", - "integrity": "sha512-/evyLQ8CMEYXC5aUCodDpmEnmGVYQxaIjiEIfA/85f9ifHkfzP1aOwCAjcsLsJWnwrWDagxSpjCYrDtnNabdEw==", - "requires": { - "eventemitter3": "1.1.1", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36" - } - }, - "web3-eth": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.36.tgz", - "integrity": "sha512-uEa0UnbnNHUB4N2O1U+LsvxzSPJ/w3azy5115IseaUdDaiz6IFFgFfFP3ssauayQNCf7v2F44GXLfPhrNeb/Sw==", - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.36", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-core-subscriptions": "1.0.0-beta.36", - "web3-eth-abi": "1.0.0-beta.36", - "web3-eth-accounts": "1.0.0-beta.36", - "web3-eth-contract": "1.0.0-beta.36", - "web3-eth-ens": "1.0.0-beta.36", - "web3-eth-iban": "1.0.0-beta.36", - "web3-eth-personal": "1.0.0-beta.36", - "web3-net": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-eth-abi": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.36.tgz", - "integrity": "sha512-fBfW+7hvA0rxEMV45fO7JU+0R32ayT7aRwG9Cl6NW2/QvhFeME2qVbMIWw0q5MryPZGIN8A6366hKNuWvVidDg==", - "requires": { - "ethers": "4.0.0-beta.1", - "underscore": "1.8.3", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-eth-accounts": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.36.tgz", - "integrity": "sha512-MmgIlBEZ0ILLWV4+wfMrbeVVMU/VmQnCpgSDcw7wHKOKu47bKncJ6rVqVsUbC6d9F613Rios+Yj2Ua6SCHtmrg==", + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, "requires": { - "any-promise": "1.3.0", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.7", - "scrypt.js": "0.2.0", - "underscore": "1.8.3", - "uuid": "2.0.1", - "web3-core": "1.0.0-beta.36", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" }, "dependencies": { - "eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, "requires": { - "bn.js": "4.11.6", - "elliptic": "6.4.1", - "xhr-request-promise": "0.1.2" + "isarray": "1.0.0" } } } }, - "web3-eth-contract": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.36.tgz", - "integrity": "sha512-cywqcIrUsCW4fyqsHdOb24OCC8AnBol8kNiptI+IHRylyCjTNgr53bUbjrXWjmEnear90rO0QhAVjLB1a4iEbQ==", - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.36", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-core-promievent": "1.0.0-beta.36", - "web3-core-subscriptions": "1.0.0-beta.36", - "web3-eth-abi": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-eth-iban": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.36.tgz", - "integrity": "sha512-b5AEDjjhOLR4q47Hbzf65zYE+7U7JgCgrUb13RU4HMIGoMb1q4DXaJw1UH8VVHCZulevl2QBjpCyrntecMqqCQ==", - "requires": { - "bn.js": "4.11.6", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-eth-personal": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.36.tgz", - "integrity": "sha512-+oxvhojeWh4C/XtnlYURWRR3F5Cg7bQQNjtN1ZGnouKAZyBLoYDVVJ6OaPiveNtfC9RKnzLikn9/Uqc0xz410A==", - "requires": { - "web3-core": "1.0.0-beta.36", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-net": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-net": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.36.tgz", - "integrity": "sha512-BriXK0Pjr6Hc/VDq1Vn8vyOum4JB//wpCjgeGziFD6jC7Of8YaWC7AJYXje89OckzfcqX1aJyJlBwDpasNkAzQ==", - "requires": { - "web3-core": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" - } - }, - "web3-providers-http": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.36.tgz", - "integrity": "sha512-KLSqMS59nRdpet9B0B64MKgtM3n9wAHTcAHJ03hv79avQNTjHxtjZm0ttcjcFUPpWDgTCtcYCa7tqaYo9Pbeog==", - "requires": { - "web3-core-helpers": "1.0.0-beta.36", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.36.tgz", - "integrity": "sha512-iEUrmdd2CzoWgp+75/ydom/1IaoLw95qkAzsgwjjZp1waDncHP/cvVGX74+fbUx4hRaPdchyzxCQfNpgLDmNjQ==", - "requires": { - "oboe": "2.1.3", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36" - } - }, - "web3-providers-ws": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.36.tgz", - "integrity": "sha512-wAnENuZx75T5ZSrT2De2LOaUuPf2yRjq1VfcbD7+Zd79F3DZZLBJcPyCNVQ1U0fAXt0wfgCKl7sVw5pffqR9Bw==", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36", - "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2" - } - }, - "web3-shh": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.36.tgz", - "integrity": "sha512-bREGHS/WprYFSvGUhyIk8RSpT2Z5SvJOKGBrsUW2nDIMWO6z0Op8E7fzC6GXY2HZfZliAqq6LirbXLgcLRWuPw==", - "requires": { - "web3-core": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-core-subscriptions": "1.0.0-beta.36", - "web3-net": "1.0.0-beta.36" - } - }, - "web3-utils": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.36.tgz", - "integrity": "sha512-7ri74lG5fS2Th0fhYvTtiEHMB1Pmf2p7dQx1COQ3OHNI/CHNEMjzoNMEbBU6FAENrywfoFur40K4m0AOmEUq5A==", - "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" - } - }, - "websocket": { - "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", - "requires": { - "debug": "2.6.9", - "nan": "2.11.1", - "typedarray-to-buffer": "3.1.5", - "yaeti": "0.0.6" - } + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "2.1.1" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true } } }, - "web3-bzz": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.30.tgz", - "integrity": "sha1-JDTaGDwjmqqlwBP2IwdCnqkd1wY=", + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dev": true, + "requires": { + "querystringify": "2.1.1", + "requires-port": "1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "useragent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "dev": true, + "requires": { + "lru-cache": "4.1.5", + "tmp": "0.0.33" + } + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "3.1.0", + "spdx-expression-parse": "3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, "requires": { - "got": "7.1.0", - "swarm-js": "0.1.37", - "underscore": "1.8.3" + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" } }, - "web3-core": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.30.tgz", - "integrity": "sha1-919NO4W+dMdnRjeSHD4BO8XSdnk=", + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, "requires": { - "web3-core-helpers": "1.0.0-beta.30", - "web3-core-method": "1.0.0-beta.30", - "web3-core-requestmanager": "1.0.0-beta.30", - "web3-utils": "1.0.0-beta.30" + "indexof": "0.0.1" } }, - "web3-core-helpers": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.30.tgz", - "integrity": "sha1-oADO4/CgnuoT10tXMDNdRjX+Hy8=", + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, "requires": { - "underscore": "1.8.3", - "web3-eth-iban": "1.0.0-beta.30", - "web3-utils": "1.0.0-beta.30" + "chokidar": "2.0.4", + "graceful-fs": "4.1.15", + "neo-async": "2.6.1" } }, - "web3-core-method": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.30.tgz", - "integrity": "sha1-jdb/eJ6NFWO4eG0Tp4x/rO+uRxw=", + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.30", - "web3-core-promievent": "1.0.0-beta.30", - "web3-core-subscriptions": "1.0.0-beta.30", - "web3-utils": "1.0.0-beta.30" + "minimalistic-assert": "1.0.1" } }, - "web3-core-promievent": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.30.tgz", - "integrity": "sha1-YgUZK/sJdEETIialk57FrtOoopE=", + "webdriver-js-extender": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", + "dev": true, "requires": { - "bluebird": "3.3.1", - "eventemitter3": "1.1.1" - }, - "dependencies": { - "bluebird": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.3.1.tgz", - "integrity": "sha1-+Xrhlw9B2FF3KDBT6aEgFg5mxh0=" - } + "@types/selenium-webdriver": "3.0.16", + "selenium-webdriver": "3.6.0" } }, - "web3-core-requestmanager": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.30.tgz", - "integrity": "sha1-buVvuKbLhf0BswgIVPUNZOUiQMY=", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.30", - "web3-providers-http": "1.0.0-beta.30", - "web3-providers-ipc": "1.0.0-beta.30", - "web3-providers-ws": "1.0.0-beta.30" - } - }, - "web3-core-subscriptions": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.30.tgz", - "integrity": "sha1-MWUsdTVsP2floZzRS40xS61OISc=", - "requires": { - "eventemitter3": "1.1.1", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.30" - } - }, - "web3-eth": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.30.tgz", - "integrity": "sha1-ApsV4Uy2CLnP4CYDtQTWUYcPBQE=", - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.30", - "web3-core-helpers": "1.0.0-beta.30", - "web3-core-method": "1.0.0-beta.30", - "web3-core-subscriptions": "1.0.0-beta.30", - "web3-eth-abi": "1.0.0-beta.30", - "web3-eth-accounts": "1.0.0-beta.30", - "web3-eth-contract": "1.0.0-beta.30", - "web3-eth-iban": "1.0.0-beta.30", - "web3-eth-personal": "1.0.0-beta.30", - "web3-net": "1.0.0-beta.30", - "web3-utils": "1.0.0-beta.30" - } - }, - "web3-eth-abi": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.30.tgz", - "integrity": "sha1-bqUsmZqFBbR8L4i6YdKmgKEGZAk=", - "requires": { - "bn.js": "4.11.6", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.30", - "web3-utils": "1.0.0-beta.30" + "webpack": { + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.0.tgz", + "integrity": "sha512-pxdGG0keDBtamE1mNvT5zyBdx+7wkh6mh7uzMOo/uRQ/fhsdj5FXkh/j5mapzs060forql1oXqXN9HJGju+y7w==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/wasm-edit": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "acorn": "6.1.1", + "acorn-dynamic-import": "4.0.0", + "ajv": "6.9.1", + "ajv-keywords": "3.4.0", + "chrome-trace-event": "1.0.2", + "enhanced-resolve": "4.1.0", + "eslint-scope": "4.0.3", + "json-parse-better-errors": "1.0.2", + "loader-runner": "2.4.0", + "loader-utils": "1.2.3", + "memory-fs": "0.4.1", + "micromatch": "3.1.10", + "mkdirp": "0.5.1", + "neo-async": "2.6.1", + "node-libs-browser": "2.2.0", + "schema-utils": "0.4.7", + "tapable": "1.1.3", + "terser-webpack-plugin": "1.2.2", + "watchpack": "1.6.0", + "webpack-sources": "1.3.0" }, "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dev": true, + "requires": { + "ajv": "6.9.1", + "ajv-keywords": "3.4.0" + } } } }, - "web3-eth-accounts": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.30.tgz", - "integrity": "sha1-jwobNCxCg4EjciQqbi3yaIh7O3A=", + "webpack-core": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz", + "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", + "dev": true, "requires": { - "bluebird": "3.3.1", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.7", - "scrypt.js": "0.2.0", - "underscore": "1.8.3", - "uuid": "2.0.1", - "web3-core": "1.0.0-beta.30", - "web3-core-helpers": "1.0.0-beta.30", - "web3-core-method": "1.0.0-beta.30", - "web3-utils": "1.0.0-beta.30" + "source-list-map": "0.1.8", + "source-map": "0.4.4" }, "dependencies": { - "bluebird": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.3.1.tgz", - "integrity": "sha1-+Xrhlw9B2FF3KDBT6aEgFg5mxh0=" + "source-list-map": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", + "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", + "dev": true }, - "eth-lib": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", - "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1", - "xhr-request-promise": "0.1.2" + "amdefine": "1.0.1" } - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" } } }, - "web3-eth-contract": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.30.tgz", - "integrity": "sha1-1+uiOFCE3/PHWqxII1ryyNLWolg=", - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.30", - "web3-core-helpers": "1.0.0-beta.30", - "web3-core-method": "1.0.0-beta.30", - "web3-core-promievent": "1.0.0-beta.30", - "web3-core-subscriptions": "1.0.0-beta.30", - "web3-eth-abi": "1.0.0-beta.30", - "web3-utils": "1.0.0-beta.30" - } - }, - "web3-eth-ens": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.36.tgz", - "integrity": "sha512-8ZdD7XoJfSX3jNlZHSLe4G837xQ0v5a8cHCcDcd1IoqoY855X9SrIQ0Xdqia9p4mR1YcH1vgmkXY9/3hsvxS7g==", - "requires": { - "eth-ens-namehash": "2.0.8", - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.36", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-promievent": "1.0.0-beta.36", - "web3-eth-abi": "1.0.0-beta.36", - "web3-eth-contract": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" + "webpack-dev-middleware": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.5.1.tgz", + "integrity": "sha512-4dwCh/AyMOYAybggUr8fiCkRnjVDp+Cqlr9c+aaNB3GJYgRGYQWJ1YX/WAKUNA9dPNHZ6QSN2lYDKqjKSI8Vqw==", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "2.4.3", + "range-parser": "1.2.1", + "webpack-log": "2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", + "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "3.1.14", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz", + "integrity": "sha512-mGXDgz5SlTxcF3hUpfC8hrQ11yhAttuUQWf1Wmb+6zo3x6rb7b9mIfuQvAPLdfDRCGRGvakBWHdHOa0I9p/EVQ==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "3.5.0", + "chokidar": "2.0.4", + "compression": "1.7.4", + "connect-history-api-fallback": "1.6.0", + "debug": "3.2.6", + "del": "3.0.0", + "express": "4.17.1", + "html-entities": "1.2.1", + "http-proxy-middleware": "0.18.0", + "import-local": "2.0.0", + "internal-ip": "3.0.1", + "ip": "1.1.5", + "killable": "1.0.1", + "loglevel": "1.6.2", + "opn": "5.5.0", + "portfinder": "1.0.20", + "schema-utils": "1.0.0", + "selfsigned": "1.10.4", + "semver": "5.6.0", + "serve-index": "1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.3.0", + "spdy": "4.0.0", + "strip-ansi": "3.0.1", + "supports-color": "5.5.0", + "url": "0.11.0", + "webpack-dev-middleware": "3.4.0", + "webpack-log": "2.0.0", + "yargs": "12.0.2" }, "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.6.0", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "2.1.1" + } }, - "web3-core": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.36.tgz", - "integrity": "sha512-C2QW9CMMRZdYAiKiLkMrKRSp+gekSqTDgZTNvlxAdN1hXn4d9UmcmWSJXOmIHqr5N2ISbRod+bW+qChODxVE3Q==", + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, "requires": { - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-core-requestmanager": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" + "xregexp": "4.0.0" } }, - "web3-core-helpers": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.36.tgz", - "integrity": "sha512-gu74l0htiGWuxLQuMnZqKToFvkSM+UFPE7qUuy1ZosH/h2Jd+VBWg6k4CyNYVYfP0hL5x3CN8SBmB+HMowo55A==", + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, "requires": { - "underscore": "1.8.3", - "web3-eth-iban": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" + "cross-spawn": "6.0.5", + "get-stream": "4.1.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" } }, - "web3-core-method": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.36.tgz", - "integrity": "sha512-dJsP3KkGaqBBSdxfzvLsYPOmVaSs1lR/3oKob/gtUYG7UyTnwquwliAc7OXj+gqRA2E/FHZcM83cWdl31ltdSA==", + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-promievent": "1.0.0-beta.36", - "web3-core-subscriptions": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" + "locate-path": "3.0.0" } }, - "web3-core-promievent": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.36.tgz", - "integrity": "sha512-RGIL6TjcOeJTullFLMurChPTsg94cPF6LI763y/sPYtXTDol1vVa+J5aGLp/4WW8v+s+1bSQO6zYq2ZtkbmtEQ==", + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "requires": { - "any-promise": "1.3.0", - "eventemitter3": "1.1.1" + "pump": "3.0.0" } }, - "web3-core-requestmanager": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.36.tgz", - "integrity": "sha512-/CHuaMbiMDu1v8ANGYI7yFCnh1GaCWx5pKnUPJf+QTk2xAAw+Bvd97yZJIWPOK5AOPUIzxgwx9Ob/5ln6mTmYA==", + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36", - "web3-providers-http": "1.0.0-beta.36", - "web3-providers-ipc": "1.0.0-beta.36", - "web3-providers-ws": "1.0.0-beta.36" + "invert-kv": "2.0.0" } }, - "web3-core-subscriptions": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.36.tgz", - "integrity": "sha512-/evyLQ8CMEYXC5aUCodDpmEnmGVYQxaIjiEIfA/85f9ifHkfzP1aOwCAjcsLsJWnwrWDagxSpjCYrDtnNabdEw==", + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, "requires": { - "eventemitter3": "1.1.1", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, - "web3-eth-abi": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.36.tgz", - "integrity": "sha512-fBfW+7hvA0rxEMV45fO7JU+0R32ayT7aRwG9Cl6NW2/QvhFeME2qVbMIWw0q5MryPZGIN8A6366hKNuWvVidDg==", + "mime": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", + "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, "requires": { - "ethers": "4.0.0-beta.1", - "underscore": "1.8.3", - "web3-utils": "1.0.0-beta.36" + "execa": "1.0.0", + "lcid": "2.0.0", + "mem": "4.3.0" } }, - "web3-eth-contract": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.36.tgz", - "integrity": "sha512-cywqcIrUsCW4fyqsHdOb24OCC8AnBol8kNiptI+IHRylyCjTNgr53bUbjrXWjmEnear90rO0QhAVjLB1a4iEbQ==", + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.36", - "web3-core-helpers": "1.0.0-beta.36", - "web3-core-method": "1.0.0-beta.36", - "web3-core-promievent": "1.0.0-beta.36", - "web3-core-subscriptions": "1.0.0-beta.36", - "web3-eth-abi": "1.0.0-beta.36", - "web3-utils": "1.0.0-beta.36" + "p-try": "2.2.0" } }, - "web3-eth-iban": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.36.tgz", - "integrity": "sha512-b5AEDjjhOLR4q47Hbzf65zYE+7U7JgCgrUb13RU4HMIGoMb1q4DXaJw1UH8VVHCZulevl2QBjpCyrntecMqqCQ==", + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, "requires": { - "bn.js": "4.11.6", - "web3-utils": "1.0.0-beta.36" + "p-limit": "2.2.0" } }, - "web3-providers-http": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.36.tgz", - "integrity": "sha512-KLSqMS59nRdpet9B0B64MKgtM3n9wAHTcAHJ03hv79avQNTjHxtjZm0ttcjcFUPpWDgTCtcYCa7tqaYo9Pbeog==", + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "requires": { - "web3-core-helpers": "1.0.0-beta.36", - "xhr2-cookies": "1.1.0" + "end-of-stream": "1.4.1", + "once": "1.4.0" } }, - "web3-providers-ipc": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.36.tgz", - "integrity": "sha512-iEUrmdd2CzoWgp+75/ydom/1IaoLw95qkAzsgwjjZp1waDncHP/cvVGX74+fbUx4hRaPdchyzxCQfNpgLDmNjQ==", + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "requires": { - "oboe": "2.1.3", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } } }, - "web3-providers-ws": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.36.tgz", - "integrity": "sha512-wAnENuZx75T5ZSrT2De2LOaUuPf2yRjq1VfcbD7+Zd79F3DZZLBJcPyCNVQ1U0fAXt0wfgCKl7sVw5pffqR9Bw==", + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.36", - "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2" + "has-flag": "3.0.0" } }, - "web3-utils": { - "version": "1.0.0-beta.36", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.36.tgz", - "integrity": "sha512-7ri74lG5fS2Th0fhYvTtiEHMB1Pmf2p7dQx1COQ3OHNI/CHNEMjzoNMEbBU6FAENrywfoFur40K4m0AOmEUq5A==", + "webpack-dev-middleware": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz", + "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", + "dev": true, "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" + "memory-fs": "0.4.1", + "mime": "2.4.3", + "range-parser": "1.2.1", + "webpack-log": "2.0.0" } }, - "websocket": { - "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", + "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", + "dev": true, "requires": { - "debug": "2.6.9", - "nan": "2.11.1", - "typedarray-to-buffer": "3.1.5", - "yaeti": "0.0.6" + "cliui": "4.1.0", + "decamelize": "2.0.0", + "find-up": "3.0.0", + "get-caller-file": "1.0.3", + "os-locale": "3.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "4.0.0", + "yargs-parser": "10.1.0" } - } - } - }, - "web3-eth-iban": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.30.tgz", - "integrity": "sha1-OwgKXE2h+jdHexfkyQB4G5IVBkU=", - "requires": { - "bn.js": "4.11.8", - "web3-utils": "1.0.0-beta.30" - } - }, - "web3-eth-personal": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.30.tgz", - "integrity": "sha1-i9TvQLO1+EHdOouXhz2dx5HK90g=", - "requires": { - "web3-core": "1.0.0-beta.30", - "web3-core-helpers": "1.0.0-beta.30", - "web3-core-method": "1.0.0-beta.30", - "web3-net": "1.0.0-beta.30", - "web3-utils": "1.0.0-beta.30" - } - }, - "web3-net": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.30.tgz", - "integrity": "sha1-CjUu3ilubUt/iLZ6pHTklwPec78=", - "requires": { - "web3-core": "1.0.0-beta.30", - "web3-core-method": "1.0.0-beta.30", - "web3-utils": "1.0.0-beta.30" - } - }, - "web3-providers-http": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.30.tgz", - "integrity": "sha1-zajZEzxvMdGoEtxaQq8Ay+qYzYY=", - "requires": { - "web3-core-helpers": "1.0.0-beta.30", - "xhr2": "0.1.4" - } - }, - "web3-providers-ipc": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.30.tgz", - "integrity": "sha1-7i2NGKPxILd3BEpW5n4K7iCFRYc=", - "requires": { - "oboe": "2.1.3", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.30" - } - }, - "web3-providers-ws": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.30.tgz", - "integrity": "sha1-muaanq2Kh2H4Y3n6NHttta5EsS0=", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.30", - "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2" - }, - "dependencies": { - "websocket": { - "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, "requires": { - "debug": "2.6.9", - "nan": "2.11.1", - "typedarray-to-buffer": "3.1.5", - "yaeti": "0.0.6" + "camelcase": "4.1.0" } } } }, - "web3-shh": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.30.tgz", - "integrity": "sha1-K/4yINlY/0ylkgF3kIUrxXt7DKc=", - "requires": { - "web3-core": "1.0.0-beta.30", - "web3-core-method": "1.0.0-beta.30", - "web3-core-subscriptions": "1.0.0-beta.30", - "web3-net": "1.0.0-beta.30" - } - }, - "web3-utils": { - "version": "1.0.0-beta.30", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.30.tgz", - "integrity": "sha1-6uQIzI1tb+zI1Ql8/q1Rdz8jH/k=", - "requires": { - "bn.js": "4.11.6", - "eth-lib": "0.1.27", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randomhex": "0.1.5", - "underscore": "1.8.3", - "utf8": "2.1.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "webdriver-js-extender": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", - "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { - "@types/selenium-webdriver": "3.0.13", - "selenium-webdriver": "3.6.0" - } - }, - "webpack": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.7.0.tgz", - "integrity": "sha512-MjAA0ZqO1ba7ZQJRnoCdbM56mmFpipOPUv/vQpwwfSI42p5PVDdoiuK2AL2FwFUVgT859Jr43bFZXRg/LNsqvg==", - "requires": { - "acorn": "5.7.3", - "acorn-dynamic-import": "2.0.2", - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "async": "2.6.1", - "enhanced-resolve": "3.4.1", - "interpret": "1.1.0", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.1", - "loader-utils": "0.2.17", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.1.0", - "source-map": "0.5.7", - "supports-color": "3.2.3", - "tapable": "0.2.8", - "uglify-js": "2.8.29", - "watchpack": "1.6.0", - "webpack-sources": "1.3.0", - "yargs": "6.6.0" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "requires": { - "has-flag": "1.0.0" - } - } + "ansi-colors": "3.2.4", + "uuid": "3.3.2" } }, - "webpack-dev-middleware": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", - "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "webpack-merge": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz", + "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==", "dev": true, "requires": { - "memory-fs": "0.4.1", - "mime": "1.6.0", - "path-is-absolute": "1.0.1", - "range-parser": "1.2.0", - "time-stamp": "2.2.0" - }, - "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - } + "lodash": "4.17.11" } }, "webpack-sources": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "dev": true, "requires": { "source-list-map": "2.0.1", "source-map": "0.6.1" @@ -15726,33 +11145,25 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "webrtc-adapter": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-3.4.3.tgz", - "integrity": "sha1-tjYGLu6abvFYrNDYUBtnhDS1bxY=", - "requires": { - "sdp": "1.5.4" - } - }, - "websocket": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.28.tgz", - "integrity": "sha512-00y/20/80P7H4bCYkzuuvvfDvh+dgtXi5kzDf3UcZwN6boTYaKvsrtZ5lIYm1Gsg48siMErd9M4zjSYfYFHTrA==", + "webpack-subresource-integrity": { + "version": "1.1.0-rc.6", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.1.0-rc.6.tgz", + "integrity": "sha512-Az7y8xTniNhaA0620AV1KPwWOqawurVVDzQSpPAeR5RwNbL91GoBSJAAo9cfd+GiFHwsS5bbHepBw1e6Hzxy4w==", + "dev": true, "requires": { - "debug": "2.6.9", - "nan": "2.11.1", - "typedarray-to-buffer": "3.1.5", - "yaeti": "0.0.6" + "webpack-core": "0.6.9" } }, "websocket-driver": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "dev": true, "requires": { "http-parser-js": "0.5.0", "websocket-extensions": "0.1.3" @@ -15761,7 +11172,14 @@ "websocket-extensions": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true + }, + "when": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", + "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", + "dev": true }, "which": { "version": "1.3.1", @@ -15774,7 +11192,9 @@ "which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true, + "optional": true }, "wide-align": { "version": "1.1.3", @@ -15785,84 +11205,26 @@ "string-width": "1.0.2" } }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, - "requires": { - "string-width": "2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "wif": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", - "integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=", - "requires": { - "bs58check": "2.1.2" - } + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true }, - "win-release": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", - "integrity": "sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk=", + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, "requires": { - "semver": "5.6.0" + "errno": "0.1.7" } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" - }, "wrap-ansi": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, "requires": { "string-width": "1.0.2", "strip-ansi": "3.0.1" @@ -15873,102 +11235,22 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" - } - }, "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.2", - "ultron": "1.1.1" - } - }, - "wtf-8": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", - "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", - "dev": true - }, - "xcode": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/xcode/-/xcode-0.9.3.tgz", - "integrity": "sha1-kQqJwWrubMC0LKgFptC0z4chHPM=", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", "dev": true, "requires": { - "pegjs": "0.10.0", - "simple-plist": "0.2.1", - "uuid": "3.0.1" - }, - "dependencies": { - "uuid": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", - "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", - "dev": true - } - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "xhr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "requires": { - "global": "4.3.2", - "is-function": "1.0.1", - "parse-headers": "2.0.1", - "xtend": "4.0.1" - } - }, - "xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "requires": { - "buffer-to-arraybuffer": "0.0.5", - "object-assign": "4.1.1", - "query-string": "5.1.1", - "simple-get": "2.8.1", - "timed-out": "4.0.1", - "url-set-query": "1.0.0", - "xhr": "2.5.0" - } - }, - "xhr-request-promise": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz", - "integrity": "sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=", - "requires": { - "xhr-request": "1.1.0" + "async-limiter": "1.0.0" } }, - "xhr2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", - "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=" - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", + "xcode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-2.0.0.tgz", + "integrity": "sha512-5xF6RCjAdDEiEsbbZaS/gBRt3jZ/177otZcpoLCjGN/u1LrfgH7/Sgeeavpr/jELpyDqN2im3AKosl2G2W8hfw==", "requires": { - "cookiejar": "2.1.2" + "simple-plist": "1.0.0", + "uuid": "3.3.2" } }, "xml-escape": { @@ -15980,9 +11262,18 @@ "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dev": true, "requires": { "sax": "1.2.4", "xmlbuilder": "9.0.7" + }, + "dependencies": { + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + } } }, "xmlbuilder": { @@ -15995,41 +11286,42 @@ "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" }, - "xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" - }, "xmlhttprequest-ssl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", - "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", "dev": true }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true }, "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "optional": true, "requires": { "camelcase": "3.0.0", "cliui": "3.2.0", @@ -16043,30 +11335,31 @@ "string-width": "1.0.2", "which-module": "1.0.0", "y18n": "3.2.1", - "yargs-parser": "4.2.1" + "yargs-parser": "5.0.0" }, "dependencies": { "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "optional": true }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true, + "optional": true } } }, "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "optional": true, "requires": { "camelcase": "3.0.0" }, @@ -16074,19 +11367,12 @@ "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "optional": true } } }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "requires": { - "buffer-crc32": "0.2.13", - "fd-slicer": "1.1.0" - } - }, "yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", @@ -16094,26 +11380,15 @@ "dev": true }, "yn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", - "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.0.tgz", + "integrity": "sha512-kKfnnYkbTfrAdd0xICNFw7Atm8nKpLcLv9AZGEt+kczL/WQVai4e2V6ZN8U/O+iI6WrNuJjNNOyu4zfhl9D3Hg==", "dev": true }, - "zip-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", - "requires": { - "archiver-utils": "1.3.0", - "compress-commons": "1.2.2", - "lodash": "4.17.11", - "readable-stream": "2.3.6" - } - }, "zone.js": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.18.tgz", - "integrity": "sha512-knKOBQM0oea3/x9pdyDuDi7RhxDlJhOIkeixXSiTKWLgs4LpK37iBc+1HaHwzlciHUKT172CymJFKo8Xgh+44Q==" + "version": "0.8.29", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.29.tgz", + "integrity": "sha512-mla2acNCMkWXBD+c+yeUrBUrzOxYMNFdQ6FGfigGGtEVBPJx07BQeJekjt9DmH1FtZek4E9rE1eRR9qQpxACOQ==" } } } diff --git a/package.json b/package.json index e027c89a..f9666ffb 100644 --- a/package.json +++ b/package.json @@ -1,205 +1,75 @@ { "name": "airgap-vault", + "description": "A secure crypto wallet", "version": "1.0.0", "author": "Papers.ch ", "homepage": "https://papers.ch/", "private": true, "main": "electron/main.js", "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "test": "ng test", + "test-ci": "ng test --code-coverage --watch=false", + "lint": "ng lint", + "lint-ci": "ng lint app --format json > ./lintReport.json || true", + "lint-fix": "tslint --fix --project tsconfig.json", + "e2e": "ng e2e", "sonar-scanner": "sonar-scanner", - "clean": "ionic-app-scripts clean", - "build": "ionic-app-scripts build", - "ionic:serve": "ionic-app-scripts serve", - "lint": "ionic-app-scripts lint", - "lint-ci": "tslint -t json -o lintReport.json --project . || true", - "setup": "npm install", - "test": "karma start ./test-config/karma.conf.js", - "test-ci": "karma start ./test-config/karma.conf.js --single-run --coverage", - "test-coverage": "karma start ./test-config/karma.conf.js --coverage", - "e2e": "npm run e2e-update && npm run e2e-test", - "e2e-test": "protractor ./test-config/protractor.conf.js", - "e2e-test-docker": "protractor ./test-config/protractor-docker.conf.js", - "e2e-test-ci": "protractor ./test-config/protractor-ci.conf.js", - "e2e-update": "webdriver-manager update --standalone false --gecko false", - "e2e-debug": "node --inspect-brk protractor ./test-config/protractor.conf.js", - "format": "prettier --write \"./**/*.ts\" \"./**/*.js\" \"./**/*.html\" \"./**/*.scss\" \"./**/*.json\"", + "format": "prettier --write \"src/**/*.ts\" \"src/**/*.js\" \"test/**/*.js\"", + "prepare-prod-build": "npm run disable-pure-getters && npm run configure-mangle", + "disable-pure-getters": "replace 'pure_getters: buildOptions.buildOptimizer' 'pure_getters: false' ./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/webpack-configs/common.js ", + "configure-mangle": "replace 'safari10: true' 'safari10: true, keep_fnames: true' ./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/webpack-configs/common.js ", "electron": "electron .", "electron:release": "electron-builder -l --publish=never" }, "dependencies": { - "@aeternity/hd-wallet": "github:dschoeni/hd-wallet-js#b216450e56954a6e82ace0aade9474673de5d9d5", - "@angular/common": "5.0.1", - "@angular/compiler": "5.0.1", - "@angular/compiler-cli": "5.0.1", - "@angular/core": "5.0.1", - "@angular/forms": "5.0.1", - "@angular/http": "5.0.1", - "@angular/platform-browser": "5.0.1", - "@angular/platform-browser-dynamic": "5.0.1", - "@download/blockies": "^1.0.3", - "@ionic-native/app-version": "^4.18.0", - "@ionic-native/camera-preview": "^4.5.2", - "@ionic-native/clipboard": "^4.17.0", - "@ionic-native/core": "^4.4.0", - "@ionic-native/deeplinks": "^4.7.0", - "@ionic-native/device-motion": "^4.4.0", - "@ionic-native/diagnostic": "^4.17.0", - "@ionic-native/gyroscope": "^4.5.2", - "@ionic-native/qr-scanner": "^4.5.2", - "@ionic-native/splash-screen": "4.4.0", - "@ionic-native/status-bar": "^4.4.0", - "@ionic/storage": "^2.1.3", - "@ngx-translate/core": "^8.0.0", - "@zxing/ngx-scanner": "^1.3.0", - "airgap-coin-lib": "0.4.4", - "angular2-template-loader": "^0.6.2", - "angular2-uuid": "^1.1.1", - "angularx-qrcode": "1.5.3", - "bignumber.js": "^8.0.0", - "bip39": "^2.4.0", - "com.lampa.startapp": "^6.1.6", - "cordova-android": "7.1.2", - "cordova-android-support-gradle-release": "^1.4.7", - "cordova-browser": "5.0.4", - "cordova-clipboard": "^1.2.1", - "cordova-ios": "5.0.0", - "cordova-plugin-add-swift-support": "^1.7.2", - "cordova-plugin-airgap-secure-storage": "0.1.7", - "cordova-plugin-airgap-webview": "git+https://github.com/airgap-it/cordova-plugin-airgap-webview.git", - "cordova-plugin-android-permissions": "^1.0.0", - "cordova-plugin-app-version": "0.1.9", - "cordova-plugin-audioinput": "^1.0.1", - "cordova-plugin-camera-preview": "git+https://github.com/cordova-plugin-camera-preview/cordova-plugin-camera-preview.git", - "cordova-plugin-compat": "^1.2.0", - "cordova-plugin-device": "^1.1.7", - "cordova-plugin-device-motion": "^2.0.1", - "cordova-plugin-gyroscope": "^0.1.4", - "cordova-plugin-ionic-keyboard": "^2.1.3", - "cordova-plugin-ios-camera-permissions": "^1.2.0", - "cordova-plugin-jailbreak-detection": "git+https://github.com/leecrossley/cordova-plugin-jailbreak-detection.git", - "cordova-plugin-qrscanner": "2.6.2", - "cordova-plugin-root-detection": "^0.1.1", - "cordova-plugin-splashscreen": "^4.1.0", - "cordova-plugin-statusbar": "^2.4.2", - "cordova-plugin-whitelist": "^1.3.3", - "cordova-sqlite-storage": "^2.5.1", - "cordova.plugins.diagnostic": "4.0.10", - "es6-promise-plugin": "^4.1.1", - "har-validator": "^5.1.3", - "html-loader": "^0.5.1", - "ionic": "3.9.1", - "ionic-angular": "3.9.2", - "ionic-plugin-deeplinks": "git+https://github.com/airgap-it/ionic-plugin-deeplinks.git#cordova-ios-v5.0.0-fix", - "ionic2-material-icons": "^1.0.3", - "ionicons": "3.0.0", - "js-sha3": "^0.7.0", - "myetherwallet-blockies": "0.1.1", - "rxjs": "5.5.2", - "secrets.js-grempe": "^1.1.0", - "sw-toolbox": "3.6.0", - "web3": "^1.0.0-beta.36", - "websocket": "^1.0.26", - "zone.js": "0.8.18" + "@angular/common": "^7.2.2", + "@angular/core": "^7.2.2", + "@angular/forms": "^7.2.2", + "@angular/http": "^7.2.2", + "@angular/platform-browser": "^7.2.2", + "@angular/platform-browser-dynamic": "^7.2.2", + "@angular/router": "^7.2.2", + "@ionic-native/core": "^5.0.0", + "@ionic-native/splash-screen": "^5.0.0", + "@ionic-native/status-bar": "^5.0.0", + "@ionic/angular": "^4.1.0", + "cordova-ios": "5.0.1", + "core-js": "^2.5.4", + "rxjs": "~6.5.1", + "tslib": "^1.9.0", + "zone.js": "~0.8.29" }, "devDependencies": { - "@ionic/app-scripts": "^3.2.0", - "@types/jasmine": "2.8.9", - "@types/node": "^9.4.6", - "cz-conventional-changelog": "^2.1.0", - "electron": "^3.0.10", - "electron-builder": "^20.36.2", - "ionic-mocks": "^1.3.0", - "istanbul-instrumenter-loader": "^3.0.0", - "jasmine": "^2.99.0", - "jasmine-spec-reporter": "^4.2.1", - "karma": "^1.7.1", - "karma-chrome-launcher": "^2.2.0", - "karma-coverage-istanbul-reporter": "^1.3.0", - "karma-jasmine": "^1.1.0", - "karma-sourcemap-loader": "^0.3.7", - "karma-spec-reporter": "0.0.31", - "karma-webpack": "^2.0.4", - "node-pre-gyp": "^0.12.0", - "null-loader": "^0.1.1", - "prettier": "^1.16.4", - "pretty-quick": "^1.8.0", - "protractor": "^5.1.2", - "protractor-jasmine2-screenshot-reporter": "^0.5.0", - "puppeteer": "^1.3.0", - "sonarqube-scanner": "^2.1.0", - "ts-loader": "^2.3.7", - "ts-node": "^3.3.0", - "tslint": "^5.11.0", - "tslint-config-prettier": "^1.16.0", - "tslint-config-standard": "github:papers-ch/tslint-config-standard", - "typescript": "2.4.2", - "typestrict": "^1.0.1", - "xcode": "^0.9.3" - }, - "description": "An Ionic boilerplate", - "cordova": { - "platforms": [ - "android", - "ios" - ], - "plugins": { - "cordova-plugin-whitelist": {}, - "cordova-plugin-device": {}, - "cordova-plugin-splashscreen": {}, - "cordova-plugin-audioinput": {}, - "cordova-plugin-gyroscope": {}, - "cordova-plugin-ios-camera-permissions": { - "CAMERA_USAGE_DESCRIPTION": "AirGap uses your camera to scan QR Codes of transactions, and to generate entropy for the secure key generation.", - "MICROPHONE_USAGE_DESCRIPTION": "AirGap uses your microphone to generate entropy for the secure key generation.", - "PHOTOLIBRARY_ADD_USAGE_DESCRIPTION": "This app needs write-access to photo library", - "PHOTOLIBRARY_USAGE_DESCRIPTION": "This app needs read/write-access photo library access" - }, - "cordova-plugin-root-detection": {}, - "cordova-plugin-qrscanner": {}, - "cordova-android-support-gradle-release": { - "ANDROID_SUPPORT_VERSION": "26.1.0" - }, - "cordova-plugin-camera-preview": { - "ANDROID_SUPPORT_LIBRARY_VERSION": "26.1.0" - }, - "cordova-plugin-statusbar": {}, - "ionic-plugin-deeplinks": { - "URL_SCHEME": "airgap-vault", - "DEEPLINK_HOST": "vault.airgap.it", - "DEEPLINK_SCHEME": "https", - "ANDROID_PATH_PREFIX": "/", - "ANDROID_2_PATH_PREFIX": "/", - "ANDROID_3_PATH_PREFIX": "/", - "ANDROID_4_PATH_PREFIX": "/", - "ANDROID_5_PATH_PREFIX": "/", - "DEEPLINK_2_SCHEME": " ", - "DEEPLINK_2_HOST": " ", - "DEEPLINK_3_SCHEME": " ", - "DEEPLINK_3_HOST": " ", - "DEEPLINK_4_SCHEME": " ", - "DEEPLINK_4_HOST": " ", - "DEEPLINK_5_SCHEME": " ", - "DEEPLINK_5_HOST": " " - }, - "cordova-sqlite-storage": {}, - "cordova-plugin-device-motion": {}, - "cordova-plugin-airgap-secure-storage": {}, - "com.lampa.startapp": {}, - "cordova-plugin-jailbreak-detection": {}, - "cordova-plugin-add-swift-support": {}, - "cordova-plugin-ionic-keyboard": {}, - "cordova-plugin-airgap-webview": {}, - "cordova-clipboard": {}, - "cordova.plugins.diagnostic": {}, - "cordova-plugin-app-version": {} - } - }, - "config": { - "commitizen": { - "path": "./node_modules/cz-conventional-changelog" - }, - "ionic_copy": "./copy.config.js", - "ionic_uglifyjs": "./uglifyjs.config.js" + "@angular-devkit/architect": "~0.13.8", + "@angular-devkit/build-angular": "~0.13.8", + "@angular-devkit/core": "~7.3.8", + "@angular-devkit/schematics": "~7.3.8", + "@angular/cli": "~7.3.8", + "@angular/compiler": "~7.2.2", + "@angular/compiler-cli": "~7.2.2", + "@angular/language-service": "~7.2.2", + "@ionic/angular-toolkit": "~1.5.1", + "@types/jasmine": "~2.8.8", + "@types/jasminewd2": "~2.0.3", + "@types/node": "~12.0.0", + "codelyzer": "~4.5.0", + "husky": "^2.3.0", + "jasmine-core": "~2.99.1", + "jasmine-spec-reporter": "~4.2.1", + "karma": "~4.1.0", + "karma-chrome-launcher": "~2.2.0", + "karma-coverage-istanbul-reporter": "~2.0.1", + "karma-jasmine": "~1.1.2", + "karma-jasmine-html-reporter": "^0.2.2", + "prettier": "^1.17.1", + "pretty-quick": "^1.11.0", + "protractor": "~5.4.0", + "ts-node": "~8.1.0", + "tslint": "~5.17.0", + "typescript": "~3.1.6" }, "husky": { "hooks": { diff --git a/resources/android/xml/network_security_config.xml b/resources/android/xml/network_security_config.xml new file mode 100644 index 00000000..9b8e50d4 --- /dev/null +++ b/resources/android/xml/network_security_config.xml @@ -0,0 +1,6 @@ + + + + localhost + + \ No newline at end of file diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts new file mode 100644 index 00000000..4afe75e9 --- /dev/null +++ b/src/app/app-routing.module.ts @@ -0,0 +1,9 @@ +import { NgModule } from '@angular/core' +import { PreloadAllModules, RouterModule, Routes } from '@angular/router' + +const routes: Routes = [{ path: '', loadChildren: './tabs/tabs.module#TabsPageModule' }] +@NgModule({ + imports: [RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })], + exports: [RouterModule] +}) +export class AppRoutingModule {} diff --git a/src/app/app.component.html b/src/app/app.component.html new file mode 100644 index 00000000..13b96776 --- /dev/null +++ b/src/app/app.component.html @@ -0,0 +1,3 @@ + + + diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts new file mode 100644 index 00000000..a411a0e7 --- /dev/null +++ b/src/app/app.component.spec.ts @@ -0,0 +1,45 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { TestBed, async } from '@angular/core/testing' + +import { Platform } from '@ionic/angular' +import { SplashScreen } from '@ionic-native/splash-screen/ngx' +import { StatusBar } from '@ionic-native/status-bar/ngx' + +import { AppComponent } from './app.component' + +describe('AppComponent', () => { + let statusBarSpy, splashScreenSpy, platformReadySpy, platformSpy + + beforeEach(async(() => { + statusBarSpy = jasmine.createSpyObj('StatusBar', ['styleDefault']) + splashScreenSpy = jasmine.createSpyObj('SplashScreen', ['hide']) + platformReadySpy = Promise.resolve() + platformSpy = jasmine.createSpyObj('Platform', { ready: platformReadySpy }) + + TestBed.configureTestingModule({ + declarations: [AppComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + providers: [ + { provide: StatusBar, useValue: statusBarSpy }, + { provide: SplashScreen, useValue: splashScreenSpy }, + { provide: Platform, useValue: platformSpy } + ] + }).compileComponents() + })) + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent) + const app = fixture.debugElement.componentInstance + expect(app).toBeTruthy() + }) + + it('should initialize the app', async () => { + TestBed.createComponent(AppComponent) + expect(platformSpy.ready).toHaveBeenCalled() + await platformReadySpy + expect(statusBarSpy.styleDefault).toHaveBeenCalled() + expect(splashScreenSpy.hide).toHaveBeenCalled() + }) + + // TODO: add more tests! +}) diff --git a/src/app/app.component.ts b/src/app/app.component.ts index c42d1622..83545d36 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,166 +1,22 @@ -import { Component, ViewChild, NgZone } from '@angular/core' -import { Platform, Nav } from 'ionic-angular' -import { StatusBar } from '@ionic-native/status-bar' -import { SplashScreen } from '@ionic-native/splash-screen' -import { TabsPage } from '../pages/tabs/tabs' -import { Deeplinks } from '@ionic-native/deeplinks' -import { StartupChecksProvider } from '../providers/startup-checks/startup-checks.provider' -import { SchemeRoutingProvider } from '../providers/scheme-routing/scheme-routing' -import { TranslateService } from '@ngx-translate/core' -import { ProtocolsProvider } from '../providers/protocols/protocols' -import { SecretsProvider } from '../providers/secrets/secrets.provider' -import { handleErrorLocal, ErrorCategory } from '../providers/error-handler/error-handler' -import { WalletSelectCoinsPage } from '../pages/wallet-select-coins/wallet-select-coins' -import { SecretCreatePage } from '../pages/secret-create/secret-create' +import { Component } from '@angular/core' -const DEEPLINK_VAULT_PREFIX = `airgap-vault://` -const DEEPLINK_VAULT_ADD_ACCOUNT = `${DEEPLINK_VAULT_PREFIX}add-account/` - -interface ExposedPromise { - promise: Promise - resolve: (value?: any | PromiseLike) => void - reject: (reason?: any) => void -} - -function exposedPromise(): ExposedPromise { - let resolve, reject - - // tslint:disable-next-line:promise-must-complete - const promise = new Promise((res, rej) => { - resolve = res - reject = rej - }) - - return { promise, resolve, reject } -} +import { Platform } from '@ionic/angular' +import { SplashScreen } from '@ionic-native/splash-screen/ngx' +import { StatusBar } from '@ionic-native/status-bar/ngx' @Component({ - templateUrl: 'app.html' + selector: 'app-root', + templateUrl: 'app.component.html' }) -export class MyApp { - @ViewChild(Nav) nav: Nav - - rootPage: any = null - - // Sometimes the deeplink was registered before the root page was set - // This resulted in the root page "overwriting" the deep-linked page - isInitialized: ExposedPromise = exposedPromise() - - constructor( - private platform: Platform, - private statusBar: StatusBar, - private splashScreen: SplashScreen, - private deepLinks: Deeplinks, - private startupChecks: StartupChecksProvider, - private schemeRoutingProvider: SchemeRoutingProvider, - private translate: TranslateService, - private protocolsProvider: ProtocolsProvider, - private secretsProvider: SecretsProvider, - private ngZone: NgZone - ) { - window['airGapHasStarted'] = true - this.initializeApp().catch(handleErrorLocal(ErrorCategory.OTHER)) +export class AppComponent { + constructor(private platform: Platform, private splashScreen: SplashScreen, private statusBar: StatusBar) { + this.initializeApp() } - async initializeApp() { - const supportedLanguages = ['en', 'de', 'zh-cn'] - for (const lang of supportedLanguages) { - // We bundle languages so we don't have to load it over http - // and we don't have to add a CSP / whitelist rule for it. - this.translate.setTranslation(lang, require(`../assets/i18n/${lang}.json`)) - // TODO: Once we add more languages, we probably should not all languages by default - // (we have to check if we can optimize that) - } - - this.loadLanguages(supportedLanguages) - this.protocolsProvider.addProtocols() - - await this.platform.ready() - - if (this.platform.is('cordova')) { - this.statusBar.styleLightContent() - this.statusBar.backgroundColorByHexString('#311B58') + initializeApp() { + this.platform.ready().then(() => { + this.statusBar.styleDefault() this.splashScreen.hide() - } - - this.initChecks() - } - - loadLanguages(supportedLanguages: string[]) { - this.translate.setDefaultLang('en') - - const language = this.translate.getBrowserLang() - - if (language) { - const lowerCaseLanguage = language.toLowerCase() - supportedLanguages.forEach(supportedLanguage => { - if (supportedLanguage.startsWith(lowerCaseLanguage)) { - this.translate.use(supportedLanguage) - } - }) - } - } - - initChecks() { - this.startupChecks - .initChecks() - .then(async () => { - await this.nav.setRoot(TabsPage) - this.isInitialized.resolve() - }) - .catch(async check => { - check.consequence(this.initChecks.bind(this)) - this.isInitialized.reject(`startup check failed ${check.name}`) // If we are here, we cannot sign a transaction (no secret, rooted, etc) - }) - } - - async ngAfterViewInit() { - await this.platform.ready() - if (this.platform.is('cordova')) { - this.deepLinks - .route({ - '/': undefined - }) - .subscribe( - match => { - // match.$route - the route we matched, which is the matched entry from the arguments to route() - // match.$args - the args passed in the link - // match.$link - the full link data - if (match && match.$link && match.$link.url) { - this.isInitialized.promise - .then(async () => { - console.log('Successfully matched route', match.$link.url) - - if (match.$link.url === DEEPLINK_VAULT_PREFIX || match.$link.url.startsWith(DEEPLINK_VAULT_ADD_ACCOUNT)) { - if (this.secretsProvider.currentSecretsList.getValue().length > 0) { - this.ngZone.run(async () => { - await this.nav.popToRoot() - const protocol = match.$link.url.substr(DEEPLINK_VAULT_ADD_ACCOUNT.length) - if (protocol.length > 0) { - this.nav - .push(WalletSelectCoinsPage, { - protocol: protocol - }) - .catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } else { - this.nav.push(WalletSelectCoinsPage).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - }) - } - } else { - this.schemeRoutingProvider.handleNewSyncRequest(this.nav, match.$link.url).catch(console.error) - } - }) - .catch(console.error) - } - }, - nomatch => { - // nomatch.$link - the full link data - if (nomatch && nomatch.$link && nomatch.$link.url) { - console.error("Got a deeplink that didn't match", nomatch.$link.url) - } - } - ) - } + }) } } diff --git a/src/app/app.html b/src/app/app.html deleted file mode 100644 index 7b88c969..00000000 --- a/src/app/app.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/app/app.module.ts b/src/app/app.module.ts index bf7ce5f5..0bc6c264 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,104 +1,19 @@ +import { NgModule } from '@angular/core' import { BrowserModule } from '@angular/platform-browser' -import { NgModule, RendererFactory2, NgZone } from '@angular/core' -import { IonicApp, IonicModule, Platform } from 'ionic-angular' -import { SplashScreen } from '@ionic-native/splash-screen' -import { StatusBar } from '@ionic-native/status-bar' -import { Deeplinks } from '@ionic-native/deeplinks' -import { HttpClient, HttpClientModule } from '@angular/common/http' -import { TranslateModule } from '@ngx-translate/core' -import { MyApp } from './app.component' -import { CameraPreview } from '@ionic-native/camera-preview' -import { Clipboard } from '@ionic-native/clipboard' -import { Diagnostic } from '@ionic-native/diagnostic' -import { AppVersion } from '@ionic-native/app-version' -import { MaterialIconsModule } from 'ionic2-material-icons' -import { SecretsProvider } from '../providers/secrets/secrets.provider' -import { SecureStorageService } from '../providers/storage/secure-storage' -import { SecureStorageFactory } from '../providers/storage/secure-storage.factory' -import { DeviceProvider } from '../providers/device/device' -import { CameraNativeService } from '../providers/camera/camera.native.service' -import { CameraFactory } from '../providers/camera/camera.factory' -import { AudioNativeService } from '../providers/audio/audio.native.service' -import { AudioServiceFactory } from '../providers/audio/audio.factory' -import { EntropyService } from '../providers/entropy/entropy.service' -import { GyroscopeNativeService } from '../providers/gyroscope/gyroscope.native.service' -import { GyroscopeServiceFactory } from '../providers/gyroscope/gyroscope.factory' -import { ComponentsModule } from '../components/components.module' -import { PagesModule } from '../pages/pages.module' -import { ScannerProvider } from '../providers/scanner/scanner' -import { IonicStorageModule } from '@ionic/storage' -import { DeviceMotion } from '@ionic-native/device-motion' -import { StartupChecksProvider } from '../providers/startup-checks/startup-checks.provider' -import { SchemeRoutingProvider } from '../providers/scheme-routing/scheme-routing' -import { ClipboardProvider } from '../providers/clipboard/clipboard' -import { PermissionsProvider } from '../providers/permissions/permissions' -import { ShareUrlProvider } from '../providers/share-url/share-url' -import { ErrorHandlerProvider } from '../providers/error-handler/error-handler' -import { InteractionProvider } from '../providers/interaction/interaction' -import { DeepLinkProvider } from '../providers/deep-link/deep-link' -import { ProtocolsProvider } from '../providers/protocols/protocols' +import { RouteReuseStrategy } from '@angular/router' + +import { IonicModule, IonicRouteStrategy } from '@ionic/angular' +import { SplashScreen } from '@ionic-native/splash-screen/ngx' +import { StatusBar } from '@ionic-native/status-bar/ngx' + +import { AppRoutingModule } from './app-routing.module' +import { AppComponent } from './app.component' @NgModule({ - declarations: [MyApp], - imports: [ - BrowserModule, - MaterialIconsModule, - HttpClientModule, - TranslateModule.forRoot(), - IonicModule.forRoot(MyApp, { - tabsHideOnSubPages: true - }), - ComponentsModule, - PagesModule, - IonicStorageModule.forRoot({ - name: '__airgap_storage', - driverOrder: ['sqlite', 'localstorage'] - }) - ], - bootstrap: [IonicApp], - entryComponents: [MyApp], - providers: [ - StatusBar, - SplashScreen, - AppVersion, - CameraPreview, - Deeplinks, - DeviceMotion, - Diagnostic, - SecretsProvider, - EntropyService, - StartupChecksProvider, - ScannerProvider, - Clipboard, - { - provide: SecureStorageService, - useFactory: SecureStorageFactory, - deps: [Platform] - }, - { - provide: CameraNativeService, - useFactory: CameraFactory, - deps: [Platform, CameraPreview, RendererFactory2, PermissionsProvider] - }, - { - provide: AudioNativeService, - useFactory: AudioServiceFactory, - deps: [Platform, PermissionsProvider] - }, - { - provide: GyroscopeNativeService, - useFactory: GyroscopeServiceFactory, - deps: [Platform, DeviceMotion] - }, - ClipboardProvider, - DeviceProvider, - SchemeRoutingProvider, - PermissionsProvider, - InteractionProvider, - ShareUrlProvider, - ErrorHandlerProvider, - DeepLinkProvider, - ProtocolsProvider - ] + declarations: [AppComponent], + entryComponents: [], + imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule], + providers: [StatusBar, SplashScreen, { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }], + bootstrap: [AppComponent] }) export class AppModule {} diff --git a/src/app/app.scss b/src/app/app.scss index e186ae9b..499aacdb 100644 --- a/src/app/app.scss +++ b/src/app/app.scss @@ -1,186 +1,6 @@ -// http://ionicframework.com/docs/theming/ - -// App Global Sass -// -------------------------------------------------- -// Put style rules here that you want to apply globally. These -// styles are for the entire app and not just one component. -// Additionally, this file can be also used as an entry point -// to import other Sass files to be included in the output CSS. -// -// Shared Sass variables, which can be used to adjust Ionic's -// default Sass variables, belong in "theme/variables.scss". -// -// To declare rules for a specific mode, create a child rule -// for the .md, .ios, or .wp mode classes. The mode class is -// automatically applied to the element in the app. - -.style__strong { - font-weight: bold; -} - -.color__primary { - color: color($colors, primary); -} - -.colored-background { - color: color($colors, white); - background: color($colors, secondary); - - p, - h1, - h2, - h3, - .select-text { - color: color($colors, white); - } -} - -.background--color__gradient { - background: linear-gradient(#6f53a1, color($colors, secondary, base)); -} - -.item { - background-color: transparent; -} - -/* List styling */ -ul { - list-style: none; - li:before { - content: '\00AC'; - padding-right: 4px; - } -} - -/* Secret typography styling */ -.secret--typography { - line-height: 32px; - font-size: 16px; - text-transform: lowercase; - font-family: 'Courier New', Courier, 'Lucida Sans Typewriter', 'Lucida Typewriter', monospace; - font-style: normal; - font-weight: 600; -} - -/* small button for secrets with less padding */ -verify-key { - .button-round-md, - .button-round-ios { - padding: 0 1.5rem; - } -} - -/* font weight - medium */ -.font--weight__med { - font-weight: 500; -} - -.typography--mono { - font-family: 'Courier New', Courier, 'Lucida Sans Typewriter', 'Lucida Typewriter', monospace; - font-weight: 600; - font-size: 1.4rem; - word-wrap: break-word; -} - -ion-input, -ion-textarea { - color: white; - - textarea { - border: 1px solid color($colors, secondary); - padding: 10px; - } -} - -.button--rounded { - width: 32px; - height: 32px; -} - -.transparent-bg { - background-color: transparent !important; - - .ion-app, - ion-content, - ion-app.md, - ion-app.ios, - ion-app, - .colored-background { - background-color: transparent !important; - color: white; - } -} - -// back btn -ion-icon, -.toolbar-title { - color: white; -} - -.fab-action { - position: absolute; - bottom: 64px; - z-index: 10; - right: 12px; -} - -qr-clipboard { - padding: 20px; - background-color: white; -} - -/** Alert Dialogs **/ -.alert-title { - color: color($colors, dark); -} - -.alert-message { - color: color($colors, dark); -} - -/** Empty **/ -.empty-list { - ion-icon { - font-size: 8rem; - } - - img { - height: 40vh; - } - - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; - text-align: center; - font-weight: 100; - font-size: 1.4rem; - height: 100%; -} - -.hide-tabbar { - .show-tabbar { - opacity: 0; - } -} - -html, -body, -ion-app, -div.nav-decor, -.ion-content, -.app-root { - background-color: transparent !important; -} - -.nav-decor, -ion-app { - background-color: transparent !important; -} - -/* Center content vertically and horizontally */ -.content--align__center-center { - justify-content: center; - align-items: center; - display: flex; -} +// App Styles +// ---------------------------------------------------------------------------- +// Put style rules here that you want to apply to the entire application. These +// styles are for the entire app and not just one component. Additionally, this +// file can hold Sass mixins, functions, and placeholder classes to be imported +// and used throughout the application. diff --git a/src/app/main.ts b/src/app/main.ts deleted file mode 100644 index c9b13fdf..00000000 --- a/src/app/main.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic' - -import { AppModule } from './app.module' - -platformBrowserDynamic().bootstrapModule(AppModule) diff --git a/src/app/tab1/tab1.module.ts b/src/app/tab1/tab1.module.ts new file mode 100644 index 00000000..c73d54ed --- /dev/null +++ b/src/app/tab1/tab1.module.ts @@ -0,0 +1,12 @@ +import { IonicModule } from '@ionic/angular' +import { RouterModule } from '@angular/router' +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { FormsModule } from '@angular/forms' +import { Tab1Page } from './tab1.page' + +@NgModule({ + imports: [IonicModule, CommonModule, FormsModule, RouterModule.forChild([{ path: '', component: Tab1Page }])], + declarations: [Tab1Page] +}) +export class Tab1PageModule {} diff --git a/src/app/tab1/tab1.page.html b/src/app/tab1/tab1.page.html new file mode 100644 index 00000000..2f354583 --- /dev/null +++ b/src/app/tab1/tab1.page.html @@ -0,0 +1,44 @@ + + + + Tab One + + + + + + + + + Get Started + Welcome to Ionic + + +

+ Now that your app has been created, you'll want to start building out features and components. Check out some of the resources below + for next steps. +

+
+
+ + + Resources + + + + Ionic Documentation + + + + Scaffold Out Your App + + + + Change Your App Layout + + + + Theme Your App + + +
diff --git a/src/app/tab1/tab1.page.scss b/src/app/tab1/tab1.page.scss new file mode 100644 index 00000000..4d55a8e7 --- /dev/null +++ b/src/app/tab1/tab1.page.scss @@ -0,0 +1,4 @@ +.welcome-card ion-img { + max-height: 35vh; + overflow: hidden; +} diff --git a/src/app/tab1/tab1.page.spec.ts b/src/app/tab1/tab1.page.spec.ts new file mode 100644 index 00000000..d1c84dba --- /dev/null +++ b/src/app/tab1/tab1.page.spec.ts @@ -0,0 +1,26 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { async, ComponentFixture, TestBed } from '@angular/core/testing' + +import { Tab1Page } from './tab1.page' + +describe('Tab1Page', () => { + let component: Tab1Page + let fixture: ComponentFixture + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [Tab1Page], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }).compileComponents() + })) + + beforeEach(() => { + fixture = TestBed.createComponent(Tab1Page) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/tab1/tab1.page.ts b/src/app/tab1/tab1.page.ts new file mode 100644 index 00000000..a1a78a51 --- /dev/null +++ b/src/app/tab1/tab1.page.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core' + +@Component({ + selector: 'app-tab1', + templateUrl: 'tab1.page.html', + styleUrls: ['tab1.page.scss'] +}) +export class Tab1Page { + constructor() {} +} diff --git a/src/app/tab2/tab2.module.ts b/src/app/tab2/tab2.module.ts new file mode 100644 index 00000000..c8c465fc --- /dev/null +++ b/src/app/tab2/tab2.module.ts @@ -0,0 +1,12 @@ +import { IonicModule } from '@ionic/angular' +import { RouterModule } from '@angular/router' +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { FormsModule } from '@angular/forms' +import { Tab2Page } from './tab2.page' + +@NgModule({ + imports: [IonicModule, CommonModule, FormsModule, RouterModule.forChild([{ path: '', component: Tab2Page }])], + declarations: [Tab2Page] +}) +export class Tab2PageModule {} diff --git a/src/app/tab2/tab2.page.html b/src/app/tab2/tab2.page.html new file mode 100644 index 00000000..0eb888a0 --- /dev/null +++ b/src/app/tab2/tab2.page.html @@ -0,0 +1,9 @@ + + + + Tab Two + + + + + diff --git a/src/pages/wallet-share/wallet-share.scss b/src/app/tab2/tab2.page.scss similarity index 100% rename from src/pages/wallet-share/wallet-share.scss rename to src/app/tab2/tab2.page.scss diff --git a/src/app/tab2/tab2.page.spec.ts b/src/app/tab2/tab2.page.spec.ts new file mode 100644 index 00000000..878ca591 --- /dev/null +++ b/src/app/tab2/tab2.page.spec.ts @@ -0,0 +1,26 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { async, ComponentFixture, TestBed } from '@angular/core/testing' + +import { Tab2Page } from './tab2.page' + +describe('Tab2Page', () => { + let component: Tab2Page + let fixture: ComponentFixture + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [Tab2Page], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }).compileComponents() + })) + + beforeEach(() => { + fixture = TestBed.createComponent(Tab2Page) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/tab2/tab2.page.ts b/src/app/tab2/tab2.page.ts new file mode 100644 index 00000000..5284f062 --- /dev/null +++ b/src/app/tab2/tab2.page.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core' + +@Component({ + selector: 'app-tab2', + templateUrl: 'tab2.page.html', + styleUrls: ['tab2.page.scss'] +}) +export class Tab2Page { + constructor() {} +} diff --git a/src/app/tab3/tab3.module.ts b/src/app/tab3/tab3.module.ts new file mode 100644 index 00000000..71858613 --- /dev/null +++ b/src/app/tab3/tab3.module.ts @@ -0,0 +1,12 @@ +import { IonicModule } from '@ionic/angular' +import { RouterModule } from '@angular/router' +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { FormsModule } from '@angular/forms' +import { Tab3Page } from './tab3.page' + +@NgModule({ + imports: [IonicModule, CommonModule, FormsModule, RouterModule.forChild([{ path: '', component: Tab3Page }])], + declarations: [Tab3Page] +}) +export class Tab3PageModule {} diff --git a/src/app/tab3/tab3.page.html b/src/app/tab3/tab3.page.html new file mode 100644 index 00000000..f4af0b6b --- /dev/null +++ b/src/app/tab3/tab3.page.html @@ -0,0 +1,9 @@ + + + + Tab Three + + + + + diff --git a/src/app/tab3/tab3.page.scss b/src/app/tab3/tab3.page.scss new file mode 100644 index 00000000..e69de29b diff --git a/src/app/tab3/tab3.page.spec.ts b/src/app/tab3/tab3.page.spec.ts new file mode 100644 index 00000000..bf77a4da --- /dev/null +++ b/src/app/tab3/tab3.page.spec.ts @@ -0,0 +1,26 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { async, ComponentFixture, TestBed } from '@angular/core/testing' + +import { Tab3Page } from './tab3.page' + +describe('Tab3Page', () => { + let component: Tab3Page + let fixture: ComponentFixture + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [Tab3Page], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }).compileComponents() + })) + + beforeEach(() => { + fixture = TestBed.createComponent(Tab3Page) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/tab3/tab3.page.ts b/src/app/tab3/tab3.page.ts new file mode 100644 index 00000000..642c5b62 --- /dev/null +++ b/src/app/tab3/tab3.page.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core' + +@Component({ + selector: 'app-tab3', + templateUrl: 'tab3.page.html', + styleUrls: ['tab3.page.scss'] +}) +export class Tab3Page { + constructor() {} +} diff --git a/src/app/tabs/tabs.module.ts b/src/app/tabs/tabs.module.ts new file mode 100644 index 00000000..07c38fea --- /dev/null +++ b/src/app/tabs/tabs.module.ts @@ -0,0 +1,14 @@ +import { IonicModule } from '@ionic/angular' +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { FormsModule } from '@angular/forms' + +import { TabsPageRoutingModule } from './tabs.router.module' + +import { TabsPage } from './tabs.page' + +@NgModule({ + imports: [IonicModule, CommonModule, FormsModule, TabsPageRoutingModule], + declarations: [TabsPage] +}) +export class TabsPageModule {} diff --git a/src/app/tabs/tabs.page.html b/src/app/tabs/tabs.page.html new file mode 100644 index 00000000..8be3a1c1 --- /dev/null +++ b/src/app/tabs/tabs.page.html @@ -0,0 +1,18 @@ + + + + + Tab One + + + + + Tab Two + + + + + Tab Three + + + diff --git a/src/app/tabs/tabs.page.scss b/src/app/tabs/tabs.page.scss new file mode 100644 index 00000000..e69de29b diff --git a/src/app/tabs/tabs.page.spec.ts b/src/app/tabs/tabs.page.spec.ts new file mode 100644 index 00000000..e43a119d --- /dev/null +++ b/src/app/tabs/tabs.page.spec.ts @@ -0,0 +1,26 @@ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { async, ComponentFixture, TestBed } from '@angular/core/testing' + +import { TabsPage } from './tabs.page' + +describe('TabsPage', () => { + let component: TabsPage + let fixture: ComponentFixture + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [TabsPage], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }).compileComponents() + })) + + beforeEach(() => { + fixture = TestBed.createComponent(TabsPage) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/tabs/tabs.page.ts b/src/app/tabs/tabs.page.ts new file mode 100644 index 00000000..f055d0af --- /dev/null +++ b/src/app/tabs/tabs.page.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core' + +@Component({ + selector: 'app-tabs', + templateUrl: 'tabs.page.html', + styleUrls: ['tabs.page.scss'] +}) +export class TabsPage { + constructor() {} +} diff --git a/src/app/tabs/tabs.router.module.ts b/src/app/tabs/tabs.router.module.ts new file mode 100644 index 00000000..1626b145 --- /dev/null +++ b/src/app/tabs/tabs.router.module.ts @@ -0,0 +1,55 @@ +import { NgModule } from '@angular/core' +import { RouterModule, Routes } from '@angular/router' +import { TabsPage } from './tabs.page' + +const routes: Routes = [ + { + path: 'tabs', + component: TabsPage, + children: [ + { + path: 'tab1', + children: [ + { + path: '', + loadChildren: '../tab1/tab1.module#Tab1PageModule' + } + ] + }, + { + path: 'tab2', + children: [ + { + path: '', + loadChildren: '../tab2/tab2.module#Tab2PageModule' + } + ] + }, + { + path: 'tab3', + children: [ + { + path: '', + loadChildren: '../tab3/tab3.module#Tab3PageModule' + } + ] + }, + { + path: '', + redirectTo: '/tabs/tab1', + pathMatch: 'full' + } + ] + }, + { + path: '', + redirectTo: '/tabs/tab1', + pathMatch: 'full' + } +] + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class TabsPageRoutingModule {} diff --git a/src/assets/icon/favicon.ico b/src/assets/icon/favicon.ico deleted file mode 100644 index d76fa29d..00000000 Binary files a/src/assets/icon/favicon.ico and /dev/null differ diff --git a/src/assets/icon/favicon.png b/src/assets/icon/favicon.png new file mode 100644 index 00000000..51888a7b Binary files /dev/null and b/src/assets/icon/favicon.png differ diff --git a/src/components/about-popover/about-popover.component.ts b/src/components/about-popover/about-popover.component.ts deleted file mode 100644 index 860afa37..00000000 --- a/src/components/about-popover/about-popover.component.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Component } from '@angular/core' -import { AppVersion } from '@ionic-native/app-version' - -@Component({ - template: ` - - {{ 'about-popover.label' | translate }} - {{ 'about-popover.version' | translate }} {{ versionNumber }} - {{ 'about-popover.code' | translate }} {{ versionCode }} - - ` -}) -export class AboutPopoverComponent { - public versionCode: string - public versionNumber: string - - constructor(private appVersion: AppVersion) {} - - async ngOnInit() { - this.versionNumber = await this.appVersion.getVersionNumber() - this.versionCode = `${await this.appVersion.getVersionCode()}` - } -} diff --git a/src/components/address-row/address-row.html b/src/components/address-row/address-row.html deleted file mode 100644 index 761ff9c7..00000000 --- a/src/components/address-row/address-row.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - {{label}} -
{{address}}
-
-
diff --git a/src/components/address-row/address-row.scss b/src/components/address-row/address-row.scss deleted file mode 100644 index 31714bae..00000000 --- a/src/components/address-row/address-row.scss +++ /dev/null @@ -1,10 +0,0 @@ -address-row { - ion-avatar { - width: 48px; - height: 48px; - img { - width: 48px; - height: 48px; - } - } -} diff --git a/src/components/address-row/address-row.ts b/src/components/address-row/address-row.ts deleted file mode 100644 index 55503f03..00000000 --- a/src/components/address-row/address-row.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Component, Input } from '@angular/core' - -@Component({ - selector: 'address-row', - templateUrl: 'address-row.html' -}) -export class AddressRowComponent { - @Input() - label: string - - @Input() - address: string -} diff --git a/src/components/components.module.ts b/src/components/components.module.ts deleted file mode 100644 index 4fd53891..00000000 --- a/src/components/components.module.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { AboutPopoverComponent } from './about-popover/about-popover.component' -import { NgModule } from '@angular/core' -import { EntropyProgressComponent } from './entropy-progress/entropy-progress' -import { TouchEntropyComponent } from './touch-entropy/touch-entropy' -import { VerifyKeyComponent } from './verify-key/verify-key' -import { HexagonIconComponent } from './hexagon-icon/hexagon-icon' -import { IdenticonComponent } from './identicon/identicon' -import { AddressRowComponent } from './address-row/address-row' -import { FromToComponent } from './from-to/from-to' -import { CurrentSecretComponent } from './current-secret/current-secret' -import { IonTextAvatar } from './ion-text-avatar/ion-text-avatar' -import { IonicModule } from 'ionic-angular' -import { BrowserModule } from '@angular/platform-browser' -import { MaterialIconsModule } from 'ionic2-material-icons' -import { TraceInputDirective } from './trace-input/trace-input.directive' -import { ProgressFooterComponent } from './progress-footer/progress-footer' -import { WalletItemComponent } from './wallet-item/wallet-item' -import { FeeConverterPipe } from './pipes/fee-converter/fee-converter.pipe' -import { AmountConverterPipe } from './pipes/amount-converter/amount-converter.pipe' -import { TranslateModule } from '@ngx-translate/core' -import { SecretItemComponent } from './secret-item/secret-item' -import { SignedTransactionComponent } from './signed-transaction/signed-transaction' -import { QrClipboardComponent } from './qr-clipboard/qr-clipboard' -import { QRCodeModule } from 'angularx-qrcode' -import { CurrencySymbolComponent } from './currency-symbol/currency-symbol' - -@NgModule({ - declarations: [ - EntropyProgressComponent, - TouchEntropyComponent, - VerifyKeyComponent, - HexagonIconComponent, - IdenticonComponent, - AddressRowComponent, - FromToComponent, - WalletItemComponent, - CurrentSecretComponent, - ProgressFooterComponent, - IonTextAvatar, - TraceInputDirective, - FeeConverterPipe, - AmountConverterPipe, - SecretItemComponent, - AboutPopoverComponent, - SignedTransactionComponent, - QrClipboardComponent, - CurrencySymbolComponent, - ], - imports: [IonicModule, BrowserModule, TranslateModule, MaterialIconsModule, QRCodeModule], - exports: [ - EntropyProgressComponent, - TouchEntropyComponent, - VerifyKeyComponent, - HexagonIconComponent, - IdenticonComponent, - AddressRowComponent, - FromToComponent, - WalletItemComponent, - CurrentSecretComponent, - ProgressFooterComponent, - IonTextAvatar, - FeeConverterPipe, - AmountConverterPipe, - SecretItemComponent, - AboutPopoverComponent, - QrClipboardComponent, - CurrencySymbolComponent, - SignedTransactionComponent - ] -}) -export class ComponentsModule { } diff --git a/src/components/currency-symbol/currency-symbol.html b/src/components/currency-symbol/currency-symbol.html deleted file mode 100644 index e3b1b770..00000000 --- a/src/components/currency-symbol/currency-symbol.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/components/currency-symbol/currency-symbol.scss b/src/components/currency-symbol/currency-symbol.scss deleted file mode 100644 index 8995a21e..00000000 --- a/src/components/currency-symbol/currency-symbol.scss +++ /dev/null @@ -1,2 +0,0 @@ -currency-symbol { -} diff --git a/src/components/currency-symbol/currency-symbol.ts b/src/components/currency-symbol/currency-symbol.ts deleted file mode 100644 index a0922e07..00000000 --- a/src/components/currency-symbol/currency-symbol.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Component, Input } from '@angular/core' - -@Component({ - selector: 'currency-symbol', - templateUrl: 'currency-symbol.html' -}) -export class CurrencySymbolComponent { - @Input() - private symbol: string - - public symbolURL: string = 'assets/symbols/generic-coin.svg' - - constructor() { - /* */ - } - - ngAfterViewInit() { - const imageUrl = 'assets/symbols/' + this.symbol.toLowerCase() + '.svg' - const img = new Image() - img.onload = () => { - this.symbolURL = imageUrl - } - img.src = imageUrl - } -} diff --git a/src/components/current-secret/current-secret.html b/src/components/current-secret/current-secret.html deleted file mode 100644 index fc41652e..00000000 --- a/src/components/current-secret/current-secret.html +++ /dev/null @@ -1,6 +0,0 @@ - - {{ 'current-secret.label' | translate }} - - {{ secret.label }} - - diff --git a/src/components/current-secret/current-secret.scss b/src/components/current-secret/current-secret.scss deleted file mode 100644 index 36f29a1b..00000000 --- a/src/components/current-secret/current-secret.scss +++ /dev/null @@ -1,16 +0,0 @@ -current-secret { - hexagon-icon { - float: left; - width: 32px; - height: 32px; - - h3 { - font-size: 12px; - } - } - - .centered { - display: flex; - justify-content: center; - } -} diff --git a/src/components/current-secret/current-secret.ts b/src/components/current-secret/current-secret.ts deleted file mode 100644 index 03f4b85e..00000000 --- a/src/components/current-secret/current-secret.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component, Output, EventEmitter, Input } from '@angular/core' -import { SecretsProvider } from '../../providers/secrets/secrets.provider' -import { Secret } from '../../models/secret' - -@Component({ - selector: 'current-secret', - templateUrl: 'current-secret.html' -}) -export class CurrentSecretComponent { - private secrets: Secret[] = [] - private currentSecret = 0 - - @Output('secretChanged') - secretChanged = new EventEmitter() - - constructor(private secretsProvider: SecretsProvider) { - this.secrets = this.secretsProvider.currentSecretsList.getValue() - this.currentSecret = this.secrets.indexOf(this.secretsProvider.getActiveSecret()) - } - - @Input() - set chosenSecret(secret: Secret) { - this.currentSecret = this.secrets.indexOf(secret) - } - - onChange(newSecret) { - this.secretsProvider.setActiveSecret(this.secrets[newSecret]) - this.secretChanged.emit(this.secrets[newSecret]) - } -} diff --git a/src/components/entropy-progress/entropy-progress.html b/src/components/entropy-progress/entropy-progress.html deleted file mode 100644 index b33fca49..00000000 --- a/src/components/entropy-progress/entropy-progress.html +++ /dev/null @@ -1 +0,0 @@ -
{{ progressInPercent }}%
diff --git a/src/components/entropy-progress/entropy-progress.scss b/src/components/entropy-progress/entropy-progress.scss deleted file mode 100644 index 2dc20700..00000000 --- a/src/components/entropy-progress/entropy-progress.scss +++ /dev/null @@ -1,3 +0,0 @@ -entropy-progress { - color: white; -} diff --git a/src/components/entropy-progress/entropy-progress.ts b/src/components/entropy-progress/entropy-progress.ts deleted file mode 100644 index 207baf76..00000000 --- a/src/components/entropy-progress/entropy-progress.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Component, Input, OnChanges } from '@angular/core' - -@Component({ - selector: 'entropy-progress', - templateUrl: 'entropy-progress.html' -}) -export class EntropyProgressComponent implements OnChanges { - @Input() - maxValue: number = 1 - - @Input() - value: number = 0 - - progressInPercent = 0 - - ngOnChanges() { - if (this.value > this.maxValue) { - this.progressInPercent = 100 - } else { - this.progressInPercent = Math.floor((this.value / this.maxValue) * 100) - } - } -} diff --git a/src/components/from-to/from-to.html b/src/components/from-to/from-to.html deleted file mode 100644 index 53d93f91..00000000 --- a/src/components/from-to/from-to.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - -
-
- - {{ 'from-to.amount_label' | translate }} -
- - {{ transaction.amount | amountConverter: { protocolIdentifier: transaction.protocolIdentifier } }} - -
- - - {{ 'from-to.fee_label' | translate }} -
- {{ transaction.fee | feeConverter: { protocolIdentifier: transaction.protocolIdentifier } }} -
-
- - - {{ 'from-to.data_label' | translate }} -
- {{ transaction.data }} -
-
-
-
- - -
diff --git a/src/components/from-to/from-to.scss b/src/components/from-to/from-to.scss deleted file mode 100644 index e2f0b353..00000000 --- a/src/components/from-to/from-to.scss +++ /dev/null @@ -1,6 +0,0 @@ -from-to { - .line { - border-left: 1px solid white; - height: 96px; - } -} diff --git a/src/components/from-to/from-to.ts b/src/components/from-to/from-to.ts deleted file mode 100644 index 44809300..00000000 --- a/src/components/from-to/from-to.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Component, Input } from '@angular/core' -import { Transaction } from '../../models/transaction.model' - -@Component({ - selector: 'from-to', - templateUrl: 'from-to.html' -}) -export class FromToComponent { - @Input() - transaction: Transaction - - constructor() { } -} diff --git a/src/components/hexagon-icon/hexagon-icon.html b/src/components/hexagon-icon/hexagon-icon.html deleted file mode 100644 index 0412867a..00000000 --- a/src/components/hexagon-icon/hexagon-icon.html +++ /dev/null @@ -1,4 +0,0 @@ -
- -

{{letter?.substr(0, 1).toUpperCase()}}

-
diff --git a/src/components/hexagon-icon/hexagon-icon.scss b/src/components/hexagon-icon/hexagon-icon.scss deleted file mode 100644 index 499e06dd..00000000 --- a/src/components/hexagon-icon/hexagon-icon.scss +++ /dev/null @@ -1,16 +0,0 @@ -hexagon-icon { - height: 64px; - width: 64px; - - /* hexagon background */ - .hexagon--background { - -webkit-clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%); - clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%); - background-color: color($colors, primary); - height: 100%; - width: 93%; - display: flex; - justify-content: center; - align-items: center; - } -} diff --git a/src/components/hexagon-icon/hexagon-icon.ts b/src/components/hexagon-icon/hexagon-icon.ts deleted file mode 100644 index 00136b14..00000000 --- a/src/components/hexagon-icon/hexagon-icon.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Component, Input } from '@angular/core' - -@Component({ - selector: 'hexagon-icon', - templateUrl: 'hexagon-icon.html' -}) -export class HexagonIconComponent { - @Input() - backgroundColor: string - - @Input() - textColor = 'white' - - @Input() - letter: string - - @Input() - icon = 'add' - - @Input() - opacity = 1 -} diff --git a/src/components/identicon/identicon.html b/src/components/identicon/identicon.html deleted file mode 100644 index 3af5aee5..00000000 --- a/src/components/identicon/identicon.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/components/identicon/identicon.scss b/src/components/identicon/identicon.scss deleted file mode 100644 index d30f35dd..00000000 --- a/src/components/identicon/identicon.scss +++ /dev/null @@ -1,7 +0,0 @@ -identicon { - img { - overflow: hidden; - border-radius: 50%; - box-shadow: inset rgba(255, 255, 255, 0.2) 0 2px 2px, inset rgba(0, 0, 0, 0.3) 0 -1px 8px; - } -} diff --git a/src/components/identicon/identicon.ts b/src/components/identicon/identicon.ts deleted file mode 100644 index 84db9021..00000000 --- a/src/components/identicon/identicon.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Component, Input } from '@angular/core' -import { toDataUrl } from 'myetherwallet-blockies' -import { createIcon } from '@download/blockies' -import { BigNumber } from 'bignumber.js' - -@Component({ - selector: 'identicon', - templateUrl: 'identicon.html' -}) -export class IdenticonComponent { - // used in template - identicon - - @Input() - set address(value: string) { - if (!value) { - return - } - if (value.startsWith('ak_')) { - this.identicon = createIcon({ seed: value }).toDataURL() - } else if (value.startsWith('tz') || value.startsWith('kt')) { - this.identicon = createIcon({ seed: `0${this.b582int(value)}`, spotcolor: '#000' }).toDataURL() - } else { - this.identicon = toDataUrl(value.toLowerCase()) - } - } - - private b582int(v) { - let rv = new BigNumber(0) - let alpha = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' - for (let i = 0; i < v.length; i++) { - rv = rv.plus(new BigNumber(alpha.indexOf(v[v.length - 1 - i])).multipliedBy(new BigNumber(alpha.length).exponentiatedBy(i))) - } - return rv.toString(16) - } -} diff --git a/src/components/ion-text-avatar/ion-text-avatar.md.scss b/src/components/ion-text-avatar/ion-text-avatar.md.scss deleted file mode 100644 index 87d94a55..00000000 --- a/src/components/ion-text-avatar/ion-text-avatar.md.scss +++ /dev/null @@ -1,23 +0,0 @@ -$ion-text-avatar-md-background-color: color($colors-md, primary) !default; -$ion-text-avatar-md-text-color: color-contrast($colors-md, $ion-text-avatar-md-background-color) !default; - -.ion-text-avatar-md { - color: $ion-text-avatar-md-text-color; - background: $ion-text-avatar-md-background-color; -} - -.item-md ion-avatar ion-text-avatar { - @include border-radius($item-md-avatar-border-radius); - - overflow: hidden; - - width: $item-md-avatar-size; - height: $item-md-avatar-size; -} - -@each $color-name, $color-base, $color-contrast in get-colors($colors-md) { - .ion-text-avatar-md-#{$color-name} { - color: $color-contrast; - background-color: $color-base; - } -} diff --git a/src/components/ion-text-avatar/ion-text-avatar.scss b/src/components/ion-text-avatar/ion-text-avatar.scss deleted file mode 100644 index b5e44e5e..00000000 --- a/src/components/ion-text-avatar/ion-text-avatar.scss +++ /dev/null @@ -1,16 +0,0 @@ -ion-text-avatar { - display: flex; - align-items: center; - justify-content: center; - - font-size: large; -} - -ion-chip ion-avatar ion-text-avatar { - @include border-radius(50%); - - width: 100%; - max-width: 100%; - height: 100%; - max-height: 100%; -} diff --git a/src/components/ion-text-avatar/ion-text-avatar.ts b/src/components/ion-text-avatar/ion-text-avatar.ts deleted file mode 100644 index bd0c6e22..00000000 --- a/src/components/ion-text-avatar/ion-text-avatar.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Directive, ElementRef, Renderer } from '@angular/core' -import { Config, Ion } from 'ionic-angular' - -@Directive({ - selector: 'ion-text-avatar' -}) -export class IonTextAvatar extends Ion { - constructor(config: Config, elementRef: ElementRef, renderer: Renderer) { - super(config, elementRef, renderer, 'ion-text-avatar') - } -} diff --git a/src/components/pipes/amount-converter/amount-converter.pipe.spec.ts b/src/components/pipes/amount-converter/amount-converter.pipe.spec.ts deleted file mode 100644 index 36c7b6d4..00000000 --- a/src/components/pipes/amount-converter/amount-converter.pipe.spec.ts +++ /dev/null @@ -1,177 +0,0 @@ -import { AmountConverterPipe } from './amount-converter.pipe' -import { ProtocolsProvider } from '../../../providers/protocols/protocols' -import { BigNumber } from 'bignumber.js' -const BN = BigNumber.clone({ - FORMAT: { - decimalSeparator: `.`, - groupSeparator: `'`, - groupSize: 3 - } -}) - -describe('AmountConverter Pipe', () => { - let amountConverterPipe: AmountConverterPipe - - beforeAll(() => { - const protocolsProvider = new ProtocolsProvider() - protocolsProvider.addProtocols() - }) - - beforeEach(() => { - amountConverterPipe = new AmountConverterPipe() - }) - - describe('format number with commas', () => { - it('should format short number', () => { - expect(amountConverterPipe.formatBigNumber(new BN(`1`))).toEqual(`1`) - }) - - it('should add highcommas', () => { - expect(amountConverterPipe.formatBigNumber(new BN(`1234567891`))).toEqual(`1'234'567'891`) - }) - - it('should should add highcommas only to first part of number', () => { - expect(amountConverterPipe.formatBigNumber(new BN(`12345.67891`))).toEqual(`12'345.67891`) - }) - - it('should format long numbers', () => { - expect(amountConverterPipe.formatBigNumber(new BN(`1234567891.1234567891`))).toEqual(`1'234'567'891.1234567891`) - }) - - it('should format short number if smaller than maxDigits', () => { - expect(amountConverterPipe.formatBigNumber(new BN(`1`), 8)).toEqual(`1`) - }) - - it('should add "K" if number is too long', () => { - expect(amountConverterPipe.formatBigNumber(new BN(`1234567891`), 8)).toEqual(`1'234'567K`) - }) - - it('should add "K" if number is too long and omit floating point', () => { - expect(amountConverterPipe.formatBigNumber(new BN(`1234567891.1234567891`), 8)).toEqual(`1'234'567K`) - }) - - it('should format floating point part correctly', () => { - expect(amountConverterPipe.formatBigNumber(new BN(`12345.67891`), 8)).toEqual(`12'345.679`) - }) - - it('should add "M" if number is too long', () => { - expect(amountConverterPipe.formatBigNumber(new BN(`12345678912345`), 8)).toEqual(`12'345'678M`) - }) - - it('should add "M" if number is too long and omit floating point', () => { - expect(amountConverterPipe.formatBigNumber(new BN(`12345678912345.000000000001`), 8)).toEqual(`12'345'678M`) - }) - - it('should limit long floating point', () => { - expect(amountConverterPipe.formatBigNumber(new BN(`1.000000000001`), 8)).toEqual(`1`) - }) - }) - - describe('makeFullNumberSmaller', () => { - it('should not make small number smaller', () => { - expect(amountConverterPipe.makeFullNumberSmaller(new BN('1'), 3)).toEqual('1') - expect(amountConverterPipe.makeFullNumberSmaller(new BN('12'), 3)).toEqual('12') - expect(amountConverterPipe.makeFullNumberSmaller(new BN('123'), 3)).toEqual('123') - }) - - it('should make large number smaller', () => { - expect(amountConverterPipe.makeFullNumberSmaller(new BN('1234'), 3)).toEqual('1K') - expect(amountConverterPipe.makeFullNumberSmaller(new BN('12345'), 3)).toEqual('12K') - expect(amountConverterPipe.makeFullNumberSmaller(new BN('123456'), 3)).toEqual('123K') - expect(amountConverterPipe.makeFullNumberSmaller(new BN('1234567'), 3)).toEqual('1M') - expect(amountConverterPipe.makeFullNumberSmaller(new BN('12345678'), 3)).toEqual('12M') - expect(amountConverterPipe.makeFullNumberSmaller(new BN('123456789'), 3)).toEqual('123M') - expect(amountConverterPipe.makeFullNumberSmaller(new BN('123456789123456789'), 3)).toEqual(`123'456'789'123M`) - }) - }) - - it('should display very small ETH number to a non-scientific string representation', () => { - expect(amountConverterPipe.transform('1', { protocolIdentifier: 'eth', maxDigits: 0 })).toEqual('0.000000000000000001 ETH') - }) - - it('should display a normal ETH number to a non-scientific string representation', () => { - expect( - amountConverterPipe.transform('1000000000000000000', { - protocolIdentifier: 'eth', - maxDigits: 0 - }) - ).toEqual('1 ETH') - }) - - it('should display a big ETH number to a non-scientific string representation', () => { - expect( - amountConverterPipe.transform('10000000000000000000000000000000000', { - protocolIdentifier: 'eth', - maxDigits: 0 - }) - ).toEqual(`10'000'000'000'000'000 ETH`) - }) - - it('should return a valid amount if value is 0', () => { - expect(amountConverterPipe.transform('0', { protocolIdentifier: 'eth', maxDigits: 0 })).toEqual('0 ETH') - }) - - it('should return an empty string when protocolIdentifier is not set', () => { - expect(amountConverterPipe.transform('1', { protocolIdentifier: undefined, maxDigits: 0 })).toEqual('') - }) - - it('should handle values that are not a number', () => { - expect(amountConverterPipe.transform('test', { protocolIdentifier: 'eth', maxDigits: 0 })).toEqual('') - }) - - it('should handle values that are undefined', () => { - expect(amountConverterPipe.transform(undefined, { protocolIdentifier: 'eth', maxDigits: 0 })).toEqual('') - }) - - it('should handle values that are null', () => { - expect(amountConverterPipe.transform(null, { protocolIdentifier: 'eth', maxDigits: 0 })).toEqual('') - }) - - it('should handle values that are empty object', () => { - let value: any = {} - expect(amountConverterPipe.transform(value, { protocolIdentifier: 'eth', maxDigits: 0 })).toEqual('') - }) - - function getTest(args) { - it('Test with: ' + JSON.stringify(args), () => { - expect(amountConverterPipe.transform(args.value, { protocolIdentifier: args.protocolIdentifier, maxDigits: 0 })).toEqual( - args.expected - ) - }) - } - - function makeTests(argsArray) { - argsArray.forEach(v => { - getTest(v) - }) - } - - const truthyProtocolIdentifiers = [ - { value: '1', protocolIdentifier: 'btc', expected: '0.00000001 BTC' }, - { value: '1', protocolIdentifier: 'eth', expected: '0.000000000000000001 ETH' }, - { value: '1', protocolIdentifier: 'eth-erc20-ae', expected: '0.000000000000000001 AE-ERC20' } - ] - makeTests(truthyProtocolIdentifiers) - - const falsyValues = [ - { value: false, protocolIdentifier: 'eth', expected: '' }, - { value: 0, protocolIdentifier: 'eth', expected: '0 ETH' }, - { value: '', protocolIdentifier: 'eth', expected: '' }, - { value: null, protocolIdentifier: 'eth', expected: '' }, - { value: undefined, protocolIdentifier: 'eth', expected: '' }, - { value: NaN, protocolIdentifier: 'eth', expected: '' } - ] - makeTests(falsyValues) - - const falsyProtocolIdentifiers = [ - { value: '1', protocolIdentifier: false, expected: '' }, - { value: '1', protocolIdentifier: 0, expected: '' }, - { value: '1', protocolIdentifier: '', expected: '' }, - { value: '1', protocolIdentifier: null, expected: '' }, - { value: '1', protocolIdentifier: undefined, expected: '' }, - { value: '1', protocolIdentifier: NaN, expected: '' }, - { value: '1', protocolIdentifier: 'test', expected: '' }, - { value: '1', protocolIdentifier: 'asdf', expected: '' } - ] - makeTests(falsyProtocolIdentifiers) -}) diff --git a/src/components/pipes/amount-converter/amount-converter.pipe.ts b/src/components/pipes/amount-converter/amount-converter.pipe.ts deleted file mode 100644 index e5311b20..00000000 --- a/src/components/pipes/amount-converter/amount-converter.pipe.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { PipeTransform, Pipe } from '@angular/core' -import { BigNumber } from 'bignumber.js' -import { getProtocolByIdentifier } from 'airgap-coin-lib' - -@Pipe({ - name: 'amountConverter' -}) -export class AmountConverterPipe implements PipeTransform { - transform(value: string | number, args: { protocolIdentifier: string; maxDigits: number }): string { - if (!args.protocolIdentifier || (!value && value !== 0) || isNaN(Number(value)) || (args.maxDigits && isNaN(Number(args.maxDigits)))) { - /* console.warn( - `AmountConverterPipe: necessary properties missing!\n` + - `Protocol: ${args.protocolIdentifier}\n` + - `Value: ${value}\n` + - `maxDigits: ${args.maxDigits}` - ) */ - return '' - } - - let protocol - - try { - protocol = getProtocolByIdentifier(args.protocolIdentifier) - } catch (e) { - return '' - } - - const BN = BigNumber.clone({ - FORMAT: { - decimalSeparator: `.`, - groupSeparator: `'`, - groupSize: 3 - } - }) - const amount = new BN(value).shiftedBy(-1 * protocol.decimals) - return `${this.formatBigNumber(amount, args.maxDigits)} ${protocol.symbol.toUpperCase()}` - } - - formatBigNumber(value: BigNumber, maxDigits?: number): string { - if (!maxDigits) { - return value.toFormat() - } - - if (value.toFixed().length <= maxDigits) { - return value.toFormat() - } - - let integerValueLength = value.integerValue().toString().length - if (integerValueLength >= maxDigits) { - // We can omit floating point - return this.makeFullNumberSmaller(value, maxDigits) - } - - // Need regex to remove all unneccesary trailing zeros - return value.toFormat(maxDigits - integerValueLength).replace(/\.?0+$/, '') - } - - makeFullNumberSmaller(value: BigNumber, maxDigits: number): string { - if (value.toFixed().length <= maxDigits) { - return value.toFormat() - } - - let result = value.integerValue() - - if (result.toString().length <= maxDigits) { - return result.toFormat() - } - - if (result.toString().length <= 3) { - return result.toFormat() - } - - // number is too long, take 3 digits away and try again - result = result.dividedToIntegerBy(1000) - - if (result.toFixed().length <= maxDigits) { - return result.toFormat() + 'K' - } - - if (result.toFixed().length <= 3) { - return result.toFormat() + 'K' - } - - // number is too long, take 3 digits away and try again - result = result.dividedToIntegerBy(1000) - - return result.toFormat() + 'M' - } -} diff --git a/src/components/pipes/fee-converter/fee-converter.pipe.spec.ts b/src/components/pipes/fee-converter/fee-converter.pipe.spec.ts deleted file mode 100644 index 4fb8f7e3..00000000 --- a/src/components/pipes/fee-converter/fee-converter.pipe.spec.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { FeeConverterPipe } from './fee-converter.pipe' - -describe('FeeConverter Pipe', () => { - let feeConverterPipe: FeeConverterPipe - - beforeEach(() => { - feeConverterPipe = new FeeConverterPipe() - }) - - it('should display very small ETH number to a non-scientific string representation', () => { - expect(feeConverterPipe.transform('1', { protocolIdentifier: 'eth' })).toEqual('0.000000000000000001 ETH') - }) - - it('should display a normal ETH number to a non-scientific string representation', () => { - expect(feeConverterPipe.transform('1000000000000000000', { protocolIdentifier: 'eth' })).toEqual('1 ETH') - }) - - it('should display a big ETH number to a non-scientific string representation', () => { - expect(feeConverterPipe.transform('10000000000000000000000000000000000', { protocolIdentifier: 'eth' })).toEqual( - '10000000000000000 ETH' - ) - }) - - it('should return a valid amount if value is 0', () => { - expect(feeConverterPipe.transform('0', { protocolIdentifier: 'eth' })).toEqual('0 ETH') - }) - - it('should return an empty string for non-numeric value', () => { - expect(feeConverterPipe.transform('test', { protocolIdentifier: 'eth' })).toEqual('') - }) - - it('should return an empty string when protocolIdentifier is not set', () => { - expect(feeConverterPipe.transform('1', { protocolIdentifier: undefined })).toEqual('') - }) - - it('should return an empty string when protocolIdentifier unknown', () => { - expect(feeConverterPipe.transform('1', { protocolIdentifier: 'FeeConverterPipe' })).toEqual('') - }) - - function getTest(args) { - it('Test with: ' + JSON.stringify(args), () => { - expect(feeConverterPipe.transform(args.value, { protocolIdentifier: args.protocolIdentifier })).toEqual(args.expected) - }) - } - - function makeTests(argsArray) { - argsArray.forEach(v => { - getTest(v) - }) - } - - const truthyProtocolIdentifiers = [ - { value: '1', protocolIdentifier: 'btc', expected: '0.00000001 BTC' }, - { value: '1', protocolIdentifier: 'eth', expected: '0.000000000000000001 ETH' }, - { value: '1', protocolIdentifier: 'eth-erc20-ae', expected: '0.000000000000000001 ETH' } - ] - makeTests(truthyProtocolIdentifiers) - - const falsyValues = [ - { value: false, protocolIdentifier: 'eth', expected: '' }, - { value: 0, protocolIdentifier: 'eth', expected: '0 ETH' }, - { value: '', protocolIdentifier: 'eth', expected: '' }, - { value: null, protocolIdentifier: 'eth', expected: '' }, - { value: undefined, protocolIdentifier: 'eth', expected: '' }, - { value: NaN, protocolIdentifier: 'eth', expected: '' } - ] - makeTests(falsyValues) - - const falsyProtocolIdentifiers = [ - { value: '1', protocolIdentifier: false, expected: '' }, - { value: '1', protocolIdentifier: 0, expected: '' }, - { value: '1', protocolIdentifier: '', expected: '' }, - { value: '1', protocolIdentifier: null, expected: '' }, - { value: '1', protocolIdentifier: undefined, expected: '' }, - { value: '1', protocolIdentifier: NaN, expected: '' }, - { value: '1', protocolIdentifier: 'test', expected: '' }, - { value: '1', protocolIdentifier: 'asdf', expected: '' } - ] - makeTests(falsyProtocolIdentifiers) -}) diff --git a/src/components/pipes/fee-converter/fee-converter.pipe.ts b/src/components/pipes/fee-converter/fee-converter.pipe.ts deleted file mode 100644 index 3c54d248..00000000 --- a/src/components/pipes/fee-converter/fee-converter.pipe.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Pipe, PipeTransform } from '@angular/core' -import { BigNumber } from 'bignumber.js' -import { getProtocolByIdentifier } from 'airgap-coin-lib' - -@Pipe({ - name: 'feeConverter' -}) -export class FeeConverterPipe implements PipeTransform { - transform(value: string | number, args: { protocolIdentifier: string }): string { - if (!args.protocolIdentifier || (!value && value !== 0) || isNaN(Number(value))) { - // console.warn(`FeeConverterPipe: necessary properties missing!\n` + `Protocol: ${args.protocolIdentifier}\n` + `Value: ${value}`) - return '' - } - let protocol - - try { - protocol = getProtocolByIdentifier(args.protocolIdentifier) - } catch (e) { - return '' - } - - const amount = new BigNumber(value) - const fee = amount.shiftedBy(-1 * protocol.feeDecimals) - - return fee.toFixed() + ' ' + protocol.feeSymbol.toUpperCase() - } -} diff --git a/src/components/progress-footer/progress-footer.html b/src/components/progress-footer/progress-footer.html deleted file mode 100644 index aa374f3a..00000000 --- a/src/components/progress-footer/progress-footer.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/src/components/progress-footer/progress-footer.scss b/src/components/progress-footer/progress-footer.scss deleted file mode 100644 index 8798572f..00000000 --- a/src/components/progress-footer/progress-footer.scss +++ /dev/null @@ -1,5 +0,0 @@ -progress-footer { - .row { - align-items: center; - } -} diff --git a/src/components/progress-footer/progress-footer.ts b/src/components/progress-footer/progress-footer.ts deleted file mode 100644 index 5c940992..00000000 --- a/src/components/progress-footer/progress-footer.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Component, Input } from '@angular/core' -import { NavController } from 'ionic-angular' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -@Component({ - selector: 'progress-footer', - templateUrl: 'progress-footer.html' -}) -export class ProgressFooterComponent { - @Input() - progress = 0 - - @Input() - maxProgress = 1 - - // make sure to bind the context / method.bind(this) - @Input() - rightAction: () => void - - @Input() - rightEnabled = true - - @Input() - rightLabel = 'Next' - - // make sure to bind the context / method.bind(this) - @Input() - leftAction = () => { - this.navController.pop().catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - - @Input() - leftEnabled = true - - @Input() - leftLabel = 'Back' - - public progressArray: number[] = [] - - constructor(private navController: NavController) {} - - ngOnInit() { - this.progressArray = new Array(this.maxProgress).fill(0).map((_x, i) => i) - if (!this.rightAction) { - throw new Error('ProgressFooterComponent: No "rightAction" method passed') - } - } -} diff --git a/src/components/qr-clipboard/qr-clipboard.html b/src/components/qr-clipboard/qr-clipboard.html deleted file mode 100644 index d73eebb1..00000000 --- a/src/components/qr-clipboard/qr-clipboard.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/components/qr-clipboard/qr-clipboard.scss b/src/components/qr-clipboard/qr-clipboard.scss deleted file mode 100644 index 54c6758e..00000000 --- a/src/components/qr-clipboard/qr-clipboard.scss +++ /dev/null @@ -1,3 +0,0 @@ -qr-clipboard { - -} diff --git a/src/components/qr-clipboard/qr-clipboard.ts b/src/components/qr-clipboard/qr-clipboard.ts deleted file mode 100644 index 24b3350f..00000000 --- a/src/components/qr-clipboard/qr-clipboard.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Component, Input } from '@angular/core' -import { ClipboardProvider } from '../../providers/clipboard/clipboard' - -@Component({ - selector: 'qr-clipboard', - templateUrl: 'qr-clipboard.html' -}) -export class QrClipboardComponent { - @Input() - level: string = 'L' - - @Input() - qrdata: any = '' - - @Input() - size: number = 300 - - constructor(private clipboardProvider: ClipboardProvider) {} - - async copyToClipboard() { - await this.clipboardProvider.copyAndShowToast(this.qrdata) - } -} diff --git a/src/components/secret-item/secret-item.html b/src/components/secret-item/secret-item.html deleted file mode 100644 index f89064e4..00000000 --- a/src/components/secret-item/secret-item.html +++ /dev/null @@ -1,45 +0,0 @@ - -
-
-

{{ secret.label }}

-
- - - - - - - - - - -
-
diff --git a/src/components/secret-item/secret-item.scss b/src/components/secret-item/secret-item.scss deleted file mode 100644 index f6cbc8bd..00000000 --- a/src/components/secret-item/secret-item.scss +++ /dev/null @@ -1,10 +0,0 @@ -secret-item { - ion-icon { - font-size: 16px !important; - } - .secret--label { - font-family: 'Courier New', Courier, 'Lucida Sans Typewriter', 'Lucida Typewriter', monospace; - font-weight: 800; - font-size: 16px !important; - } -} diff --git a/src/components/secret-item/secret-item.ts b/src/components/secret-item/secret-item.ts deleted file mode 100644 index ebaa1142..00000000 --- a/src/components/secret-item/secret-item.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Component, Input } from '@angular/core' -import { Secret } from '../../models/secret' -import { InteractionSetting } from '../../providers/interaction/interaction' - -@Component({ - selector: 'secret-item', - templateUrl: 'secret-item.html' -}) -export class SecretItemComponent { - @Input() - secret: Secret - - public interactionSetting = InteractionSetting -} diff --git a/src/components/signed-transaction/signed-transaction.html b/src/components/signed-transaction/signed-transaction.html deleted file mode 100644 index 08b195cf..00000000 --- a/src/components/signed-transaction/signed-transaction.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - {{ 'signed-transaction.transaction-unreadable' | translate }} - - -

{{ rawTxData }}

-
-
diff --git a/src/components/signed-transaction/signed-transaction.scss b/src/components/signed-transaction/signed-transaction.scss deleted file mode 100644 index 7fb41da4..00000000 --- a/src/components/signed-transaction/signed-transaction.scss +++ /dev/null @@ -1,8 +0,0 @@ -signed-transaction { - .warning-icon { - font-size: 4rem; - } - .word-break__all { - word-break: break-all; - } -} diff --git a/src/components/signed-transaction/signed-transaction.spec.ts b/src/components/signed-transaction/signed-transaction.spec.ts deleted file mode 100644 index 832fbc2f..00000000 --- a/src/components/signed-transaction/signed-transaction.spec.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { async, TestBed, ComponentFixture } from '@angular/core/testing' - -import { IdenticonComponent } from './../identicon/identicon' -import { AddressRowComponent } from './../address-row/address-row' -import { FromToComponent } from './../from-to/from-to' -import { SignedTransactionComponent } from './signed-transaction' -import { UnitHelper } from '../../../test-config/unit-test-helper' -import { SyncProtocolUtils, EncodedType } from 'airgap-coin-lib' - -fdescribe('SignedTransactionComponent', () => { - let signedTransactionFixture: ComponentFixture - let signedTransaction: SignedTransactionComponent - - beforeEach(async(() => { - TestBed.configureTestingModule( - UnitHelper.testBed({ - declarations: [SignedTransactionComponent, FromToComponent, AddressRowComponent, IdenticonComponent] - }) - ).compileComponents() - })) - - beforeEach(async () => { - signedTransactionFixture = TestBed.createComponent(SignedTransactionComponent) - signedTransaction = signedTransactionFixture.componentInstance - }) - - it('should be created', () => { - expect(signedTransaction instanceof SignedTransactionComponent).toBe(true) - }) - - it('should load the from-to component if a valid tx is given', async(async () => { - const syncProtocol = new SyncProtocolUtils() - const serializedTx = await syncProtocol.serialize({ - version: 1, - protocol: 'eth', - type: EncodedType.SIGNED_TRANSACTION, - payload: { - accountIdentifier: 'test', - transaction: - 'f86c808504a817c800825208944a1e1d37462a422873bfccb1e705b05cc4bd922e880de0b6b3a76400008026a00678aaa8f8fd478952bf46044589f5489e809c5ae5717dfe6893490b1f98b441a06a82b82dad7c3232968ec3aa2bba32879b3ecdb877934915d7e65e095fe53d5d' - } - }) - - expect(signedTransaction.airGapTx).toBe(undefined) - expect(signedTransaction.fallbackActivated).toBe(false) - - const signedTx = await syncProtocol.deserialize(serializedTx) - signedTransaction.signedTx = signedTx - await signedTransaction.ngOnChanges() - - expect(signedTransaction.airGapTx).toBeDefined() - expect(signedTransaction.fallbackActivated).toBe(false) - })) - - it('should load fallback if something about the TX is wrong', async(async () => { - const syncProtocol = new SyncProtocolUtils() - const serializedTx = await syncProtocol.serialize({ - version: 1, - protocol: 'eth', - type: EncodedType.SIGNED_TRANSACTION, - payload: { - accountIdentifier: 'test', - transaction: - 'asdasdasdasdsad944a1e1d37462a422873bfccb1e705b05cc4bd922e880de0b6b3a76400008026a00678aaa8f8fd478952bf46044589f5489e809c5ae5717dfe6893490b1f98b441a06a82b82dad7c3232968ec3aa2bba32879b3ecdb877934915d7e65e095fe53d5d' - } - }) - - expect(signedTransaction.airGapTx).toBe(undefined) - expect(signedTransaction.fallbackActivated).toBe(false) - - console.log(serializedTx) - - const signedTx = await syncProtocol.deserialize(serializedTx) - signedTransaction.signedTx = signedTx - await signedTransaction.ngOnChanges() - - expect(signedTransaction.airGapTx).toBeUndefined() - expect(signedTransaction.fallbackActivated).toBe(true) - })) -}) diff --git a/src/components/signed-transaction/signed-transaction.ts b/src/components/signed-transaction/signed-transaction.ts deleted file mode 100644 index 89efe683..00000000 --- a/src/components/signed-transaction/signed-transaction.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { Component, Input } from '@angular/core' -import { - DeserializedSyncProtocol, - IAirGapTransaction, - getProtocolByIdentifier, - UnsignedTransaction, - SignedTransaction, - SyncProtocolUtils -} from 'airgap-coin-lib' - -@Component({ - selector: 'signed-transaction', - templateUrl: 'signed-transaction.html' -}) -export class SignedTransactionComponent { - @Input() - signedTx: DeserializedSyncProtocol - - @Input() - unsignedTx: DeserializedSyncProtocol - - @Input() - syncProtocolString: string - - airGapTx: IAirGapTransaction - fallbackActivated: boolean = false - - rawTxData: string - - constructor() { - // - } - - async ngOnChanges() { - if (this.syncProtocolString) { - try { - const syncUtils = new SyncProtocolUtils() - const parts = this.syncProtocolString.split('?d=') // TODO: Use sync scheme handler to unpack - this.signedTx = await syncUtils.deserialize(parts[parts.length - 1]) - } catch (err) { - this.fallbackActivated = true - this.rawTxData = this.syncProtocolString - } - } - - if (this.signedTx) { - const protocol = getProtocolByIdentifier(this.signedTx.protocol) - try { - this.airGapTx = await protocol.getTransactionDetailsFromSigned(this.signedTx.payload as SignedTransaction) - this.fallbackActivated = false - } catch (e) { - this.fallbackActivated = true - this.rawTxData = (this.signedTx.payload as SignedTransaction).transaction - } - } - - if (this.unsignedTx) { - const protocol = getProtocolByIdentifier(this.unsignedTx.protocol) - try { - this.airGapTx = await protocol.getTransactionDetails(this.unsignedTx.payload as UnsignedTransaction) - this.fallbackActivated = false - } catch (e) { - this.fallbackActivated = true - this.rawTxData = JSON.stringify((this.unsignedTx.payload as UnsignedTransaction).transaction) - } - } - } -} diff --git a/src/components/touch-entropy/touch-entropy.html b/src/components/touch-entropy/touch-entropy.html deleted file mode 100644 index d4820db6..00000000 --- a/src/components/touch-entropy/touch-entropy.html +++ /dev/null @@ -1,4 +0,0 @@ -
-

{{ 'touch-entropy.text' | translate }}

- -
diff --git a/src/components/touch-entropy/touch-entropy.scss b/src/components/touch-entropy/touch-entropy.scss deleted file mode 100644 index b46e312d..00000000 --- a/src/components/touch-entropy/touch-entropy.scss +++ /dev/null @@ -1,21 +0,0 @@ -touch-entropy { - #container { - position: relative; - height: 200px; - } - - p { - position: absolute; - top: 80px; - width: 100%; - text-align: center; - } - - canvas { - position: absolute; - border-color: white; - border-style: solid; - border-width: 1px; - border-radius: 20px; - } -} diff --git a/src/components/touch-entropy/touch-entropy.ts b/src/components/touch-entropy/touch-entropy.ts deleted file mode 100644 index a7057531..00000000 --- a/src/components/touch-entropy/touch-entropy.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { Component, Input, OnInit, Renderer2, ViewChild } from '@angular/core' -import { Entropy, IEntropyGenerator } from '../../providers/entropy/IEntropyGenerator' -import { Observable } from 'rxjs' - -import workerJS from '../../assets/workers/entropyCalculatorWorker' -const blobURL = window.URL.createObjectURL(new Blob([workerJS])) -const entropyCalculatorWorker = new Worker(blobURL) - -@Component({ - selector: 'touch-entropy', - templateUrl: 'touch-entropy.html' -}) -export class TouchEntropyComponent implements OnInit, IEntropyGenerator { - @Input() - cursorSize = 2 - - @Input() - randomFactorInPercent = 10 - - @Input() - cursorColor = 'white' - - @ViewChild('canvas') - canvasRef - - private canvas: HTMLCanvasElement - private context: CanvasRenderingContext2D - private rectangle: ClientRect - public showStrokes - - private handler - - private entropyObservable: Observable - - private collectedEntropyPercentage: number = 0 - - private isDrawing = false - - constructor(private renderer: Renderer2) { - this.entropyObservable = Observable.create(observer => { - entropyCalculatorWorker.onmessage = event => { - this.collectedEntropyPercentage += event.data.entropyMeasure - observer.next({ entropyHex: event.data.entropyHex }) - } - - this.handler = entropy => { - const buffer1 = this.arrayBufferFromIntArray(entropy) - entropyCalculatorWorker.postMessage({ entropyBuffer: buffer1 }, [buffer1]) - } - }) - } - - ngOnInit(): void { - this.canvas = this.canvasRef.nativeElement - - this.canvas.setAttribute('height', `${this.canvas.parentElement.getBoundingClientRect().height}px`) - this.canvas.setAttribute('width', `${this.canvas.parentElement.getBoundingClientRect().width}px`) - - this.context = this.canvas.getContext('2d') - this.context.fillStyle = this.cursorColor - this.rectangle = this.canvas.getBoundingClientRect() - this.showStrokes = true - } - - ngOnDestroy(): void { - this.showStrokes = false - } - - start(): Promise { - this.collectedEntropyPercentage = 0 - return new Promise(resolve => { - this.renderer.listen(this.canvas, 'mousedown', _e => { - this.isDrawing = true - }) - - this.renderer.listen(this.canvas, 'touchstart', _e => { - this.isDrawing = true - }) - - this.renderer.listen(this.canvas, 'mouseup', _e => { - this.isDrawing = false - }) - - this.renderer.listen(this.canvas, 'touchend', _e => { - this.isDrawing = false - }) - - this.renderer.listen(this.canvas, 'mousemove', e => { - if (this.isDrawing) this.collectEntropy(e) - }) - - this.renderer.listen(this.canvas, 'touchmove', e => { - if (this.isDrawing) this.collectEntropy(e) - }) - - resolve() - }) - } - - stop(): Promise { - return new Promise(resolve => { - this.isDrawing = false - resolve() - }) - } - - collectEntropy(e) { - let x = e.clientX || e.touches[0].clientX - let y = e.clientY || e.touches[0].clientY - - let currX = Math.ceil(((x - this.rectangle.left) / (this.rectangle.right - this.rectangle.left)) * this.canvas.width) - let currY = Math.ceil(((y - this.rectangle.top) / (this.rectangle.bottom - this.rectangle.top)) * this.canvas.height) - 56 - - if (this.getRandomIntInclusive(0, 100) <= this.randomFactorInPercent) { - let timeStampInMs = - window.performance && window.performance.now && window.performance.timing && window.performance.timing.navigationStart - ? window.performance.now() + window.performance.timing.navigationStart - : Date.now() - - if (this.handler) { - this.handler([currX, currY, timeStampInMs]) - } - } - } - - getEntropyUpdateObservable(): Observable { - return this.entropyObservable - } - - private getRandomIntInclusive(min: number, max: number) { - const randomBuffer = new Uint32Array(1) - window.crypto.getRandomValues(randomBuffer) - let randomNumber = randomBuffer[0] / (0xffffffff + 1) - min = Math.ceil(min) - max = Math.floor(max) - return Math.floor(randomNumber * (max - min + 1)) + min - } - - private arrayBufferFromIntArray(array: number[]) { - const buffer = new ArrayBuffer(array.length * 2) - const bufView = new Uint8Array(buffer) - - for (let i = 0; i < array.length; i++) { - bufView[i] = Math.abs(array[i] * 10000) - } - - return buffer - } - - getCollectedEntropyPercentage(): number { - return this.collectedEntropyPercentage / 10 - } -} diff --git a/src/components/trace-input/trace-input.directive.ts b/src/components/trace-input/trace-input.directive.ts deleted file mode 100644 index 62144ae6..00000000 --- a/src/components/trace-input/trace-input.directive.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { Directive, ElementRef, NgZone, OnInit, Renderer2 } from '@angular/core' - -@Directive({ - selector: '[trace-input]', - inputs: ['running: traceEnabled'] -}) -export class TraceInputDirective implements OnInit { - private canvas: HTMLCanvasElement - private context: CanvasRenderingContext2D - - private mousePos = { x: 0, y: 0 } - private lastPos = this.mousePos - - private isDrawing: boolean - - constructor(elementRef: ElementRef, private ngZone: NgZone, private renderer: Renderer2) { - this.canvas = elementRef.nativeElement - this.context = this.canvas.getContext('2d') - } - - ngOnInit() { - this.renderer.listen(this.canvas, 'mousedown', e => { - this.lastPos = this.getMousePosition(this.canvas, e) - this.isDrawing = true - this.startDrawing() - }) - - this.renderer.listen(this.canvas, 'touchstart', e => { - this.lastPos = this.getTouchPosition(this.canvas, e) - this.isDrawing = true - this.startDrawing() - }) - - this.renderer.listen(this.canvas, 'mouseup', e => { - this.lastPos = this.getMousePosition(this.canvas, e) - this.isDrawing = false - }) - - this.renderer.listen(this.canvas, 'touchend', e => { - this.lastPos = this.getTouchPosition(this.canvas, e) - this.isDrawing = false - }) - - this.renderer.listen(this.canvas, 'mousemove', e => { - this.mousePos = this.getMousePosition(this.canvas, e) - }) - - this.renderer.listen(this.canvas, 'touchmove', e => { - this.mousePos = this.getTouchPosition(this.canvas, e) - }) - } - - startDrawing() { - if (!this.isDrawing) { - return - } - - this.ngZone.runOutsideAngular(() => { - requestAnimationFrame(() => { - this.renderEntropyDrawing() - }) - }) - } - - getMousePosition(canvas, evt) { - let rect = canvas.getBoundingClientRect() - return { - x: evt.clientX - rect.left, - y: evt.clientY - rect.top - } - } - - getTouchPosition(canvas, evt) { - let rect = canvas.getBoundingClientRect() - - if (!evt.touches[0]) { - return this.lastPos - } - - return { - x: evt.touches[0].clientX - rect.left, - y: evt.touches[0].clientY - rect.top - } - } - - renderEntropyDrawing() { - this.context.strokeStyle = 'rgb(255, 255, 255)' - this.context.moveTo(this.lastPos.x, this.lastPos.y) - this.context.lineTo(this.mousePos.x, this.mousePos.y) - this.context.stroke() - this.lastPos = this.mousePos - this.startDrawing() - } -} diff --git a/src/components/verify-key/verify-key.html b/src/components/verify-key/verify-key.html deleted file mode 100644 index 69eeb603..00000000 --- a/src/components/verify-key/verify-key.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - -
- - -

-
- - -

{{ 'verify-key.success_text' | translate }}

- -
- - - - - - - - -
diff --git a/src/components/verify-key/verify-key.scss b/src/components/verify-key/verify-key.scss deleted file mode 100644 index 7e68cc7d..00000000 --- a/src/components/verify-key/verify-key.scss +++ /dev/null @@ -1,38 +0,0 @@ -verify-key { - .secret--container-60 { - height: calc(60% - 36px); - } - - .secret--container-40 { - height: calc(40%- 36px); - } - - .secret--container__inner { - align-content: start; - padding: 0 4px; - } - - hr { - border: 2px dashed color($colors, primary); - border-style: none none dashed; - color: color($colors, primary); - margin: 8px 0; - } - - .button-secret { - @extend .secret--typography; - font-weight: bold; - } - - .xtra-small { - button { - @extend .secret--typography; - font-size: 0.8em; - padding: 0 1rem; - } - } - - .word-placeholder { - min-width: 48px; - } -} diff --git a/src/components/verify-key/verify-key.spec.ts b/src/components/verify-key/verify-key.spec.ts deleted file mode 100644 index e6aa03fc..00000000 --- a/src/components/verify-key/verify-key.spec.ts +++ /dev/null @@ -1,182 +0,0 @@ -import 'jasmine' -import { VerifyKeyComponent } from './verify-key' -import { ComponentFixture, TestBed, async } from '@angular/core/testing' -import { IonicModule } from 'ionic-angular' -import { HttpClient, HttpClientModule } from '@angular/common/http' -import { TranslateModule } from '@ngx-translate/core' - -describe('Component: VerifyKey', () => { - let component: VerifyKeyComponent - let fixture: ComponentFixture - - const correctMnemonic = - 'usage puzzle bottom amused genuine bike brown ripple lend aware symbol genuine neutral tortoise pluck rose brown cliff sing smile appear black occur zero' - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [VerifyKeyComponent], - imports: [IonicModule.forRoot(VerifyKeyComponent), HttpClientModule, TranslateModule.forRoot()] - }) - .compileComponents() - .then(() => { - fixture = TestBed.createComponent(VerifyKeyComponent) - component = fixture.componentInstance - }) - })) - - it('should validate a regular mnemonic, and emit correct event', async(() => { - component.secret = correctMnemonic - fixture.detectChanges() - let words = component.secret.split(' ') - - // validate onComplete Event is True - component.onContinue.subscribe(event => { - expect(event).toBeTruthy() - }) - - words.forEach((word, i) => { - expect(component.isFull()).toBeFalsy() - component.useWord({ word: word }) - }) - - expect(component.isFull()).toBeTruthy() - expect(component.isCorrect()).toBeTruthy() - })) - - it('should detect a wrong word in a mnemonic', async(() => { - component.secret = correctMnemonic - fixture.detectChanges() - const words = component.secret.split(' ') - - // validate onComplete Event is False - component.onContinue.subscribe(event => { - expect(event).toBeFalsy() - }) - - words.forEach((word, i) => { - expect(component.isFull()).toBeFalsy() - if (i === 5) { - component.useWord({ word: 'wrongWord' }) - } else { - component.useWord({ word: word }) - } - }) - - expect(component.isFull()).toBeTruthy() - expect(component.isCorrect()).toBeFalsy() - })) - - it('should validate a mnemonic where the same word appears 2 times', async(() => { - component.secret = correctMnemonic - fixture.detectChanges() - component.ngOnInit() - const words = component.secret.split(' ') - - words.forEach((word, i) => { - component.useWord({ word: word }) - }) - - expect(component.isCorrect()).toBeTruthy() - })) - - it('should not validate user input that is too short', async(() => { - component.secret = correctMnemonic - fixture.detectChanges() - component.ngOnInit() - const words = component.secret.split(' ') - - words.forEach((word, i) => { - if (i === words.length - 1) return - component.useWord({ word: word }) - }) - - expect(component.isFull()).toBeFalsy() - expect(component.isCorrect()).toBeFalsy() - component.useWord({ word: words[words.length - 1] }) - expect(component.isFull()).toBeTruthy() - expect(component.isCorrect()).toBeTruthy() - })) - - it('should give the correct empty spots', async(() => { - component.secret = correctMnemonic - fixture.detectChanges() - component.ngOnInit() - const words = component.secret.split(' ') - - // first empty spot is zero - expect(component.emptySpot(component.currentWords)).toEqual(0) - - component.useWord({ word: words[0] }) - - // next empty spot is one - expect(component.emptySpot(component.currentWords)).toEqual(1) - })) - - it('should let users select words to correct them', async(() => { - component.secret = correctMnemonic - fixture.detectChanges() - component.ngOnInit() - const words = component.secret.split(' ') - - words.forEach((word, i) => { - component.useWord({ word: word }) - }) - - // now select a word - component.selectWord(5) - expect(component.selectedWord).toEqual(5) - expect(component.currentWords[5]).toEqual({ word: words[5] }) - })) - - it('should give users 3 words to choose from', async(() => { - component.secret = correctMnemonic - component.ngOnInit() - fixture.detectChanges() - - let wordSelector = fixture.nativeElement.querySelector('#wordSelector') - - // check if there are three words - expect(wordSelector.children.length).toBe(3) - - let foundWord = false - for (let i = 0; i < wordSelector.children.length; i++) { - if (wordSelector.children.item(i).textContent.trim() === correctMnemonic.split(' ')[0]) { - foundWord = true - } - } - - // check if one of the words is the correct one - expect(foundWord).toBeTruthy() - })) - - it('should give users 3 words to choose from if selecting a specific one', async(() => { - component.secret = correctMnemonic - component.ngOnInit() - fixture.detectChanges() - - component.secret.split(' ').forEach((word, i) => { - if (i > 10) return - component.useWord({ word: word }) - }) - - const selectedIndex = 5 - component.selectWord(selectedIndex) - - fixture.detectChanges() - - let wordSelector = fixture.nativeElement.querySelector('#wordSelector') - - // check if there are three words - expect(wordSelector.children.length).toBe(3) - - let foundWord = false - for (let i = 0; i < wordSelector.children.length; i++) { - if (wordSelector.children.item(i).textContent.trim() === correctMnemonic.split(' ')[selectedIndex]) { - foundWord = true - } - } - - // check if one of the words is the correct one - expect(foundWord).toBeTruthy() - })) -}) diff --git a/src/components/verify-key/verify-key.ts b/src/components/verify-key/verify-key.ts deleted file mode 100644 index 04ff14cb..00000000 --- a/src/components/verify-key/verify-key.ts +++ /dev/null @@ -1,170 +0,0 @@ -import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core' -import * as bip39 from 'bip39' -import { sha3_256 } from 'js-sha3' -interface Word { - word: string -} - -const ADDITIONAL_WORDS = 2 - -@Component({ - selector: 'verify-key', - templateUrl: 'verify-key.html' -}) -export class VerifyKeyComponent implements OnInit { - @Input() - secret: string - - @Output() - onContinue = new EventEmitter() - - @Output() - onComplete = new EventEmitter() - - isCompleted: boolean = false - - splittedSecret: Word[] = [] - currentWords: Word[] = [] - promptedWords: Word[] = [] - - selectedWord: number = null - - ngOnInit(): void { - this.splittedSecret = this.secret - .toLowerCase() - .split(' ') - .map(word => { - return { - word: word - } - }) - this.reset() - - this.onComplete.subscribe(result => { - this.isCompleted = result - }) - } - - ngOnDestroy(): void { - this.onComplete.unsubscribe() - } - - continue() { - this.onContinue.emit() - } - - promptNextWord() { - this.promptedWords.length = 0 - - const correctWord = this.splittedSecret[this.emptySpot(this.currentWords)] - - this.promptedWords.push(correctWord) - - const wordList = bip39.wordlists.EN.slice() - - for (let i = 0; i < ADDITIONAL_WORDS; i++) { - const filteredList = wordList.filter(word => !this.splittedSecret.find(w => w.word === word)) - - let hashedWord = sha3_256(correctWord.word) - for (let hashRuns = 0; hashRuns <= i; hashRuns++) { - hashedWord = sha3_256(hashedWord) - } - - const word: Word = { - word: filteredList[this.stringToIntHash(hashedWord, 0, filteredList.length)] - } - - this.promptedWords.push(word) - } - - this.promptedWords = this.shuffle(this.promptedWords) - } - - shuffle(a) { - let counter = a.length - - while (counter > 0) { - let index = Math.floor(Math.random() * counter) - - counter-- - - let temp = a[counter] - a[counter] = a[index] - a[index] = temp - } - - return a - } - - stringToIntHash(str: string, lowerbound: number, upperbound: number) { - let result = 0 - - for (let i = 0; i < str.length; i++) { - result = result + str.charCodeAt(i) - } - - return (result % (upperbound - lowerbound)) + lowerbound - } - - isSelectedWord(word: Word): boolean { - if (this.selectedWord !== null) { - return this.currentWords[this.selectedWord].word === word.word - } - return false - } - - selectEmptySpot() { - this.selectedWord = null - this.promptNextWord() - } - - useWord(word: Word) { - let index = this.emptySpot(this.currentWords) - - // unselect any selected words - this.selectedWord = null - this.currentWords[index] = word - - // prompt next word - if (!this.isFull() && index < this.splittedSecret.length - 1) { - return this.promptNextWord() - } - - if (this.isFull()) { - // if all words are placed, check for correctness, else next - this.promptedWords = [] - this.onComplete.emit(this.isCorrect()) - } - } - - emptySpot(array: Word[]): number { - if (this.selectedWord !== null) { - return this.selectedWord - } - return array.findIndex(obj => obj === null) - } - - selectWord(index: number) { - this.selectedWord = index - this.promptNextWord() - } - - reset() { - this.selectedWord = null - this.currentWords = Array(this.splittedSecret.length).fill(null) - this.promptNextWord() - } - - isFull() { - return this.currentWords.filter(w => w !== null).length === this.splittedSecret.length - } - - isCorrect() { - return ( - this.currentWords - .map(w => (w ? w.word : '-')) - .join(' ') - .trim() === this.secret.trim() - ) - } -} diff --git a/src/components/wallet-item/wallet-item.html b/src/components/wallet-item/wallet-item.html deleted file mode 100644 index 9df6a780..00000000 --- a/src/components/wallet-item/wallet-item.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - -

{{ wallet.coinProtocol.name }} {{ wallet.coinProtocol.symbol }}

-

{{ wallet.receivingPublicAddress }}

-
-
diff --git a/src/components/wallet-item/wallet-item.scss b/src/components/wallet-item/wallet-item.scss deleted file mode 100644 index db9859e8..00000000 --- a/src/components/wallet-item/wallet-item.scss +++ /dev/null @@ -1,11 +0,0 @@ -wallet-item { - .symbol--icon img { - height: 24px; - width: 24px; - } - .symbol--icon { - position: absolute; - left: 24px; - top: 32px; - } -} diff --git a/src/components/wallet-item/wallet-item.ts b/src/components/wallet-item/wallet-item.ts deleted file mode 100644 index 892a06f9..00000000 --- a/src/components/wallet-item/wallet-item.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Component, Input } from '@angular/core' -import { AirGapWallet } from 'airgap-coin-lib' - -@Component({ - selector: 'wallet-item', - templateUrl: 'wallet-item.html' -}) -export class WalletItemComponent { - @Input() - wallet: AirGapWallet -} diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts new file mode 100644 index 00000000..bc0327db --- /dev/null +++ b/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +} diff --git a/src/environments/environment.ts b/src/environments/environment.ts new file mode 100644 index 00000000..745ee023 --- /dev/null +++ b/src/environments/environment.ts @@ -0,0 +1,16 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false +} + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/dist/zone-error'; // Included with Angular CLI. diff --git a/src/global.scss b/src/global.scss new file mode 100644 index 00000000..95b74f55 --- /dev/null +++ b/src/global.scss @@ -0,0 +1,11 @@ +// http://ionicframework.com/docs/theming/ +@import '~@ionic/angular/css/core.css'; +@import '~@ionic/angular/css/normalize.css'; +@import '~@ionic/angular/css/structure.css'; +@import '~@ionic/angular/css/typography.css'; +@import '~@ionic/angular/css/display.css'; +@import '~@ionic/angular/css/padding.css'; +@import '~@ionic/angular/css/float-elements.css'; +@import '~@ionic/angular/css/text-alignment.css'; +@import '~@ionic/angular/css/text-transformation.css'; +@import '~@ionic/angular/css/flex-utils.css'; diff --git a/src/index.html b/src/index.html index 6e0ccd9d..f9c29f7b 100644 --- a/src/index.html +++ b/src/index.html @@ -1,8 +1,11 @@ - + - + AirGap Vault + + + + - - - + @@ -40,38 +43,9 @@ - - - - - - - - - - - - - - - - - - + diff --git a/src/karma.conf.js b/src/karma.conf.js new file mode 100644 index 00000000..84c498f4 --- /dev/null +++ b/src/karma.conf.js @@ -0,0 +1,31 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function(config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + coverageIstanbulReporter: { + dir: require('path').join(__dirname, '../coverage'), + reports: ['html', 'lcovonly', 'text-summary'], + fixWebpackSourcePaths: true + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false + }) +} diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 00000000..f3825fe5 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,13 @@ +import { enableProdMode } from '@angular/core' +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic' + +import { AppModule } from './app/app.module' +import { environment } from './environments/environment' + +if (environment.production) { + enableProdMode() +} + +platformBrowserDynamic() + .bootstrapModule(AppModule) + .catch(err => console.log(err)) diff --git a/src/manifest.json b/src/manifest.json deleted file mode 100644 index aac66fbd..00000000 --- a/src/manifest.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "Ionic", - "short_name": "Ionic", - "start_url": "index.html", - "display": "standalone", - "icons": [ - { - "src": "assets/img/logo.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "background_color": "#4e8ef7", - "theme_color": "#4e8ef7" -} diff --git a/src/models/BIP39Signer.spec.ts b/src/models/BIP39Signer.spec.ts deleted file mode 100644 index 9abeb360..00000000 --- a/src/models/BIP39Signer.spec.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { BIP39Signer } from './BIP39Signer' - -describe('BIP39: Signer', () => { - const signer = new BIP39Signer() - // Test with different secret lengths - const secrets = [ - 'police fade pink dose curious bid mixed blade rotate food situate junk rival torch inflict poem shrimp owner grant cable cook bless swarm curious', - 'clarify excuse sunny crazy can aerobic harbor imitate shuffle hurry vacuum object captain miss unveil oval answer retreat', - 'ozone supply spread pipe frown bread squirrel life split heart pave avoid' - ] - - it('create an instance', () => { - expect(signer).toBeTruthy() - }) - - it('generates same seed from same entropy', () => { - const expectedSecret = - 'demise stem detect together legal stand road industry thought casino danger arrow busy kick tide female own ship' - const secret = signer.entropyToMnemonic('3a5aa8f1f1d7f7a92ebb99e0e46cdd8651f2f47872a79e18') - expect(secret).toBe(secret) - }) - - it('generates correct social recovery keys, 24 words seed', () => { - const numberOfShares = 5 - const threshold = 3 - - const shares = signer.generateSocialRecover(secrets[0], numberOfShares, threshold) - const restoredSecretFull = signer.recoverKey(shares) - const restoredSecretExact = signer.recoverKey(shares.slice(0, threshold)) - - expect(shares.length).toBe(numberOfShares) - expect(restoredSecretFull).toBe(secrets[0]) - expect(restoredSecretExact).toBe(secrets[0]) - - expect(function() { - signer.recoverKey(shares.slice(0, threshold - 1)) - }).toThrowError( - 'Checksum error, either the passed shares were generated for different secrets or the amount of shares is below the threshold' - ) - }) - - it('generates correct social recovery keys, 18 words seed', () => { - const numberOfShares = 5 - const threshold = 3 - - const shares = signer.generateSocialRecover(secrets[1], numberOfShares, threshold) - const restoredSecretFull = signer.recoverKey(shares) - const restoredSecretExact = signer.recoverKey(shares.slice(0, threshold)) - - expect(shares.length).toBe(numberOfShares) - expect(restoredSecretFull).toBe(secrets[1]) - expect(restoredSecretExact).toBe(secrets[1]) - - expect(function() { - signer.recoverKey(shares.slice(0, threshold - 1)) - }).toThrowError( - 'Checksum error, either the passed shares were generated for different secrets or the amount of shares is below the threshold' - ) - }) - - it('generates correct social recovery keys, 12 words seed', () => { - const numberOfShares = 5 - const threshold = 3 - - const shares = signer.generateSocialRecover(secrets[2], numberOfShares, threshold) - const restoredSecretFull = signer.recoverKey(shares) - const restoredSecretExact = signer.recoverKey(shares.slice(0, threshold)) - - expect(shares.length).toBe(numberOfShares) - expect(restoredSecretFull).toBe(secrets[2]) - expect(restoredSecretExact).toBe(secrets[2]) - - expect(function() { - signer.recoverKey(shares.slice(0, threshold - 1)) - }).toThrowError( - 'Checksum error, either the passed shares were generated for different secrets or the amount of shares is below the threshold' - ) - }) - - it('throw error on wrong threshold configuration', () => { - let numberOfShares = 5 - let threshold = 6 - - expect(function() { - signer.generateSocialRecover(secrets[0], numberOfShares, threshold) - }).toThrowError('The threshold needs to be smaller or equal to the number or shares') - }) - - it('throw error on wrong numberOfShares configuration', () => { - let numberOfShares = 1 - let threshold = 1 - - expect(function() { - signer.generateSocialRecover(secrets[0], numberOfShares, threshold) - }).toThrowError('At least two shares are needed') - }) - - it('throw error on wrong numberOfShares configuration', () => { - let numberOfShares = 1 - let threshold = 1 - - expect(function() { - signer.generateSocialRecover(secrets[0], numberOfShares, threshold) - }).toThrowError('At least two shares are needed') - }) -}) diff --git a/src/models/BIP39Signer.ts b/src/models/BIP39Signer.ts deleted file mode 100644 index f78364e7..00000000 --- a/src/models/BIP39Signer.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { sha3_256 } from 'js-sha3' -import bip39 from 'bip39' -import secretJS from 'secrets.js-grempe' - -export class BIP39Signer { - readonly checkSumLength = 10 - - private getOffsetMapping(share: string): any { - const shareWordCount = share.split(' ').length - if (shareWordCount === 48) { - return { offset: 99, seedOffset: 64 } - } else if (shareWordCount === 36) { - return { offset: 67, seedOffset: 42 } - } else if (shareWordCount === 24) { - return { offset: 67, seedOffset: 32 } - } - throw new Error('Currently only recovery of secrets with 24, 18 or 12 words are supported') - } - - private getRandomIntInclusive(min: number, max: number): number { - const randomBuffer = new Uint32Array(1) - window.crypto.getRandomValues(randomBuffer) - let randomNumber = randomBuffer[0] / (0xffffffff + 1) - min = Math.ceil(min) - max = Math.floor(max) - return Math.floor(randomNumber * (max - min + 1)) + min - } - - entropyToMnemonic(entropy: string): string { - return bip39.entropyToMnemonic(entropy) - } - - mnemonicToEntropy(mnemonic: string): string { - const usedList = BIP39Signer.determineWordList(mnemonic) - - if (!usedList) { - throw Error('non-compatible mnemonic') - } - - return bip39.mnemonicToEntropy(mnemonic, usedList) - } - - static prepareMnemonic(mnemonic: string): string { - return mnemonic.trim().toLowerCase() - } - - static validateMnemonic(mnemonic: string): boolean { - const preparedMnemonic = BIP39Signer.prepareMnemonic(mnemonic) - const wordList = BIP39Signer.determineWordList(preparedMnemonic) - return bip39.validateMnemonic(preparedMnemonic, wordList) - } - - static determineWordList(mnemonic: string): any[] { - for (const list of BIP39Signer.wordLists()) { - if (bip39.validateMnemonic(BIP39Signer.prepareMnemonic(mnemonic), list)) { - return list - } - } - } - - static wordLists(): any[] { - return [ - bip39.wordlists.english - /* - bip39.wordlists.chinese_simplified, - bip39.wordlists.chinese_traditional, - bip39.wordlists.french, - bip39.wordlists.italian, - bip39.wordlists.japanese, - bip39.wordlists.korean, - bip39.wordlists.spanish - */ - ] - } - - generateSocialRecover(secret: string, numberOfShares: number, threshold: number): string[] { - if (threshold > numberOfShares) { - throw new Error('The threshold needs to be smaller or equal to the number or shares') - } else if (numberOfShares < 2) { - throw new Error('At least two shares are needed') - } - const secretDigester = sha3_256.create() - - // TODO check if mnemoinc or secret - const seed: string = bip39.mnemonicToEntropy(secret) - secretDigester.update(seed) - - const shares = secretJS.share(seed + secretDigester.hex().slice(0, this.checkSumLength), numberOfShares, threshold) - const calculatedShares = [] - for (let i = 0; i < shares.length; i++) { - let paddedShare = shares[i].concat( - Array(29) - .fill(0) - .map(() => this.getRandomIntInclusive(0, 9)) - .join('') - ) - calculatedShares[i] = `${bip39.entropyToMnemonic(paddedShare.slice(0, 64))} ${bip39.entropyToMnemonic(paddedShare.slice(64, 128))}` - } - return calculatedShares - } - - recoverKey(shares: any): string { - const offset = this.getOffsetMapping(shares[0]) - let translatedShares = [] - for (let i = 0; i < shares.length; i++) { - let words = shares[i].split(' ') - let firstHalf = words.slice(0, 24) - let secondHalf = words.slice(24, words.length) - translatedShares[i] = `${bip39.mnemonicToEntropy(firstHalf.join(' '))}${bip39.mnemonicToEntropy(secondHalf.join(' '))}`.substr( - 0, - offset.offset - ) - } - const secretDigester = sha3_256.create() - const combine = secretJS.combine(translatedShares) - const seed = combine.slice(0, -this.checkSumLength) - - secretDigester.update(seed) - - let checksum = secretDigester.hex().slice(0, this.checkSumLength) - let checksum2 = combine.substr(-this.checkSumLength) - if (checksum !== checksum2) { - throw new Error( - 'Checksum error, either the passed shares were generated for different secrets or the amount of shares is below the threshold' - ) - } - return bip39.entropyToMnemonic(seed) - } -} diff --git a/src/models/Warning.ts b/src/models/Warning.ts deleted file mode 100644 index f0299585..00000000 --- a/src/models/Warning.ts +++ /dev/null @@ -1,5 +0,0 @@ -enum Warning { - ROOT, - SCREENSHOT, - NETWORK -} diff --git a/src/models/mixins.ts b/src/models/mixins.ts deleted file mode 100644 index a76d8e96..00000000 --- a/src/models/mixins.ts +++ /dev/null @@ -1,7 +0,0 @@ -export function applyMixins(derivedCtor: any, baseCtors: any[]) { - baseCtors.forEach(baseCtor => { - Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => { - derivedCtor.prototype[name] = baseCtor.prototype[name] - }) - }) -} diff --git a/src/models/secret.ts b/src/models/secret.ts deleted file mode 100644 index 313fe785..00000000 --- a/src/models/secret.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { UUID } from 'angular2-uuid' -import { BIP39Signer } from './BIP39Signer' -import { AirGapWallet } from 'airgap-coin-lib' -import { InteractionSetting } from '../providers/interaction/interaction' - -const signer = new BIP39Signer() - -export class Secret { - public id: string = UUID.UUID() - public label: string - - public secretHex: string - public isParanoia: boolean - public hasSocialRecovery: boolean - public interactionSetting: InteractionSetting - - public wallets: AirGapWallet[] - - private twofactor: string - - constructor(seed: string, label: string = '', isParanoia = false, interactionSetting = InteractionSetting.UNDETERMINED) { - this.label = label - this.isParanoia = isParanoia - this.interactionSetting = interactionSetting - - // TODO: better check whether this is a mnemonic (validate) - if (seed && seed.indexOf(' ') > -1) { - seed = signer.mnemonicToEntropy(seed) - } - - this.secretHex = seed - } - - flushSecret() { - delete this.secretHex - } - - recoverMnemonicFromHex(hex: string): string { - return signer.entropyToMnemonic(hex) - } - - hasTwofactor(): boolean { - return this.twofactor && this.twofactor.length > 0 - } - - static generateSocialRecover(secret: string, numberOfShares: number, threshold: number): string[] { - return signer.generateSocialRecover(secret, numberOfShares, threshold) - } - - static recoverSecretFromShares(shares: string[]): string { - return signer.recoverKey(shares) - } - - static init(obj) { - return Object.assign(new Secret(null, obj.label), obj) - } -} diff --git a/src/models/serializable.model.ts b/src/models/serializable.model.ts deleted file mode 100644 index 5f346608..00000000 --- a/src/models/serializable.model.ts +++ /dev/null @@ -1,16 +0,0 @@ -export class Serializable { - fillFromJSON(json: string): this { - let jsonObj = JSON.parse(json) - for (let propName in jsonObj) { - this[propName] = JSON.parse(jsonObj[propName]) - } - return this - } - - fillFromObj(jsonObj: Object): this { - for (let propName in jsonObj) { - this[propName] = jsonObj[propName] - } - return this - } -} diff --git a/src/models/transaction.model.ts b/src/models/transaction.model.ts deleted file mode 100644 index c86eb391..00000000 --- a/src/models/transaction.model.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { TransactionParameter } from './transactionparameters' -import { IAirGapTransaction } from 'airgap-coin-lib' -import BigNumber from 'bignumber.js' - -export class Transaction implements IAirGapTransaction { - amount: BigNumber - blockHeight: string - data: string - fee: BigNumber - from: string[] - hash: string - isInbound: boolean - meta: {} - protocolIdentifier: string - to: string[] - timestamp: number - - information: TransactionParameter[] = [] - - payload: string - publicKey: string -} diff --git a/src/models/transactionparameters.ts b/src/models/transactionparameters.ts deleted file mode 100644 index 6b5c8c64..00000000 --- a/src/models/transactionparameters.ts +++ /dev/null @@ -1,5 +0,0 @@ -export class TransactionParameter { - label: string - value: string - type: string -} diff --git a/src/pages/about/about.html b/src/pages/about/about.html deleted file mode 100644 index 34c92046..00000000 --- a/src/pages/about/about.html +++ /dev/null @@ -1,10 +0,0 @@ - - {{ 'about.label' | translate }} - - - - {{ appName }} - {{ packageName }} - {{ versionCode }} - {{ versionNumber }} - diff --git a/src/pages/about/about.module.ts b/src/pages/about/about.module.ts deleted file mode 100644 index 90439958..00000000 --- a/src/pages/about/about.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { TranslateModule } from '@ngx-translate/core' -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { AboutPage } from './about' - -@NgModule({ - declarations: [AboutPage], - imports: [IonicPageModule.forChild(AboutPage), TranslateModule] -}) -export class AboutPageModule {} diff --git a/src/pages/about/about.scss b/src/pages/about/about.scss deleted file mode 100644 index 639956d6..00000000 --- a/src/pages/about/about.scss +++ /dev/null @@ -1,3 +0,0 @@ -page-about { - -} diff --git a/src/pages/about/about.ts b/src/pages/about/about.ts deleted file mode 100644 index 9a01834c..00000000 --- a/src/pages/about/about.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Component } from '@angular/core' -import { AppVersion } from '@ionic-native/app-version' -import { NavController, NavParams } from 'ionic-angular' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -@Component({ - selector: 'page-about', - templateUrl: 'about.html' -}) -export class AboutPage { - public appName = '' - public packageName = '' - public versionNumber = '' - public versionCode = '' - - constructor(public navCtrl: NavController, public navParams: NavParams, private app: AppVersion) { - this.updateVersions().catch(handleErrorLocal(ErrorCategory.CORDOVA_PLUGIN)) - } - - async updateVersions() { - this.appName = await this.app.getAppName() - this.packageName = await this.app.getPackageName() - this.versionNumber = await this.app.getVersionNumber() - this.versionCode = String(await this.app.getVersionCode()) - } -} diff --git a/src/pages/distribution-onboarding/distribution-onboarding.html b/src/pages/distribution-onboarding/distribution-onboarding.html deleted file mode 100644 index d164077e..00000000 --- a/src/pages/distribution-onboarding/distribution-onboarding.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - -

- -

{{ 'distribution-onboarding.ask-permission.text' | translate }}

-
- - - - - - - - -
- - -

- -

{{ 'distribution-onboarding.no-vm.text' | translate }}

-
- - - - - - - - -
-
-
diff --git a/src/pages/distribution-onboarding/distribution-onboarding.module.ts b/src/pages/distribution-onboarding/distribution-onboarding.module.ts deleted file mode 100644 index 59f7c78e..00000000 --- a/src/pages/distribution-onboarding/distribution-onboarding.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { DistributionOnboardingPage } from './distribution-onboarding' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [DistributionOnboardingPage], - imports: [IonicPageModule.forChild(DistributionOnboardingPage), TranslateModule] -}) -export class DistributionOnboardingPageModule {} diff --git a/src/pages/distribution-onboarding/distribution-onboarding.scss b/src/pages/distribution-onboarding/distribution-onboarding.scss deleted file mode 100644 index c38e552b..00000000 --- a/src/pages/distribution-onboarding/distribution-onboarding.scss +++ /dev/null @@ -1,2 +0,0 @@ -page-distribution-onboarding { -} diff --git a/src/pages/distribution-onboarding/distribution-onboarding.ts b/src/pages/distribution-onboarding/distribution-onboarding.ts deleted file mode 100644 index f4937aee..00000000 --- a/src/pages/distribution-onboarding/distribution-onboarding.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Component, ViewChild } from '@angular/core' -import { IonicPage, ViewController, Slides } from 'ionic-angular' -import { Storage } from '@ionic/storage' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -@IonicPage() -@Component({ - selector: 'page-distribution-onboarding', - templateUrl: 'distribution-onboarding.html' -}) -export class DistributionOnboardingPage { - @ViewChild(Slides) slides: Slides - - constructor(private viewController: ViewController, private storage: Storage) {} - - async next() { - this.slides.slideNext() - } - - async accept() { - await this.storage.set('DISCLAIMER_ELECTRON', true) - this.viewController.dismiss().catch(handleErrorLocal(ErrorCategory.IONIC_MODAL)) - } -} diff --git a/src/pages/interaction-selection-settings/interaction-selection-settings.html b/src/pages/interaction-selection-settings/interaction-selection-settings.html deleted file mode 100644 index 92b0ab6a..00000000 --- a/src/pages/interaction-selection-settings/interaction-selection-settings.html +++ /dev/null @@ -1,67 +0,0 @@ - - - -

{{ 'interaction-selection-settings.title' | translate }}

-
-
-
- - -

-

- -

{{ 'interaction-selection-settings.text' | translate }}

- - - - {{ 'interaction-selection-settings.selector.always' | translate }} - - - - {{ 'interaction-selection-settings.selector.same-device' | translate }} - - - - {{ 'interaction-selection-settings.selector.offline-device' | translate }} - - - - -

{{ 'interaction-selection-settings.description' | translate }}

-
- - - - - - - - - - - diff --git a/src/pages/interaction-selection-settings/interaction-selection-settings.module.ts b/src/pages/interaction-selection-settings/interaction-selection-settings.module.ts deleted file mode 100644 index 0c7ed4f2..00000000 --- a/src/pages/interaction-selection-settings/interaction-selection-settings.module.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { InteractionSelectionSettingsPage } from './interaction-selection-settings' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [InteractionSelectionSettingsPage], - imports: [IonicPageModule.forChild(InteractionSelectionSettingsPage), TranslateModule], - entryComponents: [InteractionSelectionSettingsPage] -}) -export class InteractionSelectionSettingsPageModule {} diff --git a/src/pages/interaction-selection-settings/interaction-selection-settings.scss b/src/pages/interaction-selection-settings/interaction-selection-settings.scss deleted file mode 100644 index 4bde7d84..00000000 --- a/src/pages/interaction-selection-settings/interaction-selection-settings.scss +++ /dev/null @@ -1,2 +0,0 @@ -page-interaction-selection-settings { -} diff --git a/src/pages/interaction-selection-settings/interaction-selection-settings.ts b/src/pages/interaction-selection-settings/interaction-selection-settings.ts deleted file mode 100644 index 83e85735..00000000 --- a/src/pages/interaction-selection-settings/interaction-selection-settings.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage, NavController, NavParams, Platform } from 'ionic-angular' -import { WalletSharePage } from '../wallet-share/wallet-share' -import { TransactionSignedPage } from '../transaction-signed/transaction-signed' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' -import { SecretsProvider } from '../../providers/secrets/secrets.provider' -import { Secret } from '../../models/secret' -import { InteractionSetting } from '../../providers/interaction/interaction' -import { - IInteractionOptions, - InteractionOperationType, - InteractionCommunicationType, - InteractionProvider -} from '../../providers/interaction/interaction' - -declare let window: any - -@IonicPage() -@Component({ - selector: 'page-interaction-selection-settings', - templateUrl: 'interaction-selection-settings.html' -}) -export class InteractionSelectionSettingsPage { - public interactionSetting = InteractionSetting - public selectedSetting: InteractionSetting - public isEdit = false - private secret: Secret - - private interactionOptions: IInteractionOptions - - constructor( - public navCtrl: NavController, - public navParams: NavParams, - private secretProvider: SecretsProvider, - private platform: Platform, - private interactionProvider: InteractionProvider - ) {} - - async ionViewWillLoad() { - this.isEdit = await this.navParams.get('isEdit') - this.interactionOptions = await this.navParams.get('interactionOptions') - - if (this.isEdit) { - this.secret = this.navParams.get('secret') - this.selectedSetting = this.secret.interactionSetting - } else { - this.secret = this.secretProvider.getActiveSecret() - this.selectedSetting = - this.interactionOptions.communicationType === InteractionCommunicationType.QR - ? InteractionSetting.OFFLINE_DEVICE - : this.interactionOptions.communicationType === InteractionCommunicationType.DEEPLINK - ? InteractionSetting.SAME_DEVICE - : undefined - this.secret.interactionSetting = this.selectedSetting || InteractionSetting.UNDETERMINED // Default to store is undetermined - this.selectedSetting = this.selectedSetting || InteractionSetting.ALWAYS_ASK // Default to display is always ask - this.secretProvider.addOrUpdateSecret(this.secret) - } - } - - onSelectedSettingChange(selectedSetting) { - this.secret.interactionSetting = selectedSetting - this.secretProvider.addOrUpdateSecret(this.secret) - } - - goToNextPage() { - this.interactionProvider.startInteraction(this.navCtrl, this.interactionOptions, this.secret) - } - - popToRoot() { - this.navCtrl.popToRoot().catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } -} diff --git a/src/pages/interaction-selection/interaction-selection.html b/src/pages/interaction-selection/interaction-selection.html deleted file mode 100644 index feb226f9..00000000 --- a/src/pages/interaction-selection/interaction-selection.html +++ /dev/null @@ -1,29 +0,0 @@ - - - -

{{ 'interaction-selection.title' | translate }}

-
-
-
- - -

- - - - - -

{{ 'interaction-selection.same-device_info' | translate }}

-
- - - - - -

{{ 'interaction-selection.offline-device_info' | translate }}

-
-
diff --git a/src/pages/interaction-selection/interaction-selection.module.ts b/src/pages/interaction-selection/interaction-selection.module.ts deleted file mode 100644 index c94348d6..00000000 --- a/src/pages/interaction-selection/interaction-selection.module.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { InteractionSelectionPage } from './interaction-selection' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [InteractionSelectionPage], - imports: [IonicPageModule.forChild(InteractionSelectionPage), TranslateModule], - entryComponents: [InteractionSelectionPage] -}) -export class InteractionSelectionPageModule {} diff --git a/src/pages/interaction-selection/interaction-selection.scss b/src/pages/interaction-selection/interaction-selection.scss deleted file mode 100644 index a06c5335..00000000 --- a/src/pages/interaction-selection/interaction-selection.scss +++ /dev/null @@ -1,5 +0,0 @@ -page-interaction-selection { - ion-row img { - height: 20vh; - } -} diff --git a/src/pages/interaction-selection/interaction-selection.ts b/src/pages/interaction-selection/interaction-selection.ts deleted file mode 100644 index b4a030b7..00000000 --- a/src/pages/interaction-selection/interaction-selection.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { SecretsProvider } from '../../providers/secrets/secrets.provider' -import { Component } from '@angular/core' -import { IonicPage, NavController, NavParams } from 'ionic-angular' -import { AirGapWallet, DeserializedSyncProtocol, EncodedType, SyncProtocolUtils, SyncWalletRequest } from 'airgap-coin-lib' -import { InteractionSelectionSettingsPage } from '../interaction-selection-settings/interaction-selection-settings' -import { ErrorCategory, handleErrorLocal } from '../../providers/error-handler/error-handler' -import { WalletSharePage } from '../wallet-share/wallet-share' -import { ShareUrlProvider } from '../../providers/share-url/share-url' -import { - InteractionSetting, - InteractionProvider, - IInteractionOptions, - InteractionCommunicationType -} from '../../providers/interaction/interaction' -import { Transaction } from '../../models/transaction.model' -import { Secret } from '../../models/secret' - -@IonicPage() -@Component({ - selector: 'page-interaction-selection', - templateUrl: 'interaction-selection.html' -}) -export class InteractionSelectionPage { - private interactionOptions: IInteractionOptions - - constructor( - public navCtrl: NavController, - public navParams: NavParams, - private secretsProvider: SecretsProvider, - private interactionProvider: InteractionProvider - ) { - this.interactionOptions = this.navParams.get('interactionOptions') - } - - async selectOfflineDevice() { - this.interactionOptions.communicationType = InteractionCommunicationType.QR - this.goToNextPage() - } - - async selectSameDevice() { - this.interactionOptions.communicationType = InteractionCommunicationType.DEEPLINK - this.goToNextPage() - } - - private goToNextPage() { - const secret = this.secretsProvider.getActiveSecret() - if (secret.interactionSetting === InteractionSetting.UNDETERMINED) { - this.goToInteractionSelectionSettingsPage(this.interactionOptions) - } else { - this.interactionProvider.startInteraction(this.navCtrl, this.interactionOptions, secret) - } - } - - private goToInteractionSelectionSettingsPage(interactionOptions: IInteractionOptions) { - this.navCtrl - .push(InteractionSelectionSettingsPage, { - interactionOptions: interactionOptions - }) - .catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } -} diff --git a/src/pages/introduction/introduction.html b/src/pages/introduction/introduction.html deleted file mode 100644 index 9c7f8516..00000000 --- a/src/pages/introduction/introduction.html +++ /dev/null @@ -1,75 +0,0 @@ - - - {{ 'introduction.title' | translate }} - - - - - - {{ 'introduction.highest.label' | translate }} - {{ 'introduction.medium.label' | translate }} - - - -

- - - - -
{{ 'introduction.vault.heading' | translate }}
-

-
-
- - - - - {{ 'introduction.communication.highest_text' | translate }} - - - - - - -
{{ 'introduction.wallet.heading' | translate }}
-

{{ 'introduction.wallet.text' | translate }}

-
-
-
- - -

- - - - -
{{ 'introduction.vault.heading' | translate }}
-

-
-
- - - - - {{ 'introduction.communication.medium_text' | translate }} - - - - - - -
{{ 'introduction.wallet.heading' | translate }}
-

{{ 'introduction.wallet.text' | translate }}

-
-
-
-
- - - - - - - - - diff --git a/src/pages/introduction/introduction.module.ts b/src/pages/introduction/introduction.module.ts deleted file mode 100644 index cce36158..00000000 --- a/src/pages/introduction/introduction.module.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule, Platform } from 'ionic-angular' -import { IntroductionPage } from './introduction' -import { IonicStorageModule } from '@ionic/storage' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [IntroductionPage], - imports: [IonicStorageModule, IonicPageModule.forChild(IntroductionPage), TranslateModule], - providers: [Platform], - entryComponents: [IntroductionPage] -}) -export class IntroductionPageModule {} diff --git a/src/pages/introduction/introduction.scss b/src/pages/introduction/introduction.scss deleted file mode 100644 index e85bde20..00000000 --- a/src/pages/introduction/introduction.scss +++ /dev/null @@ -1,6 +0,0 @@ -page-introduction { - .connector--img { - height: 40px; - width: 40px; - } -} diff --git a/src/pages/introduction/introduction.ts b/src/pages/introduction/introduction.ts deleted file mode 100644 index dc479033..00000000 --- a/src/pages/introduction/introduction.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Component } from '@angular/core' -import { Platform, ViewController } from 'ionic-angular' -import { Storage } from '@ionic/storage' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -declare var cordova: any - -@Component({ - selector: 'page-introduction', - templateUrl: 'introduction.html' -}) -export class IntroductionPage { - public security: string = 'highest' - - constructor(private viewController: ViewController, private platform: Platform, private storage: Storage) {} - - accept() { - this.storage - .set('INTRODUCTION_INITIAL', true) - .then(() => { - this.viewController.dismiss().catch(handleErrorLocal(ErrorCategory.IONIC_MODAL)) - }) - .catch(handleErrorLocal(ErrorCategory.SECURE_STORAGE)) - } - - public downloadClient() { - this.openUrl('https://github.com/airgap-it') - } - - public downloadApp() { - // This should open App Store and not InAppBrowser - if (this.platform.is('android')) { - window.open('https://play.google.com/store/apps/details?id=it.airgap.wallet') - } else if (this.platform.is('ios')) { - window.open('itms-apps://itunes.apple.com/app/id1420996542') // AirGap Wallet - } - } - - private openUrl(url: string) { - if (this.platform.is('ios') || this.platform.is('android')) { - cordova.InAppBrowser.open(url, '_system', 'location=true') - } else { - window.open(url, '_blank') - } - } -} diff --git a/src/pages/local-authentication-onboarding/local-authentication-onboarding.html b/src/pages/local-authentication-onboarding/local-authentication-onboarding.html deleted file mode 100644 index 8f8fb262..00000000 --- a/src/pages/local-authentication-onboarding/local-authentication-onboarding.html +++ /dev/null @@ -1,19 +0,0 @@ - - - -

- - - -

{{ 'local-authentication-onboarding.text' | translate }}

-
- - - - - - - - diff --git a/src/pages/local-authentication-onboarding/local-authentication-onboarding.module.ts b/src/pages/local-authentication-onboarding/local-authentication-onboarding.module.ts deleted file mode 100644 index 79b4e21d..00000000 --- a/src/pages/local-authentication-onboarding/local-authentication-onboarding.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { LocalAuthenticationOnboardingPage } from './local-authentication-onboarding' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [LocalAuthenticationOnboardingPage], - imports: [IonicPageModule.forChild(LocalAuthenticationOnboardingPage), TranslateModule] -}) -export class LocalAuthenticationOnboardingPageModule {} diff --git a/src/pages/local-authentication-onboarding/local-authentication-onboarding.scss b/src/pages/local-authentication-onboarding/local-authentication-onboarding.scss deleted file mode 100644 index ebcdd659..00000000 --- a/src/pages/local-authentication-onboarding/local-authentication-onboarding.scss +++ /dev/null @@ -1,5 +0,0 @@ -page-local-authentication-onboarding { - img { - height: 40vh; - } -} diff --git a/src/pages/local-authentication-onboarding/local-authentication-onboarding.ts b/src/pages/local-authentication-onboarding/local-authentication-onboarding.ts deleted file mode 100644 index 4cfecca4..00000000 --- a/src/pages/local-authentication-onboarding/local-authentication-onboarding.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage, NavController, NavParams } from 'ionic-angular' -import { Storage } from '@ionic/storage' -import { SecretsProvider } from '../../providers/secrets/secrets.provider' - -@IonicPage() -@Component({ - selector: 'page-local-authentication-onboarding', - templateUrl: 'local-authentication-onboarding.html' -}) -export class LocalAuthenticationOnboardingPage { - private protocolIdentifier: string - private isHDWallet: boolean - private customDerivationPath: string - - constructor( - public navCtrl: NavController, - public navParams: NavParams, - private storage: Storage, - private secretsProvider: SecretsProvider - ) { - this.protocolIdentifier = this.navParams.get('protocolIdentifier') - this.isHDWallet = this.navParams.get('isHDWallet') - this.customDerivationPath = this.navParams.get('customDerivationPath') - } - - async authenticate() { - await this.storage.set('DISCLAIMER_HIDE_LOCAL_AUTH_ONBOARDING', true) - try { - await this.secretsProvider.addWallet(this.protocolIdentifier, this.isHDWallet, this.customDerivationPath) - } catch (e) { - return await this.navCtrl.pop() - } - await this.navCtrl.popToRoot() - } -} diff --git a/src/pages/pages.module.ts b/src/pages/pages.module.ts deleted file mode 100644 index 306c0a6d..00000000 --- a/src/pages/pages.module.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicModule } from 'ionic-angular' -import { BrowserModule } from '@angular/platform-browser' -import { MaterialIconsModule } from 'ionic2-material-icons' -import { ComponentsModule } from '../components/components.module' -import { AboutPageModule } from './about/about.module' -import { SecretGeneratePageModule } from './secret-generate/secret-generate.module' -import { SecretValidatePageModule } from './secret-validate/secret-validate.module' -import { SecretCreatePageModule } from './secret-create/secret-create.module' -import { SecretEditPageModule } from './secret-edit/secret-edit.module' -import { SecretRulesPageModule } from './secret-rules/secret-rules.module' -import { SecretShowPageModule } from './secret-show/secret-show.module' -import { WalletAddressPageModule } from './wallet-address/wallet-address.module' -import { TabsPageModule } from './tabs/tabs.module' -import { TabSettingsPageModule } from './tab-settings/tab-settings.module' -import { TransactionDetailPageModule } from './transaction-detail/transaction-detail.module' -import { TransactionSignedPageModule } from './transaction-signed/transaction-signed.module' -import { TabWalletsPageModule } from './tab-wallets/tab-wallets.module' -import { SecretImportPageModule } from './secret-import/secret-import.module' -import { WarningsModalPageModule } from './warnings-modal/warnings-modal.module' -import { SocialRecoverySetupPageModule } from './social-recovery-setup/social-recovery-setup.module' -import { TabScanPageModule } from './tab-scan/tab-scan.module' -import { WalletSelectCoinsPageModule } from './wallet-select-coins/wallet-select-coins.module' -import { SocialRecoveryShowSharePageModule } from './social-recovery-show-share/social-recovery-show-share.module' -import { SocialRecoveryValidateSharePageModule } from './social-recovery-validate-share/social-recovery-validate-share.module' -import { WalletSharePageModule } from './wallet-share/wallet-share.module' -import { SocialRecoveryImportPageModule } from './social-recovery-import/social-recovery-import.module' -import { IntroductionPageModule } from '../pages/introduction/introduction.module' -import { LocalAuthenticationOnboardingPageModule } from './local-authentication-onboarding/local-authentication-onboarding.module' -import { SecretGenerateOnboardingPageModule } from './secret-generate-onboarding/secret-generate-onboarding.module' -import { DistributionOnboardingPageModule } from './distribution-onboarding/distribution-onboarding.module' -import { InteractionSelectionPageModule } from './interaction-selection/interaction-selection.module' -import { InteractionSelectionSettingsPageModule } from './interaction-selection-settings/interaction-selection-settings.module' - -@NgModule({ - imports: [ - IonicModule, - BrowserModule, - MaterialIconsModule, - ComponentsModule, - AboutPageModule, - SecretGeneratePageModule, - SecretGenerateOnboardingPageModule, - SecretValidatePageModule, - SecretCreatePageModule, - SecretEditPageModule, - SecretRulesPageModule, - SecretShowPageModule, - WalletAddressPageModule, - WalletSharePageModule, - TabsPageModule, - TabSettingsPageModule, - TabScanPageModule, - TransactionDetailPageModule, - TransactionSignedPageModule, - TabWalletsPageModule, - SecretImportPageModule, - WarningsModalPageModule, - SocialRecoverySetupPageModule, - SocialRecoveryShowSharePageModule, - SocialRecoveryValidateSharePageModule, - SocialRecoveryImportPageModule, - WalletSelectCoinsPageModule, - LocalAuthenticationOnboardingPageModule, - DistributionOnboardingPageModule, - IntroductionPageModule, - InteractionSelectionPageModule, - InteractionSelectionSettingsPageModule - ], - exports: [] -}) -export class PagesModule {} diff --git a/src/pages/secret-create/secret-create.html b/src/pages/secret-create/secret-create.html deleted file mode 100644 index fddf4f52..00000000 --- a/src/pages/secret-create/secret-create.html +++ /dev/null @@ -1,28 +0,0 @@ - - - -

{{ 'secret-create.heading' | translate }}

- -

{{ 'secret-create.text' | translate }}

- - - -

{{ 'secret-create.generate.text' | translate }}

- - - -

{{ 'secret-create.import.text' | translate }}

- - - -

{{ 'secret-create.social-recovery.text' | translate }}

-
diff --git a/src/pages/secret-create/secret-create.module.ts b/src/pages/secret-create/secret-create.module.ts deleted file mode 100644 index 122009f3..00000000 --- a/src/pages/secret-create/secret-create.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { SecretCreatePage } from './secret-create' -import { MaterialIconsModule } from 'ionic2-material-icons' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [SecretCreatePage], - imports: [MaterialIconsModule, IonicPageModule.forChild(SecretCreatePage), TranslateModule], - entryComponents: [SecretCreatePage] -}) -export class SecretCreatePageModule {} diff --git a/src/pages/secret-create/secret-create.scss b/src/pages/secret-create/secret-create.scss deleted file mode 100644 index 8e3a18bd..00000000 --- a/src/pages/secret-create/secret-create.scss +++ /dev/null @@ -1,2 +0,0 @@ -page-secret-create { -} diff --git a/src/pages/secret-create/secret-create.ts b/src/pages/secret-create/secret-create.ts deleted file mode 100644 index eb285e36..00000000 --- a/src/pages/secret-create/secret-create.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage, NavController } from 'ionic-angular' -import { SecretGeneratePage } from '../secret-generate/secret-generate' -import { SecretImportPage } from '../secret-import/secret-import' -import { SocialRecoveryImportPage } from '../social-recovery-import/social-recovery-import' -import { SecretsProvider } from '../../providers/secrets/secrets.provider' -import { SecretGenerateOnboardingPage } from '../secret-generate-onboarding/secret-generate-onboarding' -import { Storage } from '@ionic/storage' -import { ErrorCategory, handleErrorLocal } from '../../providers/error-handler/error-handler' - -@IonicPage() -@Component({ - selector: 'page-secret-create', - templateUrl: 'secret-create.html' -}) -export class SecretCreatePage { - constructor(private navController: NavController, private secretsProvider: SecretsProvider, private storage: Storage) {} - - public isRoot(): boolean { - return this.secretsProvider.currentSecretsList.getValue().length === 0 - } - - public async goToGenerate() { - const hasShownDisclaimer = await this.storage.get('DISCLAIMER_GENERATE_INITIAL') - if (hasShownDisclaimer) { - this.navController.push(SecretGeneratePage).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } else { - this.navController.push(SecretGenerateOnboardingPage).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - } - - public goToImport() { - this.navController.push(SecretImportPage).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - - public goToSocialRecoveryImport() { - this.navController.push(SocialRecoveryImportPage).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } -} diff --git a/src/pages/secret-edit/secret-edit-popover/secret-edit-popover.component.ts b/src/pages/secret-edit/secret-edit-popover/secret-edit-popover.component.ts deleted file mode 100644 index 0ff81154..00000000 --- a/src/pages/secret-edit/secret-edit-popover/secret-edit-popover.component.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { Component } from '@angular/core' -import { ViewController, NavParams, AlertController } from 'ionic-angular' -import { Secret } from '../../../models/secret' -import { SecretsProvider } from '../../../providers/secrets/secrets.provider' -import { TranslateService } from '@ngx-translate/core' -import { handleErrorLocal, ErrorCategory } from '../../../providers/error-handler/error-handler' - -@Component({ - template: ` - - Settings - - - ` -}) -export class SecretEditPopoverComponent { - private secret: Secret - private onDelete: Function - - constructor( - private alertCtrl: AlertController, - private navParams: NavParams, - private secretsProvider: SecretsProvider, - private viewCtrl: ViewController, - private translateService: TranslateService - ) { - this.secret = this.navParams.get('secret') - this.onDelete = this.navParams.get('onDelete') - } - - delete() { - this.translateService - .get([ - 'secret-edit-delete-popover.title', - 'secret-edit-delete-popover.text', - 'secret-edit-delete-popover.cancel_label', - 'secret-edit-delete-popover.delete_label' - ]) - .subscribe(values => { - let title = values['secret-edit-delete-popover.title'] - let message = values['secret-edit-delete-popover.text'] - let cancelButton = values['secret-edit-delete-popover.cancel_label'] - let deleteButton = values['secret-edit-delete-popover.delete_label'] - let alert = this.alertCtrl.create({ - title: title, - message: message, - buttons: [ - { - text: cancelButton, - role: 'cancel', - handler: () => { - this.viewCtrl.dismiss().catch(handleErrorLocal(ErrorCategory.IONIC_MODAL)) - } - }, - { - text: deleteButton, - handler: () => { - this.secretsProvider.remove(this.secret).catch(handleErrorLocal(ErrorCategory.SECURE_STORAGE)) - this.viewCtrl.dismiss().catch(handleErrorLocal(ErrorCategory.IONIC_MODAL)) - - if (this.onDelete) { - this.onDelete() - } - } - } - ] - }) - alert.present().catch(handleErrorLocal(ErrorCategory.IONIC_ALERT)) - }) - } -} diff --git a/src/pages/secret-edit/secret-edit.html b/src/pages/secret-edit/secret-edit.html deleted file mode 100644 index 8604b0d3..00000000 --- a/src/pages/secret-edit/secret-edit.html +++ /dev/null @@ -1,80 +0,0 @@ - - - {{ isGenerating ? 'Save' : 'Edit' }} {{ 'secret-edit.title' | translate }} - - - - - - - - -

{{ 'secret-edit.text' | translate }}

- - - {{ 'secret-edit.secret_input_label' | translate }} - - - -

{{ 'secret-edit.security-level.heading' | translate }}

- -

{{ 'secret-edit.security-level.text' | translate }}

- - - - - - - - - - {{ 'secret-edit.passcode.label' | translate }} -

{{ 'secret-edit.passcode.text' | translate }}

-
- -
-
- -

{{ 'secret-edit.secret-recovery.heading' | translate }}

- -

{{ 'secret-edit.secret-recovery.text' | translate }}

- - - -

{{ 'secret-edit.interaction.label' | translate }}

- - -
- - - - - - - - diff --git a/src/pages/secret-edit/secret-edit.module.ts b/src/pages/secret-edit/secret-edit.module.ts deleted file mode 100644 index 0e03437c..00000000 --- a/src/pages/secret-edit/secret-edit.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { SecretEditPage } from './secret-edit' -import { ComponentsModule } from '../../components/components.module' -import { MaterialIconsModule } from 'ionic2-material-icons' -import { SecretEditPopoverComponent } from './secret-edit-popover/secret-edit-popover.component' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [SecretEditPage, SecretEditPopoverComponent], - imports: [ComponentsModule, MaterialIconsModule, IonicPageModule.forChild(SecretEditPage), TranslateModule], - entryComponents: [SecretEditPage, SecretEditPopoverComponent] -}) -export class SecretEditPageModule {} diff --git a/src/pages/secret-edit/secret-edit.scss b/src/pages/secret-edit/secret-edit.scss deleted file mode 100644 index b7ee3286..00000000 --- a/src/pages/secret-edit/secret-edit.scss +++ /dev/null @@ -1,5 +0,0 @@ -page-secret-create { - ion-icon { - color: white; - } -} diff --git a/src/pages/secret-edit/secret-edit.ts b/src/pages/secret-edit/secret-edit.ts deleted file mode 100644 index cc18e26c..00000000 --- a/src/pages/secret-edit/secret-edit.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage, NavController, NavParams, PopoverController } from 'ionic-angular' -import { Secret } from '../../models/secret' -import { InteractionSetting } from '../../providers/interaction/interaction' -import { SecretsProvider } from '../../providers/secrets/secrets.provider' -import { SocialRecoverySetupPage } from '../social-recovery-setup/social-recovery-setup' -import { SecretEditPopoverComponent } from './secret-edit-popover/secret-edit-popover.component' -import { WalletSelectCoinsPage } from '../wallet-select-coins/wallet-select-coins' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' -import { InteractionSelectionSettingsPage } from '../interaction-selection-settings/interaction-selection-settings' - -@IonicPage() -@Component({ - selector: 'page-secret-edit', - templateUrl: 'secret-edit.html' -}) -export class SecretEditPage { - isGenerating: boolean = false - public interactionSetting: boolean = false - - private secret: Secret - - constructor( - public navController: NavController, - public popoverCtrl: PopoverController, - public navParams: NavParams, - private secretsProvider: SecretsProvider - ) { - this.secret = this.navParams.get('secret') - this.isGenerating = this.navParams.get('isGenerating') - - this.interactionSetting = this.secret.interactionSetting !== InteractionSetting.UNDETERMINED - } - - confirm() { - this.secretsProvider - .addOrUpdateSecret(this.secret) - .then(async () => { - await this.dismiss() - if (this.isGenerating) { - this.navController.push(WalletSelectCoinsPage).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - }) - .catch(handleErrorLocal(ErrorCategory.SECURE_STORAGE)) - } - - dismiss() { - return this.navController.popToRoot() - } - - goToSocialRecoverySetup() { - this.navController.push(SocialRecoverySetupPage, { secret: this.secret }).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - - goToWalletInteraction() { - this.navController - .push(InteractionSelectionSettingsPage, { secret: this.secret, isEdit: true }) - .catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - - presentEditPopover(event) { - let popover = this.popoverCtrl.create(SecretEditPopoverComponent, { - secret: this.secret, - onDelete: () => { - this.dismiss().catch(handleErrorLocal(ErrorCategory.IONIC_MODAL)) - } - }) - popover - .present({ - ev: event - }) - .catch(handleErrorLocal(ErrorCategory.IONIC_MODAL)) - } -} diff --git a/src/pages/secret-generate-onboarding/secret-generate-onboarding.html b/src/pages/secret-generate-onboarding/secret-generate-onboarding.html deleted file mode 100644 index c846db0a..00000000 --- a/src/pages/secret-generate-onboarding/secret-generate-onboarding.html +++ /dev/null @@ -1,19 +0,0 @@ - - - -

- - - -

{{ 'secret-generate-onboarding.text' | translate }}

-
- - - - - - - - diff --git a/src/pages/secret-generate-onboarding/secret-generate-onboarding.module.ts b/src/pages/secret-generate-onboarding/secret-generate-onboarding.module.ts deleted file mode 100644 index 4dfba65c..00000000 --- a/src/pages/secret-generate-onboarding/secret-generate-onboarding.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { SecretGenerateOnboardingPage } from './secret-generate-onboarding' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [SecretGenerateOnboardingPage], - imports: [IonicPageModule.forChild(SecretGenerateOnboardingPage), TranslateModule] -}) -export class SecretGenerateOnboardingPageModule {} diff --git a/src/pages/secret-generate-onboarding/secret-generate-onboarding.scss b/src/pages/secret-generate-onboarding/secret-generate-onboarding.scss deleted file mode 100644 index 4b878093..00000000 --- a/src/pages/secret-generate-onboarding/secret-generate-onboarding.scss +++ /dev/null @@ -1,5 +0,0 @@ -page-secret-generate-onboarding { - img { - height: 45vh; - } -} diff --git a/src/pages/secret-generate-onboarding/secret-generate-onboarding.ts b/src/pages/secret-generate-onboarding/secret-generate-onboarding.ts deleted file mode 100644 index 195b1bac..00000000 --- a/src/pages/secret-generate-onboarding/secret-generate-onboarding.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage, NavController } from 'ionic-angular' -import { Storage } from '@ionic/storage' -import { SecretGeneratePage } from '../secret-generate/secret-generate' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -@IonicPage() -@Component({ - selector: 'page-secret-generate-onboarding', - templateUrl: 'secret-generate-onboarding.html' -}) -export class SecretGenerateOnboardingPage { - constructor(public navCtrl: NavController, private storage: Storage) {} - - async continue() { - await this.storage.set('DISCLAIMER_GENERATE_INITIAL', true) - this.navCtrl.push(SecretGeneratePage).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } -} diff --git a/src/pages/secret-generate/secret-generate.html b/src/pages/secret-generate/secret-generate.html deleted file mode 100644 index 798ff48d..00000000 --- a/src/pages/secret-generate/secret-generate.html +++ /dev/null @@ -1,54 +0,0 @@ - - - -

{{ 'secret-generate.heading' | translate }}

- -

{{ 'secret-generate.text' | translate }}

- - -
- -
- -

{{ 'secret-generate.description' | translate }}

- - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - diff --git a/src/pages/secret-generate/secret-generate.module.ts b/src/pages/secret-generate/secret-generate.module.ts deleted file mode 100644 index 3a9486f7..00000000 --- a/src/pages/secret-generate/secret-generate.module.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { NgModule, RendererFactory2 } from '@angular/core' -import { IonicPageModule, Platform } from 'ionic-angular' -import { SecretGeneratePage } from './secret-generate' -import { GyroscopeNativeService } from '../../providers/gyroscope/gyroscope.native.service' -import { CameraNativeService } from '../../providers/camera/camera.native.service' -import { CameraFactory } from '../../providers/camera/camera.factory' -import { AudioNativeService } from '../../providers/audio/audio.native.service' -import { AudioServiceFactory } from '../../providers/audio/audio.factory' -import { GyroscopeServiceFactory } from '../../providers/gyroscope/gyroscope.factory' -import { Gyroscope } from '@ionic-native/gyroscope' -import { SecureStorageService } from '../../providers/storage/secure-storage' -import { SecureStorageFactory } from '../../providers/storage/secure-storage.factory' -import { ComponentsModule } from '../../components/components.module' -import { MaterialIconsModule } from 'ionic2-material-icons' -import { ScannerProvider } from '../../providers/scanner/scanner' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [SecretGeneratePage], - imports: [ComponentsModule, MaterialIconsModule, IonicPageModule.forChild(SecretGeneratePage), TranslateModule], - providers: [ - Gyroscope, - ScannerProvider, - Platform, - { - provide: SecureStorageService, - useFactory: SecureStorageFactory, - deps: [Platform] - }, - { - provide: CameraNativeService, - useFactory: CameraFactory, - deps: [Platform, RendererFactory2] - }, - { - provide: AudioNativeService, - useFactory: AudioServiceFactory, - deps: [Platform] - }, - { - provide: GyroscopeNativeService, - useFactory: GyroscopeServiceFactory, - deps: [Platform, Gyroscope] - } - ], - entryComponents: [SecretGeneratePage] -}) -export class SecretGeneratePageModule {} diff --git a/src/pages/secret-generate/secret-generate.scss b/src/pages/secret-generate/secret-generate.scss deleted file mode 100644 index 31dba9c4..00000000 --- a/src/pages/secret-generate/secret-generate.scss +++ /dev/null @@ -1,38 +0,0 @@ -secret-generate { - .bar-button, - .content { - color: white; - } - - div#overlay { - position: fixed; - top: 50%; - left: 50%; - min-width: 100%; - min-height: 100%; - width: auto; - height: auto; - z-index: -99; - -ms-transform: translateX(-50%) translateY(-50%); - -moz-transform: translateX(-50%) translateY(-50%); - -webkit-transform: translateX(-50%) translateY(-50%); - transform: translateX(-50%) translateY(-50%); - background: rgba(color($colors, secondary), 0.5); - } - - video#bgvid { - position: fixed; - top: 50%; - left: 50%; - min-width: 100%; - min-height: 100%; - width: auto; - height: auto; - z-index: -100; - -ms-transform: translateX(-50%) translateY(-50%); - -moz-transform: translateX(-50%) translateY(-50%); - -webkit-transform: translateX(-50%) translateY(-50%); - transform: translateX(-50%) translateY(-50%); - background-size: cover; - } -} diff --git a/src/pages/secret-generate/secret-generate.ts b/src/pages/secret-generate/secret-generate.ts deleted file mode 100644 index 8fdfad62..00000000 --- a/src/pages/secret-generate/secret-generate.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { ChangeDetectorRef, Component, ViewChild, RendererFactory2, Renderer2, ElementRef } from '@angular/core' -import { NavController, Platform } from 'ionic-angular' -import { SecretRulesPage } from '../secret-rules/secret-rules' -import { Secret } from '../../models/secret' -import { CameraNativeService } from '../../providers/camera/camera.native.service' -import { AudioNativeService } from '../../providers/audio/audio.native.service' -import { EntropyService } from '../../providers/entropy/entropy.service' -import { GyroscopeNativeService } from '../../providers/gyroscope/gyroscope.native.service' -import { TouchEntropyComponent } from '../../components/touch-entropy/touch-entropy' -import { PermissionsProvider, PermissionTypes } from '../../providers/permissions/permissions' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -@Component({ - selector: 'secret-generate', - templateUrl: 'secret-generate.html' -}) -export class SecretGeneratePage { - public isBrowser = false - - private renderer: Renderer2 - - @ViewChild('videoElement') - videoElement: ElementRef - - @ViewChild('touchEntropy') - touchEntropy: TouchEntropyComponent - - public cameraEnabled = true - public audioEnabled = true - public gyroEnabled = true - public touchEnabled = true - - private ENTROPY_STARTUP_TIME = 5 - private startupTimeWaited = false - - entropy = { - isFull: false - } - - constructor( - private navController: NavController, - public gyroService: GyroscopeNativeService, - public entropyService: EntropyService, - public cameraService: CameraNativeService, - public audioService: AudioNativeService, - private platform: Platform, - private changeDetectorRef: ChangeDetectorRef, - private permissionsProvider: PermissionsProvider, - private rendererFactory: RendererFactory2 - ) { - this.isBrowser = !this.platform.is('cordova') - this.renderer = this.rendererFactory.createRenderer(null, null) - setTimeout(() => { - this.startupTimeWaited = true - this.checkEntropySourceStatus() - }, this.ENTROPY_STARTUP_TIME * 1000) - } - - checkEntropySourceStatus() { - if (this.startupTimeWaited) { - this.audioEnabled = this.audioService.getCollectedEntropyPercentage() !== 0 - this.cameraEnabled = this.cameraService.getCollectedEntropyPercentage() !== 0 - this.gyroEnabled = this.gyroService.getCollectedEntropyPercentage() !== 0 - // Touch will not be disabled - } - } - - async ionViewWillEnter() { - await this.platform.ready() - - if (this.isBrowser) { - this.cameraService.setVideoElement(this.videoElement) - } - this.cameraService.viewWillEnter() - this.injectCSS() - - await this.permissionsProvider.requestPermissions([PermissionTypes.CAMERA, PermissionTypes.MICROPHONE]) - - this.initEntropy() - } - - private injectCSS() { - // inject css to html, body, .ion-app, ion-content - this.renderer.addClass(document.body, 'hide-tabbar') - } - - private uninjectCSS() { - // removes injected css - this.renderer.removeClass(document.body, 'hide-tabbar') - } - - initEntropy() { - this.entropyService.addEntropySource(this.cameraService) - this.entropyService.addEntropySource(this.audioService) - this.entropyService.addEntropySource(this.gyroService) - this.entropyService.addEntropySource(this.touchEntropy) - this.entropyService - .startEntropyCollection() - .then(() => { - this.entropyService - .getEntropyUpdateObservable() - .auditTime(200) - .subscribe(() => { - this.checkEntropy() - }) - }) - .catch(handleErrorLocal(ErrorCategory.ENTROPY_COLLECTION)) - } - - checkEntropy() { - this.changeDetectorRef.detectChanges() - this.checkEntropySourceStatus() - - const enabledSources = [this.audioEnabled, this.cameraEnabled, this.gyroEnabled, this.touchEnabled] - const percentageNeeded = enabledSources.reduce((a, b) => a + (b ? 100 : 0), 0) - - if ( - Math.min(100, this.audioService.getCollectedEntropyPercentage()) + - Math.min(100, this.cameraService.getCollectedEntropyPercentage()) + - Math.min(100, this.gyroService.getCollectedEntropyPercentage()) + - Math.min(100, this.touchEntropy.getCollectedEntropyPercentage()) >= - percentageNeeded - ) { - this.entropy.isFull = true - } - } - - ionViewDidLeave() { - this.cameraService.viewDidLeave() - this.uninjectCSS() - this.entropyService.stopEntropyCollection().catch(handleErrorLocal(ErrorCategory.ENTROPY_COLLECTION)) - } - - goToSecretRulesPage() { - this.entropyService - .getEntropyAsHex() - .then(hashHex => { - let secret = new Secret(hashHex) - this.navController.push(SecretRulesPage, { secret: secret }).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - }) - .catch(handleErrorLocal(ErrorCategory.ENTROPY_COLLECTION)) - } -} diff --git a/src/pages/secret-import/secret-import.html b/src/pages/secret-import/secret-import.html deleted file mode 100644 index 9eecddf9..00000000 --- a/src/pages/secret-import/secret-import.html +++ /dev/null @@ -1,43 +0,0 @@ - - - -

{{ 'secret-import.title' | translate }}

-
-
-
- - -

{{ 'secret-import.text' | translate }}

- - - - -

- {{ 'secret-import.warning' | translate }} -

-
- - - - - - - - diff --git a/src/pages/secret-import/secret-import.module.ts b/src/pages/secret-import/secret-import.module.ts deleted file mode 100644 index d3fcb21e..00000000 --- a/src/pages/secret-import/secret-import.module.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { SecretImportPage } from './secret-import' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [SecretImportPage], - imports: [IonicPageModule.forChild(SecretImportPage), TranslateModule], - entryComponents: [SecretImportPage] -}) -export class SecretImportPageModule {} diff --git a/src/pages/secret-import/secret-import.scss b/src/pages/secret-import/secret-import.scss deleted file mode 100644 index d04ea0ec..00000000 --- a/src/pages/secret-import/secret-import.scss +++ /dev/null @@ -1,13 +0,0 @@ -page-secret-import { - ion-icon { - color: white; - } - ion-textarea { - font-family: 'Courier New', Courier, 'Lucida Sans Typewriter', 'Lucida Typewriter', monospace; - font-weight: 600; - text-transform: lowercase; - } - textarea { - height: 24vh; - } -} diff --git a/src/pages/secret-import/secret-import.ts b/src/pages/secret-import/secret-import.ts deleted file mode 100644 index a5cdcf62..00000000 --- a/src/pages/secret-import/secret-import.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage, NavController } from 'ionic-angular' -import { BIP39Signer } from '../../models/BIP39Signer' -import { SecretEditPage } from '../secret-edit/secret-edit' -import { Secret } from '../../models/secret' -import { FormGroup, Validators, FormBuilder } from '@angular/forms' -import { MnemonicValidator } from '../../validators/mnemonic.validator' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -const signer = new BIP39Signer() - -@IonicPage() -@Component({ - selector: 'page-secret-import', - templateUrl: 'secret-import.html' -}) -export class SecretImportPage { - readonly mnemonic: string - secretImportForm: FormGroup - - constructor(public navController: NavController, private formBuilder: FormBuilder) { - const formGroup = { - mnemonic: ['', Validators.compose([Validators.required, MnemonicValidator.isValid])] - } - - this.secretImportForm = this.formBuilder.group(formGroup) - } - - goToSecretCreatePage() { - const secret = new Secret(signer.mnemonicToEntropy(BIP39Signer.prepareMnemonic(this.mnemonic))) - this.navController.push(SecretEditPage, { secret: secret, isGenerating: true }).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } -} diff --git a/src/pages/secret-rules/secret-rules.html b/src/pages/secret-rules/secret-rules.html deleted file mode 100644 index 1628640b..00000000 --- a/src/pages/secret-rules/secret-rules.html +++ /dev/null @@ -1,39 +0,0 @@ - - - -

{{ 'secret-rules.title' | translate }}

-
-
-
- - -

{{ 'secret-rules.heading' | translate }}

- -

{{ 'secret-rules.text' | translate }}

- -

{{ 'secret-rules.description' | translate }}

- -
    -
  • {{ 'secret-rules.rules-list.item-1_text' | translate }}
  • -
    -
  • {{ 'secret-rules.rules-list.item-2_text' | translate }}
  • -
    -
  • {{ 'secret-rules.rules-list.item-3_text' | translate }}
  • -
    -
  • {{ 'secret-rules.rules-list.item-4_text' | translate }}
  • -
    -
  • {{ 'secret-rules.rules-list.item-5_text' | translate }}
  • -
    -
  • {{ 'secret-rules.rules-list.item-6_text' | translate }}
  • -
-
- - - - - - - - diff --git a/src/pages/secret-rules/secret-rules.module.ts b/src/pages/secret-rules/secret-rules.module.ts deleted file mode 100644 index eb73a90c..00000000 --- a/src/pages/secret-rules/secret-rules.module.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { SecretRulesPage } from './secret-rules' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [SecretRulesPage], - imports: [IonicPageModule.forChild(SecretRulesPage), TranslateModule], - entryComponents: [SecretRulesPage] -}) -export class SecretRulesPageModule {} diff --git a/src/pages/secret-rules/secret-rules.scss b/src/pages/secret-rules/secret-rules.scss deleted file mode 100644 index b748e729..00000000 --- a/src/pages/secret-rules/secret-rules.scss +++ /dev/null @@ -1,5 +0,0 @@ -page-follow-rules { - ion-icon { - color: white; - } -} diff --git a/src/pages/secret-rules/secret-rules.ts b/src/pages/secret-rules/secret-rules.ts deleted file mode 100644 index 64cb0558..00000000 --- a/src/pages/secret-rules/secret-rules.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage, NavController, NavParams } from 'ionic-angular' -import { SecretShowPage } from '../secret-show/secret-show' -import { Secret } from '../../models/secret' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -@IonicPage() -@Component({ - selector: 'page-secret-rules', - templateUrl: 'secret-rules.html' -}) -export class SecretRulesPage { - private secret: Secret - - constructor(private navController: NavController, private navParams: NavParams) { - this.secret = this.navParams.get('secret') - } - - goToShowSecret() { - this.navController.push(SecretShowPage, { secret: this.secret }).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } -} diff --git a/src/pages/secret-show/secret-show.html b/src/pages/secret-show/secret-show.html deleted file mode 100644 index 0656a6aa..00000000 --- a/src/pages/secret-show/secret-show.html +++ /dev/null @@ -1,23 +0,0 @@ - - - -

{{ 'secret-show.title' | translate }}

-
-
-
- - -

{{ 'secret-show.text' | translate }}

- -

{{ secret.recoverMnemonicFromHex(secret.secretHex) }}

-
- - - - - - - - diff --git a/src/pages/secret-show/secret-show.module.ts b/src/pages/secret-show/secret-show.module.ts deleted file mode 100644 index 22591856..00000000 --- a/src/pages/secret-show/secret-show.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { SecretShowPage } from './secret-show' -import { SecretValidatePageModule } from '../secret-validate/secret-validate.module' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [SecretShowPage], - imports: [SecretValidatePageModule, IonicPageModule.forChild(SecretShowPage), TranslateModule], - entryComponents: [SecretShowPage] -}) -export class SecretShowPageModule {} diff --git a/src/pages/secret-show/secret-show.scss b/src/pages/secret-show/secret-show.scss deleted file mode 100644 index 6bb9f6e0..00000000 --- a/src/pages/secret-show/secret-show.scss +++ /dev/null @@ -1,5 +0,0 @@ -page-secret-show { - ion-icon { - color: white; - } -} diff --git a/src/pages/secret-show/secret-show.ts b/src/pages/secret-show/secret-show.ts deleted file mode 100644 index f5b59d54..00000000 --- a/src/pages/secret-show/secret-show.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { Component } from '@angular/core' -import { AlertController, IonicPage, NavController, NavParams } from 'ionic-angular' -import { SecretValidatePage } from '../secret-validate/secret-validate' -import { Secret } from '../../models/secret' -import { SHOW_SECRET_MIN_TIME_IN_SECONDS } from '../../app/constants' -import { TranslateService } from '@ngx-translate/core' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -@IonicPage() -@Component({ - selector: 'page-secret-show', - templateUrl: 'secret-show.html' -}) -export class SecretShowPage { - private secret: Secret - startTime = new Date() - - constructor( - public navController: NavController, - private alertController: AlertController, - private navParams: NavParams, - private translateService: TranslateService - ) { - this.secret = this.navParams.get('secret') - } - - goToValidateSecret() { - if (this.startTime.getTime() + SHOW_SECRET_MIN_TIME_IN_SECONDS * 1000 > new Date().getTime()) { - this.translateService - .get([ - 'secret-show.too-fast_alert.title', - 'secret-show.too-fast_alert.heading', - 'secret-show.too-fast_alert.text', - 'secret-show.too-fast_alert.wait_label_p1', - 'secret-show.too-fast_alert.wait_label_p2' - ]) - .subscribe(values => { - let title: string = values['secret-show.too-fast_alert.title'] - let heading: string = values['secret-show.too-fast_alert.heading'] - let text: string = values['secret-show.too-fast_alert.text'] - let wait_label_p1: string = values['secret-show.too-fast_alert.wait_label_p1'] - let wait_label_p2: string = values['secret-show.too-fast_alert.wait_label_p2'] - - this.alertController - .create({ - title: title, - message: - heading + - '
' + - text + - '
' + - wait_label_p1 + - '' + - SHOW_SECRET_MIN_TIME_IN_SECONDS.toString() + - wait_label_p2 + - '', - buttons: ['Okay'] - }) - .present() - .catch(handleErrorLocal(ErrorCategory.IONIC_ALERT)) - }) - } else { - this.navController.push(SecretValidatePage, { secret: this.secret }).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - } -} diff --git a/src/pages/secret-validate/secret-validate.html b/src/pages/secret-validate/secret-validate.html deleted file mode 100644 index 6cb4c7c5..00000000 --- a/src/pages/secret-validate/secret-validate.html +++ /dev/null @@ -1,14 +0,0 @@ - - - {{ 'secret-validate.title' | translate }} - - - -

{{ 'secret-validate.text' | translate }}

- -
diff --git a/src/pages/secret-validate/secret-validate.module.ts b/src/pages/secret-validate/secret-validate.module.ts deleted file mode 100644 index 069c834d..00000000 --- a/src/pages/secret-validate/secret-validate.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { SecretValidatePage } from './secret-validate' -import { ComponentsModule } from '../../components/components.module' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [SecretValidatePage], - imports: [ComponentsModule, IonicPageModule.forChild(SecretValidatePage), TranslateModule], - entryComponents: [SecretValidatePage] -}) -export class SecretValidatePageModule {} diff --git a/src/pages/secret-validate/secret-validate.scss b/src/pages/secret-validate/secret-validate.scss deleted file mode 100644 index 4674d6d8..00000000 --- a/src/pages/secret-validate/secret-validate.scss +++ /dev/null @@ -1,6 +0,0 @@ -page-secret-validate { - ion-icon, - .toolbar-title { - color: white; - } -} diff --git a/src/pages/secret-validate/secret-validate.ts b/src/pages/secret-validate/secret-validate.ts deleted file mode 100644 index 964f2262..00000000 --- a/src/pages/secret-validate/secret-validate.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Component, ViewChild } from '@angular/core' -import { IonicPage, NavController, NavParams } from 'ionic-angular' -import { VerifyKeyComponent } from '../../components/verify-key/verify-key' -import { Secret } from '../../models/secret' -import { SecretEditPage } from '../secret-edit/secret-edit' -import { ErrorCategory, handleErrorLocal } from '../../providers/error-handler/error-handler' - -@IonicPage() -@Component({ - selector: 'page-secret-validate', - templateUrl: 'secret-validate.html' -}) -export class SecretValidatePage { - @ViewChild('verify') - verify: VerifyKeyComponent - - private secret: Secret - private validated = false - - constructor(private navController: NavController, private navParams: NavParams) { - this.secret = this.navParams.get('secret') - } - - onComplete(isCorrect: boolean) { - this.validated = isCorrect - } - - onContinue() { - this.goToSecretEditPage() - } - - goToSecretEditPage() { - this.navController - .push(SecretEditPage, { secret: this.secret, isGenerating: true }) - .catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } -} diff --git a/src/pages/social-recovery-import/social-recovery-import.html b/src/pages/social-recovery-import/social-recovery-import.html deleted file mode 100644 index 3d3d4bd3..00000000 --- a/src/pages/social-recovery-import/social-recovery-import.html +++ /dev/null @@ -1,52 +0,0 @@ - - - -

{{ 'social-recovery-import.title' | translate }}

-
-
-
- - -

{{ 'social-recovery-import.text' | translate }}

- -

{{ 'social-recovery-import.share-recovery.heading' | translate }}

- - - - - - -
- - {{ 'social-recovery-import.share-recovery.label' | translate }} {{ i }} - - -
-
-
- - - - - - - - diff --git a/src/pages/social-recovery-import/social-recovery-import.module.ts b/src/pages/social-recovery-import/social-recovery-import.module.ts deleted file mode 100644 index 470f7035..00000000 --- a/src/pages/social-recovery-import/social-recovery-import.module.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { SocialRecoveryImportPage } from './social-recovery-import' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [SocialRecoveryImportPage], - imports: [IonicPageModule.forChild(SocialRecoveryImportPage), TranslateModule], - entryComponents: [SocialRecoveryImportPage] -}) -export class SocialRecoveryImportPageModule {} diff --git a/src/pages/social-recovery-import/social-recovery-import.scss b/src/pages/social-recovery-import/social-recovery-import.scss deleted file mode 100644 index 083422fc..00000000 --- a/src/pages/social-recovery-import/social-recovery-import.scss +++ /dev/null @@ -1,5 +0,0 @@ -page-social-recovery-setup { - .full--height { - height: 100%; - } -} diff --git a/src/pages/social-recovery-import/social-recovery-import.ts b/src/pages/social-recovery-import/social-recovery-import.ts deleted file mode 100644 index 5de5ff0a..00000000 --- a/src/pages/social-recovery-import/social-recovery-import.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage, NavController, NavParams } from 'ionic-angular' -import { Secret } from '../../models/secret' -import { SecretEditPage } from '../secret-edit/secret-edit' -import { FormGroup, FormBuilder, Validators } from '@angular/forms' -import { MnemonicValidator } from '../../validators/mnemonic.validator' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -@IonicPage() -@Component({ - selector: 'page-social-recovery-import', - templateUrl: 'social-recovery-import.html' -}) -export class SocialRecoveryImportPage { - public numberOfShares: number - public shares: string[] - - socialRecoveryForm: FormGroup - - constructor(public navCtrl: NavController, public navParams: NavParams, public formBuilder: FormBuilder) { } - - setNumberOfShares(i: number) { - this.numberOfShares = i - this.shares = Array(i) - - let formGroup = {} - - this.getNumberArray(i).forEach(i => { - formGroup['share_' + i.toString()] = ['', Validators.compose([Validators.required, MnemonicValidator.isValidShare])] - if (this.socialRecoveryForm && this.socialRecoveryForm.value['share_' + i.toString()]) { - formGroup['share_' + i.toString()][0] = this.socialRecoveryForm.value['share_' + i.toString()] - } - }) - - this.socialRecoveryForm = this.formBuilder.group(formGroup) - } - - recover() { - try { - const secret = Secret.recoverSecretFromShares(this.shares) - this.navCtrl - .push(SecretEditPage, { secret: new Secret(secret, 'Recovery by Social Recovery') }) - .catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } catch (error) { - console.log('oops') - } - } - - back() { - this.navCtrl.pop().catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - - getNumberArray(i: number): number[] { - return Array(i) - .fill(0) - .map((_x, i) => i) - } -} diff --git a/src/pages/social-recovery-setup/social-recovery-setup.html b/src/pages/social-recovery-setup/social-recovery-setup.html deleted file mode 100644 index 4cfd22f1..00000000 --- a/src/pages/social-recovery-setup/social-recovery-setup.html +++ /dev/null @@ -1,81 +0,0 @@ - - - -

{{ 'social-recovery-setup.title' | translate }}

-
-
-
- - -

{{ 'social-recovery-setup.text' | translate }}

-

{{ 'social-recovery-setup.secret-shares.label' | translate }}

-

{{ 'social-recovery-setup.secret-shares.text' | translate }}

-

{{ 'social-recovery-setup.shares-number_label' | translate }}

- - - -

{{ 'social-recovery-setup.shares-recovery_label' | translate }}

- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/pages/social-recovery-setup/social-recovery-setup.module.ts b/src/pages/social-recovery-setup/social-recovery-setup.module.ts deleted file mode 100644 index 7185ed59..00000000 --- a/src/pages/social-recovery-setup/social-recovery-setup.module.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { SocialRecoverySetupPage } from './social-recovery-setup' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [SocialRecoverySetupPage], - imports: [IonicPageModule.forChild(SocialRecoverySetupPage), TranslateModule], - entryComponents: [SocialRecoverySetupPage] -}) -export class SocialRecoverySetupPageModule {} diff --git a/src/pages/social-recovery-setup/social-recovery-setup.scss b/src/pages/social-recovery-setup/social-recovery-setup.scss deleted file mode 100644 index 083422fc..00000000 --- a/src/pages/social-recovery-setup/social-recovery-setup.scss +++ /dev/null @@ -1,5 +0,0 @@ -page-social-recovery-setup { - .full--height { - height: 100%; - } -} diff --git a/src/pages/social-recovery-setup/social-recovery-setup.ts b/src/pages/social-recovery-setup/social-recovery-setup.ts deleted file mode 100644 index 49ed87d0..00000000 --- a/src/pages/social-recovery-setup/social-recovery-setup.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage, NavController, NavParams } from 'ionic-angular' -import { Secret } from '../../models/secret' -import { SocialRecoveryShowSharePage } from '../social-recovery-show-share/social-recovery-show-share' -import { SecretsProvider } from '../../providers/secrets/secrets.provider' -import * as bip39 from 'bip39' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -@IonicPage() -@Component({ - selector: 'page-social-recovery-setup', - templateUrl: 'social-recovery-setup.html' -}) -export class SocialRecoverySetupPage { - private numberOfShares = 3 - private numberOfRequiredShares = 2 - private secret: Secret - - constructor(public navCtrl: NavController, public navParams: NavParams, private secretProvider: SecretsProvider) { - this.secret = this.navParams.get('secret') - } - - setNumberOfShares(i: number) { - this.numberOfShares = i - if (this.numberOfRequiredShares > this.numberOfShares) { - this.numberOfRequiredShares = this.numberOfShares - } - } - - setNumberOfRequiredShares(i: number) { - this.numberOfRequiredShares = i - } - - back() { - this.navCtrl.pop().catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - - next() { - this.secretProvider - .retrieveEntropyForSecret(this.secret) - .then(entropy => { - const shares = Secret.generateSocialRecover(bip39.entropyToMnemonic(entropy), this.numberOfShares, this.numberOfRequiredShares) - this.navCtrl - .push(SocialRecoveryShowSharePage, { shares: shares, currentShare: 0, secret: this.secret }) - .catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - }) - .catch(error => { - console.warn(error) - }) - } -} diff --git a/src/pages/social-recovery-show-share/social-recovery-show-share.html b/src/pages/social-recovery-show-share/social-recovery-show-share.html deleted file mode 100644 index 2efc1047..00000000 --- a/src/pages/social-recovery-show-share/social-recovery-show-share.html +++ /dev/null @@ -1,20 +0,0 @@ - - - -

{{ 'social-recovery-show-share.title' | translate }}

-
-
-
- - -

- {{ 'social-recovery-show-share.secret-shares.label_p1' | translate }} {{ currentShare + 1 }} - {{ 'social-recovery-show-share.label_p2' | translate }} {{ shares?.length }} -

-

{{ 'social-recovery-show-share.text' | translate }}

-

{{ shares[currentShare] }}

-
- - - - diff --git a/src/pages/social-recovery-show-share/social-recovery-show-share.module.ts b/src/pages/social-recovery-show-share/social-recovery-show-share.module.ts deleted file mode 100644 index 0c2dc23f..00000000 --- a/src/pages/social-recovery-show-share/social-recovery-show-share.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { SocialRecoveryShowSharePage } from './social-recovery-show-share' -import { ComponentsModule } from '../../components/components.module' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [SocialRecoveryShowSharePage], - imports: [ComponentsModule, IonicPageModule.forChild(SocialRecoveryShowSharePage), TranslateModule], - entryComponents: [SocialRecoveryShowSharePage] -}) -export class SocialRecoveryShowSharePageModule {} diff --git a/src/pages/social-recovery-show-share/social-recovery-show-share.scss b/src/pages/social-recovery-show-share/social-recovery-show-share.scss deleted file mode 100644 index 2faa7767..00000000 --- a/src/pages/social-recovery-show-share/social-recovery-show-share.scss +++ /dev/null @@ -1,2 +0,0 @@ -page-social-recovery-show-share { -} diff --git a/src/pages/social-recovery-show-share/social-recovery-show-share.ts b/src/pages/social-recovery-show-share/social-recovery-show-share.ts deleted file mode 100644 index be6054a7..00000000 --- a/src/pages/social-recovery-show-share/social-recovery-show-share.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage, NavController, NavParams } from 'ionic-angular' -import { SocialRecoveryValidateSharePage } from '../social-recovery-validate-share/social-recovery-validate-share' -import { Secret } from '../../models/secret' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -@IonicPage() -@Component({ - selector: 'page-social-recovery-show-share', - templateUrl: 'social-recovery-show-share.html' -}) -export class SocialRecoveryShowSharePage { - secret: Secret - shares: string[] - currentShare: number - - constructor(private navCtrl: NavController, navParams: NavParams) { - this.shares = navParams.get('shares') - this.secret = navParams.get('secret') - this.currentShare = navParams.get('currentShare') - } - - back() { - this.navCtrl.pop().catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - - next() { - this.navCtrl - .push(SocialRecoveryValidateSharePage, { shares: this.shares, currentShare: this.currentShare, secret: this.secret }) - .catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - - finish() { - this.navCtrl.popToRoot().catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } -} diff --git a/src/pages/social-recovery-validate-share/social-recovery-validate-share.html b/src/pages/social-recovery-validate-share/social-recovery-validate-share.html deleted file mode 100644 index 1a42175d..00000000 --- a/src/pages/social-recovery-validate-share/social-recovery-validate-share.html +++ /dev/null @@ -1,28 +0,0 @@ - - - -

{{ 'social-recovery-validate-share.title' | translate }}

-
-
-
- - -

{{ 'social-recovery-validate-share.text' | translate }}

- -
- - - - diff --git a/src/pages/social-recovery-validate-share/social-recovery-validate-share.module.ts b/src/pages/social-recovery-validate-share/social-recovery-validate-share.module.ts deleted file mode 100644 index f53c74a3..00000000 --- a/src/pages/social-recovery-validate-share/social-recovery-validate-share.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { SocialRecoveryValidateSharePage } from './social-recovery-validate-share' -import { ComponentsModule } from '../../components/components.module' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [SocialRecoveryValidateSharePage], - imports: [ComponentsModule, IonicPageModule.forChild(SocialRecoveryValidateSharePage), TranslateModule], - entryComponents: [SocialRecoveryValidateSharePage] -}) -export class SocialRecoveryValidateSharePageModule {} diff --git a/src/pages/social-recovery-validate-share/social-recovery-validate-share.scss b/src/pages/social-recovery-validate-share/social-recovery-validate-share.scss deleted file mode 100644 index 110ab7cd..00000000 --- a/src/pages/social-recovery-validate-share/social-recovery-validate-share.scss +++ /dev/null @@ -1,2 +0,0 @@ -page-social-recovery-validate-share { -} diff --git a/src/pages/social-recovery-validate-share/social-recovery-validate-share.ts b/src/pages/social-recovery-validate-share/social-recovery-validate-share.ts deleted file mode 100644 index 1b0b40c0..00000000 --- a/src/pages/social-recovery-validate-share/social-recovery-validate-share.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Component, ViewChild } from '@angular/core' -import { IonicPage, NavController, NavParams } from 'ionic-angular' -import { VerifyKeyComponent } from '../../components/verify-key/verify-key' -import { SocialRecoveryShowSharePage } from '../social-recovery-show-share/social-recovery-show-share' -import { Secret } from '../../models/secret' -import { SecretsProvider } from '../../providers/secrets/secrets.provider' -import { ErrorCategory, handleErrorLocal } from '../../providers/error-handler/error-handler' - -@IonicPage() -@Component({ - selector: 'page-social-recovery-validate-share', - templateUrl: 'social-recovery-validate-share.html' -}) -export class SocialRecoveryValidateSharePage { - @ViewChild('verify') - verify: VerifyKeyComponent - - validated = false - shares: string[] - currentShare: number - secret: Secret - - constructor(public navCtrl: NavController, public navParams: NavParams, private secretsProvider: SecretsProvider) { - this.secret = navParams.get('secret') - this.shares = navParams.get('shares') - this.currentShare = navParams.get('currentShare') - } - - onComplete(isCorrect: boolean) { - this.validated = isCorrect - } - - onContinue() { - this.next.bind(this)() - } - - back() { - this.navCtrl.pop().catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - - next() { - if (this.shares.length === this.currentShare + 1) { - this.secret.hasSocialRecovery = true - this.secretsProvider - .addOrUpdateSecret(this.secret) - .then(() => { - this.navCtrl.popToRoot().catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - }) - .catch(handleErrorLocal(ErrorCategory.SECURE_STORAGE)) - } else { - this.navCtrl - .push(SocialRecoveryShowSharePage, { - shares: this.shares, - currentShare: this.currentShare + 1, - secret: this.secret - }) - .catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - } -} diff --git a/src/pages/tab-scan/tab-scan.html b/src/pages/tab-scan/tab-scan.html deleted file mode 100644 index ea16a00e..00000000 --- a/src/pages/tab-scan/tab-scan.html +++ /dev/null @@ -1,30 +0,0 @@ - - - {{ 'tab-scan.title' | translate }} - - - - -

{{ 'tab-scan.text' | translate }}

- - - - - - - - - - - -

- -
-
-
diff --git a/src/pages/tab-scan/tab-scan.module.ts b/src/pages/tab-scan/tab-scan.module.ts deleted file mode 100644 index dbf62300..00000000 --- a/src/pages/tab-scan/tab-scan.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule, Platform } from 'ionic-angular' -import { TabScanPage } from './tab-scan' -import { ComponentsModule } from '../../components/components.module' -import { ScannerProvider } from '../../providers/scanner/scanner' -import { ZXingScannerModule } from '@zxing/ngx-scanner' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [TabScanPage], - imports: [ComponentsModule, ZXingScannerModule, IonicPageModule.forChild(TabScanPage), TranslateModule], - providers: [ScannerProvider, Platform], - entryComponents: [TabScanPage] -}) -export class TabScanPageModule {} diff --git a/src/pages/tab-scan/tab-scan.scss b/src/pages/tab-scan/tab-scan.scss deleted file mode 100644 index d06b7a3e..00000000 --- a/src/pages/tab-scan/tab-scan.scss +++ /dev/null @@ -1,29 +0,0 @@ -page-tab-scan { - .transparent { - background: none !important; - } - - p { - background: rgba(color($colors, secondary-light), 0.5); - } - - .row--height__100 { - height: calc(100% - 48px); - img { - height: 45vh; - } - } - .guides--container { - position: absolute; - height: 100%; - width: 100%; - top: 0; - left: 0; - .guides--container__img { - width: 60%; - max-width: 400px; - margin-top: 3em; - max-height: 50%; - } - } -} diff --git a/src/pages/tab-scan/tab-scan.ts b/src/pages/tab-scan/tab-scan.ts deleted file mode 100644 index a44f783b..00000000 --- a/src/pages/tab-scan/tab-scan.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { Component, ViewChild } from '@angular/core' -import { AlertController, IonicPage, NavController, Platform } from 'ionic-angular' -import { Transaction } from '../../models/transaction.model' -import { ScannerProvider } from '../../providers/scanner/scanner' -import { SecretsProvider } from '../../providers/secrets/secrets.provider' -import { SchemeRoutingProvider } from '../../providers/scheme-routing/scheme-routing' -import { ZXingScannerComponent } from '@zxing/ngx-scanner' -import { PermissionsProvider, PermissionTypes, PermissionStatus } from '../../providers/permissions/permissions' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -@IonicPage() -@Component({ - selector: 'page-tab-scan', - templateUrl: 'tab-scan.html' -}) -export class TabScanPage { - @ViewChild('scanner') - zxingScanner: ZXingScannerComponent - availableDevices: MediaDeviceInfo[] - selectedDevice: MediaDeviceInfo - scannerEnabled = true - - public isBrowser = false - - hasCameras = false - - public hasCameraPermission = false - - constructor( - private schemeRouting: SchemeRoutingProvider, - private alertCtrl: AlertController, - private navController: NavController, - private platform: Platform, - private secretsProvider: SecretsProvider, - private scanner: ScannerProvider, - private permissionsProvider: PermissionsProvider - ) { - this.isBrowser = !this.platform.is('cordova') - } - - async ionViewWillEnter() { - if (this.platform.is('cordova')) { - await this.platform.ready() - await this.checkCameraPermissionsAndActivate() - } - } - - async requestPermission() { - await this.permissionsProvider.userRequestsPermissions([PermissionTypes.CAMERA]) - await this.checkCameraPermissionsAndActivate() - } - - async checkCameraPermissionsAndActivate() { - const permission = await this.permissionsProvider.hasCameraPermission() - if (permission === PermissionStatus.GRANTED) { - this.hasCameraPermission = true - this.startScan() - } - } - - ionViewDidEnter() { - if (!this.platform.is('cordova')) { - this.hasCameraPermission = true - this.zxingScanner.camerasNotFound.subscribe((_devices: MediaDeviceInfo[]) => { - console.error('An error has occurred when trying to enumerate your video-stream-enabled devices.') - }) - if (this.selectedDevice) { - // Not the first time that we open scanner - this.zxingScanner.startScan(this.selectedDevice) - } - this.zxingScanner.camerasFound.subscribe((devices: MediaDeviceInfo[]) => { - this.hasCameras = true - this.availableDevices = devices - this.selectedDevice = devices[0] - }) - } - } - - ionViewWillLeave() { - if (this.platform.is('cordova')) { - this.scanner.destroy() - } else { - this.zxingScanner.resetCodeReader() - } - } - - public startScan() { - if (this.platform.is('cordova')) { - this.scanner.show() - this.scanner.scan( - text => { - this.checkScan(text).catch(handleErrorLocal(ErrorCategory.SCHEME_ROUTING)) - }, - error => { - console.warn(error) - this.startScan() - } - ) - } else { - // We don't need to do anything in the browser because it keeps scanning - } - } - - async checkScan(data: string) { - return this.schemeRouting.handleNewSyncRequest(this.navController, data, () => { - this.startScan() - }) - } -} diff --git a/src/pages/tab-settings/tab-settings.html b/src/pages/tab-settings/tab-settings.html deleted file mode 100644 index dd1e497b..00000000 --- a/src/pages/tab-settings/tab-settings.html +++ /dev/null @@ -1,32 +0,0 @@ - - - {{ 'tab-settings.title' | translate }} - - - - - - {{ 'tab-settings.information_label' | translate }} - - - - {{ 'tab-settings.about' | translate }} - - - - {{ 'tab-settings.paste-from-clipboard_label' | translate }} - - - - {{ 'tab-settings.secrets_label' | translate }} - - - - - - - - diff --git a/src/pages/tab-settings/tab-settings.module.ts b/src/pages/tab-settings/tab-settings.module.ts deleted file mode 100644 index 6d4ca292..00000000 --- a/src/pages/tab-settings/tab-settings.module.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { ComponentsModule } from '../../components/components.module' -import { MaterialIconsModule } from 'ionic2-material-icons' -import { TranslateModule } from '@ngx-translate/core' -import { TabSettingsPage } from './tab-settings' - -@NgModule({ - declarations: [TabSettingsPage], - imports: [ComponentsModule, MaterialIconsModule, IonicPageModule.forChild(TabSettingsPage), TranslateModule], - entryComponents: [TabSettingsPage] -}) -export class TabSettingsPageModule {} diff --git a/src/pages/tab-settings/tab-settings.scss b/src/pages/tab-settings/tab-settings.scss deleted file mode 100644 index 5e16247e..00000000 --- a/src/pages/tab-settings/tab-settings.scss +++ /dev/null @@ -1,2 +0,0 @@ -page-tab-settings { -} diff --git a/src/pages/tab-settings/tab-settings.ts b/src/pages/tab-settings/tab-settings.ts deleted file mode 100644 index c3f03637..00000000 --- a/src/pages/tab-settings/tab-settings.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { Component } from '@angular/core' -import { AlertController, IonicPage, NavController, ToastController, ModalController } from 'ionic-angular' -import { SecretsProvider } from '../../providers/secrets/secrets.provider' -import { ClipboardProvider } from '../../providers/clipboard/clipboard' -import { SchemeRoutingProvider } from '../../providers/scheme-routing/scheme-routing' -import { Secret } from '../../models/secret' -import { SecretCreatePage } from '../secret-create/secret-create' -import { SecretEditPage } from '../secret-edit/secret-edit' -import { Observable } from 'rxjs' -import { AboutPage } from '../about/about' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -@IonicPage() -@Component({ - selector: 'page-tab-settings', - templateUrl: 'tab-settings.html' -}) -export class TabSettingsPage { - private secrets: Observable - - constructor( - public modalController: ModalController, - public navController: NavController, - private secretsProvider: SecretsProvider, - private alertController: AlertController, - private toastController: ToastController, - private schemeRoutingProvider: SchemeRoutingProvider, - private clipboardProvider: ClipboardProvider - ) { - this.secrets = this.secretsProvider.currentSecretsList.asObservable() - } - - ionViewWillEnter() { - this.secrets.subscribe(async list => { - await this.secretsProvider.isReady() - if (list.length === 0) { - this.navController.push(SecretCreatePage).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - }) - } - - goToNewSecret() { - this.navController.push(SecretCreatePage).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - - goToEditSecret(secret: Secret) { - this.navController.push(SecretEditPage, { secret: secret }).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - - deleteSecret(secret: Secret) { - this.alertController - .create({ - title: 'Delete ' + secret.label, - subTitle: 'Are you sure you want to delete ' + secret.label + '?', - buttons: [ - { - text: 'Delete', - handler: () => { - this.secretsProvider.remove(secret).catch(handleErrorLocal(ErrorCategory.SECURE_STORAGE)) - - let toast = this.toastController.create({ - message: 'Secret deleted', - duration: 5000, - showCloseButton: true, - closeButtonText: 'Undo' - }) - - toast.onDidDismiss((_data, role) => { - if (role === 'close') { - this.secretsProvider.addOrUpdateSecret(secret).catch(handleErrorLocal(ErrorCategory.SECURE_STORAGE)) - } - }) - toast.present().catch(handleErrorLocal(ErrorCategory.IONIC_ALERT)) - } - }, - { - text: 'Cancel' - } - ] - }) - .present() - .catch(handleErrorLocal(ErrorCategory.IONIC_ALERT)) - } - - public about() { - this.navController.push(AboutPage).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - - public pasteClipboard() { - this.clipboardProvider.paste().then( - (text: string) => { - this.schemeRoutingProvider.handleNewSyncRequest(this.navController, text).catch(handleErrorLocal(ErrorCategory.SCHEME_ROUTING)) - }, - (err: string) => { - console.error('Error: ' + err) - } - ) - } -} diff --git a/src/pages/tab-wallets/fillter-wallets.filter.ts b/src/pages/tab-wallets/fillter-wallets.filter.ts deleted file mode 100644 index fa742e3b..00000000 --- a/src/pages/tab-wallets/fillter-wallets.filter.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Pipe, PipeTransform } from '@angular/core' -import { AirGapWallet } from 'airgap-coin-lib' - -@Pipe({ - name: 'filterWallets' -}) -export class FilterWalletsPipe implements PipeTransform { - transform(items: AirGapWallet[], args: { symbol: string }): any { - if (!items) { - return [] - } - - if (!args.symbol) { - return items - } else { - return items.filter( - wallet => - wallet.coinProtocol.symbol.toLowerCase().includes(args.symbol) || wallet.coinProtocol.name.toLowerCase().includes(args.symbol) - ) - } - } -} diff --git a/src/pages/tab-wallets/tab-wallets.html b/src/pages/tab-wallets/tab-wallets.html deleted file mode 100644 index 36578a3e..00000000 --- a/src/pages/tab-wallets/tab-wallets.html +++ /dev/null @@ -1,33 +0,0 @@ - - - {{ 'tab-wallets.title' | translate }} - - -
- - -
- - - - - - -
- -

- {{ 'tab-wallets.empty-state_text' | translate }} -

-
- - - - -
diff --git a/src/pages/tab-wallets/tab-wallets.module.ts b/src/pages/tab-wallets/tab-wallets.module.ts deleted file mode 100644 index 894822c8..00000000 --- a/src/pages/tab-wallets/tab-wallets.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { TabWalletsPage } from './tab-wallets' -import { ComponentsModule } from '../../components/components.module' -import { MaterialIconsModule } from 'ionic2-material-icons' -import { FilterWalletsPipe } from './fillter-wallets.filter' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [TabWalletsPage, FilterWalletsPipe], - imports: [ComponentsModule, MaterialIconsModule, IonicPageModule.forChild(TabWalletsPage), TranslateModule], - entryComponents: [TabWalletsPage] -}) -export class TabWalletsPageModule {} diff --git a/src/pages/tab-wallets/tab-wallets.scss b/src/pages/tab-wallets/tab-wallets.scss deleted file mode 100644 index bd7570a4..00000000 --- a/src/pages/tab-wallets/tab-wallets.scss +++ /dev/null @@ -1,2 +0,0 @@ -page-receive-currency { -} diff --git a/src/pages/tab-wallets/tab-wallets.ts b/src/pages/tab-wallets/tab-wallets.ts deleted file mode 100644 index e0a9ef91..00000000 --- a/src/pages/tab-wallets/tab-wallets.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage, NavController, NavParams } from 'ionic-angular' -import { WalletAddressPage } from '../wallet-address/wallet-address' -import { SecretsProvider } from '../../providers/secrets/secrets.provider' -import { WalletSelectCoinsPage } from '../wallet-select-coins/wallet-select-coins' -import { Secret } from '../../models/secret' -import { AirGapWallet } from 'airgap-coin-lib' -import { BehaviorSubject } from 'rxjs/BehaviorSubject' -import { SecretCreatePage } from '../secret-create/secret-create' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -@IonicPage() -@Component({ - selector: 'page-tab-wallets', - templateUrl: 'tab-wallets.html' -}) -export class TabWalletsPage { - symbolFilter: string - activeSecret: Secret - - public wallets = new BehaviorSubject([]) - - constructor(public navController: NavController, public navParams: NavParams, private secretsProvider: SecretsProvider) {} - - ionViewWillEnter() { - let secrets = this.secretsProvider.currentSecretsList.asObservable() - secrets.subscribe(async list => { - await this.secretsProvider.isReady() - if (list.length === 0) { - this.navController.push(SecretCreatePage).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - }) - } - - ionViewDidEnter() { - if (this.secretsProvider.getActiveSecret()) { - this.activeSecret = this.secretsProvider.getActiveSecret() - this.wallets.next(this.activeSecret.wallets) - } - } - - onSecretChanged(secret: Secret) { - this.activeSecret = secret - this.wallets.next(this.activeSecret.wallets) - } - - goToReceiveAddress(wallet: AirGapWallet) { - this.navController.push(WalletAddressPage, { wallet: wallet }).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - - filterItems(ev: any) { - let val = ev.target.value - if (val && val !== '') { - val = val.trim().toLowerCase() - this.symbolFilter = val - } else { - this.symbolFilter = null - } - } - - addWallet() { - this.navController.push(WalletSelectCoinsPage).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - -} diff --git a/src/pages/tabs/tabs.html b/src/pages/tabs/tabs.html deleted file mode 100644 index a9b10c94..00000000 --- a/src/pages/tabs/tabs.html +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/pages/tabs/tabs.module.ts b/src/pages/tabs/tabs.module.ts deleted file mode 100644 index 2d598ddc..00000000 --- a/src/pages/tabs/tabs.module.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { TabsPage } from './tabs' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [TabsPage], - imports: [IonicPageModule.forChild(TabsPage), TranslateModule], - entryComponents: [TabsPage] -}) -export class TabsPageModule {} diff --git a/src/pages/tabs/tabs.scss b/src/pages/tabs/tabs.scss deleted file mode 100644 index 756101d7..00000000 --- a/src/pages/tabs/tabs.scss +++ /dev/null @@ -1,2 +0,0 @@ -page-tabs { -} diff --git a/src/pages/tabs/tabs.ts b/src/pages/tabs/tabs.ts deleted file mode 100644 index 7b9ba126..00000000 --- a/src/pages/tabs/tabs.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage } from 'ionic-angular' -import { TabScanPage } from '../tab-scan/tab-scan' -import { TabWalletsPage } from '../tab-wallets/tab-wallets' -import { TabSettingsPage } from '../tab-settings/tab-settings' - -@IonicPage() -@Component({ - selector: 'page-tabs', - templateUrl: 'tabs.html' -}) -export class TabsPage { - tabWallets = TabWalletsPage - tabScan = TabScanPage - tabSettings = TabSettingsPage -} diff --git a/src/pages/transaction-detail/transaction-detail.html b/src/pages/transaction-detail/transaction-detail.html deleted file mode 100644 index ee99ce71..00000000 --- a/src/pages/transaction-detail/transaction-detail.html +++ /dev/null @@ -1,25 +0,0 @@ - - - -

{{ 'transaction-detail.title' | translate }}

-
-
-
- - -
-

{{ 'transaction-detail.text' | translate }}

-
- -
- - - - - - - - diff --git a/src/pages/transaction-detail/transaction-detail.module.ts b/src/pages/transaction-detail/transaction-detail.module.ts deleted file mode 100644 index f913e3dd..00000000 --- a/src/pages/transaction-detail/transaction-detail.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { TransactionDetailPage } from './transaction-detail' -import { ComponentsModule } from '../../components/components.module' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [TransactionDetailPage], - imports: [ComponentsModule, IonicPageModule.forChild(TransactionDetailPage), TranslateModule], - entryComponents: [TransactionDetailPage] -}) -export class TransactionDetailPageModule {} diff --git a/src/pages/transaction-detail/transaction-detail.scss b/src/pages/transaction-detail/transaction-detail.scss deleted file mode 100644 index 3d58597e..00000000 --- a/src/pages/transaction-detail/transaction-detail.scss +++ /dev/null @@ -1,5 +0,0 @@ -page-transaction-detail { - ion-icon { - color: white; - } -} diff --git a/src/pages/transaction-detail/transaction-detail.ts b/src/pages/transaction-detail/transaction-detail.ts deleted file mode 100644 index 11a705ac..00000000 --- a/src/pages/transaction-detail/transaction-detail.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage, NavController, NavParams } from 'ionic-angular' -import { - AirGapWallet, - UnsignedTransaction, - IAirGapTransaction, - SyncProtocolUtils, - DeserializedSyncProtocol, - EncodedType -} from 'airgap-coin-lib' -import { SecretsProvider } from '../../providers/secrets/secrets.provider' -import bip39 from 'bip39' -import { InteractionProvider, InteractionOperationType } from '../../providers/interaction/interaction' -import { handleErrorLocal } from '../../providers/error-handler/error-handler' - -@IonicPage() -@Component({ - selector: 'page-transaction-detail', - templateUrl: 'transaction-detail.html' -}) -export class TransactionDetailPage { - broadcastUrl?: string - - public transaction: UnsignedTransaction - public wallet: AirGapWallet - public airGapTx: IAirGapTransaction - public deserializedSync: DeserializedSyncProtocol - - constructor( - public navController: NavController, - public navParams: NavParams, - private secretsProvider: SecretsProvider, - private interactionProvider: InteractionProvider - ) {} - - async ionViewWillEnter() { - this.transaction = this.navParams.get('transaction') - this.wallet = this.navParams.get('wallet') - this.deserializedSync = this.navParams.get('deserializedSync') - try { - this.airGapTx = await this.wallet.coinProtocol.getTransactionDetails(this.transaction) - } catch (e) { - console.log('cannot read tx details', e) - } - } - - async signAndGoToNextPage() { - const signedTx = await this.signTransaction(this.transaction, this.wallet) - this.broadcastUrl = await this.generateBroadcastUrl(this.wallet, signedTx, this.transaction) - - this.interactionProvider.startInteraction( - this.navController, - { - operationType: InteractionOperationType.TRANSACTION_BROADCAST, - url: this.broadcastUrl, - wallet: this.wallet, - signedTx: signedTx, - transaction: this.transaction - }, - this.secretsProvider.getActiveSecret() - ) - } - - async generateBroadcastUrl(wallet: AirGapWallet, signedTx: string, unsignedTransaction: UnsignedTransaction): Promise { - let txDetails = { - from: undefined, - amount: undefined, - fee: undefined, - to: undefined - } - - try { - txDetails = await wallet.coinProtocol.getTransactionDetails(unsignedTransaction) - } catch (e) { - handleErrorLocal(e) - } - - const syncProtocol = new SyncProtocolUtils() - const deserializedTxSigningRequest: DeserializedSyncProtocol = { - version: 1, - protocol: this.wallet.protocolIdentifier, - type: EncodedType.SIGNED_TRANSACTION, - payload: { - accountIdentifier: wallet.publicKey.substr(-6), - transaction: signedTx, - from: txDetails.from, - amount: txDetails.amount, - fee: txDetails.fee, - to: txDetails.to - } - } - - const serializedTx = await syncProtocol.serialize(deserializedTxSigningRequest) - - return `${unsignedTransaction.callback || 'airgap-wallet://?d='}${serializedTx}` - } - - signTransaction(transaction: UnsignedTransaction, wallet: AirGapWallet): Promise { - const secret = this.secretsProvider.findByPublicKey(wallet.publicKey) - - // we should handle this case here as well - if (!secret) { - console.warn('no secret found to this public key') - } - - return this.secretsProvider.retrieveEntropyForSecret(secret).then(entropy => { - let seed = bip39.mnemonicToSeedHex(bip39.entropyToMnemonic(entropy)) - if (wallet.isExtendedPublicKey) { - const extendedPrivateKey = wallet.coinProtocol.getExtendedPrivateKeyFromHexSecret(seed, wallet.derivationPath) - return wallet.coinProtocol.signWithExtendedPrivateKey(extendedPrivateKey, transaction.transaction) - } else { - const privateKey = wallet.coinProtocol.getPrivateKeyFromHexSecret(seed, wallet.derivationPath) - return wallet.coinProtocol.signWithPrivateKey(privateKey, transaction.transaction) - } - }) - } -} diff --git a/src/pages/transaction-signed/transaction-signed.html b/src/pages/transaction-signed/transaction-signed.html deleted file mode 100644 index 84cfc754..00000000 --- a/src/pages/transaction-signed/transaction-signed.html +++ /dev/null @@ -1,27 +0,0 @@ - - - -

{{ 'transaction-signed.title' | translate }}

-
-
-
- - -

- - - - - - - - {{ 'transaction-signed.raw-tx_label' | translate }} - - - - - - - - -
diff --git a/src/pages/transaction-signed/transaction-signed.module.ts b/src/pages/transaction-signed/transaction-signed.module.ts deleted file mode 100644 index fdd640d0..00000000 --- a/src/pages/transaction-signed/transaction-signed.module.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { TransactionSignedPage } from './transaction-signed' -import { ComponentsModule } from '../../components/components.module' -import { QRCodeModule } from 'angularx-qrcode' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [TransactionSignedPage], - imports: [ComponentsModule, QRCodeModule, IonicPageModule.forChild(TransactionSignedPage), TranslateModule], - entryComponents: [TransactionSignedPage] -}) -export class TransactionSignedPageModule {} diff --git a/src/pages/transaction-signed/transaction-signed.scss b/src/pages/transaction-signed/transaction-signed.scss deleted file mode 100644 index 785f6fea..00000000 --- a/src/pages/transaction-signed/transaction-signed.scss +++ /dev/null @@ -1,18 +0,0 @@ -page-transaction-signed { - qr-clipboard { - width: 340px; - height: 340px; - } - ion-icon { - color: white; - } - hexagon-icon { - .hexagon--background { - width: 32px; - height: 32px; - } - h3 { - font-size: 12px; - } - } -} diff --git a/src/pages/transaction-signed/transaction-signed.spec.ts b/src/pages/transaction-signed/transaction-signed.spec.ts deleted file mode 100644 index 136a2b1e..00000000 --- a/src/pages/transaction-signed/transaction-signed.spec.ts +++ /dev/null @@ -1,78 +0,0 @@ -import 'jasmine' -import { async, TestBed, ComponentFixture } from '@angular/core/testing' -import { IonicModule, NavController, NavParams, Platform } from 'ionic-angular' -import { QRCodeModule } from 'angularx-qrcode' -import { TransactionSignedPage } from './transaction-signed' -import { StatusBar } from '@ionic-native/status-bar' -import { SplashScreen } from '@ionic-native/splash-screen' -import { Clipboard } from '@ionic-native/clipboard' - -import { PlatformMock, StatusBarMock, SplashScreenMock, NavParamsMock } from '../../../test-config/mocks-ionic' -import { NavControllerMock } from 'ionic-mocks' - -import { ComponentsModule } from '../../components/components.module' -import { SecretsProvider } from '../../providers/secrets/secrets.provider' -import { SecureStorageService } from '../../providers/storage/secure-storage' -import { WalletMock } from '../../../test-config/wallet-mock' -import { StorageMock } from '../../../test-config/storage-mock' -import { Storage } from '@ionic/storage' -import { SecureStorageServiceMock } from '../../providers/storage/secure-storage.mock' -import { TranslateModule, TranslateService } from '@ngx-translate/core' - -import { HttpClient } from '@angular/common/http' -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing' -import { ClipboardProvider } from '../../providers/clipboard/clipboard' - -describe('TransactionSigned Page', () => { - const ethWallet = new WalletMock().ethWallet - const ethTransaction = new WalletMock().ethTransaction - - let fixture: ComponentFixture - let component: TransactionSignedPage - - beforeEach(async(() => { - NavParamsMock.setParams({ - transaction: ethTransaction, - wallet: ethWallet - }) - TestBed.configureTestingModule({ - declarations: [TransactionSignedPage], - imports: [ - IonicModule.forRoot(TransactionSignedPage), - ComponentsModule, - QRCodeModule, - HttpClientTestingModule, - TranslateModule.forRoot() - ], - providers: [ - Clipboard, - ClipboardProvider, - SecretsProvider, - { provide: SecureStorageService, useClass: SecureStorageServiceMock }, - { provide: Storage, useClass: StorageMock }, - { provide: NavController, useClass: NavControllerMock }, - { provide: NavParams, useClass: NavParamsMock }, - { provide: StatusBar, useClass: StatusBarMock }, - { provide: SplashScreen, useClass: SplashScreenMock }, - { provide: Platform, useClass: PlatformMock }, - TranslateService - ] - }).compileComponents() - })) - - beforeEach(done => { - fixture = TestBed.createComponent(TransactionSignedPage) - component = fixture.componentInstance - fixture.detectChanges() - - TestBed.get(SecretsProvider) - .currentSecretsList.asObservable() - .subscribe(value => { - done() - }) - }) - - it('should be created', () => { - expect(component instanceof TransactionSignedPage).toBe(true) - }) -}) diff --git a/src/pages/transaction-signed/transaction-signed.ts b/src/pages/transaction-signed/transaction-signed.ts deleted file mode 100644 index 3858081f..00000000 --- a/src/pages/transaction-signed/transaction-signed.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage, NavController, NavParams } from 'ionic-angular' -import { AirGapWallet, SyncProtocolUtils, DeserializedSyncProtocol } from 'airgap-coin-lib' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' -import { ClipboardProvider } from '../../providers/clipboard/clipboard' - -enum TransactionQRType { - SignedAirGap = 0, - SignedRaw = 1 -} - -@IonicPage() -@Component({ - selector: 'page-transaction-signed', - templateUrl: 'transaction-signed.html' -}) -export class TransactionSignedPage { - public signedTx: string - public interactionUrl: string - - public wallet: AirGapWallet - public qrType: TransactionQRType = 0 - - public signedTransactionSync: DeserializedSyncProtocol - - constructor(public navCtrl: NavController, public navParams: NavParams, private clipboardProvider: ClipboardProvider) { } - - async ionViewWillEnter() { - this.interactionUrl = this.navParams.get('interactionUrl') - this.wallet = this.navParams.get('wallet') - this.signedTx = this.navParams.get('signedTx') - } - - public switchQR() { - this.qrType = this.qrType === TransactionQRType.SignedAirGap ? TransactionQRType.SignedRaw : TransactionQRType.SignedAirGap - } - - public done() { - this.navCtrl.popToRoot().catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } -} diff --git a/src/pages/wallet-address/wallet-address.html b/src/pages/wallet-address/wallet-address.html deleted file mode 100644 index be30bbc0..00000000 --- a/src/pages/wallet-address/wallet-address.html +++ /dev/null @@ -1,46 +0,0 @@ - - - -

{{ 'wallet-address.title' | translate }}

-
- - - - -
-
- - - - - - - - -

{{ wallet.coinProtocol.name }} {{ wallet.coinProtocol.symbol }}

-

- {{ 'wallet-address.address_label' | translate }} -
- {{ wallet.receivingPublicAddress }} -

-

- {{ 'wallet-address.path_label' | translate }} -
- {{ wallet.derivationPath }} -

-
-
- - - - -
- - - - - - - - - diff --git a/src/pages/wallet-address/wallet-address.module.ts b/src/pages/wallet-address/wallet-address.module.ts deleted file mode 100644 index 19caa58d..00000000 --- a/src/pages/wallet-address/wallet-address.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { WalletAddressPage } from './wallet-address' -import { ComponentsModule } from '../../components/components.module' -import { QRCodeModule } from 'angularx-qrcode' -import { MaterialIconsModule } from 'ionic2-material-icons' -import { WalletEditPopoverComponent } from './wallet-edit-popover/wallet-edit-popover.component' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [WalletAddressPage, WalletEditPopoverComponent], - imports: [ComponentsModule, QRCodeModule, MaterialIconsModule, IonicPageModule.forChild(WalletAddressPage), TranslateModule], - entryComponents: [WalletAddressPage, WalletEditPopoverComponent] -}) -export class WalletAddressPageModule {} diff --git a/src/pages/wallet-address/wallet-address.scss b/src/pages/wallet-address/wallet-address.scss deleted file mode 100644 index 9830736e..00000000 --- a/src/pages/wallet-address/wallet-address.scss +++ /dev/null @@ -1,24 +0,0 @@ -page-wallet-address { - ion-avatar { - width: 64px; - height: 64px; - img { - width: 64px; - height: 64px; - } - } - .symbol--icon { - position: absolute; - height: 32px; - width: 32px; - left: 40px; - top: 40px; - } -} - -.selectable { - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; -} diff --git a/src/pages/wallet-address/wallet-address.ts b/src/pages/wallet-address/wallet-address.ts deleted file mode 100644 index c7a8520a..00000000 --- a/src/pages/wallet-address/wallet-address.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage, NavController, ToastController, NavParams, PopoverController, Platform } from 'ionic-angular' -import { WalletEditPopoverComponent } from './wallet-edit-popover/wallet-edit-popover.component' -import { AirGapWallet, DeserializedSyncProtocol, EncodedType, SyncProtocolUtils, SyncWalletRequest } from 'airgap-coin-lib' -import { ClipboardProvider } from '../../providers/clipboard/clipboard' -import { ShareUrlProvider } from '../../providers/share-url/share-url' -import { ErrorCategory, handleErrorLocal } from '../../providers/error-handler/error-handler' -import { InteractionSelectionPage } from '../interaction-selection/interaction-selection' -import { WalletSharePage } from '../wallet-share/wallet-share' -import { SecretsProvider } from '../../providers/secrets/secrets.provider' -import { InteractionProvider, InteractionOperationType, InteractionSetting } from '../../providers/interaction/interaction' - -declare var window: any - -@IonicPage() -@Component({ - selector: 'page-wallet-address', - templateUrl: 'wallet-address.html' -}) -export class WalletAddressPage { - public wallet: AirGapWallet - private walletShareUrl: string - - constructor( - private popoverCtrl: PopoverController, - private toastController: ToastController, - private clipboardProvider: ClipboardProvider, - private navController: NavController, - private navParams: NavParams, - private secretsProvider: SecretsProvider, - private platform: Platform, - private shareUrlProvider: ShareUrlProvider, - private interactionProvider: InteractionProvider - ) { - this.wallet = this.navParams.get('wallet') - } - - async ionViewDidEnter() { - this.walletShareUrl = await this.shareUrlProvider.generateShareURL(this.wallet) - } - - done() { - this.navController.pop().catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - - async share() { - this.interactionProvider.startInteraction( - this.navController, - { - operationType: InteractionOperationType.WALLET_SYNC, - url: this.walletShareUrl - }, - this.secretsProvider.getActiveSecret() - ) - } - - presentEditPopover(event) { - let popover = this.popoverCtrl.create(WalletEditPopoverComponent, { - wallet: this.wallet, - walletShareUrl: this.walletShareUrl, - onDelete: () => { - this.done() - } - }) - popover - .present({ - ev: event - }) - .catch(handleErrorLocal(ErrorCategory.IONIC_ALERT)) - } - - async copyAddressToClipboard() { - await this.clipboardProvider.copyAndShowToast(this.wallet.receivingPublicAddress) - } -} diff --git a/src/pages/wallet-address/wallet-edit-popover/wallet-edit-popover.component.ts b/src/pages/wallet-address/wallet-edit-popover/wallet-edit-popover.component.ts deleted file mode 100644 index 2419d991..00000000 --- a/src/pages/wallet-address/wallet-edit-popover/wallet-edit-popover.component.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { Component } from '@angular/core' -import { AlertController, NavParams, ToastController, ViewController } from 'ionic-angular' -import { SecretsProvider } from '../../../providers/secrets/secrets.provider' -import { AirGapWallet } from 'airgap-coin-lib' -import { ClipboardProvider } from '../../../providers/clipboard/clipboard' -import { TranslateService } from '@ngx-translate/core' -import { handleErrorLocal, ErrorCategory } from '../../../providers/error-handler/error-handler' - -@Component({ - template: ` - - {{ 'wallet-edit-delete-popover.settings_label' | translate }} - - - - - ` -}) -export class WalletEditPopoverComponent { - private wallet: AirGapWallet - private onDelete: Function - private walletShareUrl: string - - constructor( - private alertCtrl: AlertController, - private clipboardProvider: ClipboardProvider, - private toastController: ToastController, - private navParams: NavParams, - private secretsProvider: SecretsProvider, - private viewCtrl: ViewController, - private translateService: TranslateService - ) { - this.wallet = this.navParams.get('wallet') - this.onDelete = this.navParams.get('onDelete') - this.walletShareUrl = this.navParams.get('walletShareUrl') - } - - async copyAddressToClipboard() { - await this.clipboardProvider.copyAndShowToast( - this.wallet.receivingPublicAddress, - this.translateService.instant('wallet-edit-delete-popover.confirm_address_copy') - ) - - await this.viewCtrl.dismiss() - } - - async copyShareUrlToClipboard() { - await this.clipboardProvider.copyAndShowToast( - this.walletShareUrl, - this.translateService.instant('wallet-edit-delete-popover.confirm_sync_code_copy') - ) - - await this.viewCtrl.dismiss() - } - - delete() { - this.translateService - .get([ - 'wallet-edit-delete-popover.account-removal_alert.title', - 'wallet-edit-delete-popover.account-removal_alert.text', - 'wallet-edit-delete-popover.account-removal_alert.cancel_label', - 'wallet-edit-delete-popover.account-removal_alert.delete_label' - ]) - .subscribe(values => { - let title = values['wallet-edit-delete-popover.account-removal_alert.title'] - let message = values['wallet-edit-delete-popover.account-removal_alert.text'] - let text1 = values['wallet-edit-delete-popover.account-removal_alert.cancel_label'] - let text2 = values['wallet-edit-delete-popover.account-removal_alert.delete_label'] - let alert = this.alertCtrl.create({ - title: title, - message: message, - buttons: [ - { - text: text1, - role: 'cancel', - handler: () => { - this.viewCtrl.dismiss().catch(handleErrorLocal(ErrorCategory.IONIC_ALERT)) - } - }, - { - text: text2, - handler: () => { - alert.present().catch(handleErrorLocal(ErrorCategory.IONIC_ALERT)) - this.secretsProvider - .removeWallet(this.wallet) - .then(() => { - this.viewCtrl.dismiss().catch(handleErrorLocal(ErrorCategory.IONIC_ALERT)) - if (this.onDelete) { - this.onDelete() - } - }) - .catch(handleErrorLocal(ErrorCategory.SECURE_STORAGE)) - } - } - ] - }) - alert.present().catch(handleErrorLocal(ErrorCategory.IONIC_ALERT)) - }) - } -} diff --git a/src/pages/wallet-select-coins/wallet-select-coins.html b/src/pages/wallet-select-coins/wallet-select-coins.html deleted file mode 100644 index eef6ecbc..00000000 --- a/src/pages/wallet-select-coins/wallet-select-coins.html +++ /dev/null @@ -1,69 +0,0 @@ - - - -

{{ 'wallet-select-coins.title' | translate }}

-
-
-
- - - - - - - - {{ 'wallet-select-coins.text' | translate }} - - - - {{ protocol.name }} - - - - - - - {{ 'wallet-select-coins.select-type.label' | translate }} - - {{ 'wallet-select-coins.select-type.single-address_label' | translate }} - {{ 'wallet-select-coins.select-type.hd-wallet_label' | translate }} - - - - - - {{ 'wallet-select-coins.advanced_label' | translate }} - - - - - {{ 'wallet-select-coins.custom-path.label' | translate }} - - - - - - - - - - - - - - diff --git a/src/pages/wallet-select-coins/wallet-select-coins.module.ts b/src/pages/wallet-select-coins/wallet-select-coins.module.ts deleted file mode 100644 index 48b40640..00000000 --- a/src/pages/wallet-select-coins/wallet-select-coins.module.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { WalletSelectCoinsPage } from './wallet-select-coins' -import { ComponentsModule } from '../../components/components.module' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [WalletSelectCoinsPage], - imports: [ComponentsModule, IonicPageModule.forChild(WalletSelectCoinsPage), TranslateModule] -}) -export class WalletSelectCoinsPageModule {} diff --git a/src/pages/wallet-select-coins/wallet-select-coins.scss b/src/pages/wallet-select-coins/wallet-select-coins.scss deleted file mode 100644 index fe22fdac..00000000 --- a/src/pages/wallet-select-coins/wallet-select-coins.scss +++ /dev/null @@ -1,12 +0,0 @@ -page-wallet-select-coins { - .checkbox-md .checkbox-icon { - border-color: color($colors, white); - background-color: color($colors, secondary); - } - .item.item-md .checkbox-md[item-right], - .item.item-md .checkbox-md[item-end], - .item.item-ios .checkbox-ios[item-right], - .item.item-ios .checkbox-ios[item-end] { - margin-right: 0; - } -} diff --git a/src/pages/wallet-select-coins/wallet-select-coins.spec.ts b/src/pages/wallet-select-coins/wallet-select-coins.spec.ts deleted file mode 100644 index b537478d..00000000 --- a/src/pages/wallet-select-coins/wallet-select-coins.spec.ts +++ /dev/null @@ -1,110 +0,0 @@ -import 'jasmine' -import { async, TestBed, ComponentFixture } from '@angular/core/testing' -import { IonicModule, NavController, NavParams, Platform } from 'ionic-angular' -import { WalletSelectCoinsPage } from './wallet-select-coins' -import { StatusBar } from '@ionic-native/status-bar' -import { SplashScreen } from '@ionic-native/splash-screen' - -import { PlatformMock, StatusBarMock, SplashScreenMock } from '../../../test-config/mocks-ionic' -import { NavControllerMock, NavParamsMock } from 'ionic-mocks' - -import { ComponentsModule } from '../../components/components.module' -import { SecretsProvider } from '../../providers/secrets/secrets.provider' -import { SecureStorageService } from '../../providers/storage/secure-storage' -import { SecureStorageFactory } from '../../providers/storage/secure-storage.factory' -import { IonicStorageModule } from '@ionic/storage' -import { By } from '@angular/platform-browser' -import { TranslateModule, TranslateService } from '@ngx-translate/core' -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing' -import { HttpClient } from '@angular/common/http' - -describe('Wallet-Select-Coin Component', () => { - let fixture: ComponentFixture - let component: WalletSelectCoinsPage - let translate: TranslateService - let http: HttpTestingController - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [WalletSelectCoinsPage], - imports: [ - IonicModule.forRoot(WalletSelectCoinsPage), - ComponentsModule, - IonicStorageModule.forRoot({ - name: '__airgap_storage', - driverOrder: ['localstorage'] - }), - HttpClientTestingModule, - TranslateModule.forRoot() - ], - providers: [ - SecretsProvider, - { - provide: SecureStorageService, - useFactory: SecureStorageFactory, - deps: [Platform] - }, - { provide: NavController, useClass: NavControllerMock }, - { provide: NavParams, useClass: NavParamsMock }, - { provide: StatusBar, useClass: StatusBarMock }, - { provide: SplashScreen, useClass: SplashScreenMock }, - { provide: Platform, useClass: PlatformMock }, - TranslateService - ] - }) - .compileComponents() - .then(() => { - fixture = TestBed.createComponent(WalletSelectCoinsPage) - component = fixture.componentInstance - }) - })) - - it('should be created', () => { - expect(component instanceof WalletSelectCoinsPage).toBe(true) - }) - - it('should not define a protocol by default', () => { - expect(component.selectedProtocol).toBeUndefined() - expect(fixture.debugElement.query(By.css('#wallet-type-selector'))) - }) - - /* - it('should not show hd-wallet dropdown if currency does not support it', async(() => { - fixture.detectChanges() - - let el = fixture.debugElement.nativeElement - let ethereumRadio = el.querySelector('#eth') - - // click on ethereum - ethereumRadio.click() - - fixture.whenStable().then(() => { - console.log(fixture.componentInstance.selectedProtocol) - - expect(fixture.componentInstance.selectedProtocol).toBeDefined() - expect(fixture.componentInstance.selectedProtocol.identifier).toEqual('eth') - - // eth should not show hd wallets - let hdWalletSelector = el.querySelector('#wallet-type-selector') - expect(hdWalletSelector).toBeFalsy() - }) - })) - - it('should show hd-wallet dropdown if currency supports it', () => { - fixture.detectChanges() - - let el = fixture.debugElement.nativeElement - let btcRadio = el.querySelector('#btc') - - // click on ethereum - btcRadio.click() - - expect(component.selectedProtocol).toBeDefined() - expect(component.selectedProtocol.identifier).toEqual('btc') - - // eth should not show hd wallets - let hdWalletSelector = el.querySelector('#wallet-type-selector') - expect(hdWalletSelector).toBeTruthy() - }) - */ -}) diff --git a/src/pages/wallet-select-coins/wallet-select-coins.ts b/src/pages/wallet-select-coins/wallet-select-coins.ts deleted file mode 100644 index b49e0e10..00000000 --- a/src/pages/wallet-select-coins/wallet-select-coins.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage, NavController, NavParams, LoadingController, App } from 'ionic-angular' -import { SecretsProvider } from '../../providers/secrets/secrets.provider' -import { Storage } from '@ionic/storage' -import { LocalAuthenticationOnboardingPage } from '../local-authentication-onboarding/local-authentication-onboarding' -import { ICoinProtocol, supportedProtocols, getProtocolByIdentifier } from 'airgap-coin-lib' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -@IonicPage() -@Component({ - selector: 'page-wallet-select-coins', - templateUrl: 'wallet-select-coins.html' -}) -export class WalletSelectCoinsPage { - selectedProtocol: ICoinProtocol - customDerivationPath: string - coinProtocols: ICoinProtocol[] - isHDWallet: boolean = false - isAdvancedMode: boolean = false - - constructor( - public loadingCtrl: LoadingController, - public navCtrl: NavController, - public navParams: NavParams, - private secretsProvider: SecretsProvider, - private storage: Storage, - private app: App - ) { - this.coinProtocols = supportedProtocols() - try { - this.selectedProtocol = getProtocolByIdentifier(this.navParams.get('protocol')) - } catch (error) {} - } - - ionViewDidLoad() { - console.log('ionViewDidLoad WalletSelectCoinsPage') - } - - onSelectedProtocolChange(selectedProtocol) { - this.selectedProtocol = selectedProtocol - this.isHDWallet = this.selectedProtocol.supportsHD - this.customDerivationPath = this.selectedProtocol.standardDerivationPath - } - - onIsHDWalletChange(isHDWallet) { - this.isHDWallet = isHDWallet - if (isHDWallet) { - this.customDerivationPath = this.selectedProtocol.standardDerivationPath - } else { - this.customDerivationPath = `${this.selectedProtocol.standardDerivationPath}/0/1` - } - } - - async addWallet() { - const value = await this.storage.get('DISCLAIMER_HIDE_LOCAL_AUTH_ONBOARDING') - if (!value) { - this.navCtrl - .push(LocalAuthenticationOnboardingPage, { - protocolIdentifier: this.selectedProtocol.identifier, - isHDWallet: this.isHDWallet, - customDerivationPath: this.customDerivationPath - }) - .catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - return - } - await this.secretsProvider.addWallet(this.selectedProtocol.identifier, this.isHDWallet, this.customDerivationPath) - await this.navCtrl.popToRoot() - - // navigate to wallets tab after initial derivation - if (this.app.getActiveNavs().length > 0) { - ;(this.app.getActiveNavs()[0] as any).parent.select(0) - } - } -} diff --git a/src/pages/wallet-share/wallet-share.html b/src/pages/wallet-share/wallet-share.html deleted file mode 100644 index a7e61ccf..00000000 --- a/src/pages/wallet-share/wallet-share.html +++ /dev/null @@ -1,25 +0,0 @@ - - - -

{{ 'wallet-share.title' | translate }}

-
-
-
- - -

- - - - - -

-
- - - - - - - - diff --git a/src/pages/wallet-share/wallet-share.module.ts b/src/pages/wallet-share/wallet-share.module.ts deleted file mode 100644 index 7ce99a34..00000000 --- a/src/pages/wallet-share/wallet-share.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule } from 'ionic-angular' -import { WalletSharePage } from './wallet-share' -import { ComponentsModule } from '../../components/components.module' -import { QRCodeModule } from 'angularx-qrcode' -import { MaterialIconsModule } from 'ionic2-material-icons' -import { TranslateModule } from '@ngx-translate/core' -import { ShareUrlProvider } from '../../providers/share-url/share-url' - -@NgModule({ - declarations: [WalletSharePage], - imports: [ComponentsModule, QRCodeModule, MaterialIconsModule, IonicPageModule.forChild(WalletSharePage), TranslateModule], - entryComponents: [WalletSharePage], - providers: [ShareUrlProvider] -}) -export class WalletSharePageModule {} diff --git a/src/pages/wallet-share/wallet-share.ts b/src/pages/wallet-share/wallet-share.ts deleted file mode 100644 index d5ae4553..00000000 --- a/src/pages/wallet-share/wallet-share.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage, NavController, NavParams } from 'ionic-angular' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -@IonicPage() -@Component({ - selector: 'page-wallet-share', - templateUrl: 'wallet-share.html' -}) -export class WalletSharePage { - public interactionUrl: string - - constructor(private navController: NavController, private navParams: NavParams) { - this.interactionUrl = this.navParams.get('interactionUrl') - } - - done() { - this.navController.popToRoot().catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } -} diff --git a/src/pages/warnings-modal/warnings-modal.html b/src/pages/warnings-modal/warnings-modal.html deleted file mode 100644 index 459660da..00000000 --- a/src/pages/warnings-modal/warnings-modal.html +++ /dev/null @@ -1,19 +0,0 @@ - - -

{{ title }}

-
-
- - - - - - - - - - - - - - diff --git a/src/pages/warnings-modal/warnings-modal.module.ts b/src/pages/warnings-modal/warnings-modal.module.ts deleted file mode 100644 index 565f5e31..00000000 --- a/src/pages/warnings-modal/warnings-modal.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { NgModule } from '@angular/core' -import { IonicPageModule, Platform } from 'ionic-angular' -import { WarningsModalPage } from './warnings-modal' -import { SecureStorageService } from '../../providers/storage/secure-storage' -import { SecureStorageFactory } from '../../providers/storage/secure-storage.factory' -import { IonicStorageModule } from '@ionic/storage' -import { TranslateModule } from '@ngx-translate/core' - -@NgModule({ - declarations: [WarningsModalPage], - imports: [IonicPageModule.forChild(WarningsModalPage), IonicStorageModule, TranslateModule], - entryComponents: [WarningsModalPage], - providers: [ - Platform, - { - provide: SecureStorageService, - useFactory: SecureStorageFactory, - deps: [Platform] - } - ] -}) -export class WarningsModalPageModule {} diff --git a/src/pages/warnings-modal/warnings-modal.scss b/src/pages/warnings-modal/warnings-modal.scss deleted file mode 100644 index a95f5b91..00000000 --- a/src/pages/warnings-modal/warnings-modal.scss +++ /dev/null @@ -1,8 +0,0 @@ -page-warnings-modal { - .warning-img { - width: 100%; - } - ul { - padding: 0; - } -} diff --git a/src/pages/warnings-modal/warnings-modal.ts b/src/pages/warnings-modal/warnings-modal.ts deleted file mode 100644 index 43ae5f55..00000000 --- a/src/pages/warnings-modal/warnings-modal.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { Component } from '@angular/core' -import { IonicPage, NavParams, Platform, ViewController } from 'ionic-angular' -import { SecureStorageService } from '../../providers/storage/secure-storage' -import { Storage } from '@ionic/storage' -import { TranslateService } from '@ngx-translate/core' -import { handleErrorLocal, ErrorCategory } from '../../providers/error-handler/error-handler' - -export enum Warning { - SECURE_STORAGE, - ROOT, - SCREENSHOT, - NETWORK, - INITIAL_DISCLAIMER -} - -@IonicPage() -@Component({ - selector: 'page-warnings-modal', - templateUrl: 'warnings-modal.html' -}) -export class WarningsModalPage { - private errorType: Warning - - public title: string - public description: string - public imageUrl: string - public handler: Function - public buttonText: string = 'Ok' - - constructor( - public navParams: NavParams, - private secureStorage: SecureStorageService, - private platform: Platform, - private viewCtrl: ViewController, - private storage: Storage, - private translateService: TranslateService - ) { - this.errorType = navParams.get('errorType') - } - - ngAfterViewInit() { - if (this.errorType === Warning.ROOT) { - this.title = 'Your device is rooted' - this.description = - 'It seems like you have rooted your device. While we think this is neat, it weakens the security of your device significantly and we multiple mechanisms of AirGap can be circumvented by other apps. Therefore, AirGap is not able to run on this device.' - this.imageUrl = './assets/img/root_detection.svg' - this.handler = () => { - this.platform.exitApp() - } - } - - if (this.errorType === Warning.SCREENSHOT) { - this.title = 'Screenshot detected' - this.description = - 'Looks like you just took a screenshot. Make sure that you never take a screenshot you might expose your secret key.' - this.imageUrl = './assets/img/screenshot_detected.svg' - this.handler = () => { - this.platform.exitApp() - } - } - - if (this.errorType === Warning.SECURE_STORAGE) { - this.title = 'Device Unsecure' - this.description = - 'Your lockscreen needs to be setup in order to properly encrypt and protect your secrets. After securing your device, please close and restart AirGap.' - this.imageUrl = './assets/img/screenshot_detected.svg' - this.buttonText = 'Secure Device' - this.handler = () => { - this.secureStorage.secureDevice().catch(handleErrorLocal(ErrorCategory.SECURE_STORAGE)) - } - } - - if (this.errorType === Warning.NETWORK) { - this.title = 'Network Connection detected' - this.description = - 'Looks like you have connected this device to a network. The AirGap App has no network priviledges but it is best to disconnect the device entierly from any network.' - this.imageUrl = './assets/img/network_connection.svg' - this.handler = () => { - this.platform.exitApp() - } - } - - if (this.errorType === Warning.INITIAL_DISCLAIMER) { - this.translateService - .get([ - 'warnings-modal.disclaimer.title', - 'warnings-modal.disclaimer.text', - 'warnings-modal.disclaimer.disclaimer-list.text', - 'warnings-modal.disclaimer.disclaimer-list.item-1_text', - 'warnings-modal.disclaimer.disclaimer-list.item-2_text', - 'warnings-modal.disclaimer.description', - 'warnings-modal.disclaimer.understood_label' - ]) - .subscribe(values => { - let title: string = values['warnings-modal.disclaimer.title'] - let text: string = values['warnings-modal.disclaimer.text'] - let list_text: string = values['warnings-modal.disclaimer.disclaimer-list.text'] - let list_item1_text: string = values['warnings-modal.disclaimer.disclaimer-list.item-1_text'] - let list_item2_text: string = values['warnings-modal.disclaimer.disclaimer-list.item-2_text'] - let description_text: string = values['warnings-modal.disclaimer.description'] - let label: string = values['warnings-modal.disclaimer.understood_label'] - this.title = title - this.description = - '

' + - text + - '

' + - list_text + - '

  • ' + - list_item1_text + - '
  • ' + - list_item2_text + - '

' + - description_text + - '

' - - this.imageUrl = null - this.buttonText = label - this.handler = () => { - this.storage - .set('DISCLAIMER_INITIAL', true) - .then(() => { - this.viewCtrl.dismiss().catch(handleErrorLocal(ErrorCategory.IONIC_MODAL)) - }) - .catch(handleErrorLocal(ErrorCategory.SECURE_STORAGE)) - } - }) - } - } -} diff --git a/src/polyfills.ts b/src/polyfills.ts new file mode 100644 index 00000000..afca7e7d --- /dev/null +++ b/src/polyfills.ts @@ -0,0 +1,65 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** IE10 and IE11 requires the following for NgClass support on SVG elements */ +// import 'classlist.js'; // Run `npm install --save classlist.js`. + +/** + * Web Animations `@angular/platform-browser/animations` + * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. + * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). + */ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags.ts'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +import './zone-flags.ts' + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ + +import 'zone.js/dist/zone' // Included with Angular CLI. + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/src/providers/audio/audio.browser.service.ts b/src/providers/audio/audio.browser.service.ts deleted file mode 100644 index 1cc61380..00000000 --- a/src/providers/audio/audio.browser.service.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { Injectable } from '@angular/core' -import { Entropy, IEntropyGenerator } from '../entropy/IEntropyGenerator' -import { Observable } from 'rxjs' - -import workerJS from '../../assets/workers/entropyCalculatorWorker' -const blobURL = window.URL.createObjectURL(new Blob([workerJS])) -const entropyCalculatorWorker = new Worker(blobURL) - -@Injectable() -export class AudioBrowserService implements IEntropyGenerator { - private ENTROPY_SIZE = 4096 - - private handler - - private entropyObservable: Observable - - private collectedEntropyPercentage: number = 0 - - private microphoneStreamSource - private scriptProcessor - - constructor() { - this.entropyObservable = Observable.create(observer => { - entropyCalculatorWorker.onmessage = event => { - this.collectedEntropyPercentage += event.data.entropyMeasure - observer.next({ - entropyHex: event.data.entropyHex - }) - } - this.handler = event => { - const data = event.inputBuffer.getChannelData(0) - let buffer1 = this.arrayBufferFromIntArray(data) - entropyCalculatorWorker.postMessage({ entropyBuffer: buffer1 }, [buffer1]) - } - }) - - // polyfill getUserMedia - navigator.getUserMedia = - (navigator as any).getUserMedia || - (navigator as any).webkitGetUserMedia || - (navigator as any).mozGetUserMedia || - (navigator as any).msGetUserMedia - } - - start(): Promise { - this.collectedEntropyPercentage = 0 - return new Promise(resolve => { - navigator.getUserMedia( - { video: false, audio: true }, - stream => { - const audioContext = new AudioContext() - const microphoneStreamSource = audioContext.createMediaStreamSource(stream) - const scriptProcessor = audioContext.createScriptProcessor(this.ENTROPY_SIZE, 1, 1) - scriptProcessor.onaudioprocess = event => { - this.handler(event) - } - microphoneStreamSource.connect(scriptProcessor) - scriptProcessor.connect(audioContext.destination) - resolve() - }, - err => { - console.log('error in audio.browser.service:', err) - resolve() - } - ) - }) - } - - stop(): Promise { - return new Promise(resolve => { - if (this.microphoneStreamSource) { - this.microphoneStreamSource.stop() - this.microphoneStreamSource.disconnect() - } - if (this.scriptProcessor) { - this.scriptProcessor.stop() - this.scriptProcessor.disconnect() - } - resolve() - }) - } - - getEntropyUpdateObservable(): Observable { - return this.entropyObservable - } - - private arrayBufferFromIntArray(array: Float32Array) { - const buffer = new ArrayBuffer(array.length) - const bufView = new Float32Array(buffer) - - for (let i = 0; i < array.length; i++) { - bufView[i] = array[i] - } - return buffer - } - - getCollectedEntropyPercentage(): number { - return this.collectedEntropyPercentage / 200 - } -} diff --git a/src/providers/audio/audio.factory.ts b/src/providers/audio/audio.factory.ts deleted file mode 100644 index b93a472d..00000000 --- a/src/providers/audio/audio.factory.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Platform } from 'ionic-angular' -import { AudioBrowserService } from './audio.browser.service' -import { AudioNativeService } from './audio.native.service' -import { IEntropyGenerator } from '../entropy/IEntropyGenerator' -import { PermissionsProvider } from '../permissions/permissions' - -export function AudioServiceFactory(platform: Platform, permissionsProvider: PermissionsProvider): IEntropyGenerator { - if (platform.is('cordova')) { - return new AudioNativeService(platform, permissionsProvider) - } else { - return new AudioBrowserService() - } -} diff --git a/src/providers/audio/audio.native.service.ts b/src/providers/audio/audio.native.service.ts deleted file mode 100644 index cb6afd5b..00000000 --- a/src/providers/audio/audio.native.service.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { Injectable } from '@angular/core' -import { Platform } from 'ionic-angular' -import { Entropy, IEntropyGenerator } from '../entropy/IEntropyGenerator' -import { Observable } from 'rxjs' - -declare var window: any - -import workerJS from '../../assets/workers/entropyCalculatorWorker' -import { PermissionsProvider, PermissionStatus } from '../permissions/permissions' -const blobURL = window.URL.createObjectURL(new Blob([workerJS])) -const entropyCalculatorWorker = new Worker(blobURL) - -@Injectable() -export class AudioNativeService implements IEntropyGenerator { - private ENTROPY_SIZE = 4096 - - private collectedEntropyPercentage: number = 0 - - private handler - private entropyObservable: Observable - - constructor(private platform: Platform, private permissionsProvider: PermissionsProvider) { - this.entropyObservable = Observable.create(observer => { - entropyCalculatorWorker.onmessage = event => { - this.collectedEntropyPercentage += event.data.entropyMeasure - observer.next({ - entropyHex: event.data.entropyHex - }) - } - this.handler = audioStream => { - const buffer1 = this.arrayBufferFromIntArray(audioStream.data) - entropyCalculatorWorker.postMessage( - { - entropyBuffer: buffer1 - }, - [buffer1] - ) - } - }) - } - - async start(): Promise { - this.collectedEntropyPercentage = 0 - await this.platform.ready() - - const permissionStatus = await this.permissionsProvider.hasMicrophonePermission() - if (permissionStatus !== PermissionStatus.GRANTED) { - return - } - - window.audioinput.start({ - bufferSize: this.ENTROPY_SIZE - }) - - setTimeout(() => { - window.addEventListener('audioinput', this.handler) - }, 1000) - - console.log('audioinput created.') - } - - stop(): Promise { - return new Promise(resolve => { - console.log('removed audioinput listener') - window.audioinput.stop() - window.removeEventListener('audioinput', this.handler) - resolve() - }) - } - - getEntropyUpdateObservable(): Observable { - return this.entropyObservable - } - - private arrayBufferFromIntArray(array: number[]) { - const buffer = new ArrayBuffer(array.length * 2) - const bufView = new Uint8Array(buffer) - - for (let i = 0; i < array.length; i++) { - bufView[i] = Math.abs(array[i] * 10000) - } - - return buffer - } - - getCollectedEntropyPercentage(): number { - return this.collectedEntropyPercentage / 200 - } -} diff --git a/src/providers/camera/camera.browser.service.ts b/src/providers/camera/camera.browser.service.ts deleted file mode 100644 index 2a9f5e65..00000000 --- a/src/providers/camera/camera.browser.service.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { ElementRef, Injectable, ViewChild } from '@angular/core' -import { Entropy, IEntropyGenerator } from '../entropy/IEntropyGenerator' -import { Observable } from 'rxjs' - -import workerJS from '../../assets/workers/entropyCalculatorWorker' -const blobURL = window.URL.createObjectURL(new Blob([workerJS])) -const entropyCalculatorWorker = new Worker(blobURL) - -@Injectable() -export class CameraBrowserService implements IEntropyGenerator { - private VIDEO_FREQUENCY = 2000 - - @ViewChild('cameraCanvas') public cameraCanvas: ElementRef - canvasElement: HTMLCanvasElement - - private collectedEntropyPercentage: number = 0 - - private handler: Function - private entropyObservable: Observable - - private cameraInterval: number - - private videoElement: any - private videoStream: any - - constructor() { - this.entropyObservable = Observable.create(observer => { - entropyCalculatorWorker.onmessage = event => { - this.collectedEntropyPercentage += event.data.entropyMeasure - observer.next({ entropyHex: event.data.entropyHex }) - } - this.handler = buffer1 => { - const uintArray = this.arrayBufferFromUint8Array(buffer1) - entropyCalculatorWorker.postMessage( - { - entropyBuffer: uintArray - }, - [uintArray] - ) - } - }) - } - - viewDidLeave() { - // empty - } - - viewWillEnter() { - // empty - } - - start(): Promise { - return new Promise(resolve => { - const constraints = { - video: true, - audio: true - } - - this.collectedEntropyPercentage = 0 - - const video = this.videoElement.nativeElement - - navigator.mediaDevices - .getUserMedia(constraints) - .then(stream => { - this.videoStream = stream - video.srcObject = stream - video.play() - resolve() - }) - .catch(err => { - console.log('error in camera.brower.service', err) - resolve() - }) - - this.cameraInterval = window.setInterval(() => { - if (video.videoWidth === 0) { - return - } - let canvas = document.createElement('canvas') - - let context = canvas.getContext('2d') - - context.drawImage(video, 0, 0) - let buffer = context.getImageData(0, 0, video.videoWidth, video.videoHeight).data - this.handler(buffer) - }, this.VIDEO_FREQUENCY / 5) - }) - } - - stop(): Promise { - if (this.cameraInterval) { - clearInterval(this.cameraInterval) - } - - try { - this.videoStream.getTracks().forEach(function(track) { - track.stop() - }) - } catch (e) { - console.log(e) - } - return Promise.resolve() - } - - getEntropyUpdateObservable(): Observable { - return this.entropyObservable - } - - getCollectedEntropyPercentage(): number { - return this.collectedEntropyPercentage - } - - private arrayBufferFromUint8Array(uintArray: Uint8ClampedArray) { - const buffer = new ArrayBuffer(uintArray.length) - const bufView = new Uint8Array(buffer) - - for (let i = 0; i < uintArray.length; i++) { - bufView[i] = uintArray[i] - } - - return buffer - } - - setVideoElement(element) { - this.videoElement = element - } -} diff --git a/src/providers/camera/camera.factory.ts b/src/providers/camera/camera.factory.ts deleted file mode 100644 index 7d47b319..00000000 --- a/src/providers/camera/camera.factory.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Platform } from 'ionic-angular' -import { CameraBrowserService } from './camera.browser.service' -import { CameraNativeService } from './camera.native.service' -import { CameraPreview } from '@ionic-native/camera-preview' -import { RendererFactory2 } from '@angular/core' -import { IEntropyGenerator } from '../entropy/IEntropyGenerator' -import { PermissionsProvider } from '../permissions/permissions' - -export function CameraFactory( - platform: Platform, - cameraPreview: CameraPreview, - rendererFactory: RendererFactory2, - permissionsProvider: PermissionsProvider -): IEntropyGenerator { - if (platform.is('cordova')) { - return new CameraNativeService(platform, cameraPreview, rendererFactory, permissionsProvider) - } else { - return new CameraBrowserService() - } -} diff --git a/src/providers/camera/camera.native.service.ts b/src/providers/camera/camera.native.service.ts deleted file mode 100644 index b7bc1b52..00000000 --- a/src/providers/camera/camera.native.service.ts +++ /dev/null @@ -1,239 +0,0 @@ -import { ElementRef, Injectable, Renderer2, RendererFactory2, ViewChild } from '@angular/core' -import { CameraPreview } from '@ionic-native/camera-preview' -import { Platform } from 'ionic-angular' -import { Entropy, IEntropyGenerator } from '../entropy/IEntropyGenerator' -import { Observable } from 'rxjs' - -import workerJS from '../../assets/workers/entropyCalculatorWorker' -import { PermissionsProvider, PermissionStatus } from '../permissions/permissions' -import { handleErrorLocal, ErrorCategory } from '../error-handler/error-handler' -const blobURL = window.URL.createObjectURL(new Blob([workerJS])) -const entropyCalculatorWorker = new Worker(blobURL) - -@Injectable() -export class CameraNativeService implements IEntropyGenerator { - private disabled = false - - private cameraIsRunning = false // Prevent multiple start/stops of camera - private cameraIsTakingPhoto = false // Prevent stopping camera while picture is being taken - - // entropy settings - private VIDEO_SIZE = 50 - private VIDEO_QUALITY = 100 - private VIDEO_FREQUENCY = 2000 - - private renderer: Renderer2 - - @ViewChild('cameraCanvas') public cameraCanvas: ElementRef - canvasElement: HTMLCanvasElement - - private collectedEntropyPercentage: number = 0 - - private handler: Function - private entropyObservable: Observable - - private cameraInterval: number - - private cameraOptions: any - - constructor( - private platform: Platform, - private cameraPreview: CameraPreview, - private rendererFactory: RendererFactory2, - private permissionsProvider: PermissionsProvider - ) { - this.renderer = this.rendererFactory.createRenderer(null, null) - this.entropyObservable = Observable.create(observer => { - entropyCalculatorWorker.onmessage = event => { - this.collectedEntropyPercentage += event.data.entropyMeasure - observer.next({ entropyHex: event.data.entropyHex }) - } - - this.handler = base64ImagePayload => { - const buffer1 = this.arrayBufferFromBase64(base64ImagePayload) - - entropyCalculatorWorker.postMessage( - { - entropyBuffer: buffer1 - }, - [buffer1] - ) - } - }) - } - - setCameraOptions(opts) { - this.cameraOptions = opts - } - - viewDidLeave() { - this.disabled = true - this.uninjectCSS() - } - - viewWillEnter() { - this.disabled = false - } - - async start(): Promise { - this.disabled = false - this.collectedEntropyPercentage = 0 - await this.platform.ready() - - const permissionStatus = await this.permissionsProvider.hasCameraPermission() - if (permissionStatus !== PermissionStatus.GRANTED) { - return - } - return this.initCamera() - } - - private initCamera(): Promise { - console.log('initCamera') - - return new Promise(resolve => { - this.cameraPreview - .startCamera( - Object.assign( - { - x: 0, - y: 0, - width: window.screen.width, - height: window.screen.height, - toBack: true, - tapPhoto: false, - previewDrag: false, - disableExifHeaderStripping: true - } as any, - this.cameraOptions - ) - ) - .then(() => { - this.cameraIsRunning = true - if (this.platform.is('ios')) { - return this.cameraPreview.setFlashMode('off') - } - return Promise.resolve() - }) - .then( - () => { - if (this.disabled) { - console.log('not starting, disabled') - if (this.cameraIsRunning) { - this.stop().catch(handleErrorLocal(ErrorCategory.CORDOVA_PLUGIN)) - } - return - } - console.log('camera started.') - - // inject css now - this.injectCSS() - - // start camera interval - this.cameraInterval = window.setInterval(() => { - this.cameraIsTakingPhoto = true - this.cameraPreview - .takePicture({ - width: this.VIDEO_SIZE, - height: this.VIDEO_SIZE, - quality: this.VIDEO_QUALITY - }) - .then(result => { - this.cameraIsTakingPhoto = false - if (this.handler) { - this.handler(result) - } - }) - .catch(err => { - if (err === 'Camera not started') { - if (this.cameraInterval) { - clearInterval(this.cameraInterval) - } - } - }) - }, this.VIDEO_FREQUENCY) - - resolve() - }, - error => { - console.warn('startCamera error: ', error) - if (error === 'Camera already started!') { - this.stop() - .then(() => { - return this.initCamera() - }) - .catch(handleErrorLocal(ErrorCategory.CORDOVA_PLUGIN)) - } - } - ) - }) - } - - stop(): Promise { - if (!this.cameraIsRunning) { - console.log('CAMERA ALREADY STOPPED, ABORTING') - this.uninjectCSS() - return Promise.reject(null) - } - // We need to delay the stopCamera call because it crashes on iOS - // if it is called while taking a photo - if (this.cameraIsTakingPhoto) { - this.uninjectCSS() - return new Promise(resolve => { - setTimeout(() => { - console.log('CAMERA IS TAKING PHOTO, DELAYING') - resolve(this.stop()) - }, 200) - }) - } - this.uninjectCSS() - if (this.cameraInterval) { - clearInterval(this.cameraInterval) - } - return new Promise((_resolve, reject) => { - this.cameraPreview.stopCamera().then( - () => { - this.cameraIsRunning = false - console.log('camera stopped.') - }, - error => { - console.log('camera could not be stopped.') - reject(error) - } - ) - }) - } - - getEntropyUpdateObservable(): Observable { - return this.entropyObservable - } - - private arrayBufferFromBase64(base64: string) { - const raw = window.atob(base64) - const buffer = new ArrayBuffer(raw.length * 2) - const bufView = new Uint8Array(buffer) - - for (let i = 0; i < raw.length; i++) { - bufView[i] = raw.charCodeAt(i) - } - - return buffer - } - - private injectCSS() { - // inject css to html, body, .ion-app, ion-content - this.renderer.addClass(document.body, 'transparent-bg') - } - - private uninjectCSS() { - // removes injected css - this.renderer.removeClass(document.body, 'transparent-bg') - } - - getCollectedEntropyPercentage(): number { - return this.collectedEntropyPercentage / 10 - } - - setVideoElement(element): void { - console.log('only used in browser', element) - } -} diff --git a/src/providers/clipboard/clipboard.ts b/src/providers/clipboard/clipboard.ts deleted file mode 100644 index 181c9dce..00000000 --- a/src/providers/clipboard/clipboard.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { Injectable } from '@angular/core' -import { Platform, ToastController } from 'ionic-angular' -import { handleErrorLocal, ErrorCategory } from '../error-handler/error-handler' -import { Clipboard } from '@ionic-native/clipboard' - -@Injectable() -export class ClipboardProvider { - constructor( - private readonly platform: Platform, - private readonly clipboard: Clipboard, - private readonly toastController: ToastController - ) {} - - async copy(text: string): Promise { - if (this.platform.is('cordova')) { - return this.clipboard.copy(text) - } else { - return (navigator as any).clipboard.writeText(text) - } - } - - async copyAndShowToast(text: string, toastMessage: string = 'Successfully copied to your clipboard!') { - try { - await this.copy(text) - await this.showToast(toastMessage) - } catch (err) { - console.error('Failed to copy: ', err) - } - } - - async paste(): Promise { - try { - if (this.platform.is('cordova')) { - return this.clipboard.paste() - } else { - return (navigator as any).clipboard.readText() - } - } catch (err) { - console.error('Failed to copy: ', err) - } - } - - private async showToast(message: string) { - let toast = this.toastController.create({ - message: message, - duration: 1000, - position: 'top', - showCloseButton: true, - closeButtonText: 'Ok' - }) - toast.present().catch(handleErrorLocal(ErrorCategory.IONIC_ALERT)) - } -} diff --git a/src/providers/deep-link/deep-link.ts b/src/providers/deep-link/deep-link.ts deleted file mode 100644 index d720f217..00000000 --- a/src/providers/deep-link/deep-link.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Injectable } from '@angular/core' -import { Platform, AlertController } from 'ionic-angular' -import { handleErrorLocal, ErrorCategory } from '../error-handler/error-handler' -import { TranslateService } from '@ngx-translate/core' - -declare let window: any - -@Injectable() -export class DeepLinkProvider { - constructor(private platform: Platform, private alertCtrl: AlertController, private translateService: TranslateService) {} - - sameDeviceDeeplink(url: string = 'airgap-wallet://'): Promise { - return new Promise((resolve, reject) => { - let sApp - - if (this.platform.is('android')) { - sApp = window.startApp.set({ - action: 'ACTION_VIEW', - uri: url, - flags: ['FLAG_ACTIVITY_NEW_TASK'] - }) - } else if (this.platform.is('ios')) { - sApp = window.startApp.set(url) - } else { - this.showDeeplinkOnlyOnDevicesAlert() - return reject() - } - - sApp.start( - () => { - console.log('Deeplink called') - resolve() - }, - error => { - console.error('deeplink used', url) - console.error(error) - this.showAppNotFoundAlert() - return reject() - } - ) - }) - } - - showDeeplinkOnlyOnDevicesAlert() { - this.translateService - .get(['deep-link.not-supported-alert.title', 'deep-link.not-supported-alert.message', 'deep-link.not-supported-alert.ok']) - .subscribe(translated => { - let alert = this.alertCtrl.create({ - title: translated['deep-link.not-supported-alert.title'], - message: translated['deep-link.not-supported-alert.message'], - enableBackdropDismiss: false, - buttons: [ - { - text: translated['deep-link.not-supported-alert.ok'], - role: 'cancel' - } - ] - }) - alert.present().catch(handleErrorLocal(ErrorCategory.IONIC_ALERT)) - }) - } - - showAppNotFoundAlert() { - this.translateService - .get(['deep-link.app-not-found.title', 'deep-link.app-not-found.message', 'deep-link.app-not-found.ok'], { - otherAppName: 'AirGap Wallet' - }) - .subscribe(translated => { - let alert = this.alertCtrl.create({ - title: translated['deep-link.app-not-found.title'], - message: translated['deep-link.app-not-found.message'], - enableBackdropDismiss: false, - buttons: [ - { - text: translated['deep-link.app-not-found.ok'], - role: 'cancel' - } - ] - }) - alert.present().catch(handleErrorLocal(ErrorCategory.IONIC_ALERT)) - }) - } -} diff --git a/src/providers/device/device.ts b/src/providers/device/device.ts deleted file mode 100644 index ebf6d3f0..00000000 --- a/src/providers/device/device.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Injectable } from '@angular/core' -import { Platform } from 'ionic-angular' - -declare var jailbreakdetection: any -declare var rootdetection: any - -@Injectable() -export class DeviceProvider { - constructor(private platform: Platform) {} - - checkForRoot(): Promise { - return new Promise((resolve, reject) => { - if (this.platform.is('android') && this.platform.is('cordova')) { - // TODO build own android root detection with https://github.com/scottyab/rootbeer - rootdetection.isDeviceRooted(resolve, reject) - } else if (this.platform.is('ios') && this.platform.is('cordova')) { - jailbreakdetection.isJailbroken(resolve, reject) - } else { - console.warn('root detection skipped - no supported platform') - resolve(false) - } - }) - } - - async checkForElectron() { - return typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0 - } -} diff --git a/src/providers/entropy/IEntropyGenerator.ts b/src/providers/entropy/IEntropyGenerator.ts deleted file mode 100644 index a98ec7a2..00000000 --- a/src/providers/entropy/IEntropyGenerator.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Observable } from 'rxjs' - -export interface Entropy { - entropyHex: string -} - -export interface IEntropyGenerator { - start(): Promise - stop(): Promise - getEntropyUpdateObservable(): Observable - getCollectedEntropyPercentage(): number -} diff --git a/src/providers/entropy/dummy.entropy.service.ts b/src/providers/entropy/dummy.entropy.service.ts deleted file mode 100644 index e8413fdd..00000000 --- a/src/providers/entropy/dummy.entropy.service.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Injectable } from '@angular/core' -import { Entropy, IEntropyGenerator } from '../entropy/IEntropyGenerator' -import { Observable } from 'rxjs' - -@Injectable() -export class DummyEntropyService implements IEntropyGenerator { - start(): Promise { - return Promise.resolve() - } - - stop(): Promise { - return Promise.resolve() - } - - getEntropyUpdateObservable(): Observable { - return new Observable(observer => { - observer.next({ - entropyHex: '' - }) - }) - } - - getCollectedEntropyPercentage(): number { - return 0 - } -} diff --git a/src/providers/entropy/entropy.service.ts b/src/providers/entropy/entropy.service.ts deleted file mode 100644 index 8e18d569..00000000 --- a/src/providers/entropy/entropy.service.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { Injectable } from '@angular/core' -import { IEntropyGenerator } from './IEntropyGenerator' -import { sha3_256 } from 'js-sha3' -import { Observable, Subscription } from 'rxjs' -import { Observer } from 'rxjs/Observer' - -import workerJS from '../../assets/workers/hashWorker' -import { handleErrorLocal, ErrorCategory } from '../error-handler/error-handler' -const blobURL = window.URL.createObjectURL(new Blob([workerJS])) -const hashWorker = new Worker(blobURL) - -@Injectable() -export class EntropyService { - ENTROPY_SIZE = 4096 - - entropyGenerators: IEntropyGenerator[] = [] - entropySubscriptions: Subscription[] = [] - - private entropyUpdateObservable: Observable - private entropyUpdateObserver: Observer - - constructor() { - this.entropyUpdateObservable = Observable.create(observer => { - this.entropyUpdateObserver = observer - }) - } - - addEntropySource(entropyGenerator: IEntropyGenerator) { - this.entropyGenerators.push(entropyGenerator) - } - - getEntropyUpdateObservable(): Observable { - return this.entropyUpdateObservable - } - - startEntropyCollection(): Promise { - const promises = [] - const secureRandomArray = new Uint8Array(this.ENTROPY_SIZE) - window.crypto.getRandomValues(secureRandomArray) - - hashWorker.postMessage({ call: 'init', secureRandom: Array.from(secureRandomArray) }) - - for (let generator of this.entropyGenerators) { - promises.push( - generator - .start() - .then(() => { - let entropySubscription = generator.getEntropyUpdateObservable().subscribe(result => { - try { - hashWorker.postMessage({ entropyHex: result.entropyHex, call: 'update' }) - } catch (error) { - console.warn(error) - } - if (this.entropyUpdateObserver) { - this.entropyUpdateObserver.next(void 0) - } else { - console.warn('entropyUpdateObserver is undefined!') - } - }) - this.entropySubscriptions.push(entropySubscription) - return - }) - .catch(error => { - console.warn('generator start error', error) - }) - ) - } - return Promise.all(promises) - } - - stopEntropyCollection(): Promise { - let promises = [] - return new Promise(resolve => { - // clear collection interval - for (let i = 0; i < this.entropySubscriptions.length; i++) { - this.entropySubscriptions[i].unsubscribe() - } - - this.entropySubscriptions = [] - - // stop entropy sources - for (let i = 0; i < this.entropyGenerators.length; i++) { - console.log('stopping entropy source...') - promises.push(this.entropyGenerators[i].stop()) - } - - this.entropyGenerators = [] - - Promise.all(promises) - .then(() => { - resolve() - }) - .catch(handleErrorLocal(ErrorCategory.ENTROPY_COLLECTION)) - }) - } - - getEntropyAsHex(): Promise { - return new Promise(resolve => { - hashWorker.onmessage = event => { - const secureRandomArray = new Uint8Array(this.ENTROPY_SIZE) - window.crypto.getRandomValues(secureRandomArray) - - const hash = sha3_256.create() - hash.update(event.data.hash) - hash.update(secureRandomArray) - - resolve(hash.hex()) - } - - hashWorker.postMessage({ call: 'digest' }) - }) - } -} diff --git a/src/providers/error-handler/error-handler.ts b/src/providers/error-handler/error-handler.ts deleted file mode 100644 index 390f1418..00000000 --- a/src/providers/error-handler/error-handler.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { IonicErrorHandler } from 'ionic-angular' - -export enum ErrorCategory { - CORDOVA_PLUGIN = 'cordova_plugin', - IONIC_MODAL = 'ionic_modal', - IONIC_ALERT = 'ionic_alert', - IONIC_LOADER = 'ionic_loader', - IONIC_NAVIGATION = 'navigation', - WALLET_PROVIDER = 'wallet_provider', - SCHEME_ROUTING = 'scheme_routing', - SECURE_STORAGE = 'secure_storage', - INIT_CHECK = 'init_check', - ENTROPY_COLLECTION = 'entropy_collection', - INTERACTION_PROVIDER = 'interaction_provider', - DEEPLINK_PROVIDER = 'deeplink_provider', - OTHER = 'other' -} - -const handleErrorLocal = (category?: ErrorCategory) => { - return error => { - console.log('saving error locally, category', category) - console.error(error.originalError || error) - } -} - -const handleErrorIgnore = error => { - console.log('ignoring error') - console.error(error.originalError || error) -} - -export { handleErrorIgnore, handleErrorLocal } - -export class ErrorHandlerProvider extends IonicErrorHandler { - handleError(error) { - super.handleError(error) - handleErrorLocal(error) - } -} diff --git a/src/providers/gyroscope/gyroscope.factory.ts b/src/providers/gyroscope/gyroscope.factory.ts deleted file mode 100644 index 0ae740ae..00000000 --- a/src/providers/gyroscope/gyroscope.factory.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Platform } from 'ionic-angular' -import { GyroscopeNativeService } from './gyroscope.native.service' -import { IEntropyGenerator } from '../entropy/IEntropyGenerator' -import { DeviceMotion } from '@ionic-native/device-motion' -import { DummyEntropyService } from '../entropy/dummy.entropy.service' - -export interface GyroscopeService {} - -export function GyroscopeServiceFactory(platform: Platform, deviceMotion: DeviceMotion): IEntropyGenerator { - if (platform.is('cordova')) { - return new GyroscopeNativeService(platform, deviceMotion) - } else { - return new DummyEntropyService() - } -} diff --git a/src/providers/gyroscope/gyroscope.native.service.ts b/src/providers/gyroscope/gyroscope.native.service.ts deleted file mode 100644 index 6a0ed4d4..00000000 --- a/src/providers/gyroscope/gyroscope.native.service.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { Injectable } from '@angular/core' -import { Platform } from 'ionic-angular' -import { Entropy, IEntropyGenerator } from '../entropy/IEntropyGenerator' -import { DeviceMotion, DeviceMotionAccelerationData } from '@ionic-native/device-motion' -import { GyroscopeService } from './gyroscope.factory' -import { Observable, Subscription } from 'rxjs' - -import workerJS from '../../assets/workers/entropyCalculatorWorker' -const blobURL = window.URL.createObjectURL(new Blob([workerJS])) -const entropyCalculatorWorker = new Worker(blobURL) - -@Injectable() -export class GyroscopeNativeService implements GyroscopeService, IEntropyGenerator { - private collectedEntropyPercentage: number = 0 - - private gyroSubscription: Subscription - - private entropyObservable: Observable - - constructor(private platform: Platform, private deviceMotion: DeviceMotion) {} - - public start(): Promise { - this.collectedEntropyPercentage = 0 - return new Promise(async resolve => { - await this.platform.ready() - this.entropyObservable = new Observable(observer => { - entropyCalculatorWorker.onmessage = event => { - this.collectedEntropyPercentage += event.data.entropyMeasure - observer.next({ - entropyHex: event.data.entropyHex - }) - } - - this.gyroSubscription = this.deviceMotion - .watchAcceleration({ frequency: 500 }) - .subscribe((acceleration: DeviceMotionAccelerationData) => { - const entropyBuffer = this.arrayBufferFromIntArray([acceleration.x, acceleration.y, acceleration.z]) - entropyCalculatorWorker.postMessage({ entropyBuffer: entropyBuffer }, [entropyBuffer]) - }) - }) - resolve() - }) - } - - public stop(): Promise { - this.gyroSubscription.unsubscribe() - return Promise.resolve() - } - - getEntropyUpdateObservable(): Observable { - return this.entropyObservable - } - - private arrayBufferFromIntArray(array: number[]): ArrayBuffer { - const buffer = new ArrayBuffer(array.length * 2) - const bufView = new Uint8Array(buffer) - - for (let i = 0; i < array.length; i++) { - bufView[i] = Math.abs(array[i] * 10000) - } - - return buffer - } - - getCollectedEntropyPercentage(): number { - return this.collectedEntropyPercentage / 30 - } -} diff --git a/src/providers/interaction/interaction.ts b/src/providers/interaction/interaction.ts deleted file mode 100644 index a93d5a9d..00000000 --- a/src/providers/interaction/interaction.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { Injectable } from '@angular/core' -import { Storage } from '@ionic/storage' -import { NavController } from 'ionic-angular' -import { ErrorCategory, handleErrorLocal } from '../error-handler/error-handler' -import { InteractionSelectionPage } from '../../pages/interaction-selection/interaction-selection' -import { DeepLinkProvider } from '../deep-link/deep-link' -import { WalletSharePage } from '../../pages/wallet-share/wallet-share' -import { TransactionSignedPage } from '../../pages/transaction-signed/transaction-signed' -import { AirGapWallet, UnsignedTransaction } from 'airgap-coin-lib' -import { Transaction } from '../../models/transaction.model' -import { Secret } from '../../models/secret' - -export enum InteractionSetting { - UNDETERMINED = 'undetermined', - ALWAYS_ASK = 'always', - SAME_DEVICE = 'same_device', - OFFLINE_DEVICE = 'offline_device' -} - -export enum InteractionCommunicationType { - QR = 'qr', - DEEPLINK = 'deeplink' -} - -export enum InteractionOperationType { - WALLET_SYNC = 'walletSync', - TRANSACTION_BROADCAST = 'transactionBroadcast' -} - -export interface IInteractionOptions { - operationType: InteractionOperationType - url: string - communicationType?: InteractionCommunicationType - signedTx?: string - wallet?: AirGapWallet - transaction?: UnsignedTransaction -} - -@Injectable() -export class InteractionProvider { - constructor(private deepLinkProvider: DeepLinkProvider) { } - - public startInteraction(navCtrl: NavController, interactionOptions: IInteractionOptions, secret: Secret) { - const interactionSetting = secret.interactionSetting - - if (interactionOptions.communicationType) { - if (interactionSetting === InteractionSetting.UNDETERMINED) { - this.goToInteractionSelectionSettingsPage(navCtrl, interactionOptions) - } - if (interactionOptions.communicationType === InteractionCommunicationType.DEEPLINK) { - this.startDeeplink(interactionOptions.url, navCtrl) - } else if (interactionOptions.communicationType === InteractionCommunicationType.QR) { - this.navigateToPageByOperationType(navCtrl, interactionOptions) - } - } else { - switch (interactionSetting) { - case InteractionSetting.UNDETERMINED: - this.goToInteractionSelectionPage(navCtrl, interactionOptions) - break - case InteractionSetting.ALWAYS_ASK: - this.goToInteractionSelectionPage(navCtrl, interactionOptions) - break - case InteractionSetting.SAME_DEVICE: - this.startDeeplink(interactionOptions.url, navCtrl) - break - case InteractionSetting.OFFLINE_DEVICE: - this.navigateToPageByOperationType(navCtrl, interactionOptions) - break - } - } - } - - private goToInteractionSelectionPage(navCtrl: NavController, interactionOptions: IInteractionOptions) { - navCtrl - .push('InteractionSelectionPage', { - interactionOptions: interactionOptions - }) - .catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - - private goToInteractionSelectionSettingsPage(navCtrl: NavController, interactionOptions: IInteractionOptions) { - navCtrl - .push('InteractionSelectionSettingsPage', { - interactionOptions: interactionOptions - }) - .catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - - private navigateToPageByOperationType(navCtrl: NavController, interactionOptions: IInteractionOptions) { - // To ensure exhausting enum - const assertNever = (arg: never): never => { - throw 'INVALID_OPERATION_TYPE' - } - - if (interactionOptions.operationType === InteractionOperationType.WALLET_SYNC) { - navCtrl.push(WalletSharePage, { interactionUrl: interactionOptions.url }).catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } else if (interactionOptions.operationType === InteractionOperationType.TRANSACTION_BROADCAST) { - navCtrl - .push(TransactionSignedPage, { - interactionUrl: interactionOptions.url, - wallet: interactionOptions.wallet, - signedTx: interactionOptions.signedTx, - transaction: interactionOptions.transaction - }) - .catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } else { - return assertNever(interactionOptions.operationType) - } - } - - private startDeeplink(url: string, navController: NavController) { - this.deepLinkProvider - .sameDeviceDeeplink(url) - .then(() => { - navController.popToRoot().catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - }) - .catch(handleErrorLocal(ErrorCategory.DEEPLINK_PROVIDER)) - } -} diff --git a/src/providers/permissions/permissions.ts b/src/providers/permissions/permissions.ts deleted file mode 100644 index 71501523..00000000 --- a/src/providers/permissions/permissions.ts +++ /dev/null @@ -1,147 +0,0 @@ -import { Injectable } from '@angular/core' -import { Diagnostic } from '@ionic-native/diagnostic' -import { Platform, AlertController } from 'ionic-angular' -import { handleErrorLocal, ErrorCategory } from '../error-handler/error-handler' - -export enum PermissionStatus { - GRANTED = 'GRANTED', - NOT_REQUESTED = 'NOT_REQUESTED', - DENIED_ALWAYS = 'DENIED_ALWAYS', - DENIED = 'DENIED', - UNKNOWN = 'UNKNOWN' -} - -export enum PermissionTypes { - CAMERA = 'CAMERA', - MICROPHONE = 'MICROPHONE' -} - -@Injectable() -export class PermissionsProvider { - constructor(private platform: Platform, private diagnostic: Diagnostic, private alertCtrl: AlertController) {} - - async hasCameraPermission(): Promise { - const permission = await this.diagnostic.getCameraAuthorizationStatus(false) - return this.getPermissionStatus(permission) - } - - async hasMicrophonePermission(): Promise { - const permission = await this.diagnostic.getMicrophoneAuthorizationStatus() - return this.getPermissionStatus(permission) - } - - async requestPermissions(permissions: PermissionTypes[]): Promise { - if (this.platform.is('android')) { - const permissionsToRequest = [] - if (permissions.indexOf(PermissionTypes.CAMERA) >= 0) { - permissionsToRequest.push(this.diagnostic.permission.CAMERA) - } - if (permissions.indexOf(PermissionTypes.MICROPHONE) >= 0) { - permissionsToRequest.push(this.diagnostic.permission.RECORD_AUDIO) - } - await this.diagnostic.requestRuntimePermissions(permissionsToRequest) - } else if (this.platform.is('ios')) { - if (permissions.indexOf(PermissionTypes.CAMERA) >= 0) { - await this.diagnostic.requestCameraAuthorization(false) - } - if (permissions.indexOf(PermissionTypes.MICROPHONE) >= 0) { - await this.diagnostic.requestMicrophoneAuthorization() - } - } else { - } - } - - /** - * The user actively wants to give permissions. This means we first check if we - * can ask him for the permissions natively, otherwise we show an alert with a - * link to the settings. - */ - async userRequestsPermissions(permissions: PermissionTypes[]) { - let canRequestPermission = false - for (const p of permissions) { - canRequestPermission = (await this.canAskForPermission(p)) || canRequestPermission - } - if (canRequestPermission) { - await this.requestPermissions(permissions) - } else { - this.showSettingsAlert() - } - } - - showSettingsAlert() { - this.showAlert('Settings', 'You can enable the missing permissions in the device settings.') - } - - private async canAskForPermission(permission: PermissionTypes): Promise { - let canAskForPermission = true - if (this.platform.is('android')) { - if (permission === PermissionTypes.CAMERA) { - let permissionStatus = await this.hasCameraPermission() - canAskForPermission = !(permissionStatus === PermissionStatus.DENIED_ALWAYS) - } else if (permission === PermissionTypes.MICROPHONE) { - let permissionStatus = await this.hasMicrophonePermission() - canAskForPermission = !(permissionStatus === PermissionStatus.DENIED_ALWAYS) - } - } else if (this.platform.is('ios')) { - if (permission === PermissionTypes.CAMERA) { - let permissionStatus = await this.hasCameraPermission() - canAskForPermission = !(permissionStatus === PermissionStatus.DENIED) - } else if (permission === PermissionTypes.MICROPHONE) { - let permissionStatus = await this.hasMicrophonePermission() - canAskForPermission = !(permissionStatus === PermissionStatus.DENIED) - } - } - return canAskForPermission - } - - private async getPermissionStatus(permission: string): Promise { - if (this.isGranted(permission)) { - return PermissionStatus.GRANTED - } else if (this.isNotRequested(permission)) { - return PermissionStatus.NOT_REQUESTED - } else if (this.isDeniedAlways(permission)) { - return PermissionStatus.DENIED_ALWAYS - } else if (this.isDenied(permission)) { - return PermissionStatus.DENIED - } else { - return PermissionStatus.UNKNOWN - } - } - - private showAlert(title: string, message: string) { - const alert = this.alertCtrl.create({ - title, - message, - buttons: [ - { - text: 'Cancel', - role: 'cancel', - handler: () => {} - }, - { - text: 'Open settings', - handler: () => { - this.diagnostic.switchToSettings().catch(handleErrorLocal(ErrorCategory.CORDOVA_PLUGIN)) - } - } - ] - }) - alert.present().catch(handleErrorLocal(ErrorCategory.IONIC_ALERT)) - } - - private isGranted(permission: string): boolean { - return permission === this.diagnostic.permissionStatus.GRANTED || permission === this.diagnostic.permissionStatus.GRANTED_WHEN_IN_USE - } - - private isNotRequested(permission: string): boolean { - return permission === this.diagnostic.permissionStatus.NOT_REQUESTED - } - - private isDeniedAlways(permission: string): boolean { - return permission === this.diagnostic.permissionStatus.DENIED_ALWAYS || permission === this.diagnostic.permissionStatus.RESTRICTED - } - - private isDenied(permission: string): boolean { - return !(this.isGranted(permission) || this.isNotRequested(permission)) - } -} diff --git a/src/providers/protocols/protocols.ts b/src/providers/protocols/protocols.ts deleted file mode 100644 index 7b512338..00000000 --- a/src/providers/protocols/protocols.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { Injectable } from '@angular/core' -import { GenericERC20, addSubProtocol, TezosKtProtocol, GenericERC20Configuration } from 'airgap-coin-lib' -import { addSupportedProtocol } from 'airgap-coin-lib/dist/utils/supportedProtocols' -import { AeternityERC20Token } from 'airgap-coin-lib/dist/protocols/ethereum/erc20/AeToken' - -import { tokens } from './tokens' - -interface SubProtocolInfo { - symbol: string - name: string - marketSymbol: string - - identifier: string - data: [string] -} - -interface SubAccount { - protocol: string - subProtocols: GenericERC20Configuration[] -} - -@Injectable() -export class ProtocolsProvider { - public subProtocols: SubAccount[] = [ - { - protocol: 'eth', - subProtocols: [ - { - symbol: 'AE-ERC20', - name: 'æternity Ethereum Token', - marketSymbol: 'ae', - identifier: 'eth-erc20-ae', - contractAddress: '0x5ca9a71b1d01849c0a95490cc00559717fcf0d1d', - decimals: 18 - } - ] - } - ] - - constructor() { - /* */ - } - - addProtocols() { - addSupportedProtocol(AeternityERC20Token) - addSubProtocol('xtz', new TezosKtProtocol()) - - this.subProtocols.forEach(supportedSubAccount => { - supportedSubAccount.subProtocols.forEach(subProtocol => { - addSubProtocol( - supportedSubAccount.protocol, - new GenericERC20({ - symbol: subProtocol.symbol, - name: subProtocol.name, - marketSymbol: subProtocol.marketSymbol, - identifier: subProtocol.identifier, - contractAddress: subProtocol.contractAddress, - decimals: subProtocol.decimals - }) - ) - }) - }) - - tokens.forEach(token => { - addSubProtocol( - 'eth', - new GenericERC20({ - symbol: token.symbol, - name: token.name, - marketSymbol: token.marketSymbol, - identifier: token.identifier, - contractAddress: token.contractAddress, - decimals: token.decimals - }) - ) - }) - } -} diff --git a/src/providers/protocols/tokens.ts b/src/providers/protocols/tokens.ts deleted file mode 100644 index c9e10f1c..00000000 --- a/src/providers/protocols/tokens.ts +++ /dev/null @@ -1,9618 +0,0 @@ -export const tokens = [ - { - symbol: '$FFC', - name: '$Fluzcoin', - marketSymbol: '$ffc', - identifier: 'eth-erc20-$ffc', - contractAddress: '0x4E84E9e5fb0A972628Cf4568c403167EF1D40431', - decimals: 18 - }, - { - symbol: '$FXY', - name: '$FIXY NETWORK', - marketSymbol: '$fxy', - identifier: 'eth-erc20-$fxy', - contractAddress: '0xA024E8057EEC474a9b2356833707Dd0579E26eF3', - decimals: 18 - }, - { - symbol: '$HUR', - name: '$Hurify Token', - marketSymbol: '$hur', - identifier: 'eth-erc20-$hur', - contractAddress: '0xCDB7eCFd3403Eef3882c65B761ef9B5054890a47', - decimals: 18 - }, - { - symbol: '$TEAK', - name: '$TEAK', - marketSymbol: '$teak', - identifier: 'eth-erc20-$teak', - contractAddress: '0x7DD7F56D697Cc0f2b52bD55C057f378F1fE6Ab4b', - decimals: 18 - }, - { - symbol: '0xBTC', - name: '0xBitcoin', - marketSymbol: '0xbtc', - identifier: 'eth-erc20-0xbtc', - contractAddress: '0xB6eD7644C69416d67B522e20bC294A9a9B405B31', - decimals: 8 - }, - { - symbol: '1SG', - name: '1SG', - marketSymbol: '1sg', - identifier: 'eth-erc20-1sg', - contractAddress: '0x0F72714B35a366285Df85886A2eE174601292A17', - decimals: 18 - }, - { - symbol: '1ST', - name: 'FirstBlood', - marketSymbol: '1st', - identifier: 'eth-erc20-1st', - contractAddress: '0xAf30D2a7E90d7DC361c8C4585e9BB7D2F6f15bc7', - decimals: 18 - }, - { - symbol: '1WO', - name: '1World', - marketSymbol: '1wo', - identifier: 'eth-erc20-1wo', - contractAddress: '0xfDBc1aDc26F0F8f8606a5d63b7D3a3CD21c22B23', - decimals: 8 - }, - { - symbol: '22x', - name: '22x Fund', - marketSymbol: '22x', - identifier: 'eth-erc20-22x', - contractAddress: '0x0073e5E52E2B4fE218D75d994eE2B3c82f9C87EA', - decimals: 8 - }, - { - symbol: '2DC', - name: 'DualChain', - marketSymbol: '2dc', - identifier: 'eth-erc20-2dc', - contractAddress: '0x9fC0583220eB44fAeE9e2dc1E63F39204DDD9090', - decimals: 18 - }, - { - symbol: '300', - name: '300 Token Sparta', - marketSymbol: '300', - identifier: 'eth-erc20-300', - contractAddress: '0xaEc98A708810414878c3BCDF46Aad31dEd4a4557', - decimals: 18 - }, - { - symbol: '3LT', - name: 'TrillionToken', - marketSymbol: '3lt', - identifier: 'eth-erc20-3lt', - contractAddress: '0x430241368c1D293fdA21DBa8Bb7aF32007c59109', - decimals: 8 - }, - { - symbol: 'A18', - name: 'Apollo18', - marketSymbol: 'a18', - identifier: 'eth-erc20-a18', - contractAddress: '0xBa7DCBa2Ade319Bc772DB4df75A76BA00dFb31b0', - decimals: 0 - }, - { - symbol: 'A18', - name: 'Apollo18', - marketSymbol: 'a18', - identifier: 'eth-erc20-a18', - contractAddress: '0xBDe8f7820b5544a49D34F9dDeaCAbEDC7C0B5adc', - decimals: 0 - }, - { - symbol: 'ABCH', - name: 'ABBC Cash', - marketSymbol: 'abch', - identifier: 'eth-erc20-abch', - contractAddress: '0xcc7d26D8eA6281BB363C8448515F2C61F7BC19F0', - decimals: 18 - }, - { - symbol: 'ABT', - name: 'ArcBlock Token', - marketSymbol: 'abt', - identifier: 'eth-erc20-abt', - contractAddress: '0xB98d4C97425d9908E66E53A6fDf673ACcA0BE986', - decimals: 18 - }, - { - symbol: 'ABYSS', - name: 'The Abyss', - marketSymbol: 'abyss', - identifier: 'eth-erc20-abyss', - contractAddress: '0x0E8d6b471e332F140e7d9dbB99E5E3822F728DA6', - decimals: 18 - }, - { - symbol: 'ACC', - name: 'Accelerator Network', - marketSymbol: 'acc', - identifier: 'eth-erc20-acc', - contractAddress: '0x13F1b7FDFbE1fc66676D56483e21B1ecb40b58E2', - decimals: 18 - }, - { - symbol: 'ACE', - name: 'ACE (TokenStars)', - marketSymbol: 'ace', - identifier: 'eth-erc20-ace', - contractAddress: '0x06147110022B768BA8F99A8f385df11a151A9cc8', - decimals: 0 - }, - { - symbol: 'ADB', - name: 'adbank', - marketSymbol: 'adb', - identifier: 'eth-erc20-adb', - contractAddress: '0x2baac9330Cf9aC479D819195794d79AD0c7616e3', - decimals: 18 - }, - { - symbol: 'ADH', - name: 'AdHive Token', - marketSymbol: 'adh', - identifier: 'eth-erc20-adh', - contractAddress: '0xE69a353b3152Dd7b706ff7dD40fe1d18b7802d31', - decimals: 18 - }, - { - symbol: 'ADI', - name: 'Aditus', - marketSymbol: 'adi', - identifier: 'eth-erc20-adi', - contractAddress: '0x8810C63470d38639954c6B41AaC545848C46484a', - decimals: 18 - }, - { - symbol: 'ADL', - name: 'Adelphoi', - marketSymbol: 'adl', - identifier: 'eth-erc20-adl', - contractAddress: '0x660e71483785f66133548B10f6926dC332b06e61', - decimals: 18 - }, - { - symbol: 'ADST', - name: 'AdShares', - marketSymbol: 'adst', - identifier: 'eth-erc20-adst', - contractAddress: '0x422866a8F0b032c5cf1DfBDEf31A20F4509562b0', - decimals: 0 - }, - { - symbol: 'ADT', - name: 'AdToken', - marketSymbol: 'adt', - identifier: 'eth-erc20-adt', - contractAddress: '0xD0D6D6C5Fe4a677D343cC433536BB717bAe167dD', - decimals: 9 - }, - { - symbol: 'ADX', - name: 'AdEx Network', - marketSymbol: 'adx', - identifier: 'eth-erc20-adx', - contractAddress: '0x4470BB87d77b963A013DB939BE332f927f2b992e', - decimals: 4 - }, - { - symbol: 'AFA', - name: 'Africahead Ipparts', - marketSymbol: 'afa', - identifier: 'eth-erc20-afa', - contractAddress: '0xfB48E0DEa837f9438309a7e9F0cFe7EE3353A84e', - decimals: 2 - }, - { - symbol: 'AGI', - name: 'SingularityNET', - marketSymbol: 'agi', - identifier: 'eth-erc20-agi', - contractAddress: '0x8eB24319393716668D768dCEC29356ae9CfFe285', - decimals: 8 - }, - { - symbol: 'AI', - name: 'POLY AI', - marketSymbol: 'ai', - identifier: 'eth-erc20-ai', - contractAddress: '0x5121E348e897dAEf1Eef23959Ab290e5557CF274', - decimals: 18 - }, - { - symbol: 'AID', - name: 'AidCoin', - marketSymbol: 'aid', - identifier: 'eth-erc20-aid', - contractAddress: '0x37E8789bB9996CaC9156cD5F5Fd32599E6b91289', - decimals: 18 - }, - { - symbol: 'AION', - name: 'Aion', - marketSymbol: 'aion', - identifier: 'eth-erc20-aion', - contractAddress: '0x4CEdA7906a5Ed2179785Cd3A40A69ee8bc99C466', - decimals: 8 - }, - { - symbol: 'AIR', - name: 'AirToken', - marketSymbol: 'air', - identifier: 'eth-erc20-air', - contractAddress: '0x27Dce1eC4d3f72C3E457Cc50354f1F975dDEf488', - decimals: 8 - }, - { - symbol: 'AIX', - name: 'Aigang', - marketSymbol: 'aix', - identifier: 'eth-erc20-aix', - contractAddress: '0x1063ce524265d5a3A624f4914acd573dD89ce988', - decimals: 18 - }, - { - symbol: 'AKC', - name: 'ARTWOOK COIN', - marketSymbol: 'akc', - identifier: 'eth-erc20-akc', - contractAddress: '0x1Ca43a170BaD619322e6f54d46b57e504dB663aA', - decimals: 18 - }, - { - symbol: 'ALCO', - name: 'ALCO', - marketSymbol: 'alco', - identifier: 'eth-erc20-alco', - contractAddress: '0x181a63746d3Adcf356CBc73aCE22832FFBB1EE5A', - decimals: 8 - }, - { - symbol: 'ALI', - name: 'AiLink Token', - marketSymbol: 'ali', - identifier: 'eth-erc20-ali', - contractAddress: '0x4289c043A12392F1027307fB58272D8EBd853912', - decimals: 18 - }, - { - symbol: 'ALIS', - name: 'ALIS Token', - marketSymbol: 'alis', - identifier: 'eth-erc20-alis', - contractAddress: '0xEA610B1153477720748DC13ED378003941d84fAB', - decimals: 18 - }, - { - symbol: 'ALTS', - name: 'ALTS Token', - marketSymbol: 'alts', - identifier: 'eth-erc20-alts', - contractAddress: '0x638AC149eA8EF9a1286C41B977017AA7359E6Cfa', - decimals: 18 - }, - { - symbol: 'ALX', - name: 'ALAX', - marketSymbol: 'alx', - identifier: 'eth-erc20-alx', - contractAddress: '0x49b127Bc33ce7E1586EC28CEC6a65b112596C822', - decimals: 18 - }, - { - symbol: 'AMB', - name: 'Amber Token', - marketSymbol: 'amb', - identifier: 'eth-erc20-amb', - contractAddress: '0x4DC3643DbC642b72C158E7F3d2ff232df61cb6CE', - decimals: 18 - }, - { - symbol: 'AMIS', - name: 'AMIS', - marketSymbol: 'amis', - identifier: 'eth-erc20-amis', - contractAddress: '0x949bEd886c739f1A3273629b3320db0C5024c719', - decimals: 9 - }, - { - symbol: 'AMLT', - name: 'AMLT', - marketSymbol: 'amlt', - identifier: 'eth-erc20-amlt', - contractAddress: '0xCA0e7269600d353F70b14Ad118A49575455C0f2f', - decimals: 18 - }, - { - symbol: 'AMN', - name: 'Amon', - marketSymbol: 'amn', - identifier: 'eth-erc20-amn', - contractAddress: '0x737F98AC8cA59f2C68aD658E3C3d8C8963E40a4c', - decimals: 18 - }, - { - symbol: 'AMO', - name: 'AMO Coin', - marketSymbol: 'amo', - identifier: 'eth-erc20-amo', - contractAddress: '0x38c87AA89B2B8cD9B95b736e1Fa7b612EA972169', - decimals: 18 - }, - { - symbol: 'AMTC', - name: 'AmberTime Coin', - marketSymbol: 'amtc', - identifier: 'eth-erc20-amtc', - contractAddress: '0x84936cF7630AA3e27Dd9AfF968b140d5AEE49F5a', - decimals: 8 - }, - { - symbol: 'ANT', - name: 'Aragon', - marketSymbol: 'ant', - identifier: 'eth-erc20-ant', - contractAddress: '0x960b236A07cf122663c4303350609A66A7B288C0', - decimals: 18 - }, - { - symbol: 'AOA', - name: 'Aurora', - marketSymbol: 'aoa', - identifier: 'eth-erc20-aoa', - contractAddress: '0x9ab165D795019b6d8B3e971DdA91071421305e5a', - decimals: 18 - }, - { - symbol: 'APIS', - name: 'APIS', - marketSymbol: 'apis', - identifier: 'eth-erc20-apis', - contractAddress: '0x4C0fBE1BB46612915E7967d2C3213cd4d87257AD', - decimals: 18 - }, - { - symbol: 'APPC', - name: 'AppCoins', - marketSymbol: 'appc', - identifier: 'eth-erc20-appc', - contractAddress: '0x1a7a8BD9106F2B8D977E08582DC7d24c723ab0DB', - decimals: 18 - }, - { - symbol: 'APT', - name: 'AIGang', - marketSymbol: 'apt', - identifier: 'eth-erc20-apt', - contractAddress: '0x23aE3C5B39B12f0693e05435EeaA1e51d8c61530', - decimals: 18 - }, - { - symbol: 'ARB', - name: 'ARBITRAGE', - marketSymbol: 'arb', - identifier: 'eth-erc20-arb', - contractAddress: '0xaFBeC4D65BC7b116d85107FD05d912491029Bf46', - decimals: 18 - }, - { - symbol: 'ARC', - name: 'Arcade Token', - marketSymbol: 'arc', - identifier: 'eth-erc20-arc', - contractAddress: '0xAc709FcB44a43c35F0DA4e3163b117A17F3770f5', - decimals: 18 - }, - { - symbol: 'ARCT', - name: 'ArbitrageCT', - marketSymbol: 'arct', - identifier: 'eth-erc20-arct', - contractAddress: '0x1245ef80F4d9e02ED9425375e8F649B9221b31D8', - decimals: 8 - }, - { - symbol: 'ARD', - name: 'Accord', - marketSymbol: 'ard', - identifier: 'eth-erc20-ard', - contractAddress: '0x75Aa7B0d02532f3833b66c7f0Ad35376d373ddF8', - decimals: 18 - }, - { - symbol: 'ARN', - name: 'Aeron', - marketSymbol: 'arn', - identifier: 'eth-erc20-arn', - contractAddress: '0xBA5F11b16B155792Cf3B2E6880E8706859A8AEB6', - decimals: 8 - }, - { - symbol: 'ART', - name: 'Maecenas', - marketSymbol: 'art', - identifier: 'eth-erc20-art', - contractAddress: '0xfec0cF7fE078a500abf15F1284958F22049c2C7e', - decimals: 18 - }, - { - symbol: 'ARX', - name: 'ARX', - marketSymbol: 'arx', - identifier: 'eth-erc20-arx', - contractAddress: '0x7705FaA34B16EB6d77Dfc7812be2367ba6B0248e', - decimals: 8 - }, - { - symbol: 'ARXT', - name: 'Assistive Reality ARX', - marketSymbol: 'arxt', - identifier: 'eth-erc20-arxt', - contractAddress: '0xb0D926c1BC3d78064F3e1075D5bD9A24F35Ae6C5', - decimals: 18 - }, - { - symbol: 'ARY', - name: 'Block Array', - marketSymbol: 'ary', - identifier: 'eth-erc20-ary', - contractAddress: '0xa5F8fC0921880Cb7342368BD128eb8050442B1a1', - decimals: 18 - }, - { - symbol: 'AST', - name: 'Airswap', - marketSymbol: 'ast', - identifier: 'eth-erc20-ast', - contractAddress: '0x27054b13b1B798B345b591a4d22e6562d47eA75a', - decimals: 4 - }, - { - symbol: 'ASTRO', - name: 'AstroTokens', - marketSymbol: 'astro', - identifier: 'eth-erc20-astro', - contractAddress: '0x7B22938ca841aA392C93dBB7f4c42178E3d65E88', - decimals: 4 - }, - { - symbol: 'ATH', - name: 'Athenian Warrior Token', - marketSymbol: 'ath', - identifier: 'eth-erc20-ath', - contractAddress: '0x17052d51E954592C1046320c2371AbaB6C73Ef10', - decimals: 18 - }, - { - symbol: 'ATH (AIgatha Token)', - name: 'AIgatha Token', - marketSymbol: 'ath (aigatha token)', - identifier: 'eth-erc20-ath (aigatha token)', - contractAddress: '0x1543d0F83489e82A1344DF6827B23d541F235A50', - decimals: 18 - }, - { - symbol: 'ATL', - name: 'ATLANT', - marketSymbol: 'atl', - identifier: 'eth-erc20-atl', - contractAddress: '0x78B7FADA55A64dD895D8c8c35779DD8b67fA8a05', - decimals: 18 - }, - { - symbol: 'ATM', - name: 'ATMChain', - marketSymbol: 'atm', - identifier: 'eth-erc20-atm', - contractAddress: '0x9B11EFcAAA1890f6eE52C6bB7CF8153aC5d74139', - decimals: 8 - }, - { - symbol: 'ATMI', - name: 'Atonomi', - marketSymbol: 'atmi', - identifier: 'eth-erc20-atmi', - contractAddress: '0x97AEB5066E1A590e868b511457BEb6FE99d329F5', - decimals: 18 - }, - { - symbol: 'ATS', - name: 'Authorship', - marketSymbol: 'ats', - identifier: 'eth-erc20-ats', - contractAddress: '0x2dAEE1AA61D60A252DC80564499A69802853583A', - decimals: 4 - }, - { - symbol: 'ATT', - name: 'Atmatrix Token', - marketSymbol: 'att', - identifier: 'eth-erc20-att', - contractAddress: '0x887834D3b8D450B6bAB109c252Df3DA286d73CE4', - decimals: 18 - }, - { - symbol: 'ATTN', - name: 'Attention Token', - marketSymbol: 'attn', - identifier: 'eth-erc20-attn', - contractAddress: '0x6339784d9478dA43106A429196772A029C2f177d', - decimals: 18 - }, - { - symbol: 'ATX', - name: 'Aston', - marketSymbol: 'atx', - identifier: 'eth-erc20-atx', - contractAddress: '0x1A0F2aB46EC630F9FD638029027b552aFA64b94c', - decimals: 18 - }, - { - symbol: 'AUC', - name: 'Auctus', - marketSymbol: 'auc', - identifier: 'eth-erc20-auc', - contractAddress: '0xc12d099be31567add4e4e4d0D45691C3F58f5663', - decimals: 18 - }, - { - symbol: 'AURA', - name: 'Aurora DAO', - marketSymbol: 'aura', - identifier: 'eth-erc20-aura', - contractAddress: '0xCdCFc0f66c522Fd086A1b725ea3c0Eeb9F9e8814', - decimals: 18 - }, - { - symbol: 'AUTO', - name: 'Cube', - marketSymbol: 'auto', - identifier: 'eth-erc20-auto', - contractAddress: '0x622dFfCc4e83C64ba959530A5a5580687a57581b', - decimals: 18 - }, - { - symbol: 'AVA', - name: 'AVA', - marketSymbol: 'ava', - identifier: 'eth-erc20-ava', - contractAddress: '0xeD247980396B10169BB1d36f6e278eD16700a60f', - decimals: 4 - }, - { - symbol: 'AVT', - name: 'Aventus', - marketSymbol: 'avt', - identifier: 'eth-erc20-avt', - contractAddress: '0x0d88eD6E74bbFD96B831231638b66C05571e824F', - decimals: 18 - }, - { - symbol: 'AX1', - name: 'AX1 Mining Token', - marketSymbol: 'ax1', - identifier: 'eth-erc20-ax1', - contractAddress: '0xCd4b4b0F3284a33AC49C67961EC6e111708318Cf', - decimals: 5 - }, - { - symbol: 'AXP', - name: 'AXP', - marketSymbol: 'axp', - identifier: 'eth-erc20-axp', - contractAddress: '0x9af2c6B1A28D3d6BC084bd267F70e90d49741D5B', - decimals: 8 - }, - { - symbol: 'AXPR', - name: 'aXpire', - marketSymbol: 'axpr', - identifier: 'eth-erc20-axpr', - contractAddress: '0xC39E626A04C5971D770e319760D7926502975e47', - decimals: 18 - }, - { - symbol: 'B2BX', - name: 'B2BX', - marketSymbol: 'b2bx', - identifier: 'eth-erc20-b2bx', - contractAddress: '0x5d51FCceD3114A8bb5E90cDD0f9d682bCbCC5393', - decimals: 18 - }, - { - symbol: 'BANCA', - name: 'Banca', - marketSymbol: 'banca', - identifier: 'eth-erc20-banca', - contractAddress: '0x998b3B82bC9dBA173990Be7afb772788B5aCB8Bd', - decimals: 18 - }, - { - symbol: 'BANX', - name: 'BANX', - marketSymbol: 'banx', - identifier: 'eth-erc20-banx', - contractAddress: '0xF87F0D9153fea549c728Ad61cb801595a68b73de', - decimals: 18 - }, - { - symbol: 'BAS', - name: 'BitAsean', - marketSymbol: 'bas', - identifier: 'eth-erc20-bas', - contractAddress: '0x2A05d22DB079BC40C2f77a1d1fF703a56E631cc1', - decimals: 8 - }, - { - symbol: 'BAT', - name: 'Basic Attention Token', - marketSymbol: 'bat', - identifier: 'eth-erc20-bat', - contractAddress: '0x0D8775F648430679A709E98d2b0Cb6250d2887EF', - decimals: 18 - }, - { - symbol: 'BAX', - name: 'BABB', - marketSymbol: 'bax', - identifier: 'eth-erc20-bax', - contractAddress: '0x9a0242b7a33DAcbe40eDb927834F96eB39f8fBCB', - decimals: 18 - }, - { - symbol: 'BBC', - name: 'TraDove B2BCoin', - marketSymbol: 'bbc', - identifier: 'eth-erc20-bbc', - contractAddress: '0xe7D3e4413E29ae35B0893140F4500965c74365e5', - decimals: 18 - }, - { - symbol: 'BBI', - name: 'Beluga Banking Infrastructure Token', - marketSymbol: 'bbi', - identifier: 'eth-erc20-bbi', - contractAddress: '0x37D40510a2F5Bc98AA7a0f7BF4b3453Bcfb90Ac1', - decimals: 18 - }, - { - symbol: 'BBK', - name: 'BRICKBLOCK TOKEN', - marketSymbol: 'bbk', - identifier: 'eth-erc20-bbk', - contractAddress: '0x4a6058666cf1057eaC3CD3A5a614620547559fc9', - decimals: 18 - }, - { - symbol: 'BBN', - name: 'Banyan Network', - marketSymbol: 'bbn', - identifier: 'eth-erc20-bbn', - contractAddress: '0x35a69642857083BA2F30bfaB735dacC7F0bac969', - decimals: 18 - }, - { - symbol: 'BBO', - name: 'Bigbom', - marketSymbol: 'bbo', - identifier: 'eth-erc20-bbo', - contractAddress: '0x84F7c44B6Fed1080f647E354D552595be2Cc602F', - decimals: 18 - }, - { - symbol: 'BC', - name: 'Block-Chain.com', - marketSymbol: 'bc', - identifier: 'eth-erc20-bc', - contractAddress: '0x2ecB13A8c458c379c4d9a7259e202De03c8F3D19', - decimals: 18 - }, - { - symbol: 'BCAP', - name: 'BCAP', - marketSymbol: 'bcap', - identifier: 'eth-erc20-bcap', - contractAddress: '0xFf3519eeeEA3e76F1F699CCcE5E23ee0bdDa41aC', - decimals: 0 - }, - { - symbol: 'BCAP', - name: 'BCAP', - marketSymbol: 'bcap', - identifier: 'eth-erc20-bcap', - contractAddress: '0x1f41E42D0a9e3c0Dd3BA15B527342783B43200A9', - decimals: 0 - }, - { - symbol: 'BCBC', - name: 'Beercoin', - marketSymbol: 'bcbc', - identifier: 'eth-erc20-bcbc', - contractAddress: '0x7367A68039d4704f30BfBF6d948020C3B07DFC59', - decimals: 18 - }, - { - symbol: 'BCDN', - name: 'BlockCDN', - marketSymbol: 'bcdn', - identifier: 'eth-erc20-bcdn', - contractAddress: '0x1e797Ce986C3CFF4472F7D38d5C4aba55DfEFE40', - decimals: 15 - }, - { - symbol: 'BCDT', - name: 'Blockchain Certified Data Token', - marketSymbol: 'bcdt', - identifier: 'eth-erc20-bcdt', - contractAddress: '0xAcfa209Fb73bF3Dd5bBfb1101B9Bc999C49062a5', - decimals: 18 - }, - { - symbol: 'BCL', - name: 'BCL', - marketSymbol: 'bcl', - identifier: 'eth-erc20-bcl', - contractAddress: '0xbc1234552EBea32B5121190356bBa6D3Bb225bb5', - decimals: 18 - }, - { - symbol: 'BCPT', - name: 'BlockMason Credit Protocol Token', - marketSymbol: 'bcpt', - identifier: 'eth-erc20-bcpt', - contractAddress: '0x1c4481750daa5Ff521A2a7490d9981eD46465Dbd', - decimals: 18 - }, - { - symbol: 'BCV', - name: 'BitCapitalVendor Token', - marketSymbol: 'bcv', - identifier: 'eth-erc20-bcv', - contractAddress: '0x1014613E2B3CBc4d575054D4982E580d9b99d7B1', - decimals: 8 - }, - { - symbol: 'BDG', - name: 'BitDegree Token', - marketSymbol: 'bdg', - identifier: 'eth-erc20-bdg', - contractAddress: '0x1961B3331969eD52770751fC718ef530838b6dEE', - decimals: 18 - }, - { - symbol: 'BEE', - name: 'Bee Token', - marketSymbol: 'bee', - identifier: 'eth-erc20-bee', - contractAddress: '0x4D8fc1453a0F359e99c9675954e656D80d996FbF', - decimals: 18 - }, - { - symbol: 'BeerCoin', - name: 'BeerCoin', - marketSymbol: 'beercoin', - identifier: 'eth-erc20-beercoin', - contractAddress: '0x74C1E4b8caE59269ec1D85D3D4F324396048F4ac', - decimals: 0 - }, - { - symbol: 'BERRY', - name: 'Berry', - marketSymbol: 'berry', - identifier: 'eth-erc20-berry', - contractAddress: '0x6aEB95F06CDA84cA345c2dE0F3B7f96923a44f4c', - decimals: 14 - }, - { - symbol: 'BET', - name: 'DAO.Casino', - marketSymbol: 'bet', - identifier: 'eth-erc20-bet', - contractAddress: '0x8aA33A7899FCC8eA5fBe6A608A109c3893A1B8b2', - decimals: 18 - }, - { - symbol: 'BETHER', - name: 'Bethereum', - marketSymbol: 'bether', - identifier: 'eth-erc20-bether', - contractAddress: '0x14C926F2290044B647e1Bf2072e67B495eff1905', - decimals: 18 - }, - { - symbol: 'BETR', - name: 'BetterBetting', - marketSymbol: 'betr', - identifier: 'eth-erc20-betr', - contractAddress: '0x763186eB8d4856D536eD4478302971214FEbc6A9', - decimals: 18 - }, - { - symbol: 'BEZ', - name: 'Bezop', - marketSymbol: 'bez', - identifier: 'eth-erc20-bez', - contractAddress: '0x3839d8ba312751Aa0248fEd6a8bACB84308E20Ed', - decimals: 18 - }, - { - symbol: 'BHPC', - name: 'BHPCash', - marketSymbol: 'bhpc', - identifier: 'eth-erc20-bhpc', - contractAddress: '0xEE74110fB5A1007b06282e0DE5d73A61bf41d9Cd', - decimals: 18 - }, - { - symbol: 'BHR', - name: 'BETHER', - marketSymbol: 'bhr', - identifier: 'eth-erc20-bhr', - contractAddress: '0xfe5D908c9Ad85f651185dAa6a4770726E2b27d09', - decimals: 18 - }, - { - symbol: 'BIT', - name: 'BlockEstate Investment Token', - marketSymbol: 'bit', - identifier: 'eth-erc20-bit', - contractAddress: '0x089B85FA15f72c1088CBbef23a49DB80B91DD521', - decimals: 8 - }, - { - symbol: 'BITCAR', - name: 'BitCar Token', - marketSymbol: 'bitcar', - identifier: 'eth-erc20-bitcar', - contractAddress: '0x08b4c866aE9D1bE56a06e0C302054B4FFe067b43', - decimals: 8 - }, - { - symbol: 'BITPARK', - name: 'BITPARK', - marketSymbol: 'bitpark', - identifier: 'eth-erc20-bitpark', - contractAddress: '0xF3d29Fb98D2DC5E78c87198DEEF99377345fD6F1', - decimals: 8 - }, - { - symbol: 'BIX', - name: 'Bibox Token', - marketSymbol: 'bix', - identifier: 'eth-erc20-bix', - contractAddress: '0xb3104b4B9Da82025E8b9F8Fb28b3553ce2f67069', - decimals: 18 - }, - { - symbol: 'BKB', - name: 'BetKing Bankroll Token', - marketSymbol: 'bkb', - identifier: 'eth-erc20-bkb', - contractAddress: '0xB2Bfeb70B903F1BAaC7f2ba2c62934C7e5B974C4', - decimals: 8 - }, - { - symbol: 'BKRx', - name: 'BlockRx', - marketSymbol: 'bkrx', - identifier: 'eth-erc20-bkrx', - contractAddress: '0x3cf9E0c385a5ABEC9FD2a71790AA344C4e8E3570', - decimals: 18 - }, - { - symbol: 'BKX', - name: 'BANKEX', - marketSymbol: 'bkx', - identifier: 'eth-erc20-bkx', - contractAddress: '0x45245bc59219eeaAF6cD3f382e078A461FF9De7B', - decimals: 18 - }, - { - symbol: 'BLN', - name: 'Bolenum', - marketSymbol: 'bln', - identifier: 'eth-erc20-bln', - contractAddress: '0xCA29db4221c111888a7e80b12eAc8a266Da3Ee0d', - decimals: 18 - }, - { - symbol: 'BLT', - name: 'Bloom', - marketSymbol: 'blt', - identifier: 'eth-erc20-blt', - contractAddress: '0x107c4504cd79C5d2696Ea0030a8dD4e92601B82e', - decimals: 18 - }, - { - symbol: 'BLUE', - name: 'Ethereum Blue', - marketSymbol: 'blue', - identifier: 'eth-erc20-blue', - contractAddress: '0x539EfE69bCDd21a83eFD9122571a64CC25e0282b', - decimals: 8 - }, - { - symbol: 'BLX (Bullion)', - name: 'Bullion Crypto', - marketSymbol: 'blx (bullion)', - identifier: 'eth-erc20-blx (bullion)', - contractAddress: '0xcE59d29b09aAE565fEEEf8E52f47c3CD5368C663', - decimals: 18 - }, - { - symbol: 'BLX (Iconomi)', - name: 'Iconomi', - marketSymbol: 'blx (iconomi)', - identifier: 'eth-erc20-blx (iconomi)', - contractAddress: '0xE5a7c12972f3bbFe70ed29521C8949b8Af6a0970', - decimals: 18 - }, - { - symbol: 'BLZ', - name: 'Bluzelle', - marketSymbol: 'blz', - identifier: 'eth-erc20-blz', - contractAddress: '0x5732046A883704404F284Ce41FfADd5b007FD668', - decimals: 18 - }, - { - symbol: 'BMC', - name: 'Blackmoon Crypto BMC Token', - marketSymbol: 'bmc', - identifier: 'eth-erc20-bmc', - contractAddress: '0xDf6Ef343350780BF8C3410BF062e0C015B1DD671', - decimals: 8 - }, - { - symbol: 'BMT', - name: 'BMT', - marketSymbol: 'bmt', - identifier: 'eth-erc20-bmt', - contractAddress: '0xf028ADEe51533b1B47BEaa890fEb54a457f51E89', - decimals: 18 - }, - { - symbol: 'BMX', - name: 'BitMart Token', - marketSymbol: 'bmx', - identifier: 'eth-erc20-bmx', - contractAddress: '0x986EE2B944c42D017F52Af21c4c69B84DBeA35d8', - decimals: 18 - }, - { - symbol: 'BNB', - name: 'Binance Coin', - marketSymbol: 'bnb', - identifier: 'eth-erc20-bnb', - contractAddress: '0xB8c77482e45F1F44dE1745F52C74426C631bDD52', - decimals: 18 - }, - { - symbol: 'BNC', - name: 'Bionic', - marketSymbol: 'bnc', - identifier: 'eth-erc20-bnc', - contractAddress: '0xEf51c9377FeB29856E61625cAf9390bD0B67eA18', - decimals: 8 - }, - { - symbol: 'BNC', - name: 'BNC', - marketSymbol: 'bnc', - identifier: 'eth-erc20-bnc', - contractAddress: '0xdD6Bf56CA2ada24c683FAC50E37783e55B57AF9F', - decimals: 12 - }, - { - symbol: 'BNFT', - name: 'Benefits Coin', - marketSymbol: 'bnft', - identifier: 'eth-erc20-bnft', - contractAddress: '0xdA2C424Fc98c741c2d4ef2f42897CEfed897CA75', - decimals: 9 - }, - { - symbol: 'BNN', - name: 'BrokerNekoNetwork', - marketSymbol: 'bnn', - identifier: 'eth-erc20-bnn', - contractAddress: '0xDA80B20038BDF968C7307BB5907A469482CF6251', - decimals: 8 - }, - { - symbol: 'BNT', - name: 'Bancor', - marketSymbol: 'bnt', - identifier: 'eth-erc20-bnt', - contractAddress: '0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C', - decimals: 18 - }, - { - symbol: 'BNTY', - name: 'Bounty0x Token', - marketSymbol: 'bnty', - identifier: 'eth-erc20-bnty', - contractAddress: '0xd2d6158683aeE4Cc838067727209a0aAF4359de3', - decimals: 18 - }, - { - symbol: 'BOB', - name: "Bob's repair", - marketSymbol: 'bob', - identifier: 'eth-erc20-bob', - contractAddress: '0xDF347911910b6c9A4286bA8E2EE5ea4a39eB2134', - decimals: 18 - }, - { - symbol: 'BON', - name: 'Bonpay', - marketSymbol: 'bon', - identifier: 'eth-erc20-bon', - contractAddress: '0xCc34366E3842cA1BD36c1f324d15257960fCC801', - decimals: 18 - }, - { - symbol: 'BOP', - name: 'BlockOptiopns Token', - marketSymbol: 'bop', - identifier: 'eth-erc20-bop', - contractAddress: '0x7F1E2C7d6A69bf34824D72C53B4550E895C0D8C2', - decimals: 8 - }, - { - symbol: 'BOU', - name: 'Boule Coin', - marketSymbol: 'bou', - identifier: 'eth-erc20-bou', - contractAddress: '0xC2C63F23ec5E97efbD7565dF9Ec764FDc7d4e91d', - decimals: 18 - }, - { - symbol: 'BOUTS', - name: 'BoutsPro', - marketSymbol: 'bouts', - identifier: 'eth-erc20-bouts', - contractAddress: '0x139d9397274bb9E2C29A9aa8Aa0b5874d30D62E3', - decimals: 18 - }, - { - symbol: 'BOX', - name: 'ContentBox', - marketSymbol: 'box', - identifier: 'eth-erc20-box', - contractAddress: '0x63f584FA56E60e4D0fE8802b27C7e6E3b33E007f', - decimals: 18 - }, - { - symbol: 'BOX', - name: 'BOX Token', - marketSymbol: 'box', - identifier: 'eth-erc20-box', - contractAddress: '0xe1A178B681BD05964d3e3Ed33AE731577d9d96dD', - decimals: 18 - }, - { - symbol: 'BOXX', - name: 'BOXX Token [Blockparty]', - marketSymbol: 'boxx', - identifier: 'eth-erc20-boxx', - contractAddress: '0x780116D91E5592E58a3b3c76A351571b39abCEc6', - decimals: 15 - }, - { - symbol: 'BPT', - name: 'Blockport Token', - marketSymbol: 'bpt', - identifier: 'eth-erc20-bpt', - contractAddress: '0x327682779bAB2BF4d1337e8974ab9dE8275A7Ca8', - decimals: 18 - }, - { - symbol: 'BQX', - name: 'Bitquence', - marketSymbol: 'bqx', - identifier: 'eth-erc20-bqx', - contractAddress: '0x5Af2Be193a6ABCa9c8817001F45744777Db30756', - decimals: 8 - }, - { - symbol: 'BRAT', - name: 'BROTHER', - marketSymbol: 'brat', - identifier: 'eth-erc20-brat', - contractAddress: '0x9E77D5a1251b6F7D456722A6eaC6D2d5980bd891', - decimals: 8 - }, - { - symbol: 'BRD', - name: 'Bread', - marketSymbol: 'brd', - identifier: 'eth-erc20-brd', - contractAddress: '0x558EC3152e2eb2174905cd19AeA4e34A23DE9aD6', - decimals: 18 - }, - { - symbol: 'BRLN', - name: 'Berlin Coin', - marketSymbol: 'brln', - identifier: 'eth-erc20-brln', - contractAddress: '0x80046305aaab08F6033b56a360c184391165dc2d', - decimals: 18 - }, - { - symbol: 'BRP', - name: 'Rental Processor Token', - marketSymbol: 'brp', - identifier: 'eth-erc20-brp', - contractAddress: '0xB22c2786a549B008517B67625f5296E8fAf9589e', - decimals: 18 - }, - { - symbol: 'BSDC', - name: 'BSDC', - marketSymbol: 'bsdc', - identifier: 'eth-erc20-bsdc', - contractAddress: '0xF26ef5E0545384b7Dcc0f297F2674189586830DF', - decimals: 18 - }, - { - symbol: 'BST', - name: 'BlocksquareToken', - marketSymbol: 'bst', - identifier: 'eth-erc20-bst', - contractAddress: '0x509A38b7a1cC0dcd83Aa9d06214663D9eC7c7F4a', - decimals: 18 - }, - { - symbol: 'BTCA', - name: 'BitAir', - marketSymbol: 'btca', - identifier: 'eth-erc20-btca', - contractAddress: '0x02725836ebF3eCDb1cDf1c7b02FcbBfaa2736AF8', - decimals: 8 - }, - { - symbol: 'BTCE', - name: 'EthereumBitcoin', - marketSymbol: 'btce', - identifier: 'eth-erc20-btce', - contractAddress: '0x0886949c1b8C412860c4264Ceb8083d1365e86CF', - decimals: 8 - }, - { - symbol: 'BTCL', - name: 'BTC Lite', - marketSymbol: 'btcl', - identifier: 'eth-erc20-btcl', - contractAddress: '0x5acD19b9c91e596b1f062f18e3D02da7eD8D1e50', - decimals: 8 - }, - { - symbol: 'BTCONE', - name: 'BitCoin One', - marketSymbol: 'btcone', - identifier: 'eth-erc20-btcone', - contractAddress: '0x87f5E8c3425218837f3CB67dB941aF0C01323E56', - decimals: 18 - }, - { - symbol: 'BTCR', - name: 'BitCoin Red', - marketSymbol: 'btcr', - identifier: 'eth-erc20-btcr', - contractAddress: '0x6Aac8CB9861E42bf8259F5AbDC6aE3Ae89909E11', - decimals: 8 - }, - { - symbol: 'BTE', - name: 'BTE', - marketSymbol: 'bte', - identifier: 'eth-erc20-bte', - contractAddress: '0x73dD069c299A5d691E9836243BcaeC9c8C1D8734', - decimals: 8 - }, - { - symbol: 'BTH', - name: 'Bytether', - marketSymbol: 'bth', - identifier: 'eth-erc20-bth', - contractAddress: '0xFAd572db566E5234AC9Fc3d570c4EdC0050eAA92', - decimals: 18 - }, - { - symbol: 'BTHR', - name: 'Bethereum', - marketSymbol: 'bthr', - identifier: 'eth-erc20-bthr', - contractAddress: '0xa02e3bB9cEbc03952601B3724B4940e0845BeBcf', - decimals: 18 - }, - { - symbol: 'BTK', - name: 'Bitcoin Token', - marketSymbol: 'btk', - identifier: 'eth-erc20-btk', - contractAddress: '0xdb8646F5b487B5Dd979FAC618350e85018F557d4', - decimals: 18 - }, - { - symbol: 'BTL (Battle)', - name: 'BTL (Battle)', - marketSymbol: 'btl (battle)', - identifier: 'eth-erc20-btl (battle)', - contractAddress: '0x2accaB9cb7a48c3E82286F0b2f8798D201F4eC3f', - decimals: 18 - }, - { - symbol: 'BTL (Bitlle)', - name: 'Bitlle Token', - marketSymbol: 'btl (bitlle)', - identifier: 'eth-erc20-btl (bitlle)', - contractAddress: '0x92685E93956537c25Bb75D5d47fca4266dd628B8', - decimals: 4 - }, - { - symbol: 'BTM', - name: 'Bytom', - marketSymbol: 'btm', - identifier: 'eth-erc20-btm', - contractAddress: '0xcB97e65F07DA24D46BcDD078EBebd7C6E6E3d750', - decimals: 8 - }, - { - symbol: 'BTO', - name: 'Bottos', - marketSymbol: 'bto', - identifier: 'eth-erc20-bto', - contractAddress: '0x36905Fc93280f52362A1CBAB151F25DC46742Fb5', - decimals: 18 - }, - { - symbol: 'BTQ', - name: 'Bitcoin Boutique', - marketSymbol: 'btq', - identifier: 'eth-erc20-btq', - contractAddress: '0x16B0E62aC13a2fAeD36D18bce2356d25Ab3CfAD3', - decimals: 18 - }, - { - symbol: 'BTR', - name: 'Bitether', - marketSymbol: 'btr', - identifier: 'eth-erc20-btr', - contractAddress: '0x499A6B77bc25C26bCf8265E2102B1B3dd1617024', - decimals: 18 - }, - { - symbol: 'BTR', - name: 'Bither Platform Token', - marketSymbol: 'btr', - identifier: 'eth-erc20-btr', - contractAddress: '0xcbf15FB8246F679F9Df0135881CB29a3746f734b', - decimals: 18 - }, - { - symbol: 'BTRN', - name: 'Biotron', - marketSymbol: 'btrn', - identifier: 'eth-erc20-btrn', - contractAddress: '0x03C780cD554598592B97b7256dDAad759945b125', - decimals: 18 - }, - { - symbol: 'BTT', - name: 'Bitether', - marketSymbol: 'btt', - identifier: 'eth-erc20-btt', - contractAddress: '0x080aa07E2C7185150d7e4DA98838A8d2feac3dfC', - decimals: 0 - }, - { - symbol: 'BTTX', - name: 'Blocktrade.com', - marketSymbol: 'bttx', - identifier: 'eth-erc20-bttx', - contractAddress: '0xFA456Cf55250A839088b27EE32A424d7DAcB54Ff', - decimals: 18 - }, - { - symbol: 'BTU', - name: 'BTU Protocol', - marketSymbol: 'btu', - identifier: 'eth-erc20-btu', - contractAddress: '0xb683D83a532e2Cb7DFa5275eED3698436371cc9f', - decimals: 18 - }, - { - symbol: 'BTZ', - name: 'BTZ by Bunz', - marketSymbol: 'btz', - identifier: 'eth-erc20-btz', - contractAddress: '0xE5f867dE1EA81346df5181b8b48DD6B0BB3357B0', - decimals: 18 - }, - { - symbol: 'BUC', - name: 'BeeUnity Chain', - marketSymbol: 'buc', - identifier: 'eth-erc20-buc', - contractAddress: '0xCa3c18a65b802eC267f8f4802545e7F53D24C75e', - decimals: 18 - }, - { - symbol: 'BWX', - name: 'Blue Whale Token', - marketSymbol: 'bwx', - identifier: 'eth-erc20-bwx', - contractAddress: '0xbD168CbF9d3a375B38dC51A202B5E8a4E52069Ed', - decimals: 18 - }, - { - symbol: 'BZ', - name: 'Bit-Z Token', - marketSymbol: 'bz', - identifier: 'eth-erc20-bz', - contractAddress: '0x4375E7aD8A01B8eC3Ed041399f62D9Cd120e0063', - decimals: 18 - }, - { - symbol: 'BZNT', - name: 'Bezant', - marketSymbol: 'bznt', - identifier: 'eth-erc20-bznt', - contractAddress: '0xE1Aee98495365fc179699C1bB3E761FA716beE62', - decimals: 18 - }, - { - symbol: 'C20', - name: "Crypto20's Token", - marketSymbol: 'c20', - identifier: 'eth-erc20-c20', - contractAddress: '0x26E75307Fc0C021472fEb8F727839531F112f317', - decimals: 18 - }, - { - symbol: 'C8', - name: 'Carboneum', - marketSymbol: 'c8', - identifier: 'eth-erc20-c8', - contractAddress: '0xd42debE4eDc92Bd5a3FBb4243e1ecCf6d63A4A5d', - decimals: 18 - }, - { - symbol: 'CAG', - name: 'Change Bank', - marketSymbol: 'cag', - identifier: 'eth-erc20-cag', - contractAddress: '0x7d4b8Cce0591C9044a22ee543533b72E976E36C3', - decimals: 18 - }, - { - symbol: 'CAN', - name: 'CanYaCoin', - marketSymbol: 'can', - identifier: 'eth-erc20-can', - contractAddress: '0x1d462414fe14cf489c7A21CaC78509f4bF8CD7c0', - decimals: 6 - }, - { - symbol: 'CAPP', - name: 'Cappasity', - marketSymbol: 'capp', - identifier: 'eth-erc20-capp', - contractAddress: '0x04F2E7221fdb1B52A68169B25793E51478fF0329', - decimals: 2 - }, - { - symbol: 'CAR', - name: 'Car Sharing Community', - marketSymbol: 'car', - identifier: 'eth-erc20-car', - contractAddress: '0x423e4322CDDa29156b49a17dfbd2aCC4b280600D', - decimals: 9 - }, - { - symbol: 'CAR (CarBlock)', - name: 'CarBlock', - marketSymbol: 'car (carblock)', - identifier: 'eth-erc20-car (carblock)', - contractAddress: '0x4D9e23a3842fE7Eb7682B9725cF6c507C424A41B', - decimals: 18 - }, - { - symbol: 'CARB', - name: 'CarbCoin', - marketSymbol: 'carb', - identifier: 'eth-erc20-carb', - contractAddress: '0xA517a46Baad6B054A76bD19c46844f717fe69fea', - decimals: 8 - }, - { - symbol: 'CARCO', - name: 'CARCO', - marketSymbol: 'carco', - identifier: 'eth-erc20-carco', - contractAddress: '0x2108E62D335Bbdc89eC3E9d8582F18DCFB0cDFf4', - decimals: 8 - }, - { - symbol: 'CARD', - name: 'Cardstack Token', - marketSymbol: 'card', - identifier: 'eth-erc20-card', - contractAddress: '0x954b890704693af242613edEf1B603825afcD708', - decimals: 18 - }, - { - symbol: 'CARD', - name: 'Cardstack Token', - marketSymbol: 'card', - identifier: 'eth-erc20-card', - contractAddress: '0xB07ec2c28834B889b1CE527Ca0F19364cD38935c', - decimals: 0 - }, - { - symbol: 'CARD', - name: 'Cardstack Token', - marketSymbol: 'card', - identifier: 'eth-erc20-card', - contractAddress: '0x1ed2B1eaEd8e968bc36EB90a914660A71827A5E9', - decimals: 0 - }, - { - symbol: 'CARE', - name: 'Token CARE', - marketSymbol: 'care', - identifier: 'eth-erc20-care', - contractAddress: '0xbF18F246B9301F231e9561B35A3879769BB46375', - decimals: 18 - }, - { - symbol: 'CAS', - name: 'Cashaa', - marketSymbol: 'cas', - identifier: 'eth-erc20-cas', - contractAddress: '0xe8780B48bdb05F928697A5e8155f672ED91462F7', - decimals: 18 - }, - { - symbol: 'CAS', - name: 'CAS Coin', - marketSymbol: 'cas', - identifier: 'eth-erc20-cas', - contractAddress: '0x779492d3644dDF4495Aa2d80C468E1B7be6AF1d2', - decimals: 2 - }, - { - symbol: 'CAT (BitClave)', - name: 'BitClave', - marketSymbol: 'cat (bitclave)', - identifier: 'eth-erc20-cat (bitclave)', - contractAddress: '0x1234567461d3f8Db7496581774Bd869C83D51c93', - decimals: 18 - }, - { - symbol: 'CAT (BlockCAT)', - name: 'BlockCAT', - marketSymbol: 'cat (blockcat)', - identifier: 'eth-erc20-cat (blockcat)', - contractAddress: '0x56ba2Ee7890461f463F7be02aAC3099f6d5811A8', - decimals: 18 - }, - { - symbol: 'CATs (BitClave)_Old', - name: 'CATs (BitClave)_Old', - marketSymbol: 'cats (bitclave)_old', - identifier: 'eth-erc20-cats (bitclave)_old', - contractAddress: '0x68e14bb5A45B9681327E16E528084B9d962C1a39', - decimals: 18 - }, - { - symbol: 'CBC', - name: 'CashBet Coin', - marketSymbol: 'cbc', - identifier: 'eth-erc20-cbc', - contractAddress: '0x26DB5439F651CAF491A87d48799dA81F191bDB6b', - decimals: 8 - }, - { - symbol: 'CBIX', - name: 'Cubrix', - marketSymbol: 'cbix', - identifier: 'eth-erc20-cbix', - contractAddress: '0x05C3617cBf1304b9260AA61ec960F115D67beCEA', - decimals: 18 - }, - { - symbol: 'CBM', - name: 'CryptoBonusMiles', - marketSymbol: 'cbm', - identifier: 'eth-erc20-cbm', - contractAddress: '0x95eFD1Fe6099F65a7ED524DEF487483221094947', - decimals: 18 - }, - { - symbol: 'CBT', - name: 'CommerceBlock', - marketSymbol: 'cbt', - identifier: 'eth-erc20-cbt', - contractAddress: '0x076C97e1c869072eE22f8c91978C99B4bcB02591', - decimals: 18 - }, - { - symbol: 'CC3', - name: 'Coal Coin', - marketSymbol: 'cc3', - identifier: 'eth-erc20-cc3', - contractAddress: '0xc166038705FFBAb3794185b3a9D925632A1DF37D', - decimals: 18 - }, - { - symbol: 'CCC (CryptoCrashCourse)', - name: 'CryptoCrashCourse', - marketSymbol: 'ccc (cryptocrashcourse)', - identifier: 'eth-erc20-ccc (cryptocrashcourse)', - contractAddress: '0x28577A6d31559bd265Ce3ADB62d0458550F7b8a7', - decimals: 18 - }, - { - symbol: 'CCC (ICONOMI)', - name: 'CCC (ICONOMI)', - marketSymbol: 'ccc (iconomi)', - identifier: 'eth-erc20-ccc (iconomi)', - contractAddress: '0xBE11eEb186e624b8f26A5045575a1340E4054552', - decimals: 18 - }, - { - symbol: 'CCCX', - name: 'Clipper Coin', - marketSymbol: 'cccx', - identifier: 'eth-erc20-cccx', - contractAddress: '0x378903a03FB2C3AC76BB52773e3CE11340377A32', - decimals: 18 - }, - { - symbol: 'CCLC', - name: 'Christ Coin', - marketSymbol: 'cclc', - identifier: 'eth-erc20-cclc', - contractAddress: '0xd348e07A2806505B856123045d27aeeD90924b50', - decimals: 8 - }, - { - symbol: 'CCO', - name: 'Ccore', - marketSymbol: 'cco', - identifier: 'eth-erc20-cco', - contractAddress: '0x679BADc551626e01B23CeecEFBc9B877EA18fc46', - decimals: 18 - }, - { - symbol: 'CCS', - name: 'CacaoShares', - marketSymbol: 'ccs', - identifier: 'eth-erc20-ccs', - contractAddress: '0x315cE59FAFd3A8d562b7Ec1C8542382d2710b06c', - decimals: 18 - }, - { - symbol: 'CCT', - name: 'Crystal Clear Token', - marketSymbol: 'cct', - identifier: 'eth-erc20-cct', - contractAddress: '0x336F646F87D9f6bC6Ed42Dd46E8b3fD9DbD15C22', - decimals: 18 - }, - { - symbol: 'CDL', - name: 'Confideal', - marketSymbol: 'cdl', - identifier: 'eth-erc20-cdl', - contractAddress: '0x8a95ca448A52C0ADf0054bB3402dC5e09CD6B232', - decimals: 18 - }, - { - symbol: 'CDT', - name: 'CoinDash', - marketSymbol: 'cdt', - identifier: 'eth-erc20-cdt', - contractAddress: '0x177d39AC676ED1C67A2b268AD7F1E58826E5B0af', - decimals: 18 - }, - { - symbol: 'CDX', - name: 'Carbon Dollar X', - marketSymbol: 'cdx', - identifier: 'eth-erc20-cdx', - contractAddress: '0x2cb101d7dA0ebaA57D3F2fEf46D7FFB7BB64592B', - decimals: 0 - }, - { - symbol: 'CDX', - name: 'Commodity Ad Network', - marketSymbol: 'cdx', - identifier: 'eth-erc20-cdx', - contractAddress: '0x6fFF3806Bbac52A20e0d79BC538d527f6a22c96b', - decimals: 18 - }, - { - symbol: 'CEEK', - name: 'CEEK VR Token', - marketSymbol: 'ceek', - identifier: 'eth-erc20-ceek', - contractAddress: '0xb056c38f6b7Dc4064367403E26424CD2c60655e1', - decimals: 18 - }, - { - symbol: 'CENNZ', - name: 'Centrality', - marketSymbol: 'cennz', - identifier: 'eth-erc20-cennz', - contractAddress: '0x1122B6a0E00DCe0563082b6e2953f3A943855c1F', - decimals: 18 - }, - { - symbol: 'CET', - name: 'DICE Money Dicet', - marketSymbol: 'cet', - identifier: 'eth-erc20-cet', - contractAddress: '0xF660cA1e228e7BE1fA8B4f5583145E31147FB577', - decimals: 18 - }, - { - symbol: 'CFC', - name: 'CryptFillCoin', - marketSymbol: 'cfc', - identifier: 'eth-erc20-cfc', - contractAddress: '0x5Dff89a2caa4D76bc286F74D67Bd718eb834da61', - decimals: 18 - }, - { - symbol: 'CFI', - name: 'Cofound.it', - marketSymbol: 'cfi', - identifier: 'eth-erc20-cfi', - contractAddress: '0x12FEF5e57bF45873Cd9B62E9DBd7BFb99e32D73e', - decimals: 18 - }, - { - symbol: 'CFTY', - name: 'Crafty Token', - marketSymbol: 'cfty', - identifier: 'eth-erc20-cfty', - contractAddress: '0x6956983F8B3Ce173B4AB84361AA0ad52f38D936f', - decimals: 8 - }, - { - symbol: 'CHP', - name: 'CoinPoker', - marketSymbol: 'chp', - identifier: 'eth-erc20-chp', - contractAddress: '0xf3db7560E820834658B590C96234c333Cd3D5E5e', - decimals: 18 - }, - { - symbol: 'CHSB', - name: 'SwissBorg', - marketSymbol: 'chsb', - identifier: 'eth-erc20-chsb', - contractAddress: '0xba9d4199faB4f26eFE3551D490E3821486f135Ba', - decimals: 8 - }, - { - symbol: 'CHX', - name: 'Own', - marketSymbol: 'chx', - identifier: 'eth-erc20-chx', - contractAddress: '0x1460a58096d80a50a2F1f956DDA497611Fa4f165', - decimals: 18 - }, - { - symbol: 'CIYA', - name: 'CRYPTORIYA', - marketSymbol: 'ciya', - identifier: 'eth-erc20-ciya', - contractAddress: '0xf75fBfa2f681860B9A6D19FC3FF3D34CB322E2D6', - decimals: 18 - }, - { - symbol: 'CJT', - name: 'ConnectJob', - marketSymbol: 'cjt', - identifier: 'eth-erc20-cjt', - contractAddress: '0x3abdfF32F76b42E7635bdb7e425f0231A5F3aB17', - decimals: 18 - }, - { - symbol: 'CK', - name: 'CK', - marketSymbol: 'ck', - identifier: 'eth-erc20-ck', - contractAddress: '0x06012c8cf97BEaD5deAe237070F9587f8E7A266d', - decimals: 0 - }, - { - symbol: 'CL', - name: 'Coinlancer', - marketSymbol: 'cl', - identifier: 'eth-erc20-cl', - contractAddress: '0xe81D72D14B1516e68ac3190a46C93302Cc8eD60f', - decimals: 18 - }, - { - symbol: 'CLB', - name: 'Cloudbric', - marketSymbol: 'clb', - identifier: 'eth-erc20-clb', - contractAddress: '0xb1c1Cb8C7c1992dba24e628bF7d38E71daD46aeB', - decimals: 18 - }, - { - symbol: 'CLL', - name: 'CryptoLiveLeak', - marketSymbol: 'cll', - identifier: 'eth-erc20-cll', - contractAddress: '0x3dC9a42fa7Afe57BE03c58fD7F4411b1E466C508', - decimals: 18 - }, - { - symbol: 'CLN', - name: 'ColuLocalNetwork', - marketSymbol: 'cln', - identifier: 'eth-erc20-cln', - contractAddress: '0x4162178B78D6985480A308B2190EE5517460406D', - decimals: 18 - }, - { - symbol: 'CLP', - name: 'CryptoLending', - marketSymbol: 'clp', - identifier: 'eth-erc20-clp', - contractAddress: '0x7FCE2856899a6806eeEf70807985fc7554C66340', - decimals: 9 - }, - { - symbol: 'CMBT', - name: 'CMBToken', - marketSymbol: 'cmbt', - identifier: 'eth-erc20-cmbt', - contractAddress: '0x3EDD235C3E840C1F29286B2e39370a255C7B6fdb', - decimals: 8 - }, - { - symbol: 'CMC', - name: 'CryptoMart', - marketSymbol: 'cmc', - identifier: 'eth-erc20-cmc', - contractAddress: '0x7e667525521cF61352e2E01b50FaaaE7Df39749a', - decimals: 18 - }, - { - symbol: 'CMCT', - name: 'Crowd Machine Compute Token', - marketSymbol: 'cmct', - identifier: 'eth-erc20-cmct', - contractAddress: '0x47bc01597798DCD7506DCCA36ac4302fc93a8cFb', - decimals: 8 - }, - { - symbol: 'CMT', - name: 'CyberMiles Token', - marketSymbol: 'cmt', - identifier: 'eth-erc20-cmt', - contractAddress: '0xf85fEea2FdD81d51177F6b8F35F0e6734Ce45F5F', - decimals: 18 - }, - { - symbol: 'CNB', - name: 'Canabio', - marketSymbol: 'cnb', - identifier: 'eth-erc20-cnb', - contractAddress: '0xEBf2F9E8De960f64ec0fDCDa6Cb282423133347B', - decimals: 8 - }, - { - symbol: 'CND', - name: 'Cindicator', - marketSymbol: 'cnd', - identifier: 'eth-erc20-cnd', - contractAddress: '0xd4c435F5B09F855C3317c8524Cb1F586E42795fa', - decimals: 18 - }, - { - symbol: 'CNN', - name: 'Content Neutrality Network', - marketSymbol: 'cnn', - identifier: 'eth-erc20-cnn', - contractAddress: '0x8713d26637CF49e1b6B4a7Ce57106AaBc9325343', - decimals: 18 - }, - { - symbol: 'CO2', - name: 'Climatecoin', - marketSymbol: 'co2', - identifier: 'eth-erc20-co2', - contractAddress: '0xB4b1D2C217EC0776584CE08D3DD98F90EDedA44b', - decimals: 18 - }, - { - symbol: 'CO2Bit', - name: 'CO2Bit', - marketSymbol: 'co2bit', - identifier: 'eth-erc20-co2bit', - contractAddress: '0x574B36BceD443338875d171CC377E691f7d4F887', - decimals: 18 - }, - { - symbol: 'COB', - name: 'Cobinhood Token', - marketSymbol: 'cob', - identifier: 'eth-erc20-cob', - contractAddress: '0xb2F7EB1f2c37645bE61d73953035360e768D81E6', - decimals: 18 - }, - { - symbol: 'COFI', - name: 'CoinFi Token', - marketSymbol: 'cofi', - identifier: 'eth-erc20-cofi', - contractAddress: '0x3136eF851592aCf49CA4C825131E364170FA32b3', - decimals: 18 - }, - { - symbol: 'COIL', - name: 'CoinOil', - marketSymbol: 'coil', - identifier: 'eth-erc20-coil', - contractAddress: '0x0C91B015AbA6f7B4738dcD36E7410138b29ADC29', - decimals: 8 - }, - { - symbol: 'COIN', - name: 'Coinvest V3 Token', - marketSymbol: 'coin', - identifier: 'eth-erc20-coin', - contractAddress: '0xeb547ed1D8A3Ff1461aBAa7F0022FED4836E00A4', - decimals: 18 - }, - { - symbol: 'COIN', - name: 'Coinvest V2 Token', - marketSymbol: 'coin', - identifier: 'eth-erc20-coin', - contractAddress: '0x5e8F855966D638135a968861E80DdA722291B06d', - decimals: 18 - }, - { - symbol: 'CORI', - name: 'Corrently Invest Token', - marketSymbol: 'cori', - identifier: 'eth-erc20-cori', - contractAddress: '0x725B190Bc077FFde17Cf549AA8ba25e298550B18', - decimals: 2 - }, - { - symbol: 'COSM', - name: 'Cosmo Coin', - marketSymbol: 'cosm', - identifier: 'eth-erc20-cosm', - contractAddress: '0xC4Bcd64CB216D49fD3C643A32762F34626b45a1a', - decimals: 18 - }, - { - symbol: 'COSS', - name: 'Coss Token', - marketSymbol: 'coss', - identifier: 'eth-erc20-coss', - contractAddress: '0x9e96604445Ec19fFed9a5e8dd7B50a29C899A10C', - decimals: 18 - }, - { - symbol: 'COSS', - name: 'Coss Token', - marketSymbol: 'coss', - identifier: 'eth-erc20-coss', - contractAddress: '0x65292EeadF1426Cd2dF1C4793a3d7519f253913b', - decimals: 18 - }, - { - symbol: 'COV', - name: 'Covesting', - marketSymbol: 'cov', - identifier: 'eth-erc20-cov', - contractAddress: '0xE2FB6529EF566a080e6d23dE0bd351311087D567', - decimals: 18 - }, - { - symbol: 'CPAY', - name: 'Cryptopay', - marketSymbol: 'cpay', - identifier: 'eth-erc20-cpay', - contractAddress: '0x0Ebb614204E47c09B6C3FeB9AAeCad8EE060E23E', - decimals: 0 - }, - { - symbol: 'CPC', - name: 'CPChain', - marketSymbol: 'cpc', - identifier: 'eth-erc20-cpc', - contractAddress: '0xfAE4Ee59CDd86e3Be9e8b90b53AA866327D7c090', - decimals: 18 - }, - { - symbol: 'CPEX', - name: 'CoinPulseToken', - marketSymbol: 'cpex', - identifier: 'eth-erc20-cpex', - contractAddress: '0xb787d4eAc8899730bb8C57fc3c998c49c5244ec0', - decimals: 8 - }, - { - symbol: 'CPLO', - name: 'CPOLLO', - marketSymbol: 'cplo', - identifier: 'eth-erc20-cplo', - contractAddress: '0x7064aAb39A0Fcf7221c3396719D0917a65E35515', - decimals: 18 - }, - { - symbol: 'CPT', - name: 'Cryptaur', - marketSymbol: 'cpt', - identifier: 'eth-erc20-cpt', - contractAddress: '0x88d50B466BE55222019D71F9E8fAe17f5f45FCA1', - decimals: 8 - }, - { - symbol: 'CPT', - name: 'Contents Protocol Token', - marketSymbol: 'cpt', - identifier: 'eth-erc20-cpt', - contractAddress: '0x9B62513c8a27290CF6A7A9e29386e600245EA819', - decimals: 18 - }, - { - symbol: 'CPY', - name: 'COPYTRACK', - marketSymbol: 'cpy', - identifier: 'eth-erc20-cpy', - contractAddress: '0xf44745fBd41F6A1ba151df190db0564c5fCc4410', - decimals: 18 - }, - { - symbol: 'CR7', - name: 'CR7Coin', - marketSymbol: 'cr7', - identifier: 'eth-erc20-cr7', - contractAddress: '0x7F585B9130c64e9e9F470b618A7badD03D79cA7E', - decimals: 18 - }, - { - symbol: 'CRB', - name: 'Creditbit', - marketSymbol: 'crb', - identifier: 'eth-erc20-crb', - contractAddress: '0xAef38fBFBF932D1AeF3B808Bc8fBd8Cd8E1f8BC5', - decimals: 8 - }, - { - symbol: 'CRBT', - name: 'Cruisebit', - marketSymbol: 'crbt', - identifier: 'eth-erc20-crbt', - contractAddress: '0x2cF618c19041D9Db330d8222B860A624021F30fb', - decimals: 18 - }, - { - symbol: 'CRC', - name: 'CryCash', - marketSymbol: 'crc', - identifier: 'eth-erc20-crc', - contractAddress: '0xF41e5Fbc2F6Aac200Dd8619E121CE1f05D150077', - decimals: 18 - }, - { - symbol: 'CRED', - name: 'Verify', - marketSymbol: 'cred', - identifier: 'eth-erc20-cred', - contractAddress: '0x672a1AD4f667FB18A333Af13667aa0Af1F5b5bDD', - decimals: 18 - }, - { - symbol: 'CREDO', - name: 'Credo / Bitbounce', - marketSymbol: 'credo', - identifier: 'eth-erc20-credo', - contractAddress: '0x4E0603e2A27A30480E5e3a4Fe548e29EF12F64bE', - decimals: 18 - }, - { - symbol: 'CRGO', - name: 'CargoCoin', - marketSymbol: 'crgo', - identifier: 'eth-erc20-crgo', - contractAddress: '0xf49CDD50aD408d387d611F88A647179C3de3492b', - decimals: 18 - }, - { - symbol: 'CRMT', - name: 'Cremit', - marketSymbol: 'crmt', - identifier: 'eth-erc20-crmt', - contractAddress: '0x9238bfB781A55eACC3Cf05F7DF94038c198CD9B9', - decimals: 8 - }, - { - symbol: 'CRPT', - name: 'CrypteriumToken', - marketSymbol: 'crpt', - identifier: 'eth-erc20-crpt', - contractAddress: '0x80A7E048F37A50500351C204Cb407766fA3baE7f', - decimals: 18 - }, - { - symbol: 'CRT', - name: 'CreamtoeCoin', - marketSymbol: 'crt', - identifier: 'eth-erc20-crt', - contractAddress: '0xF0da1186a4977226b9135d0613ee72e229EC3F4d', - decimals: 18 - }, - { - symbol: 'CryptoCarbon', - name: 'CryptoCarbon', - marketSymbol: 'cryptocarbon', - identifier: 'eth-erc20-cryptocarbon', - contractAddress: '0xE4c94d45f7Aef7018a5D66f44aF780ec6023378e', - decimals: 6 - }, - { - symbol: 'CS', - name: 'Credits', - marketSymbol: 'cs', - identifier: 'eth-erc20-cs', - contractAddress: '0x46b9Ad944d1059450Da1163511069C718F699D31', - decimals: 6 - }, - { - symbol: 'CSNO', - name: 'BitDice', - marketSymbol: 'csno', - identifier: 'eth-erc20-csno', - contractAddress: '0x29D75277aC7F0335b2165D0895E8725cbF658d73', - decimals: 8 - }, - { - symbol: 'CST', - name: 'Cryptosolartech', - marketSymbol: 'cst', - identifier: 'eth-erc20-cst', - contractAddress: '0xBB49A51Ee5a66ca3a8CbE529379bA44Ba67E6771', - decimals: 18 - }, - { - symbol: 'CTF', - name: 'CryptoTask', - marketSymbol: 'ctf', - identifier: 'eth-erc20-ctf', - contractAddress: '0x4545750F39aF6Be4F237B6869D4EccA928Fd5A85', - decimals: 18 - }, - { - symbol: 'CTG', - name: 'CT Global Token', - marketSymbol: 'ctg', - identifier: 'eth-erc20-ctg', - contractAddress: '0xC87c5dD86A3d567fF28701886fB0745aaa898da4', - decimals: 18 - }, - { - symbol: 'CTGC', - name: 'Convenient To Go', - marketSymbol: 'ctgc', - identifier: 'eth-erc20-ctgc', - contractAddress: '0x9E7D29bd499B6c7da2a5B2EaFCF4A39d3BD845D1', - decimals: 18 - }, - { - symbol: 'CTL', - name: 'CTL', - marketSymbol: 'ctl', - identifier: 'eth-erc20-ctl', - contractAddress: '0xBf4cFD7d1eDeeEA5f6600827411B41A21eB08abd', - decimals: 2 - }, - { - symbol: 'CTR', - name: 'Centra', - marketSymbol: 'ctr', - identifier: 'eth-erc20-ctr', - contractAddress: '0x96A65609a7B84E8842732DEB08f56C3E21aC6f8a', - decimals: 18 - }, - { - symbol: 'CTT', - name: 'ChainTrade Token', - marketSymbol: 'ctt', - identifier: 'eth-erc20-ctt', - contractAddress: '0xE3Fa177AcecfB86721Cf6f9f4206bd3Bd672D7d5', - decimals: 18 - }, - { - symbol: 'CTX', - name: 'CarTaxi', - marketSymbol: 'ctx', - identifier: 'eth-erc20-ctx', - contractAddress: '0x662aBcAd0b7f345AB7FfB1b1fbb9Df7894f18e66', - decimals: 18 - }, - { - symbol: 'CTXC', - name: 'Cortex', - marketSymbol: 'ctxc', - identifier: 'eth-erc20-ctxc', - contractAddress: '0xEa11755Ae41D889CeEc39A63E6FF75a02Bc1C00d', - decimals: 18 - }, - { - symbol: 'cV', - name: 'carVertical', - marketSymbol: 'cv', - identifier: 'eth-erc20-cv', - contractAddress: '0xdA6cb58A0D0C01610a29c5A65c303e13e885887C', - decimals: 18 - }, - { - symbol: 'CVC', - name: 'Civic', - marketSymbol: 'cvc', - identifier: 'eth-erc20-cvc', - contractAddress: '0x41e5560054824eA6B0732E656E3Ad64E20e94E45', - decimals: 8 - }, - { - symbol: 'CVT', - name: 'CyberVein', - marketSymbol: 'cvt', - identifier: 'eth-erc20-cvt', - contractAddress: '0xBe428c3867F05deA2A89Fc76a102b544eaC7f772', - decimals: 18 - }, - { - symbol: 'CXC', - name: 'CoxxxCoin', - marketSymbol: 'cxc', - identifier: 'eth-erc20-cxc', - contractAddress: '0x2134057C0b461F898D375Cead652Acae62b59541', - decimals: 18 - }, - { - symbol: 'CXO', - name: 'CargoX', - marketSymbol: 'cxo', - identifier: 'eth-erc20-cxo', - contractAddress: '0xb6EE9668771a79be7967ee29a63D4184F8097143', - decimals: 18 - }, - { - symbol: 'CYFM', - name: 'CyberFM', - marketSymbol: 'cyfm', - identifier: 'eth-erc20-cyfm', - contractAddress: '0x3f06B5D78406cD97bdf10f5C420B241D32759c80', - decimals: 18 - }, - { - symbol: 'CYMT', - name: 'CyberMusic', - marketSymbol: 'cymt', - identifier: 'eth-erc20-cymt', - contractAddress: '0x78c292D1445E6b9558bf42e8BC369271DeD062eA', - decimals: 8 - }, - { - symbol: 'CZR', - name: 'CanonChain', - marketSymbol: 'czr', - identifier: 'eth-erc20-czr', - contractAddress: '0x0223fc70574214F65813fE336D870Ac47E147fAe', - decimals: 18 - }, - { - symbol: 'DAB', - name: 'DAB', - marketSymbol: 'dab', - identifier: 'eth-erc20-dab', - contractAddress: '0xdab0C31BF34C897Fb0Fe90D12EC9401caf5c36Ec', - decimals: 0 - }, - { - symbol: 'DACS', - name: 'DACSEE', - marketSymbol: 'dacs', - identifier: 'eth-erc20-dacs', - contractAddress: '0xA31108E5BAB5494560Db34c95492658AF239357C', - decimals: 18 - }, - { - symbol: 'DADI', - name: 'DADI', - marketSymbol: 'dadi', - identifier: 'eth-erc20-dadi', - contractAddress: '0xFb2f26F266Fb2805a387230f2aa0a331b4d96Fba', - decimals: 18 - }, - { - symbol: 'DAI', - name: 'Dai Stablecoin v1.0', - marketSymbol: 'dai', - identifier: 'eth-erc20-dai', - contractAddress: '0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359', - decimals: 18 - }, - { - symbol: 'DALC', - name: 'DaleCoin', - marketSymbol: 'dalc', - identifier: 'eth-erc20-dalc', - contractAddress: '0x07D9e49Ea402194bf48A8276dAfB16E4eD633317', - decimals: 8 - }, - { - symbol: 'DAN', - name: 'DaneelToken', - marketSymbol: 'dan', - identifier: 'eth-erc20-dan', - contractAddress: '0x9B70740e708a083C6fF38Df52297020f5DfAa5EE', - decimals: 10 - }, - { - symbol: 'DAO', - name: 'DAO', - marketSymbol: 'dao', - identifier: 'eth-erc20-dao', - contractAddress: '0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413', - decimals: 16 - }, - { - symbol: 'DAT', - name: 'Datum Token', - marketSymbol: 'dat', - identifier: 'eth-erc20-dat', - contractAddress: '0x81c9151de0C8bafCd325a57E3dB5a5dF1CEBf79c', - decimals: 18 - }, - { - symbol: 'DATA', - name: 'Streamr DATAcoin', - marketSymbol: 'data', - identifier: 'eth-erc20-data', - contractAddress: '0x0Cf0Ee63788A0849fE5297F3407f701E122cC023', - decimals: 18 - }, - { - symbol: 'DATABroker', - name: 'DataBrokerDAO Token', - marketSymbol: 'databroker', - identifier: 'eth-erc20-databroker', - contractAddress: '0x1B5f21ee98eed48d292e8e2d3Ed82b40a9728A22', - decimals: 18 - }, - { - symbol: 'DATX', - name: 'DATx', - marketSymbol: 'datx', - identifier: 'eth-erc20-datx', - contractAddress: '0xaBbBB6447B68ffD6141DA77C18c7B5876eD6c5ab', - decimals: 18 - }, - { - symbol: 'DAV', - name: 'DAV Token', - marketSymbol: 'dav', - identifier: 'eth-erc20-dav', - contractAddress: '0xd82Df0ABD3f51425Eb15ef7580fDA55727875f14', - decimals: 18 - }, - { - symbol: 'DAX', - name: 'DAEX', - marketSymbol: 'dax', - identifier: 'eth-erc20-dax', - contractAddress: '0x0B4BdC478791897274652DC15eF5C135cae61E60', - decimals: 18 - }, - { - symbol: 'DAXT', - name: 'Digital Asset Exchange Token', - marketSymbol: 'daxt', - identifier: 'eth-erc20-daxt', - contractAddress: '0x61725f3db4004AFE014745B21DAb1E1677CC328b', - decimals: 18 - }, - { - symbol: 'DAY', - name: 'ChronoLogic DAY', - marketSymbol: 'day', - identifier: 'eth-erc20-day', - contractAddress: '0xE814aeE960a85208C3dB542C53E7D4a6C8D5f60F', - decimals: 18 - }, - { - symbol: 'DBET', - name: 'DecentBet', - marketSymbol: 'dbet', - identifier: 'eth-erc20-dbet', - contractAddress: '0x9b68bFaE21DF5A510931A262CECf63f41338F264', - decimals: 18 - }, - { - symbol: 'DCA', - name: 'DoBetAcceptBet', - marketSymbol: 'dca', - identifier: 'eth-erc20-dca', - contractAddress: '0x386Faa4703a34a7Fdb19Bec2e14Fd427C9638416', - decimals: 18 - }, - { - symbol: 'DCC', - name: 'Distributed Credit Chain', - marketSymbol: 'dcc', - identifier: 'eth-erc20-dcc', - contractAddress: '0xFFa93Aacf49297D51E211817452839052FDFB961', - decimals: 18 - }, - { - symbol: 'DCL', - name: 'DCL', - marketSymbol: 'dcl', - identifier: 'eth-erc20-dcl', - contractAddress: '0x399A0e6FbEb3d74c85357439f4c8AeD9678a5cbF', - decimals: 3 - }, - { - symbol: 'DCN', - name: 'Dentacoin', - marketSymbol: 'dcn', - identifier: 'eth-erc20-dcn', - contractAddress: '0x08d32b0da63e2C3bcF8019c9c5d849d7a9d791e6', - decimals: 0 - }, - { - symbol: 'DDF', - name: 'DDF', - marketSymbol: 'ddf', - identifier: 'eth-erc20-ddf', - contractAddress: '0xcC4eF9EEAF656aC1a2Ab886743E98e97E090ed38', - decimals: 18 - }, - { - symbol: 'DEB', - name: 'DEBITUM', - marketSymbol: 'deb', - identifier: 'eth-erc20-deb', - contractAddress: '0x151202C9c18e495656f372281F493EB7698961D5', - decimals: 18 - }, - { - symbol: 'DEEZ', - name: 'DeezNuts', - marketSymbol: 'deez', - identifier: 'eth-erc20-deez', - contractAddress: '0x075c60EE2cD308ff47873b38Bd9A0Fa5853382c4', - decimals: 18 - }, - { - symbol: 'DELTA', - name: 'DeltaChain', - marketSymbol: 'delta', - identifier: 'eth-erc20-delta', - contractAddress: '0xDE1E0AE6101b46520cF66fDC0B1059c5cC3d106c', - decimals: 8 - }, - { - symbol: 'DENT', - name: 'DENT', - marketSymbol: 'dent', - identifier: 'eth-erc20-dent', - contractAddress: '0x3597bfD533a99c9aa083587B074434E61Eb0A258', - decimals: 8 - }, - { - symbol: 'DEPO', - name: 'CRYPTODEPOZIT', - marketSymbol: 'depo', - identifier: 'eth-erc20-depo', - contractAddress: '0x7cF271966F36343Bf0150F25E5364f7961c58201', - decimals: 0 - }, - { - symbol: 'DEPO (Depository Network)', - name: 'DEPO (Depository Network)', - marketSymbol: 'depo (depository network)', - identifier: 'eth-erc20-depo (depository network)', - contractAddress: '0x89cbeAC5E8A13F0Ebb4C74fAdFC69bE81A501106', - decimals: 18 - }, - { - symbol: 'Devcon2 Token', - name: 'Devcon2 Token', - marketSymbol: 'devcon2 token', - identifier: 'eth-erc20-devcon2 token', - contractAddress: '0xdd94De9cFE063577051A5eb7465D08317d8808B6', - decimals: 0 - }, - { - symbol: 'DEW', - name: 'DEW', - marketSymbol: 'dew', - identifier: 'eth-erc20-dew', - contractAddress: '0x20E94867794dBA030Ee287F1406E100d03C84Cd3', - decimals: 18 - }, - { - symbol: 'DEX', - name: 'DEX', - marketSymbol: 'dex', - identifier: 'eth-erc20-dex', - contractAddress: '0x497bAEF294c11a5f0f5Bea3f2AdB3073DB448B56', - decimals: 18 - }, - { - symbol: 'DGD', - name: 'Digix DAO', - marketSymbol: 'dgd', - identifier: 'eth-erc20-dgd', - contractAddress: '0xE0B7927c4aF23765Cb51314A0E0521A9645F0E2A', - decimals: 9 - }, - { - symbol: 'DGPT', - name: 'DigiPulse', - marketSymbol: 'dgpt', - identifier: 'eth-erc20-dgpt', - contractAddress: '0xf6cFe53d6FEbaEEA051f400ff5fc14F0cBBDacA1', - decimals: 18 - }, - { - symbol: 'DGS', - name: 'Dragonglass', - marketSymbol: 'dgs', - identifier: 'eth-erc20-dgs', - contractAddress: '0x6aEDbF8dFF31437220dF351950Ba2a3362168d1b', - decimals: 8 - }, - { - symbol: 'DGTX', - name: 'DigitexFutures', - marketSymbol: 'dgtx', - identifier: 'eth-erc20-dgtx', - contractAddress: '0x1C83501478f1320977047008496DACBD60Bb15ef', - decimals: 18 - }, - { - symbol: 'DGX', - name: 'Digix Gold Token', - marketSymbol: 'dgx', - identifier: 'eth-erc20-dgx', - contractAddress: '0x4f3AfEC4E5a3F2A6a1A411DEF7D7dFe50eE057bF', - decimals: 9 - }, - { - symbol: 'DGX1', - name: 'Digix Gold Token 1.0', - marketSymbol: 'dgx1', - identifier: 'eth-erc20-dgx1', - contractAddress: '0x55b9a11c2e8351b4Ffc7b11561148bfaC9977855', - decimals: 9 - }, - { - symbol: 'DICE', - name: 'Etheroll', - marketSymbol: 'dice', - identifier: 'eth-erc20-dice', - contractAddress: '0x2e071D2966Aa7D8dECB1005885bA1977D6038A65', - decimals: 16 - }, - { - symbol: 'DIP', - name: 'Decentralized Insurance Protocol', - marketSymbol: 'dip', - identifier: 'eth-erc20-dip', - contractAddress: '0xc719d010B63E5bbF2C0551872CD5316ED26AcD83', - decimals: 18 - }, - { - symbol: 'DIT', - name: 'Digital Insurance Token', - marketSymbol: 'dit', - identifier: 'eth-erc20-dit', - contractAddress: '0xf14922001A2FB8541a433905437ae954419C2439', - decimals: 8 - }, - { - symbol: 'DIVX', - name: 'DIVX', - marketSymbol: 'divx', - identifier: 'eth-erc20-divx', - contractAddress: '0x13f11C9905A08ca76e3e853bE63D4f0944326C72', - decimals: 18 - }, - { - symbol: 'DKP', - name: 'Draggin Karma Points', - marketSymbol: 'dkp', - identifier: 'eth-erc20-dkp', - contractAddress: '0xBA187B09fFA8DDdc80d2571eD3cbC4Be0Af69E0c', - decimals: 18 - }, - { - symbol: 'DLT', - name: 'Agrello', - marketSymbol: 'dlt', - identifier: 'eth-erc20-dlt', - contractAddress: '0x07e3c70653548B04f0A75970C1F81B4CBbFB606f', - decimals: 18 - }, - { - symbol: 'DMT', - name: 'DMarket Token', - marketSymbol: 'dmt', - identifier: 'eth-erc20-dmt', - contractAddress: '0x2ccbFF3A042c68716Ed2a2Cb0c544A9f1d1935E1', - decimals: 8 - }, - { - symbol: 'DNA', - name: 'EncrypGen', - marketSymbol: 'dna', - identifier: 'eth-erc20-dna', - contractAddress: '0x82b0E50478eeaFde392D45D1259Ed1071B6fDa81', - decimals: 18 - }, - { - symbol: 'DNT', - name: 'District0x Network Token', - marketSymbol: 'dnt', - identifier: 'eth-erc20-dnt', - contractAddress: '0x0AbdAce70D3790235af448C88547603b945604ea', - decimals: 18 - }, - { - symbol: 'DNX', - name: 'DenCity', - marketSymbol: 'dnx', - identifier: 'eth-erc20-dnx', - contractAddress: '0xE43E2041dc3786e166961eD9484a5539033d10fB', - decimals: 18 - }, - { - symbol: 'DOCK', - name: 'Dock', - marketSymbol: 'dock', - identifier: 'eth-erc20-dock', - contractAddress: '0xE5Dada80Aa6477e85d09747f2842f7993D0Df71C', - decimals: 18 - }, - { - symbol: 'DOR', - name: 'Dorado', - marketSymbol: 'dor', - identifier: 'eth-erc20-dor', - contractAddress: '0x906b3f8b7845840188Eab53c3f5AD348A787752f', - decimals: 15 - }, - { - symbol: 'DOV', - name: 'Dovu', - marketSymbol: 'dov', - identifier: 'eth-erc20-dov', - contractAddress: '0xac3211a5025414Af2866FF09c23FC18bc97e79b1', - decimals: 18 - }, - { - symbol: 'DOW', - name: 'DOW', - marketSymbol: 'dow', - identifier: 'eth-erc20-dow', - contractAddress: '0xEEF6E90034eEa89E31Eb4B8eaCd323F28A92eaE4', - decimals: 18 - }, - { - symbol: 'DOW', - name: 'DOW', - marketSymbol: 'dow', - identifier: 'eth-erc20-dow', - contractAddress: '0x76974C7B79dC8a6a109Fd71fd7cEb9E40eff5382', - decimals: 18 - }, - { - symbol: 'DPP', - name: 'Digital Assets Power Play', - marketSymbol: 'dpp', - identifier: 'eth-erc20-dpp', - contractAddress: '0x01b3Ec4aAe1B8729529BEB4965F27d008788B0EB', - decimals: 18 - }, - { - symbol: 'DREAM', - name: 'DREAM', - marketSymbol: 'dream', - identifier: 'eth-erc20-dream', - contractAddress: '0x82f4dED9Cec9B5750FBFf5C2185AEe35AfC16587', - decimals: 6 - }, - { - symbol: 'DRGN', - name: 'Dragon', - marketSymbol: 'drgn', - identifier: 'eth-erc20-drgn', - contractAddress: '0x419c4dB4B9e25d6Db2AD9691ccb832C8D9fDA05E', - decimals: 18 - }, - { - symbol: 'DROP', - name: 'Droplex', - marketSymbol: 'drop', - identifier: 'eth-erc20-drop', - contractAddress: '0x3c75226555FC496168d48B88DF83B95F16771F37', - decimals: 0 - }, - { - symbol: 'DROP (dropil)', - name: 'Dropil', - marketSymbol: 'drop (dropil)', - identifier: 'eth-erc20-drop (dropil)', - contractAddress: '0x4672bAD527107471cB5067a887f4656D585a8A31', - decimals: 18 - }, - { - symbol: 'DRP', - name: 'DCorp', - marketSymbol: 'drp', - identifier: 'eth-erc20-drp', - contractAddress: '0x621d78f2EF2fd937BFca696CabaF9A779F59B3Ed', - decimals: 2 - }, - { - symbol: 'DRP', - name: 'Dripcoin', - marketSymbol: 'drp', - identifier: 'eth-erc20-drp', - contractAddress: '0x2799D90C6d44Cb9Aa5fBC377177F16C33E056b82', - decimals: 0 - }, - { - symbol: 'DRPU', - name: 'DCORP Utility', - marketSymbol: 'drpu', - identifier: 'eth-erc20-drpu', - contractAddress: '0xe30e02f049957e2A5907589e06Ba646fB2c321bA', - decimals: 8 - }, - { - symbol: 'DRT', - name: 'DomRaider', - marketSymbol: 'drt', - identifier: 'eth-erc20-drt', - contractAddress: '0x9AF4f26941677C706cfEcf6D3379FF01bB85D5Ab', - decimals: 8 - }, - { - symbol: 'DRVH', - name: 'Driveholic Token', - marketSymbol: 'drvh', - identifier: 'eth-erc20-drvh', - contractAddress: '0x62D4c04644314F35868Ba4c65cc27a77681dE7a9', - decimals: 18 - }, - { - symbol: 'DSC', - name: 'Digital Safe Coin', - marketSymbol: 'dsc', - identifier: 'eth-erc20-dsc', - contractAddress: '0x1e09BD8Cadb441632e441Db3e1D79909EE0A2256', - decimals: 1 - }, - { - symbol: 'DSCP', - name: 'Disciplina Token', - marketSymbol: 'dscp', - identifier: 'eth-erc20-dscp', - contractAddress: '0x03e3f0c25965f13DbbC58246738C183E27b26a56', - decimals: 18 - }, - { - symbol: 'DST', - name: 'Dimensions Strike Token', - marketSymbol: 'dst', - identifier: 'eth-erc20-dst', - contractAddress: '0x68d53441c0e253f76c500e551bdeA3D102206C9a', - decimals: 18 - }, - { - symbol: 'DTH', - name: 'dether', - marketSymbol: 'dth', - identifier: 'eth-erc20-dth', - contractAddress: '0x5adc961D6AC3f7062D2eA45FEFB8D8167d44b190', - decimals: 18 - }, - { - symbol: 'DTR', - name: 'Dynamic Trading Rights', - marketSymbol: 'dtr', - identifier: 'eth-erc20-dtr', - contractAddress: '0xd234BF2410a0009dF9c3C63b610c09738f18ccD7', - decimals: 8 - }, - { - symbol: 'DTRC', - name: 'Datarius Credit', - marketSymbol: 'dtrc', - identifier: 'eth-erc20-dtrc', - contractAddress: '0xc20464e0C373486d2B3335576e83a218b1618A5E', - decimals: 18 - }, - { - symbol: 'DTT', - name: 'Delphi Tech Token', - marketSymbol: 'dtt', - identifier: 'eth-erc20-dtt', - contractAddress: '0xf9F7c29CFdf19FCf1f2AA6B84aA367Bcf1bD1676', - decimals: 18 - }, - { - symbol: 'DTx', - name: 'DigitalTicks', - marketSymbol: 'dtx', - identifier: 'eth-erc20-dtx', - contractAddress: '0x82fdedfB7635441aA5A92791D001fA7388da8025', - decimals: 18 - }, - { - symbol: 'DTX', - name: 'DaTa eXchange Token', - marketSymbol: 'dtx', - identifier: 'eth-erc20-dtx', - contractAddress: '0x765f0C16D1Ddc279295c1a7C24B0883F62d33F75', - decimals: 18 - }, - { - symbol: 'DUBI', - name: 'DUBI', - marketSymbol: 'dubi', - identifier: 'eth-erc20-dubi', - contractAddress: '0xEd7fEA78C393cF7B17B152A8c2D0CD97aC31790B', - decimals: 18 - }, - { - symbol: 'DUBI', - name: 'Decentralized Universal Basic Income', - marketSymbol: 'dubi', - identifier: 'eth-erc20-dubi', - contractAddress: '0xD4CffeeF10F60eCA581b5E1146B5Aca4194a4C3b', - decimals: 18 - }, - { - symbol: 'DUBI', - name: 'Decentralized Universal Basic Income', - marketSymbol: 'dubi', - identifier: 'eth-erc20-dubi', - contractAddress: '0x9c6Fa42209169bCeA032e401188a6fc3e9C9f59c', - decimals: 18 - }, - { - symbol: 'DXT', - name: 'Datawallet', - marketSymbol: 'dxt', - identifier: 'eth-erc20-dxt', - contractAddress: '0x8dB54ca569D3019A2ba126D03C37c44b5eF81EF6', - decimals: 8 - }, - { - symbol: 'E₹', - name: 'eRupee', - marketSymbol: 'e₹', - identifier: 'eth-erc20-e₹', - contractAddress: '0xb67734521eAbBE9C773729dB73E16CC2dfb20A58', - decimals: 2 - }, - { - symbol: 'E4ROW', - name: 'E4ROW', - marketSymbol: 'e4row', - identifier: 'eth-erc20-e4row', - contractAddress: '0xCe5c603C78d047Ef43032E96b5B785324f753a4F', - decimals: 2 - }, - { - symbol: 'EAGLE', - name: 'EagleCoin', - marketSymbol: 'eagle', - identifier: 'eth-erc20-eagle', - contractAddress: '0x994f0DffdbaE0BbF09b652D6f11A493fd33F42B9', - decimals: 18 - }, - { - symbol: 'EARTH', - name: 'Earth Token', - marketSymbol: 'earth', - identifier: 'eth-erc20-earth', - contractAddress: '0x900b4449236a7bb26b286601dD14d2bDe7a6aC6c', - decimals: 8 - }, - { - symbol: 'EBC', - name: 'EBCoin', - marketSymbol: 'ebc', - identifier: 'eth-erc20-ebc', - contractAddress: '0x31f3D9D1BeCE0c033fF78fA6DA60a6048F3E13c5', - decimals: 18 - }, - { - symbol: 'eBCH', - name: 'eBCH', - marketSymbol: 'ebch', - identifier: 'eth-erc20-ebch', - contractAddress: '0xaFC39788c51f0c1Ff7B55317f3e70299e521Fff6', - decimals: 8 - }, - { - symbol: 'EBTC', - name: 'eBitcoin', - marketSymbol: 'ebtc', - identifier: 'eth-erc20-ebtc', - contractAddress: '0xeB7C20027172E5d143fB030d50f91Cece2D1485D', - decimals: 8 - }, - { - symbol: 'ECN', - name: 'ECN', - marketSymbol: 'ecn', - identifier: 'eth-erc20-ecn', - contractAddress: '0xa578aCc0cB7875781b7880903F4594D13cFa8B98', - decimals: 2 - }, - { - symbol: 'ECO2', - name: 'EtherCO2', - marketSymbol: 'eco2', - identifier: 'eth-erc20-eco2', - contractAddress: '0x17F93475d2A978f527c3f7c44aBf44AdfBa60D5C', - decimals: 2 - }, - { - symbol: 'ECOM', - name: 'Omnitude', - marketSymbol: 'ecom', - identifier: 'eth-erc20-ecom', - contractAddress: '0x171D750d42d661B62C277a6B486ADb82348c3Eca', - decimals: 18 - }, - { - symbol: 'ECP', - name: 'ECRYPTO COIN', - marketSymbol: 'ecp', - identifier: 'eth-erc20-ecp', - contractAddress: '0xAEA1C18A992984831002D0cf90E291FB52d72649', - decimals: 18 - }, - { - symbol: 'ECP', - name: 'ECrypto Coin', - marketSymbol: 'ecp', - identifier: 'eth-erc20-ecp', - contractAddress: '0x8869b1F9bC8B246a4D7220F834E56ddfdd8255E7', - decimals: 18 - }, - { - symbol: 'EDC', - name: 'Education Credits', - marketSymbol: 'edc', - identifier: 'eth-erc20-edc', - contractAddress: '0xFA1DE2Ee97e4c10C94C91Cb2b5062b89Fb140b82', - decimals: 6 - }, - { - symbol: 'EDG', - name: 'Edgeless', - marketSymbol: 'edg', - identifier: 'eth-erc20-edg', - contractAddress: '0x08711D3B02C8758F2FB3ab4e80228418a7F8e39c', - decimals: 0 - }, - { - symbol: 'EDO', - name: 'Eidoo', - marketSymbol: 'edo', - identifier: 'eth-erc20-edo', - contractAddress: '0xCeD4E93198734dDaFf8492d525Bd258D49eb388E', - decimals: 18 - }, - { - symbol: 'EDR', - name: 'Endor Protocol Token', - marketSymbol: 'edr', - identifier: 'eth-erc20-edr', - contractAddress: '0xc528c28FEC0A90C083328BC45f587eE215760A0F', - decimals: 18 - }, - { - symbol: 'EDU', - name: 'EDU Token', - marketSymbol: 'edu', - identifier: 'eth-erc20-edu', - contractAddress: '0x2A22e5cCA00a3D63308fa39f29202eB1b39eEf52', - decimals: 18 - }, - { - symbol: 'eGAS', - name: 'ETH GAS', - marketSymbol: 'egas', - identifier: 'eth-erc20-egas', - contractAddress: '0xb53A96bcBdD9CF78dfF20BAB6C2be7bAec8f00f8', - decimals: 8 - }, - { - symbol: 'EGT', - name: 'Egretia Token', - marketSymbol: 'egt', - identifier: 'eth-erc20-egt', - contractAddress: '0x8e1b448EC7aDFc7Fa35FC2e885678bD323176E34', - decimals: 18 - }, - { - symbol: 'EHT', - name: 'EasyHomes', - marketSymbol: 'eht', - identifier: 'eth-erc20-eht', - contractAddress: '0xf9F0FC7167c311Dd2F1e21E9204F87EBA9012fB2', - decimals: 8 - }, - { - symbol: 'EKO', - name: 'EchoLink', - marketSymbol: 'eko', - identifier: 'eth-erc20-eko', - contractAddress: '0xa6a840E50bCaa50dA017b91A0D86B8b2d41156EE', - decimals: 18 - }, - { - symbol: 'EKT', - name: 'EDUCare', - marketSymbol: 'ekt', - identifier: 'eth-erc20-ekt', - contractAddress: '0xBAb165dF9455AA0F2AeD1f2565520B91DDadB4c8', - decimals: 8 - }, - { - symbol: 'ELEC', - name: 'Electrify.Asia', - marketSymbol: 'elec', - identifier: 'eth-erc20-elec', - contractAddress: '0xD49ff13661451313cA1553fd6954BD1d9b6E02b9', - decimals: 18 - }, - { - symbol: 'ELF', - name: 'ELF Token', - marketSymbol: 'elf', - identifier: 'eth-erc20-elf', - contractAddress: '0xbf2179859fc6D5BEE9Bf9158632Dc51678a4100e', - decimals: 18 - }, - { - symbol: 'ELIX', - name: 'Elixir Token', - marketSymbol: 'elix', - identifier: 'eth-erc20-elix', - contractAddress: '0xc8C6A31A4A806d3710A7B38b7B296D2fABCCDBA8', - decimals: 18 - }, - { - symbol: 'ELTCOIN', - name: 'ELTCOIN', - marketSymbol: 'eltcoin', - identifier: 'eth-erc20-eltcoin', - contractAddress: '0x44197A4c44D6A059297cAf6be4F7e172BD56Caaf', - decimals: 8 - }, - { - symbol: 'ELY', - name: 'ELYCOIN', - marketSymbol: 'ely', - identifier: 'eth-erc20-ely', - contractAddress: '0xa95592DCFfA3C080B4B40E459c5f5692F67DB7F8', - decimals: 18 - }, - { - symbol: 'EMB', - name: 'Emblem', - marketSymbol: 'emb', - identifier: 'eth-erc20-emb', - contractAddress: '0x28B94F58B11aC945341329dBf2e5EF7F8Bd44225', - decimals: 8 - }, - { - symbol: 'EMON', - name: 'Etheremon', - marketSymbol: 'emon', - identifier: 'eth-erc20-emon', - contractAddress: '0xb67b88a25708a35AE7c2d736D398D268CE4f7F83', - decimals: 8 - }, - { - symbol: 'EMONT', - name: 'Etheremon Token', - marketSymbol: 'emont', - identifier: 'eth-erc20-emont', - contractAddress: '0x95dAaaB98046846bF4B2853e23cba236fa394A31', - decimals: 8 - }, - { - symbol: 'EMT', - name: 'easyMINE Token', - marketSymbol: 'emt', - identifier: 'eth-erc20-emt', - contractAddress: '0x9501BFc48897DCEEadf73113EF635d2fF7ee4B97', - decimals: 18 - }, - { - symbol: 'EMV', - name: 'EMovieVenture', - marketSymbol: 'emv', - identifier: 'eth-erc20-emv', - contractAddress: '0xB802b24E0637c2B87D2E8b7784C055BBE921011a', - decimals: 2 - }, - { - symbol: 'ENC', - name: 'Ethernet.Cash', - marketSymbol: 'enc', - identifier: 'eth-erc20-enc', - contractAddress: '0x039F5050dE4908f9b5ddF40A4F3Aa3f329086387', - decimals: 18 - }, - { - symbol: 'ENG', - name: 'Enigma', - marketSymbol: 'eng', - identifier: 'eth-erc20-eng', - contractAddress: '0xf0Ee6b27b759C9893Ce4f094b49ad28fd15A23e4', - decimals: 8 - }, - { - symbol: 'ENGT', - name: 'Engagement Token', - marketSymbol: 'engt', - identifier: 'eth-erc20-engt', - contractAddress: '0x5DBAC24e98E2a4f43ADC0DC82Af403fca063Ce2c', - decimals: 18 - }, - { - symbol: 'ENJ', - name: 'ENJIN', - marketSymbol: 'enj', - identifier: 'eth-erc20-enj', - contractAddress: '0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c', - decimals: 18 - }, - { - symbol: 'ENTRP', - name: 'Hut34 Entropy Token', - marketSymbol: 'entrp', - identifier: 'eth-erc20-entrp', - contractAddress: '0x5BC7e5f0Ab8b2E10D2D0a3F21739FCe62459aeF3', - decimals: 18 - }, - { - symbol: 'EOS', - name: 'EOS', - marketSymbol: 'eos', - identifier: 'eth-erc20-eos', - contractAddress: '0x86Fa049857E0209aa7D9e616F7eb3b3B78ECfdb0', - decimals: 18 - }, - { - symbol: 'eosDAC', - name: 'eosDAC', - marketSymbol: 'eosdac', - identifier: 'eth-erc20-eosdac', - contractAddress: '0x7e9e431a0B8c4D532C745B1043c7FA29a48D4fBa', - decimals: 18 - }, - { - symbol: 'EPX', - name: 'ethPoker.io EPX', - marketSymbol: 'epx', - identifier: 'eth-erc20-epx', - contractAddress: '0x35BAA72038F127f9f8C8f9B491049f64f377914d', - decimals: 4 - }, - { - symbol: 'EPY', - name: 'Emphy', - marketSymbol: 'epy', - identifier: 'eth-erc20-epy', - contractAddress: '0x50Ee674689d75C0f88E8f83cfE8c4B69E8fd590D', - decimals: 8 - }, - { - symbol: 'EQL', - name: 'Equal', - marketSymbol: 'eql', - identifier: 'eth-erc20-eql', - contractAddress: '0x47dD62D4D075DeAd71d0e00299fc56a2d747beBb', - decimals: 18 - }, - { - symbol: 'ERO', - name: 'Eroscoin', - marketSymbol: 'ero', - identifier: 'eth-erc20-ero', - contractAddress: '0x74CEDa77281b339142A36817Fa5F9E29412bAb85', - decimals: 8 - }, - { - symbol: 'ERT', - name: 'Eristica', - marketSymbol: 'ert', - identifier: 'eth-erc20-ert', - contractAddress: '0x92A5B04D0ED5D94D7a193d1d334D3D16996f4E13', - decimals: 18 - }, - { - symbol: 'ESZ', - name: 'ESZCoin', - marketSymbol: 'esz', - identifier: 'eth-erc20-esz', - contractAddress: '0xe8A1Df958bE379045E2B46a31A98B93A2eCDfDeD', - decimals: 18 - }, - { - symbol: 'ETBS', - name: 'Ethbits', - marketSymbol: 'etbs', - identifier: 'eth-erc20-etbs', - contractAddress: '0x1B9743f556D65e757c4c650B4555bAF354cB8bd3', - decimals: 12 - }, - { - symbol: 'ETCH', - name: 'ETCH', - marketSymbol: 'etch', - identifier: 'eth-erc20-etch', - contractAddress: '0xDd74a7A3769fA72561B3A69e65968F49748c690c', - decimals: 18 - }, - { - symbol: 'ETG', - name: 'Ethereum Gold', - marketSymbol: 'etg', - identifier: 'eth-erc20-etg', - contractAddress: '0x28c8d01FF633eA9Cd8fc6a451D7457889E698de6', - decimals: 0 - }, - { - symbol: 'ETHB', - name: 'EtherBTC', - marketSymbol: 'ethb', - identifier: 'eth-erc20-ethb', - contractAddress: '0x3a26746Ddb79B1B8e4450e3F4FFE3285A307387E', - decimals: 8 - }, - { - symbol: 'ETHD', - name: 'Ethereum Dark', - marketSymbol: 'ethd', - identifier: 'eth-erc20-ethd', - contractAddress: '0xdbFb423E9bBF16294388e07696A5120E4CeBA0C5', - decimals: 18 - }, - { - symbol: 'ETK', - name: 'EnergiToken', - marketSymbol: 'etk', - identifier: 'eth-erc20-etk', - contractAddress: '0x3c4a3ffd813a107febd57B2f01BC344264D90FdE', - decimals: 2 - }, - { - symbol: 'ETR', - name: 'Etheruem Risen', - marketSymbol: 'etr', - identifier: 'eth-erc20-etr', - contractAddress: '0x6927C69fb4daf2043fbB1Cb7b86c5661416bea29', - decimals: 18 - }, - { - symbol: 'EURS', - name: 'STASIS EURS', - marketSymbol: 'eurs', - identifier: 'eth-erc20-eurs', - contractAddress: '0xdB25f211AB05b1c97D595516F45794528a807ad8', - decimals: 2 - }, - { - symbol: 'EURT', - name: 'EUR Tether (erc20)', - marketSymbol: 'eurt', - identifier: 'eth-erc20-eurt', - contractAddress: '0xAbdf147870235FcFC34153828c769A70B3FAe01F', - decimals: 6 - }, - { - symbol: 'eUSD', - name: 'Ether-Backed USD Nomins (erc20)', - marketSymbol: 'eusd', - identifier: 'eth-erc20-eusd', - contractAddress: '0x523630976eB6147621B5c31c781eBe2Ec2a806E0', - decimals: 18 - }, - { - symbol: 'EVC', - name: 'EventChain', - marketSymbol: 'evc', - identifier: 'eth-erc20-evc', - contractAddress: '0xb62d18DeA74045E822352CE4B3EE77319DC5ff2F', - decimals: 18 - }, - { - symbol: 'EVE', - name: 'Devery', - marketSymbol: 'eve', - identifier: 'eth-erc20-eve', - contractAddress: '0x923108a439C4e8C2315c4f6521E5cE95B44e9B4c', - decimals: 18 - }, - { - symbol: 'EVN', - name: 'EvenCoin', - marketSymbol: 'evn', - identifier: 'eth-erc20-evn', - contractAddress: '0x68909e586eeAC8F47315e84B4c9788DD54Ef65Bb', - decimals: 18 - }, - { - symbol: 'EVN', - name: 'Envion AG', - marketSymbol: 'evn', - identifier: 'eth-erc20-evn', - contractAddress: '0xd780Ae2Bf04cD96E577D3D014762f831d97129d0', - decimals: 18 - }, - { - symbol: 'EVX', - name: 'EVX Token', - marketSymbol: 'evx', - identifier: 'eth-erc20-evx', - contractAddress: '0xf3Db5Fa2C66B7aF3Eb0C0b782510816cbe4813b8', - decimals: 4 - }, - { - symbol: 'EWO', - name: 'EWO Token', - marketSymbol: 'ewo', - identifier: 'eth-erc20-ewo', - contractAddress: '0x444997b7e7fC830E20089afea3078cd518fCF2A2', - decimals: 18 - }, - { - symbol: 'EXC', - name: 'Eximchain Token', - marketSymbol: 'exc', - identifier: 'eth-erc20-exc', - contractAddress: '0x00c4B398500645eb5dA00a1a379a88B11683ba01', - decimals: 18 - }, - { - symbol: 'EXMR', - name: 'eXMRcoin', - marketSymbol: 'exmr', - identifier: 'eth-erc20-exmr', - contractAddress: '0xc98e0639c6d2EC037A615341c369666B110e80E5', - decimals: 8 - }, - { - symbol: 'EXRN', - name: 'EXRNchain', - marketSymbol: 'exrn', - identifier: 'eth-erc20-exrn', - contractAddress: '0xe469c4473af82217B30CF17b10BcDb6C8c796e75', - decimals: 0 - }, - { - symbol: 'EXY', - name: 'Experty', - marketSymbol: 'exy', - identifier: 'eth-erc20-exy', - contractAddress: '0x5c743a35E903F6c584514ec617ACEe0611Cf44f3', - decimals: 18 - }, - { - symbol: 'EZT', - name: 'EZToken', - marketSymbol: 'ezt', - identifier: 'eth-erc20-ezt', - contractAddress: '0x5e6016Ae7d7C49d347dcF834860B9f3Ee282812b', - decimals: 8 - }, - { - symbol: 'FABA', - name: 'FABA', - marketSymbol: 'faba', - identifier: 'eth-erc20-faba', - contractAddress: '0x0a1D2fF7156a48131553CF381F220bbedB4eFa37', - decimals: 18 - }, - { - symbol: 'FACE', - name: 'Faceter', - marketSymbol: 'face', - identifier: 'eth-erc20-face', - contractAddress: '0x1CCAA0F2a7210d76E1fDec740d5F323E2E1b1672', - decimals: 18 - }, - { - symbol: 'FAM', - name: 'FAM', - marketSymbol: 'fam', - identifier: 'eth-erc20-fam', - contractAddress: '0x190e569bE071F40c704e15825F285481CB74B6cC', - decimals: 12 - }, - { - symbol: 'FAN', - name: 'Fan Token', - marketSymbol: 'fan', - identifier: 'eth-erc20-fan', - contractAddress: '0x90162f41886c0946D09999736f1C15c8a105A421', - decimals: 18 - }, - { - symbol: 'FANX', - name: 'FANX Token', - marketSymbol: 'fanx', - identifier: 'eth-erc20-fanx', - contractAddress: '0x7dCB3B2356C822d3577D4d060D0D5D78C860488C', - decimals: 18 - }, - { - symbol: 'FANX', - name: 'FANX Token', - marketSymbol: 'fanx', - identifier: 'eth-erc20-fanx', - contractAddress: '0x7f6715c3FC4740A02F70De85B9FD50ac6001fEd9', - decimals: 18 - }, - { - symbol: 'FDZ', - name: 'Friendz', - marketSymbol: 'fdz', - identifier: 'eth-erc20-fdz', - contractAddress: '0x23352036E911A22Cfc692B5E2E196692658ADED9', - decimals: 18 - }, - { - symbol: 'FGP', - name: 'FingerPrint', - marketSymbol: 'fgp', - identifier: 'eth-erc20-fgp', - contractAddress: '0xd9A8cfe21C232D485065cb62a96866799d4645f7', - decimals: 18 - }, - { - symbol: 'FID', - name: 'Fidelium', - marketSymbol: 'fid', - identifier: 'eth-erc20-fid', - contractAddress: '0x52fb36C83ad33C1824912FC81071cA5eEB8AB390', - decimals: 18 - }, - { - symbol: 'FIH', - name: 'FidelityHouse Token', - marketSymbol: 'fih', - identifier: 'eth-erc20-fih', - contractAddress: '0xdfC3e857c8cCEA7657E0ed98AB92e048e38deE0f', - decimals: 18 - }, - { - symbol: 'FKX', - name: 'Knoxstertoken', - marketSymbol: 'fkx', - identifier: 'eth-erc20-fkx', - contractAddress: '0x009e864923b49263c7F10D19B7f8Ab7a9A5AAd33', - decimals: 18 - }, - { - symbol: 'FLIXX', - name: 'Flixxo', - marketSymbol: 'flixx', - identifier: 'eth-erc20-flixx', - contractAddress: '0xf04a8ac553FceDB5BA99A64799155826C136b0Be', - decimals: 18 - }, - { - symbol: 'FLMC', - name: 'Filmscoin', - marketSymbol: 'flmc', - identifier: 'eth-erc20-flmc', - contractAddress: '0x04cC783b450b8D11F3C7d00DD03fDF7FB51fE9F2', - decimals: 18 - }, - { - symbol: 'FLMC', - name: 'Filmscoin', - marketSymbol: 'flmc', - identifier: 'eth-erc20-flmc', - contractAddress: '0x5976F7dac1525eF3277836043bA474a35E6B4272', - decimals: 0 - }, - { - symbol: 'FLOT', - name: 'Fire Lotto', - marketSymbol: 'flot', - identifier: 'eth-erc20-flot', - contractAddress: '0x049399a6B048D52971F7D122aE21A1532722285F', - decimals: 18 - }, - { - symbol: 'FLP', - name: 'FLIP Token', - marketSymbol: 'flp', - identifier: 'eth-erc20-flp', - contractAddress: '0x3a1Bda28AdB5B0a812a7CF10A1950c920F79BcD3', - decimals: 18 - }, - { - symbol: 'FLR', - name: 'Flair Coin', - marketSymbol: 'flr', - identifier: 'eth-erc20-flr', - contractAddress: '0x9aeFBE0b3C3ba9Eab262CB9856E8157AB7648e09', - decimals: 18 - }, - { - symbol: 'FLUZ', - name: 'Fluz Fluz Global', - marketSymbol: 'fluz', - identifier: 'eth-erc20-fluz', - contractAddress: '0x954b5De09A55e59755aCBda29e1Eb74A45D30175', - decimals: 18 - }, - { - symbol: 'FLX', - name: 'BitFlux', - marketSymbol: 'flx', - identifier: 'eth-erc20-flx', - contractAddress: '0x70b147E01E9285E7cE68B9BA437Fe3a9190E756a', - decimals: 18 - }, - { - symbol: 'FMF', - name: 'Formosa Financial Token', - marketSymbol: 'fmf', - identifier: 'eth-erc20-fmf', - contractAddress: '0xb4d0FDFC8497AEF97d3c2892AE682eE06064A2BC', - decimals: 18 - }, - { - symbol: 'FND', - name: 'FundRequest', - marketSymbol: 'fnd', - identifier: 'eth-erc20-fnd', - contractAddress: '0x4DF47B4969B2911C966506E3592c41389493953b', - decimals: 18 - }, - { - symbol: 'FNKOS', - name: 'FNKOS', - marketSymbol: 'fnkos', - identifier: 'eth-erc20-fnkos', - contractAddress: '0x0707681F344dEB24184037fC0228856F2137B02E', - decimals: 18 - }, - { - symbol: 'FNTB', - name: 'Fintab', - marketSymbol: 'fntb', - identifier: 'eth-erc20-fntb', - contractAddress: '0xbD4B60a138b3fce3584EA01f50c0908c18f9677A', - decimals: 8 - }, - { - symbol: 'FOOD', - name: 'FoodCoin', - marketSymbol: 'food', - identifier: 'eth-erc20-food', - contractAddress: '0x2a093BcF0C98Ef744Bb6F69D74f2F85605324290', - decimals: 8 - }, - { - symbol: 'FORK', - name: 'GastroAdvisorToken', - marketSymbol: 'fork', - identifier: 'eth-erc20-fork', - contractAddress: '0x5bB1632fA0023e1AA76a1AE92B4635C8DBa49Fa2', - decimals: 18 - }, - { - symbol: 'FOTA', - name: 'Fortuna', - marketSymbol: 'fota', - identifier: 'eth-erc20-fota', - contractAddress: '0x4270bb238f6DD8B1c3ca01f96CA65b2647c06D3C', - decimals: 18 - }, - { - symbol: 'FR8', - name: 'Fr8 Network', - marketSymbol: 'fr8', - identifier: 'eth-erc20-fr8', - contractAddress: '0x8c39afDf7B17F12c553208555E51ab86E69C35aA', - decimals: 8 - }, - { - symbol: 'FRD', - name: 'FARAD Cryptoken', - marketSymbol: 'frd', - identifier: 'eth-erc20-frd', - contractAddress: '0x0ABeFb7611Cb3A01EA3FaD85f33C3C934F8e2cF4', - decimals: 18 - }, - { - symbol: 'FREC', - name: 'Freyrchain', - marketSymbol: 'frec', - identifier: 'eth-erc20-frec', - contractAddress: '0x17e67d1CB4e349B9CA4Bc3e17C7DF2a397A7BB64', - decimals: 18 - }, - { - symbol: 'FRV', - name: 'Fitrova', - marketSymbol: 'frv', - identifier: 'eth-erc20-frv', - contractAddress: '0x48DF4E0296f908CEAb0428A5182D19B31fC037d6', - decimals: 8 - }, - { - symbol: 'FSN', - name: 'Fusion', - marketSymbol: 'fsn', - identifier: 'eth-erc20-fsn', - contractAddress: '0xD0352a019e9AB9d757776F532377aAEbd36Fd541', - decimals: 18 - }, - { - symbol: 'FT', - name: 'Fabric Token', - marketSymbol: 'ft', - identifier: 'eth-erc20-ft', - contractAddress: '0x78a73B6CBc5D183CE56e786f6e905CaDEC63547B', - decimals: 18 - }, - { - symbol: 'FTC', - name: 'FTC', - marketSymbol: 'ftc', - identifier: 'eth-erc20-ftc', - contractAddress: '0xe6f74dcfa0E20883008d8C16b6d9a329189D0C30', - decimals: 2 - }, - { - symbol: 'FTI', - name: 'FansTime', - marketSymbol: 'fti', - identifier: 'eth-erc20-fti', - contractAddress: '0x943ED852DadB5C3938ECdC6883718df8142DE4C8', - decimals: 18 - }, - { - symbol: 'FTR', - name: 'Futourist Token', - marketSymbol: 'ftr', - identifier: 'eth-erc20-ftr', - contractAddress: '0x2023DCf7c438c8C8C0B0F28dBaE15520B4f3Ee20', - decimals: 18 - }, - { - symbol: 'FTT', - name: 'FarmaTrust Token', - marketSymbol: 'ftt', - identifier: 'eth-erc20-ftt', - contractAddress: '0x2AEC18c5500f21359CE1BEA5Dc1777344dF4C0Dc', - decimals: 18 - }, - { - symbol: 'FTX', - name: 'FintruX Network', - marketSymbol: 'ftx', - identifier: 'eth-erc20-ftx', - contractAddress: '0xd559f20296FF4895da39b5bd9ADd54b442596a61', - decimals: 18 - }, - { - symbol: 'FTXT', - name: 'FUTURAX', - marketSymbol: 'ftxt', - identifier: 'eth-erc20-ftxt', - contractAddress: '0x41875C2332B0877cDFAA699B641402b7D4642c32', - decimals: 8 - }, - { - symbol: 'FUCK', - name: 'Finally Usable Crypto Karma', - marketSymbol: 'fuck', - identifier: 'eth-erc20-fuck', - contractAddress: '0x65Be44C747988fBF606207698c944Df4442efE19', - decimals: 4 - }, - { - symbol: 'FUCK', - name: 'FinallyUsableCryptoKarma', - marketSymbol: 'fuck', - identifier: 'eth-erc20-fuck', - contractAddress: '0xAb16E0d25c06CB376259cc18C1de4ACA57605589', - decimals: 4 - }, - { - symbol: 'FUEL', - name: 'Etherparty FUEL', - marketSymbol: 'fuel', - identifier: 'eth-erc20-fuel', - contractAddress: '0xEA38eAa3C86c8F9B751533Ba2E562deb9acDED40', - decimals: 18 - }, - { - symbol: 'FUN', - name: 'Funfair', - marketSymbol: 'fun', - identifier: 'eth-erc20-fun', - contractAddress: '0x419D0d8BdD9aF5e606Ae2232ed285Aff190E711b', - decimals: 8 - }, - { - symbol: 'FXC', - name: 'FUTURAX', - marketSymbol: 'fxc', - identifier: 'eth-erc20-fxc', - contractAddress: '0xc92D6E3E64302C59d734f3292E2A13A13D7E1817', - decimals: 8 - }, - { - symbol: 'FXT', - name: 'FuzeX', - marketSymbol: 'fxt', - identifier: 'eth-erc20-fxt', - contractAddress: '0x1829aA045E21E0D59580024A951DB48096e01782', - decimals: 18 - }, - { - symbol: 'FYN', - name: 'Fund Yourself Now', - marketSymbol: 'fyn', - identifier: 'eth-erc20-fyn', - contractAddress: '0x88FCFBc22C6d3dBaa25aF478C578978339BDe77a', - decimals: 18 - }, - { - symbol: 'FYP', - name: 'FlypMe', - marketSymbol: 'fyp', - identifier: 'eth-erc20-fyp', - contractAddress: '0x8F0921f30555624143d427b340b1156914882C10', - decimals: 18 - }, - { - symbol: 'Fzcoin', - name: 'Frozencoin Network', - marketSymbol: 'fzcoin', - identifier: 'eth-erc20-fzcoin', - contractAddress: '0xE5aeE163513119F4F750376C718766B40fA37A5F', - decimals: 18 - }, - { - symbol: 'GAM', - name: 'Gambit', - marketSymbol: 'gam', - identifier: 'eth-erc20-gam', - contractAddress: '0xF67451Dc8421F0e0afEB52faa8101034ed081Ed9', - decimals: 8 - }, - { - symbol: 'GANA', - name: 'GANA', - marketSymbol: 'gana', - identifier: 'eth-erc20-gana', - contractAddress: '0xc0EA6306F6360FE7dCAB65D16Bf1a3AF92C79Aa2', - decimals: 18 - }, - { - symbol: 'GANA', - name: 'GANA', - marketSymbol: 'gana', - identifier: 'eth-erc20-gana', - contractAddress: '0x6754e21b9EAa053c62d7854dD6561ae451B0cBCf', - decimals: 18 - }, - { - symbol: 'GAT', - name: 'Global Awards Token', - marketSymbol: 'gat', - identifier: 'eth-erc20-gat', - contractAddress: '0x687174f8C49ceb7729D925C3A961507ea4Ac7b28', - decimals: 18 - }, - { - symbol: 'GAVEL', - name: 'GAVEL', - marketSymbol: 'gavel', - identifier: 'eth-erc20-gavel', - contractAddress: '0x708876f486e448Ee89eB332bFbC8E593553058b9', - decimals: 18 - }, - { - symbol: 'GBT', - name: 'GBT', - marketSymbol: 'gbt', - identifier: 'eth-erc20-gbt', - contractAddress: '0x7585F835ae2d522722d2684323a0ba83401f32f5', - decimals: 18 - }, - { - symbol: 'GBX', - name: 'Globitex', - marketSymbol: 'gbx', - identifier: 'eth-erc20-gbx', - contractAddress: '0x12fCd6463E66974cF7bBC24FFC4d40d6bE458283', - decimals: 18 - }, - { - symbol: 'GCP', - name: 'Globcoin Crypto Platform', - marketSymbol: 'gcp', - identifier: 'eth-erc20-gcp', - contractAddress: '0xdb0F69306FF8F949f258E83f6b87ee5D052d0b23', - decimals: 18 - }, - { - symbol: 'GEE', - name: 'Geens NPO', - marketSymbol: 'gee', - identifier: 'eth-erc20-gee', - contractAddress: '0x4F4f0Db4de903B88f2B1a2847971E231D54F8fd3', - decimals: 8 - }, - { - symbol: 'GELD', - name: 'GELD', - marketSymbol: 'geld', - identifier: 'eth-erc20-geld', - contractAddress: '0x24083Bb30072643C3bB90B44B7285860a755e687', - decimals: 18 - }, - { - symbol: 'GEM', - name: 'Gems', - marketSymbol: 'gem', - identifier: 'eth-erc20-gem', - contractAddress: '0xc7BbA5b765581eFb2Cdd2679DB5Bea9eE79b201f', - decimals: 18 - }, - { - symbol: 'GEN', - name: 'DAOstack', - marketSymbol: 'gen', - identifier: 'eth-erc20-gen', - contractAddress: '0x543Ff227F64Aa17eA132Bf9886cAb5DB55DCAddf', - decimals: 18 - }, - { - symbol: 'GENE', - name: 'Parkgene', - marketSymbol: 'gene', - identifier: 'eth-erc20-gene', - contractAddress: '0x6DD4e4Aad29A40eDd6A409b9c1625186C9855b4D', - decimals: 8 - }, - { - symbol: 'GET', - name: 'GET Protocol', - marketSymbol: 'get', - identifier: 'eth-erc20-get', - contractAddress: '0x8a854288a5976036A725879164Ca3e91d30c6A1B', - decimals: 18 - }, - { - symbol: 'GIF', - name: 'GIFcoin Token', - marketSymbol: 'gif', - identifier: 'eth-erc20-gif', - contractAddress: '0xFcD862985628b254061F7A918035B80340D045d3', - decimals: 18 - }, - { - symbol: 'GIM', - name: 'Gimli', - marketSymbol: 'gim', - identifier: 'eth-erc20-gim', - contractAddress: '0xaE4f56F072c34C0a65B3ae3E4DB797D831439D93', - decimals: 8 - }, - { - symbol: 'GLA', - name: 'Gladius', - marketSymbol: 'gla', - identifier: 'eth-erc20-gla', - contractAddress: '0x71D01dB8d6a2fBEa7f8d434599C237980C234e4C', - decimals: 8 - }, - { - symbol: 'GMT', - name: 'GMT', - marketSymbol: 'gmt', - identifier: 'eth-erc20-gmt', - contractAddress: '0xb3Bd49E28f8F832b8d1E246106991e546c323502', - decimals: 18 - }, - { - symbol: 'GNO', - name: 'Gnosis', - marketSymbol: 'gno', - identifier: 'eth-erc20-gno', - contractAddress: '0x6810e776880C02933D47DB1b9fc05908e5386b96', - decimals: 18 - }, - { - symbol: 'GNT', - name: 'Golem', - marketSymbol: 'gnt', - identifier: 'eth-erc20-gnt', - contractAddress: '0xa74476443119A942dE498590Fe1f2454d7D4aC0d', - decimals: 18 - }, - { - symbol: 'GNX', - name: 'Genaro Network', - marketSymbol: 'gnx', - identifier: 'eth-erc20-gnx', - contractAddress: '0x6EC8a24CaBdc339A06a172F8223ea557055aDAa5', - decimals: 9 - }, - { - symbol: 'GNY', - name: 'GNY', - marketSymbol: 'gny', - identifier: 'eth-erc20-gny', - contractAddress: '0x247551F2EB3362E222c742E9c788B8957D9BC87e', - decimals: 18 - }, - { - symbol: 'GOLDX', - name: 'GOLDX', - marketSymbol: 'goldx', - identifier: 'eth-erc20-goldx', - contractAddress: '0xeAb43193CF0623073Ca89DB9B712796356FA7414', - decimals: 18 - }, - { - symbol: 'GOT', - name: 'GoNetwork', - marketSymbol: 'got', - identifier: 'eth-erc20-got', - contractAddress: '0x423b5F62b328D0D6D44870F4Eee316befA0b2dF5', - decimals: 18 - }, - { - symbol: 'GRID', - name: 'Grid+', - marketSymbol: 'grid', - identifier: 'eth-erc20-grid', - contractAddress: '0x12B19D3e2ccc14Da04FAe33e63652ce469b3F2FD', - decimals: 12 - }, - { - symbol: 'GRMD', - name: 'GreenMed', - marketSymbol: 'grmd', - identifier: 'eth-erc20-grmd', - contractAddress: '0xb444208cB0516C150178fCf9a52604BC04A1aCEa', - decimals: 18 - }, - { - symbol: 'GROO', - name: 'Groocoin', - marketSymbol: 'groo', - identifier: 'eth-erc20-groo', - contractAddress: '0xC17195bde49D70CefCF8A9F2ee1759FFC27BF0B1', - decimals: 18 - }, - { - symbol: 'GROW', - name: 'Growchain', - marketSymbol: 'grow', - identifier: 'eth-erc20-grow', - contractAddress: '0x0a9A9ce600D08BF9b76F49FA4e7b38A67EBEB1E6', - decimals: 8 - }, - { - symbol: 'GSC', - name: 'Global Social Chain', - marketSymbol: 'gsc', - identifier: 'eth-erc20-gsc', - contractAddress: '0x228ba514309FFDF03A81a205a6D040E429d6E80C', - decimals: 18 - }, - { - symbol: 'GSE', - name: 'GSENetwork', - marketSymbol: 'gse', - identifier: 'eth-erc20-gse', - contractAddress: '0xe530441f4f73bDB6DC2fA5aF7c3fC5fD551Ec838', - decimals: 4 - }, - { - symbol: 'GTC', - name: 'GTC Token', - marketSymbol: 'gtc', - identifier: 'eth-erc20-gtc', - contractAddress: '0xB70835D7822eBB9426B56543E391846C107bd32C', - decimals: 18 - }, - { - symbol: 'GTKT', - name: 'GTKT', - marketSymbol: 'gtkt', - identifier: 'eth-erc20-gtkt', - contractAddress: '0x025abAD9e518516fdaAFBDcdB9701b37fb7eF0FA', - decimals: 0 - }, - { - symbol: 'GTO', - name: 'Gifto', - marketSymbol: 'gto', - identifier: 'eth-erc20-gto', - contractAddress: '0xC5bBaE50781Be1669306b9e001EFF57a2957b09d', - decimals: 5 - }, - { - symbol: 'GUESS', - name: 'Peerguess', - marketSymbol: 'guess', - identifier: 'eth-erc20-guess', - contractAddress: '0xBDCFbf5C4D91Abc0bC9709C7286d00063c0e6F22', - decimals: 2 - }, - { - symbol: 'GULD', - name: 'GULD ERC20', - marketSymbol: 'guld', - identifier: 'eth-erc20-guld', - contractAddress: '0x9847345de8b614c956146bbea549336d9C8d26b6', - decimals: 8 - }, - { - symbol: 'GUP', - name: 'Matchpool', - marketSymbol: 'gup', - identifier: 'eth-erc20-gup', - contractAddress: '0xf7B098298f7C69Fc14610bf71d5e02c60792894C', - decimals: 3 - }, - { - symbol: 'GUSD', - name: 'Gemini dollar', - marketSymbol: 'gusd', - identifier: 'eth-erc20-gusd', - contractAddress: '0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd', - decimals: 2 - }, - { - symbol: 'GVT', - name: 'Genesis Vision', - marketSymbol: 'gvt', - identifier: 'eth-erc20-gvt', - contractAddress: '0x103c3A209da59d3E7C4A89307e66521e081CFDF0', - decimals: 18 - }, - { - symbol: 'GXC', - name: 'GXC', - marketSymbol: 'gxc', - identifier: 'eth-erc20-gxc', - contractAddress: '0x58ca3065C0F24C7c96Aee8d6056b5B5deCf9c2f8', - decimals: 10 - }, - { - symbol: 'GXVC', - name: 'Genevieve VC', - marketSymbol: 'gxvc', - identifier: 'eth-erc20-gxvc', - contractAddress: '0x22F0AF8D78851b72EE799e05F54A77001586B18A', - decimals: 10 - }, - { - symbol: 'GZB', - name: 'GigziBlack', - marketSymbol: 'gzb', - identifier: 'eth-erc20-gzb', - contractAddress: '0x9DAe8b7F6D37ea8e5d32C6c3E856a6d8a1d3B363', - decimals: 18 - }, - { - symbol: 'GZE', - name: 'GazeCoin', - marketSymbol: 'gze', - identifier: 'eth-erc20-gze', - contractAddress: '0x8C65e992297d5f092A756dEf24F4781a280198Ff', - decimals: 18 - }, - { - symbol: 'GZR', - name: 'Gizer', - marketSymbol: 'gzr', - identifier: 'eth-erc20-gzr', - contractAddress: '0xE638dc39b6aDBEE8526b5C22380b4b45dAf46d8e', - decimals: 6 - }, - { - symbol: 'HAK', - name: 'Shaka', - marketSymbol: 'hak', - identifier: 'eth-erc20-hak', - contractAddress: '0x93a7174dafd31d13400cD9fa01f4e5B5BAa00D39', - decimals: 18 - }, - { - symbol: 'HAND', - name: 'ShowHand', - marketSymbol: 'hand', - identifier: 'eth-erc20-hand', - contractAddress: '0x48C1B2f3eFA85fbafb2ab951bF4Ba860a08cdBB7', - decimals: 0 - }, - { - symbol: 'HAPPY', - name: 'Happiness', - marketSymbol: 'happy', - identifier: 'eth-erc20-happy', - contractAddress: '0x5A567e28dbFa2bBD3ef13C0a01be114745349657', - decimals: 2 - }, - { - symbol: 'HAT', - name: 'Hawala Today', - marketSymbol: 'hat', - identifier: 'eth-erc20-hat', - contractAddress: '0x9002D4485b7594e3E850F0a206713B305113f69e', - decimals: 18 - }, - { - symbol: 'HB', - name: 'HeartBout', - marketSymbol: 'hb', - identifier: 'eth-erc20-hb', - contractAddress: '0xE2492F8D2A2618d8709Ca99b1d8d75713Bd84089', - decimals: 18 - }, - { - symbol: 'HBT', - name: 'Hubii Network', - marketSymbol: 'hbt', - identifier: 'eth-erc20-hbt', - contractAddress: '0xDd6C68bb32462e01705011a4e2Ad1a60740f217F', - decimals: 15 - }, - { - symbol: 'HBZ', - name: 'HBZ coin', - marketSymbol: 'hbz', - identifier: 'eth-erc20-hbz', - contractAddress: '0xE34e1944E776f39B9252790a0527eBDa647aE668', - decimals: 18 - }, - { - symbol: 'HDG', - name: 'Hedge Crypto', - marketSymbol: 'hdg', - identifier: 'eth-erc20-hdg', - contractAddress: '0xfFe8196bc259E8dEDc544d935786Aa4709eC3E64', - decimals: 18 - }, - { - symbol: 'HDL', - name: 'HOLDER.TECH', - marketSymbol: 'hdl', - identifier: 'eth-erc20-hdl', - contractAddress: '0x95C4be8534d69C248C0623c4C9a7A2a001c17337', - decimals: 18 - }, - { - symbol: 'Hdp', - name: 'HEdpAY', - marketSymbol: 'hdp', - identifier: 'eth-erc20-hdp', - contractAddress: '0xE9fF07809CCff05daE74990e25831d0Bc5cbe575', - decimals: 18 - }, - { - symbol: 'Hdp.ф', - name: 'HEdpAY', - marketSymbol: 'hdp.ф', - identifier: 'eth-erc20-hdp.ф', - contractAddress: '0x84543F868eC1b1FAC510d49d13C069f64cD2d5f9', - decimals: 18 - }, - { - symbol: 'HER', - name: 'HeroNode', - marketSymbol: 'her', - identifier: 'eth-erc20-her', - contractAddress: '0x491C9A23DB85623EEd455a8EfDd6AbA9b911C5dF', - decimals: 18 - }, - { - symbol: 'HGT', - name: 'HelloGold', - marketSymbol: 'hgt', - identifier: 'eth-erc20-hgt', - contractAddress: '0xba2184520A1cC49a6159c57e61E1844E085615B6', - decimals: 8 - }, - { - symbol: 'HIBT', - name: 'HiBTC Token', - marketSymbol: 'hibt', - identifier: 'eth-erc20-hibt', - contractAddress: '0x9bb1Db1445b83213a56d90d331894b3f26218e4e', - decimals: 18 - }, - { - symbol: 'HIG', - name: 'ethereumhigh', - marketSymbol: 'hig', - identifier: 'eth-erc20-hig', - contractAddress: '0xa9240fBCAC1F0b9A6aDfB04a53c8E3B0cC1D1444', - decimals: 18 - }, - { - symbol: 'HKG', - name: 'HKG', - marketSymbol: 'hkg', - identifier: 'eth-erc20-hkg', - contractAddress: '0x14F37B574242D366558dB61f3335289a5035c506', - decimals: 3 - }, - { - symbol: 'HKN', - name: 'Hacken', - marketSymbol: 'hkn', - identifier: 'eth-erc20-hkn', - contractAddress: '0x9e6B2B11542f2BC52f3029077acE37E8fD838D7F', - decimals: 8 - }, - { - symbol: 'HKY', - name: 'Hicky', - marketSymbol: 'hky', - identifier: 'eth-erc20-hky', - contractAddress: '0x88aC94D5d175130347Fc95E109d77AC09dbF5ab7', - decimals: 18 - }, - { - symbol: 'HLX', - name: 'Helex', - marketSymbol: 'hlx', - identifier: 'eth-erc20-hlx', - contractAddress: '0x66eb65D7Ab8e9567ba0fa6E37c305956c5341574', - decimals: 5 - }, - { - symbol: 'HMC', - name: 'Hms Token', - marketSymbol: 'hmc', - identifier: 'eth-erc20-hmc', - contractAddress: '0xAa0bb10CEc1fa372eb3Abc17C933FC6ba863DD9E', - decimals: 18 - }, - { - symbol: 'HMQ', - name: 'Humaniq', - marketSymbol: 'hmq', - identifier: 'eth-erc20-hmq', - contractAddress: '0xcbCC0F036ED4788F63FC0fEE32873d6A7487b908', - decimals: 8 - }, - { - symbol: 'HODL', - name: 'HODLCoin', - marketSymbol: 'hodl', - identifier: 'eth-erc20-hodl', - contractAddress: '0xb45d7Bc4cEBcAB98aD09BABDF8C818B2292B672c', - decimals: 18 - }, - { - symbol: 'HORSE', - name: 'Ethorse', - marketSymbol: 'horse', - identifier: 'eth-erc20-horse', - contractAddress: '0x5B0751713b2527d7f002c0c4e2a37e1219610A6B', - decimals: 18 - }, - { - symbol: 'HOT (Holo)', - name: 'Holo Token', - marketSymbol: 'hot (holo)', - identifier: 'eth-erc20-hot (holo)', - contractAddress: '0x6c6EE5e31d828De241282B9606C8e98Ea48526E2', - decimals: 18 - }, - { - symbol: 'HOT (Hydro)', - name: 'Hydro Protocol', - marketSymbol: 'hot (hydro)', - identifier: 'eth-erc20-hot (hydro)', - contractAddress: '0x9AF839687F6C94542ac5ece2e317dAAE355493A1', - decimals: 18 - }, - { - symbol: 'HPB', - name: 'HPBCoin', - marketSymbol: 'hpb', - identifier: 'eth-erc20-hpb', - contractAddress: '0x38c6A68304cdEfb9BEc48BbFaABA5C5B47818bb2', - decimals: 18 - }, - { - symbol: 'HST', - name: 'Decision Token', - marketSymbol: 'hst', - identifier: 'eth-erc20-hst', - contractAddress: '0x554C20B7c486beeE439277b4540A434566dC4C02', - decimals: 18 - }, - { - symbol: 'HT', - name: 'Huobi Token', - marketSymbol: 'ht', - identifier: 'eth-erc20-ht', - contractAddress: '0x6f259637dcD74C767781E37Bc6133cd6A68aa161', - decimals: 18 - }, - { - symbol: 'HVN', - name: 'Hiveterminal Token', - marketSymbol: 'hvn', - identifier: 'eth-erc20-hvn', - contractAddress: '0xC0Eb85285d83217CD7c891702bcbC0FC401E2D9D', - decimals: 8 - }, - { - symbol: 'HYDRO', - name: 'Hydro', - marketSymbol: 'hydro', - identifier: 'eth-erc20-hydro', - contractAddress: '0xEBBdf302c940c6bfd49C6b165f457fdb324649bc', - decimals: 18 - }, - { - symbol: 'IAD', - name: 'IADOWR Coin', - marketSymbol: 'iad', - identifier: 'eth-erc20-iad', - contractAddress: '0xC1E2097d788d33701BA3Cc2773BF67155ec93FC4', - decimals: 18 - }, - { - symbol: 'ICE', - name: 'ICE', - marketSymbol: 'ice', - identifier: 'eth-erc20-ice', - contractAddress: '0x5a84969bb663fb64F6d015DcF9F622Aedc796750', - decimals: 18 - }, - { - symbol: 'ICN', - name: 'ICONOMI', - marketSymbol: 'icn', - identifier: 'eth-erc20-icn', - contractAddress: '0x888666CA69E0f178DED6D75b5726Cee99A87D698', - decimals: 18 - }, - { - symbol: 'ICO', - name: 'ICO', - marketSymbol: 'ico', - identifier: 'eth-erc20-ico', - contractAddress: '0xa33e729bf4fdeb868B534e1f20523463D9C46bEe', - decimals: 10 - }, - { - symbol: 'ICOS', - name: 'ICOS', - marketSymbol: 'icos', - identifier: 'eth-erc20-icos', - contractAddress: '0x014B50466590340D41307Cc54DCee990c8D58aa8', - decimals: 6 - }, - { - symbol: 'ICX', - name: 'ICON', - marketSymbol: 'icx', - identifier: 'eth-erc20-icx', - contractAddress: '0xb5A5F22694352C15B00323844aD545ABb2B11028', - decimals: 18 - }, - { - symbol: 'IDEA', - name: 'IDEA Token', - marketSymbol: 'idea', - identifier: 'eth-erc20-idea', - contractAddress: '0x814CAfd4782d2e728170FDA68257983F03321c58', - decimals: 0 - }, - { - symbol: 'IDH', - name: 'indaHash', - marketSymbol: 'idh', - identifier: 'eth-erc20-idh', - contractAddress: '0x5136C98A80811C3f46bDda8B5c4555CFd9f812F0', - decimals: 6 - }, - { - symbol: 'IDXM', - name: 'IDEX Membership', - marketSymbol: 'idxm', - identifier: 'eth-erc20-idxm', - contractAddress: '0xCc13Fc627EFfd6E35D2D2706Ea3C4D7396c610ea', - decimals: 8 - }, - { - symbol: 'IETH', - name: 'iEthereum', - marketSymbol: 'ieth', - identifier: 'eth-erc20-ieth', - contractAddress: '0x859a9C0b44cb7066D956a958B0b82e54C9e44b4B', - decimals: 8 - }, - { - symbol: 'IFT', - name: 'InvestFeed', - marketSymbol: 'ift', - identifier: 'eth-erc20-ift', - contractAddress: '0x7654915A1b82D6D2D0AFc37c52Af556eA8983c7E', - decimals: 18 - }, - { - symbol: 'IG', - name: 'IGToken', - marketSymbol: 'ig', - identifier: 'eth-erc20-ig', - contractAddress: '0x8a88f04e0c905054D2F33b26BB3A46D7091A039A', - decimals: 18 - }, - { - symbol: 'IHT', - name: 'I HOUSE TOKEN', - marketSymbol: 'iht', - identifier: 'eth-erc20-iht', - contractAddress: '0xEda8B016efA8b1161208Cf041cD86972eeE0F31E', - decimals: 18 - }, - { - symbol: 'IIC', - name: 'IIC', - marketSymbol: 'iic', - identifier: 'eth-erc20-iic', - contractAddress: '0x16662F73dF3e79e54c6c5938b4313f92C524C120', - decimals: 18 - }, - { - symbol: 'IKB', - name: 'IKB', - marketSymbol: 'ikb', - identifier: 'eth-erc20-ikb', - contractAddress: '0x88AE96845e157558ef59e9Ff90E766E22E480390', - decimals: 0 - }, - { - symbol: 'IMC', - name: 'Immune Coin', - marketSymbol: 'imc', - identifier: 'eth-erc20-imc', - contractAddress: '0xe3831c5A982B279A198456D577cfb90424cb6340', - decimals: 6 - }, - { - symbol: 'IMT', - name: 'IMT', - marketSymbol: 'imt', - identifier: 'eth-erc20-imt', - contractAddress: '0x22E5F62D0FA19974749faa194e3d3eF6d89c08d7', - decimals: 0 - }, - { - symbol: 'IMT', - name: 'Moneytoken', - marketSymbol: 'imt', - identifier: 'eth-erc20-imt', - contractAddress: '0x13119E34E140097a507B07a5564bDe1bC375D9e6', - decimals: 18 - }, - { - symbol: 'IND', - name: 'Indorse', - marketSymbol: 'ind', - identifier: 'eth-erc20-ind', - contractAddress: '0xf8e386EDa857484f5a12e4B5DAa9984E06E73705', - decimals: 18 - }, - { - symbol: 'ING', - name: 'Iungo', - marketSymbol: 'ing', - identifier: 'eth-erc20-ing', - contractAddress: '0x24dDFf6D8B8a42d835af3b440De91f3386554Aa4', - decimals: 18 - }, - { - symbol: 'INRM', - name: 'Integrated Money', - marketSymbol: 'inrm', - identifier: 'eth-erc20-inrm', - contractAddress: '0x48e5413b73add2434e47504E2a22d14940dBFe78', - decimals: 3 - }, - { - symbol: 'INS', - name: 'Insolar', - marketSymbol: 'ins', - identifier: 'eth-erc20-ins', - contractAddress: '0x5B2e4a700dfBc560061e957edec8F6EeEb74a320', - decimals: 10 - }, - { - symbol: 'INSTAR', - name: 'Insights Network', - marketSymbol: 'instar', - identifier: 'eth-erc20-instar', - contractAddress: '0xc72fe8e3Dd5BeF0F9f31f259399F301272eF2a2D', - decimals: 18 - }, - { - symbol: 'INT', - name: 'Internet Node Token', - marketSymbol: 'int', - identifier: 'eth-erc20-int', - contractAddress: '0x0b76544F6C413a555F309Bf76260d1E02377c02A', - decimals: 6 - }, - { - symbol: 'INV', - name: 'Invacio', - marketSymbol: 'inv', - identifier: 'eth-erc20-inv', - contractAddress: '0xEcE83617Db208Ad255Ad4f45Daf81E25137535bb', - decimals: 8 - }, - { - symbol: 'INXT', - name: 'Internxt', - marketSymbol: 'inxt', - identifier: 'eth-erc20-inxt', - contractAddress: '0xa8006C4ca56F24d6836727D106349320dB7fEF82', - decimals: 8 - }, - { - symbol: 'IOST', - name: 'IOSToken', - marketSymbol: 'iost', - identifier: 'eth-erc20-iost', - contractAddress: '0xFA1a856Cfa3409CFa145Fa4e20Eb270dF3EB21ab', - decimals: 18 - }, - { - symbol: 'IoT', - name: 'IoTコイン', - marketSymbol: 'iot', - identifier: 'eth-erc20-iot', - contractAddress: '0xC34B21f6F8e51cC965c2393B3ccFa3b82BEb2403', - decimals: 6 - }, - { - symbol: 'IOTX', - name: 'IoTeX Network', - marketSymbol: 'iotx', - identifier: 'eth-erc20-iotx', - contractAddress: '0x6fB3e0A217407EFFf7Ca062D46c26E5d60a14d69', - decimals: 18 - }, - { - symbol: 'IPL', - name: 'InsurePal token', - marketSymbol: 'ipl', - identifier: 'eth-erc20-ipl', - contractAddress: '0x64CdF819d3E75Ac8eC217B3496d7cE167Be42e80', - decimals: 18 - }, - { - symbol: 'IPSX', - name: 'IP Exchange', - marketSymbol: 'ipsx', - identifier: 'eth-erc20-ipsx', - contractAddress: '0x001F0aA5dA15585e5b2305DbaB2bac425ea71007', - decimals: 18 - }, - { - symbol: 'IQN', - name: 'IQeon', - marketSymbol: 'iqn', - identifier: 'eth-erc20-iqn', - contractAddress: '0x0DB8D8b76BC361bAcbB72E2C491E06085A97Ab31', - decimals: 18 - }, - { - symbol: 'IST34', - name: 'IST34 Token', - marketSymbol: 'ist34', - identifier: 'eth-erc20-ist34', - contractAddress: '0x0cF713b11C9b986EC40D65bD4F7fbd50F6ff2d64', - decimals: 18 - }, - { - symbol: 'ITC', - name: 'IoT Chain', - marketSymbol: 'itc', - identifier: 'eth-erc20-itc', - contractAddress: '0x5E6b6d9aBAd9093fdc861Ea1600eBa1b355Cd940', - decimals: 18 - }, - { - symbol: 'ITT', - name: 'ITT Token', - marketSymbol: 'itt', - identifier: 'eth-erc20-itt', - contractAddress: '0x0aeF06DcCCC531e581f0440059E6FfCC206039EE', - decimals: 8 - }, - { - symbol: 'IVY', - name: 'IvyKoin Public Network Tokens', - marketSymbol: 'ivy', - identifier: 'eth-erc20-ivy', - contractAddress: '0xA4eA687A2A7F29cF2dc66B39c68e4411C0D00C49', - decimals: 18 - }, - { - symbol: 'IXT', - name: 'InsureX', - marketSymbol: 'ixt', - identifier: 'eth-erc20-ixt', - contractAddress: '0xfcA47962D45ADFdfd1Ab2D972315dB4ce7CCf094', - decimals: 8 - }, - { - symbol: 'J8T', - name: 'J8T Token', - marketSymbol: 'j8t', - identifier: 'eth-erc20-j8t', - contractAddress: '0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4', - decimals: 8 - }, - { - symbol: 'JBX', - name: 'JBX', - marketSymbol: 'jbx', - identifier: 'eth-erc20-jbx', - contractAddress: '0x0Aaf561eFF5BD9c8F911616933F84166A17cfE0C', - decimals: 0 - }, - { - symbol: 'JBX', - name: 'JBOX', - marketSymbol: 'jbx', - identifier: 'eth-erc20-jbx', - contractAddress: '0x884e3902C4d5cFA86de4aCE7A96AA91EbC25C0Ff', - decimals: 18 - }, - { - symbol: 'JC', - name: 'Jesus Coin', - marketSymbol: 'jc', - identifier: 'eth-erc20-jc', - contractAddress: '0xE2D82Dc7dA0E6f882E96846451F4faBcc8f90528', - decimals: 18 - }, - { - symbol: 'JET', - name: 'JET', - marketSymbol: 'jet', - identifier: 'eth-erc20-jet', - contractAddress: '0x8727c112C712c4a03371AC87a74dD6aB104Af768', - decimals: 18 - }, - { - symbol: 'JetCoins', - name: 'JetCoins', - marketSymbol: 'jetcoins', - identifier: 'eth-erc20-jetcoins', - contractAddress: '0x773450335eD4ec3DB45aF74f34F2c85348645D39', - decimals: 18 - }, - { - symbol: 'JNT', - name: 'Jibrel Network', - marketSymbol: 'jnt', - identifier: 'eth-erc20-jnt', - contractAddress: '0xa5Fd1A791C4dfcaacC963D4F73c6Ae5824149eA7', - decimals: 18 - }, - { - symbol: 'JOT', - name: 'Jury.Online Token', - marketSymbol: 'jot', - identifier: 'eth-erc20-jot', - contractAddress: '0xdb455c71C1bC2de4e80cA451184041Ef32054001', - decimals: 18 - }, - { - symbol: 'JOY', - name: 'JOYSO', - marketSymbol: 'joy', - identifier: 'eth-erc20-joy', - contractAddress: '0xDDe12a12A6f67156e0DA672be05c374e1B0a3e57', - decimals: 6 - }, - { - symbol: 'KAN', - name: 'BitKan', - marketSymbol: 'kan', - identifier: 'eth-erc20-kan', - contractAddress: '0x1410434b0346f5bE678d0FB554E5c7ab620f8f4a', - decimals: 18 - }, - { - symbol: 'KC', - name: 'KMCC', - marketSymbol: 'kc', - identifier: 'eth-erc20-kc', - contractAddress: '0x0D6DD9f68d24EC1d5fE2174f3EC8DAB52B52BaF5', - decimals: 18 - }, - { - symbol: 'KEE', - name: 'CryptoKEE', - marketSymbol: 'kee', - identifier: 'eth-erc20-kee', - contractAddress: '0x72D32ac1c5E66BfC5b08806271f8eEF915545164', - decimals: 0 - }, - { - symbol: 'KEY', - name: 'SelfKey', - marketSymbol: 'key', - identifier: 'eth-erc20-key', - contractAddress: '0x4CC19356f2D37338b9802aa8E8fc58B0373296E7', - decimals: 18 - }, - { - symbol: 'KEY', - name: 'BihuKey', - marketSymbol: 'key', - identifier: 'eth-erc20-key', - contractAddress: '0x4Cd988AfBad37289BAAf53C13e98E2BD46aAEa8c', - decimals: 18 - }, - { - symbol: 'KICK', - name: 'KICK', - marketSymbol: 'kick', - identifier: 'eth-erc20-kick', - contractAddress: '0x27695E09149AdC738A978e9A678F99E4c39e9eb9', - decimals: 8 - }, - { - symbol: 'KIN', - name: 'Kin Foundation', - marketSymbol: 'kin', - identifier: 'eth-erc20-kin', - contractAddress: '0x818Fc6C2Ec5986bc6E2CBf00939d90556aB12ce5', - decimals: 18 - }, - { - symbol: 'KIND', - name: 'Kind Ads Token', - marketSymbol: 'kind', - identifier: 'eth-erc20-kind', - contractAddress: '0x4618519de4C304F3444ffa7f812dddC2971cc688', - decimals: 8 - }, - { - symbol: 'KNC', - name: 'Kyber Network', - marketSymbol: 'knc', - identifier: 'eth-erc20-knc', - contractAddress: '0xdd974D5C2e2928deA5F71b9825b8b646686BD200', - decimals: 18 - }, - { - symbol: 'KNDC', - name: 'KanadeCoin', - marketSymbol: 'kndc', - identifier: 'eth-erc20-kndc', - contractAddress: '0x8E5610ab5E39d26828167640EA29823fe1dD5843', - decimals: 8 - }, - { - symbol: 'KNT', - name: 'Kora Network Token', - marketSymbol: 'knt', - identifier: 'eth-erc20-knt', - contractAddress: '0xfF5c25D2F40B47C4a37f989DE933E26562Ef0Ac0', - decimals: 16 - }, - { - symbol: 'KPR', - name: 'KPRCoin', - marketSymbol: 'kpr', - identifier: 'eth-erc20-kpr', - contractAddress: '0xb5C33F965C8899D255c34CDD2A3efA8AbCbB3DeA', - decimals: 18 - }, - { - symbol: 'KRL', - name: 'Kryll', - marketSymbol: 'krl', - identifier: 'eth-erc20-krl', - contractAddress: '0x464eBE77c293E473B48cFe96dDCf88fcF7bFDAC0', - decimals: 18 - }, - { - symbol: 'KRTY', - name: 'KARTIY', - marketSymbol: 'krty', - identifier: 'eth-erc20-krty', - contractAddress: '0xbD4AB8b9C26c4888e2792cAC6d5793Efea9eBb20', - decimals: 18 - }, - { - symbol: 'KUE', - name: 'Kuende Token', - marketSymbol: 'kue', - identifier: 'eth-erc20-kue', - contractAddress: '0xdf1338FbAfe7aF1789151627B886781ba556eF9a', - decimals: 18 - }, - { - symbol: 'KWATT', - name: '4NEW', - marketSymbol: 'kwatt', - identifier: 'eth-erc20-kwatt', - contractAddress: '0x241bA672574A78a3A604CDd0a94429A73a84a324', - decimals: 18 - }, - { - symbol: 'KZN', - name: 'KaizenCoin', - marketSymbol: 'kzn', - identifier: 'eth-erc20-kzn', - contractAddress: '0x9541FD8B9b5FA97381783783CeBF2F5fA793C262', - decimals: 8 - }, - { - symbol: 'LA', - name: 'LATOKEN', - marketSymbol: 'la', - identifier: 'eth-erc20-la', - contractAddress: '0xE50365f5D679CB98a1dd62D6F6e58e59321BcdDf', - decimals: 18 - }, - { - symbol: 'LALA', - name: 'LALA World Token', - marketSymbol: 'lala', - identifier: 'eth-erc20-lala', - contractAddress: '0xfD107B473AB90e8Fbd89872144a3DC92C40Fa8C9', - decimals: 18 - }, - { - symbol: 'LATX', - name: 'LatiumX', - marketSymbol: 'latx', - identifier: 'eth-erc20-latx', - contractAddress: '0x2f85E502a988AF76f7ee6D83b7db8d6c0A823bf9', - decimals: 8 - }, - { - symbol: 'LBA', - name: 'Cred', - marketSymbol: 'lba', - identifier: 'eth-erc20-lba', - contractAddress: '0xfe5F141Bf94fE84bC28deD0AB966c16B17490657', - decimals: 18 - }, - { - symbol: 'LCS', - name: 'LocalCoinSwap', - marketSymbol: 'lcs', - identifier: 'eth-erc20-lcs', - contractAddress: '0xAA19961b6B858D9F18a115f25aa1D98ABc1fdBA8', - decimals: 18 - }, - { - symbol: 'LCT', - name: 'LendConnect', - marketSymbol: 'lct', - identifier: 'eth-erc20-lct', - contractAddress: '0x05C7065d644096a4E4C3FE24AF86e36dE021074b', - decimals: 18 - }, - { - symbol: 'LCT', - name: 'LiquorChain Token', - marketSymbol: 'lct', - identifier: 'eth-erc20-lct', - contractAddress: '0x4A37A91eec4C97F9090CE66d21D3B3Aadf1aE5aD', - decimals: 18 - }, - { - symbol: 'LDC', - name: 'LEADCOIN', - marketSymbol: 'ldc', - identifier: 'eth-erc20-ldc', - contractAddress: '0x5102791cA02FC3595398400BFE0e33d7B6C82267', - decimals: 18 - }, - { - symbol: 'LDX', - name: 'LondonCoin', - marketSymbol: 'ldx', - identifier: 'eth-erc20-ldx', - contractAddress: '0x9eFa0e2387E4CBA02a6E4E6594b8f4Dd209a0b93', - decimals: 0 - }, - { - symbol: 'LEDU', - name: 'Education Ecosystem', - marketSymbol: 'ledu', - identifier: 'eth-erc20-ledu', - contractAddress: '0x5b26C5D0772E5bbaC8b3182AE9a13f9BB2D03765', - decimals: 8 - }, - { - symbol: 'LEMO', - name: 'Lemo', - marketSymbol: 'lemo', - identifier: 'eth-erc20-lemo', - contractAddress: '0xd6e354F07319e2474491D8c7c712137bEe6862a2', - decimals: 0 - }, - { - symbol: 'LEMO', - name: 'Lemo', - marketSymbol: 'lemo', - identifier: 'eth-erc20-lemo', - contractAddress: '0xB5AE848EdB296C21259b7467331467d2647eEcDf', - decimals: 18 - }, - { - symbol: 'LEMO', - name: 'Lemo', - marketSymbol: 'lemo', - identifier: 'eth-erc20-lemo', - contractAddress: '0x60C24407d01782C2175D32fe7C8921ed732371D1', - decimals: 18 - }, - { - symbol: 'LEND', - name: 'EHTLend', - marketSymbol: 'lend', - identifier: 'eth-erc20-lend', - contractAddress: '0x80fB784B7eD66730e8b1DBd9820aFD29931aab03', - decimals: 18 - }, - { - symbol: 'LEV', - name: 'Leverj', - marketSymbol: 'lev', - identifier: 'eth-erc20-lev', - contractAddress: '0x0F4CA92660Efad97a9a70CB0fe969c755439772C', - decimals: 9 - }, - { - symbol: 'LFR', - name: 'LifeRun Coin', - marketSymbol: 'lfr', - identifier: 'eth-erc20-lfr', - contractAddress: '0xc798cd1c49db0E297312E4c682752668CE1dB2AD', - decimals: 5 - }, - { - symbol: 'LG', - name: 'LG', - marketSymbol: 'lg', - identifier: 'eth-erc20-lg', - contractAddress: '0xc520F3Ac303a107D8F4B08b326B6ea66A4f961cd', - decimals: 18 - }, - { - symbol: 'LGO', - name: 'LGO Exchange', - marketSymbol: 'lgo', - identifier: 'eth-erc20-lgo', - contractAddress: '0x123aB195DD38B1b40510d467a6a359b201af056f', - decimals: 8 - }, - { - symbol: 'LGR', - name: 'Logarithm', - marketSymbol: 'lgr', - identifier: 'eth-erc20-lgr', - contractAddress: '0x2eb86e8fC520E0F6Bb5D9Af08F924fe70558Ab89', - decimals: 8 - }, - { - symbol: 'LIBER', - name: 'Libereum', - marketSymbol: 'liber', - identifier: 'eth-erc20-liber', - contractAddress: '0xE6DfBF1FAcA95036B8E76e1Fb28933D025B76Cc0', - decimals: 18 - }, - { - symbol: 'LIF', - name: 'Winding Tree', - marketSymbol: 'lif', - identifier: 'eth-erc20-lif', - contractAddress: '0xEB9951021698B42e4399f9cBb6267Aa35F82D59D', - decimals: 18 - }, - { - symbol: 'LIFE', - name: 'LIFE', - marketSymbol: 'life', - identifier: 'eth-erc20-life', - contractAddress: '0xfF18DBc487b4c2E3222d115952bABfDa8BA52F5F', - decimals: 18 - }, - { - symbol: 'LIKE', - name: 'LikeCoin', - marketSymbol: 'like', - identifier: 'eth-erc20-like', - contractAddress: '0x02F61Fd266DA6E8B102D4121f5CE7b992640CF98', - decimals: 18 - }, - { - symbol: 'LINK (Chainlink)', - name: 'LINK Chainlink', - marketSymbol: 'link (chainlink)', - identifier: 'eth-erc20-link (chainlink)', - contractAddress: '0x514910771AF9Ca656af840dff83E8264EcF986CA', - decimals: 18 - }, - { - symbol: 'LINK Platform', - name: 'Link Platform', - marketSymbol: 'link platform', - identifier: 'eth-erc20-link platform', - contractAddress: '0xE2E6D4BE086c6938B53B22144855eef674281639', - decimals: 18 - }, - { - symbol: 'LIVE', - name: 'LIVE Token', - marketSymbol: 'live', - identifier: 'eth-erc20-live', - contractAddress: '0x24A77c1F17C547105E14813e517be06b0040aa76', - decimals: 18 - }, - { - symbol: 'LKY', - name: 'Linkey', - marketSymbol: 'lky', - identifier: 'eth-erc20-lky', - contractAddress: '0x49bD2DA75b1F7AF1E4dFd6b1125FEcDe59dBec58', - decimals: 18 - }, - { - symbol: 'LML', - name: 'Lisk Machine Learning', - marketSymbol: 'lml', - identifier: 'eth-erc20-lml', - contractAddress: '0x25B6325f5BB1c1E03cfbC3e53F470E1F1ca022E3', - decimals: 18 - }, - { - symbol: 'LNC', - name: 'Lancer Token', - marketSymbol: 'lnc', - identifier: 'eth-erc20-lnc', - contractAddress: '0x63e634330A20150DbB61B15648bC73855d6CCF07', - decimals: 18 - }, - { - symbol: 'LNC (Linker Coin)', - name: 'Linker Coin', - marketSymbol: 'lnc (linker coin)', - identifier: 'eth-erc20-lnc (linker coin)', - contractAddress: '0x6BEB418Fc6E1958204aC8baddCf109B8E9694966', - decimals: 18 - }, - { - symbol: 'LND', - name: 'Lendingblock', - marketSymbol: 'lnd', - identifier: 'eth-erc20-lnd', - contractAddress: '0x0947b0e6D821378805c9598291385CE7c791A6B2', - decimals: 18 - }, - { - symbol: 'LOC', - name: 'LockChain', - marketSymbol: 'loc', - identifier: 'eth-erc20-loc', - contractAddress: '0x5e3346444010135322268a4630d2ED5F8D09446c', - decimals: 18 - }, - { - symbol: 'LOCI', - name: 'LOCIcoin', - marketSymbol: 'loci', - identifier: 'eth-erc20-loci', - contractAddress: '0x9c23D67AEA7B95D80942e3836BCDF7E708A747C2', - decimals: 18 - }, - { - symbol: 'LOCUS', - name: 'Locus Chain', - marketSymbol: 'locus', - identifier: 'eth-erc20-locus', - contractAddress: '0xC64500DD7B0f1794807e67802F8Abbf5F8Ffb054', - decimals: 18 - }, - { - symbol: 'LOK', - name: 'LOK', - marketSymbol: 'lok', - identifier: 'eth-erc20-lok', - contractAddress: '0x21aE23B882A340A22282162086bC98D3E2B73018', - decimals: 18 - }, - { - symbol: 'LOOK', - name: 'LookRev', - marketSymbol: 'look', - identifier: 'eth-erc20-look', - contractAddress: '0x253C7dd074f4BaCb305387F922225A4f737C08bd', - decimals: 18 - }, - { - symbol: 'LOOM', - name: 'Loom Network', - marketSymbol: 'loom', - identifier: 'eth-erc20-loom', - contractAddress: '0xA4e8C3Ec456107eA67d3075bF9e3DF3A75823DB0', - decimals: 18 - }, - { - symbol: 'LOVE', - name: 'Love', - marketSymbol: 'love', - identifier: 'eth-erc20-love', - contractAddress: '0x5a276Aeb77bCfDAc8Ac6f31BBC7416AE1A85eEF2', - decimals: 0 - }, - { - symbol: 'LPT', - name: 'Livepeer Token', - marketSymbol: 'lpt', - identifier: 'eth-erc20-lpt', - contractAddress: '0x58b6A8A3302369DAEc383334672404Ee733aB239', - decimals: 18 - }, - { - symbol: 'LRC', - name: 'Loopring', - marketSymbol: 'lrc', - identifier: 'eth-erc20-lrc', - contractAddress: '0xEF68e7C694F40c8202821eDF525dE3782458639f', - decimals: 18 - }, - { - symbol: 'LUC', - name: 'LUCToken', - marketSymbol: 'luc', - identifier: 'eth-erc20-luc', - contractAddress: '0x5dbe296F97B23C4A6AA6183D73e574D02bA5c719', - decimals: 18 - }, - { - symbol: 'LUCK', - name: 'LUCK', - marketSymbol: 'luck', - identifier: 'eth-erc20-luck', - contractAddress: '0xFB12e3CcA983B9f59D90912Fd17F8D745A8B2953', - decimals: 0 - }, - { - symbol: 'LUM', - name: 'Lumino Coin', - marketSymbol: 'lum', - identifier: 'eth-erc20-lum', - contractAddress: '0xA89b5934863447f6E4Fc53B315a93e873bdA69a3', - decimals: 18 - }, - { - symbol: 'LUN', - name: 'Lunyr', - marketSymbol: 'lun', - identifier: 'eth-erc20-lun', - contractAddress: '0xfa05A73FfE78ef8f1a739473e462c54bae6567D9', - decimals: 18 - }, - { - symbol: 'LYM', - name: 'Lympo', - marketSymbol: 'lym', - identifier: 'eth-erc20-lym', - contractAddress: '0x57aD67aCf9bF015E4820Fbd66EA1A21BED8852eC', - decimals: 18 - }, - { - symbol: 'LYS', - name: 'Lightyears', - marketSymbol: 'lys', - identifier: 'eth-erc20-lys', - contractAddress: '0xdD41fBd1Ae95C5D9B198174A28e04Be6b3d1aa27', - decimals: 8 - }, - { - symbol: 'M-ETH', - name: 'M-ETH', - marketSymbol: 'm-eth', - identifier: 'eth-erc20-m-eth', - contractAddress: '0x3f4B726668da46f5e0E75aA5D478ACEc9f38210F', - decimals: 18 - }, - { - symbol: 'MAD', - name: 'MAD', - marketSymbol: 'mad', - identifier: 'eth-erc20-mad', - contractAddress: '0x5B09A0371C1DA44A8E24D36Bf5DEb1141a84d875', - decimals: 18 - }, - { - symbol: 'MAN', - name: 'Matrix AI Network', - marketSymbol: 'man', - identifier: 'eth-erc20-man', - contractAddress: '0xe25bCec5D3801cE3a794079BF94adF1B8cCD802D', - decimals: 18 - }, - { - symbol: 'MANA', - name: 'Decentraland MANA', - marketSymbol: 'mana', - identifier: 'eth-erc20-mana', - contractAddress: '0x0F5D2fB29fb7d3CFeE444a200298f468908cC942', - decimals: 18 - }, - { - symbol: 'MART', - name: 'Martcoin', - marketSymbol: 'mart', - identifier: 'eth-erc20-mart', - contractAddress: '0xfdcc07Ab60660de533b5Ad26e1457b565a9D59Bd', - decimals: 18 - }, - { - symbol: 'MAS', - name: 'MIDAS PROTOCOL', - marketSymbol: 'mas', - identifier: 'eth-erc20-mas', - contractAddress: '0x23Ccc43365D9dD3882eab88F43d515208f832430', - decimals: 18 - }, - { - symbol: 'MBRS', - name: 'Embers', - marketSymbol: 'mbrs', - identifier: 'eth-erc20-mbrs', - contractAddress: '0x386467F1f3ddbE832448650418311a479EECFC57', - decimals: 0 - }, - { - symbol: 'MCAP', - name: 'MCAP', - marketSymbol: 'mcap', - identifier: 'eth-erc20-mcap', - contractAddress: '0x93E682107d1E9defB0b5ee701C71707a4B2E46Bc', - decimals: 8 - }, - { - symbol: 'MCI', - name: 'Musiconomi', - marketSymbol: 'mci', - identifier: 'eth-erc20-mci', - contractAddress: '0x138A8752093F4f9a79AaeDF48d4B9248fab93c9C', - decimals: 18 - }, - { - symbol: 'MCO', - name: 'Crypto.com', - marketSymbol: 'mco', - identifier: 'eth-erc20-mco', - contractAddress: '0xB63B606Ac810a52cCa15e44bB630fd42D8d1d83d', - decimals: 8 - }, - { - symbol: 'MDA', - name: 'Moeda Loyalty Points', - marketSymbol: 'mda', - identifier: 'eth-erc20-mda', - contractAddress: '0x51DB5Ad35C671a87207d88fC11d593AC0C8415bd', - decimals: 18 - }, - { - symbol: 'MDS', - name: 'MediShares', - marketSymbol: 'mds', - identifier: 'eth-erc20-mds', - contractAddress: '0x66186008C1050627F979d464eABb258860563dbE', - decimals: 18 - }, - { - symbol: 'MDT', - name: 'Measurable Data Token', - marketSymbol: 'mdt', - identifier: 'eth-erc20-mdt', - contractAddress: '0x814e0908b12A99FeCf5BC101bB5d0b8B5cDf7d26', - decimals: 18 - }, - { - symbol: 'MEDX', - name: 'MediBloc [ERC20]', - marketSymbol: 'medx', - identifier: 'eth-erc20-medx', - contractAddress: '0xfd1e80508F243E64CE234eA88A5Fd2827c71D4b7', - decimals: 8 - }, - { - symbol: 'MESH', - name: 'Meshbox', - marketSymbol: 'mesh', - identifier: 'eth-erc20-mesh', - contractAddress: '0x01F2AcF2914860331C1Cb1a9AcecDa7475e06Af8', - decimals: 18 - }, - { - symbol: 'MESH', - name: 'BlockMesh', - marketSymbol: 'mesh', - identifier: 'eth-erc20-mesh', - contractAddress: '0xF03045a4C8077e38f3B8e2Ed33b8aEE69edF869F', - decimals: 18 - }, - { - symbol: 'MEST', - name: 'Monaco Estate', - marketSymbol: 'mest', - identifier: 'eth-erc20-mest', - contractAddress: '0x5B8D43FfdE4a2982B9A5387cDF21D54Ead64Ac8d', - decimals: 18 - }, - { - symbol: 'MET', - name: 'Metronome', - marketSymbol: 'met', - identifier: 'eth-erc20-met', - contractAddress: '0xa3d58c4E56fedCae3a7c43A725aeE9A71F0ece4e', - decimals: 18 - }, - { - symbol: 'METM', - name: 'MetaMorph', - marketSymbol: 'metm', - identifier: 'eth-erc20-metm', - contractAddress: '0xFEF3884b603C33EF8eD4183346E093A173C94da6', - decimals: 18 - }, - { - symbol: 'MFG', - name: 'SyncFab Smart Manufacturing Blockchain', - marketSymbol: 'mfg', - identifier: 'eth-erc20-mfg', - contractAddress: '0x6710c63432A2De02954fc0f851db07146a6c0312', - decimals: 18 - }, - { - symbol: 'MFT', - name: 'Mainframe Token', - marketSymbol: 'mft', - identifier: 'eth-erc20-mft', - contractAddress: '0xDF2C7238198Ad8B389666574f2d8bc411A4b7428', - decimals: 18 - }, - { - symbol: 'MFTU', - name: 'Mainstream For The Underground', - marketSymbol: 'mftu', - identifier: 'eth-erc20-mftu', - contractAddress: '0x05D412CE18F24040bB3Fa45CF2C69e506586D8e8', - decimals: 18 - }, - { - symbol: 'MGO', - name: 'MobileGo', - marketSymbol: 'mgo', - identifier: 'eth-erc20-mgo', - contractAddress: '0x40395044Ac3c0C57051906dA938B54BD6557F212', - decimals: 8 - }, - { - symbol: 'MIC', - name: 'Mindexcoin', - marketSymbol: 'mic', - identifier: 'eth-erc20-mic', - contractAddress: '0x3A1237D38D0Fb94513f85D61679cAd7F38507242', - decimals: 18 - }, - { - symbol: 'MIT', - name: 'MIT', - marketSymbol: 'mit', - identifier: 'eth-erc20-mit', - contractAddress: '0xe23cd160761f63FC3a1cF78Aa034b6cdF97d3E0C', - decimals: 18 - }, - { - symbol: 'MIT (Mychatcoin)', - name: 'Mychatcoin', - marketSymbol: 'mit (mychatcoin)', - identifier: 'eth-erc20-mit (mychatcoin)', - contractAddress: '0xAd8DD4c725dE1D31b9E8F8D146089e9DC6882093', - decimals: 6 - }, - { - symbol: 'MITX', - name: 'Morpheus Infrastructure Token', - marketSymbol: 'mitx', - identifier: 'eth-erc20-mitx', - contractAddress: '0x4a527d8fc13C5203AB24BA0944F4Cb14658D1Db6', - decimals: 18 - }, - { - symbol: 'MKR', - name: 'MakerDAO', - marketSymbol: 'mkr', - identifier: 'eth-erc20-mkr', - contractAddress: '0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2', - decimals: 18 - }, - { - symbol: 'MKT', - name: 'Mikado', - marketSymbol: 'mkt', - identifier: 'eth-erc20-mkt', - contractAddress: '0x7939882b54fcf0bCAe6b53dEc39Ad6e806176442', - decimals: 8 - }, - { - symbol: 'MLN (new)', - name: 'Melonport', - marketSymbol: 'mln (new)', - identifier: 'eth-erc20-mln (new)', - contractAddress: '0xec67005c4E498Ec7f55E092bd1d35cbC47C91892', - decimals: 18 - }, - { - symbol: 'MLN (old)', - name: 'Melonport', - marketSymbol: 'mln (old)', - identifier: 'eth-erc20-mln (old)', - contractAddress: '0xBEB9eF514a379B997e0798FDcC901Ee474B6D9A1', - decimals: 18 - }, - { - symbol: 'MNE', - name: 'Minereum', - marketSymbol: 'mne', - identifier: 'eth-erc20-mne', - contractAddress: '0x1a95B271B0535D15fa49932Daba31BA612b52946', - decimals: 8 - }, - { - symbol: 'MNT', - name: 'Media Network Token', - marketSymbol: 'mnt', - identifier: 'eth-erc20-mnt', - contractAddress: '0xA9877b1e05D035899131DBd1e403825166D09f92', - decimals: 18 - }, - { - symbol: 'MNTP', - name: 'Goldmint MNT Prelaunch Token', - marketSymbol: 'mntp', - identifier: 'eth-erc20-mntp', - contractAddress: '0x83cee9e086A77e492eE0bB93C2B0437aD6fdECCc', - decimals: 18 - }, - { - symbol: 'MOC', - name: 'Moss Coin', - marketSymbol: 'moc', - identifier: 'eth-erc20-moc', - contractAddress: '0x865ec58b06bF6305B886793AA20A2da31D034E68', - decimals: 18 - }, - { - symbol: 'MOD', - name: 'Modum', - marketSymbol: 'mod', - identifier: 'eth-erc20-mod', - contractAddress: '0x957c30aB0426e0C93CD8241E2c60392d08c6aC8e', - decimals: 0 - }, - { - symbol: 'MORE', - name: 'More Coin', - marketSymbol: 'more', - identifier: 'eth-erc20-more', - contractAddress: '0x59061b6f26BB4A9cE5828A19d35CFD5A4B80F056', - decimals: 8 - }, - { - symbol: 'MORE', - name: 'Mithril Ore', - marketSymbol: 'more', - identifier: 'eth-erc20-more', - contractAddress: '0x501262281B2Ba043e2fbf14904980689CDDB0C78', - decimals: 2 - }, - { - symbol: 'MOT', - name: 'Olympus Labs', - marketSymbol: 'mot', - identifier: 'eth-erc20-mot', - contractAddress: '0x263c618480DBe35C300D8d5EcDA19bbB986AcaeD', - decimals: 18 - }, - { - symbol: 'MOZO', - name: 'Mozo Token', - marketSymbol: 'mozo', - identifier: 'eth-erc20-mozo', - contractAddress: '0x44bf22949F9cc84b61B9328a9d885d1b5C806b41', - decimals: 2 - }, - { - symbol: 'MRK', - name: 'MARK.SPACE', - marketSymbol: 'mrk', - identifier: 'eth-erc20-mrk', - contractAddress: '0xf453B5B9d4E0B5c62ffB256BB2378cc2BC8e8a89', - decimals: 8 - }, - { - symbol: 'MRL', - name: 'Marcelo', - marketSymbol: 'mrl', - identifier: 'eth-erc20-mrl', - contractAddress: '0x82125AFe01819Dff1535D0D6276d57045291B6c0', - decimals: 18 - }, - { - symbol: 'MRP', - name: 'MoneyRebel Token', - marketSymbol: 'mrp', - identifier: 'eth-erc20-mrp', - contractAddress: '0x21f0F0fD3141Ee9E11B3d7f13a1028CD515f459c', - decimals: 18 - }, - { - symbol: 'MRV', - name: 'MRV', - marketSymbol: 'mrv', - identifier: 'eth-erc20-mrv', - contractAddress: '0xAB6CF87a50F17d7F5E1FEaf81B6fE9FfBe8EBF84', - decimals: 18 - }, - { - symbol: 'MSP', - name: 'Mothership', - marketSymbol: 'msp', - identifier: 'eth-erc20-msp', - contractAddress: '0x68AA3F232dA9bdC2343465545794ef3eEa5209BD', - decimals: 18 - }, - { - symbol: 'MTC', - name: 'MTC Mesh Network', - marketSymbol: 'mtc', - identifier: 'eth-erc20-mtc', - contractAddress: '0xdfdc0D82d96F8fd40ca0CFB4A288955bECEc2088', - decimals: 18 - }, - { - symbol: 'MTC', - name: 'Medical Token Currency', - marketSymbol: 'mtc', - identifier: 'eth-erc20-mtc', - contractAddress: '0x905E337c6c8645263D3521205Aa37bf4d034e745', - decimals: 18 - }, - { - symbol: 'MTH', - name: 'Monetha', - marketSymbol: 'mth', - identifier: 'eth-erc20-mth', - contractAddress: '0xaF4DcE16Da2877f8c9e00544c93B62Ac40631F16', - decimals: 5 - }, - { - symbol: 'MTL', - name: 'Metal', - marketSymbol: 'mtl', - identifier: 'eth-erc20-mtl', - contractAddress: '0xF433089366899D83a9f26A773D59ec7eCF30355e', - decimals: 8 - }, - { - symbol: 'MTN', - name: 'MedToken', - marketSymbol: 'mtn', - identifier: 'eth-erc20-mtn', - contractAddress: '0x41dBECc1cdC5517C6f76f6a6E836aDbEe2754DE3', - decimals: 18 - }, - { - symbol: 'MTR', - name: 'Mitrav', - marketSymbol: 'mtr', - identifier: 'eth-erc20-mtr', - contractAddress: '0x7FC408011165760eE31bE2BF20dAf450356692Af', - decimals: 8 - }, - { - symbol: 'MTRc', - name: 'MTRCToken', - marketSymbol: 'mtrc', - identifier: 'eth-erc20-mtrc', - contractAddress: '0x1e49fF77c355A3e38D6651ce8404AF0E48c5395f', - decimals: 18 - }, - { - symbol: 'MTX', - name: 'Matryx', - marketSymbol: 'mtx', - identifier: 'eth-erc20-mtx', - contractAddress: '0x0AF44e2784637218dD1D32A322D44e603A8f0c6A', - decimals: 18 - }, - { - symbol: 'MUXE', - name: 'MUXE', - marketSymbol: 'muxe', - identifier: 'eth-erc20-muxe', - contractAddress: '0x515669d308f887Fd83a471C7764F5d084886D34D', - decimals: 18 - }, - { - symbol: 'MVL', - name: 'Mass Vehicle Ledger Token', - marketSymbol: 'mvl', - identifier: 'eth-erc20-mvl', - contractAddress: '0xA849EaaE994fb86Afa73382e9Bd88c2B6b18Dc71', - decimals: 18 - }, - { - symbol: 'MVP', - name: 'Merculet', - marketSymbol: 'mvp', - identifier: 'eth-erc20-mvp', - contractAddress: '0x8a77e40936BbC27e80E9a3F526368C967869c86D', - decimals: 18 - }, - { - symbol: 'MWAT', - name: 'RED MWAT', - marketSymbol: 'mwat', - identifier: 'eth-erc20-mwat', - contractAddress: '0x6425c6BE902d692AE2db752B3c268AFAdb099D3b', - decimals: 18 - }, - { - symbol: 'MYD', - name: 'MYD', - marketSymbol: 'myd', - identifier: 'eth-erc20-myd', - contractAddress: '0xf7e983781609012307f2514f63D526D83D24F466', - decimals: 16 - }, - { - symbol: 'MYST', - name: 'Mysterium', - marketSymbol: 'myst', - identifier: 'eth-erc20-myst', - contractAddress: '0xa645264C5603E96c3b0B078cdab68733794B0A71', - decimals: 8 - }, - { - symbol: 'NAC', - name: 'Nami ICO', - marketSymbol: 'nac', - identifier: 'eth-erc20-nac', - contractAddress: '0x8d80de8A78198396329dfA769aD54d24bF90E7aa', - decimals: 18 - }, - { - symbol: 'NANJ', - name: 'NANJCOIN', - marketSymbol: 'nanj', - identifier: 'eth-erc20-nanj', - contractAddress: '0xFFE02ee4C69eDf1b340fCaD64fbd6b37a7b9e265', - decimals: 8 - }, - { - symbol: 'NAS', - name: 'Nebula', - marketSymbol: 'nas', - identifier: 'eth-erc20-nas', - contractAddress: '0x5d65D971895Edc438f465c17DB6992698a52318D', - decimals: 18 - }, - { - symbol: 'NAVI', - name: 'NaviToken', - marketSymbol: 'navi', - identifier: 'eth-erc20-navi', - contractAddress: '0x588047365dF5BA589F923604AAC23d673555c623', - decimals: 18 - }, - { - symbol: 'NBAI', - name: 'NebulaAiToken', - marketSymbol: 'nbai', - identifier: 'eth-erc20-nbai', - contractAddress: '0x17f8aFB63DfcDcC90ebE6e84F060Cc306A98257D', - decimals: 18 - }, - { - symbol: 'NBC', - name: 'Niobium Coin', - marketSymbol: 'nbc', - identifier: 'eth-erc20-nbc', - contractAddress: '0x9F195617fA8fbAD9540C5D113A99A0a0172aaEDC', - decimals: 18 - }, - { - symbol: 'NCASH', - name: 'Nucleus Vision', - marketSymbol: 'ncash', - identifier: 'eth-erc20-ncash', - contractAddress: '0x809826cceAb68c387726af962713b64Cb5Cb3CCA', - decimals: 18 - }, - { - symbol: 'NCC', - name: 'NeedsCoin', - marketSymbol: 'ncc', - identifier: 'eth-erc20-ncc', - contractAddress: '0x9344b383b1D59b5ce3468B234DAB43C7190ba735', - decimals: 18 - }, - { - symbol: 'NCC', - name: 'NeuroChain', - marketSymbol: 'ncc', - identifier: 'eth-erc20-ncc', - contractAddress: '0x5d48F293BaED247A2D0189058bA37aa238bD4725', - decimals: 18 - }, - { - symbol: 'NCT', - name: 'Nectar', - marketSymbol: 'nct', - identifier: 'eth-erc20-nct', - contractAddress: '0x9E46A38F5DaaBe8683E10793b06749EEF7D733d1', - decimals: 18 - }, - { - symbol: 'NDC', - name: 'Neverdie', - marketSymbol: 'ndc', - identifier: 'eth-erc20-ndc', - contractAddress: '0xA54ddC7B3CcE7FC8b1E3Fa0256D0DB80D2c10970', - decimals: 18 - }, - { - symbol: 'NDX', - name: 'nDEX', - marketSymbol: 'ndx', - identifier: 'eth-erc20-ndx', - contractAddress: '0x1966d718A565566e8E202792658D7b5Ff4ECe469', - decimals: 18 - }, - { - symbol: 'NEC', - name: 'Ethfinex Nectar Token', - marketSymbol: 'nec', - identifier: 'eth-erc20-nec', - contractAddress: '0xCc80C051057B774cD75067Dc48f8987C4Eb97A5e', - decimals: 18 - }, - { - symbol: 'NEEO', - name: 'NEEO', - marketSymbol: 'neeo', - identifier: 'eth-erc20-neeo', - contractAddress: '0xd8446236FA95b9b5f9fd0f8E7Df1a944823c683d', - decimals: 18 - }, - { - symbol: 'NET', - name: 'NIMIQ', - marketSymbol: 'net', - identifier: 'eth-erc20-net', - contractAddress: '0xcfb98637bcae43C13323EAa1731cED2B716962fD', - decimals: 18 - }, - { - symbol: 'NEU', - name: 'NEU Fund', - marketSymbol: 'neu', - identifier: 'eth-erc20-neu', - contractAddress: '0xA823E6722006afe99E91c30FF5295052fe6b8E32', - decimals: 18 - }, - { - symbol: 'NEWB', - name: 'Newbium', - marketSymbol: 'newb', - identifier: 'eth-erc20-newb', - contractAddress: '0x814964b1bceAf24e26296D031EaDf134a2Ca4105', - decimals: 0 - }, - { - symbol: 'NEXO', - name: 'Nexo', - marketSymbol: 'nexo', - identifier: 'eth-erc20-nexo', - contractAddress: '0xB62132e35a6c13ee1EE0f84dC5d40bad8d815206', - decimals: 18 - }, - { - symbol: 'NGC', - name: 'NAGA Coin', - marketSymbol: 'ngc', - identifier: 'eth-erc20-ngc', - contractAddress: '0x72dD4b6bd852A3AA172Be4d6C5a6dbEc588cf131', - decimals: 18 - }, - { - symbol: 'NIMFA', - name: 'Ninfa Money', - marketSymbol: 'nimfa', - identifier: 'eth-erc20-nimfa', - contractAddress: '0xe26517A9967299453d3F1B48Aa005E6127e67210', - decimals: 18 - }, - { - symbol: 'NIO', - name: 'Autonio', - marketSymbol: 'nio', - identifier: 'eth-erc20-nio', - contractAddress: '0x5554e04e76533E1d14c52f05beEF6c9d329E1E30', - decimals: 0 - }, - { - symbol: 'NMR', - name: 'Numerai', - marketSymbol: 'nmr', - identifier: 'eth-erc20-nmr', - contractAddress: '0x1776e1F26f98b1A5dF9cD347953a26dd3Cb46671', - decimals: 18 - }, - { - symbol: 'NOAH', - name: 'Noah Coin', - marketSymbol: 'noah', - identifier: 'eth-erc20-noah', - contractAddress: '0x58a4884182d9E835597f405e5F258290E46ae7C2', - decimals: 18 - }, - { - symbol: 'NOBS', - name: 'No BS Crypto', - marketSymbol: 'nobs', - identifier: 'eth-erc20-nobs', - contractAddress: '0xF4FaEa455575354d2699BC209B0a65CA99F69982', - decimals: 18 - }, - { - symbol: 'NONE', - name: 'None', - marketSymbol: 'none', - identifier: 'eth-erc20-none', - contractAddress: '0x643B6870beabee941B9260a0A878bcF4A61Fb0f1', - decimals: 0 - }, - { - symbol: 'NOX', - name: 'Nitro', - marketSymbol: 'nox', - identifier: 'eth-erc20-nox', - contractAddress: '0xeC46f8207D766012454c408De210BCBc2243E71c', - decimals: 18 - }, - { - symbol: 'NPER', - name: 'NPER', - marketSymbol: 'nper', - identifier: 'eth-erc20-nper', - contractAddress: '0x4cE6B362Bc77A24966Dda9078f9cEF81b3B886a7', - decimals: 18 - }, - { - symbol: 'NPX', - name: 'NaPoleonX', - marketSymbol: 'npx', - identifier: 'eth-erc20-npx', - contractAddress: '0x28b5E12CcE51f15594B0b91d5b5AdaA70F684a02', - decimals: 2 - }, - { - symbol: 'NPXS', - name: 'Pundi X Token', - marketSymbol: 'npxs', - identifier: 'eth-erc20-npxs', - contractAddress: '0xA15C7Ebe1f07CaF6bFF097D8a589fb8AC49Ae5B3', - decimals: 18 - }, - { - symbol: 'NTK', - name: 'Neurotoken', - marketSymbol: 'ntk', - identifier: 'eth-erc20-ntk', - contractAddress: '0x69BEaB403438253f13b6e92Db91F7FB849258263', - decimals: 18 - }, - { - symbol: 'NTK', - name: 'NetKoin', - marketSymbol: 'ntk', - identifier: 'eth-erc20-ntk', - contractAddress: '0x5D4d57cd06Fa7fe99e26fdc481b468f77f05073C', - decimals: 18 - }, - { - symbol: 'NTO', - name: 'Fujinto', - marketSymbol: 'nto', - identifier: 'eth-erc20-nto', - contractAddress: '0x8A99ED8a1b204903Ee46e733f2c1286F6d20b177', - decimals: 18 - }, - { - symbol: 'NTWK', - name: 'Network', - marketSymbol: 'ntwk', - identifier: 'eth-erc20-ntwk', - contractAddress: '0x2233799Ee2683d75dfefAcbCd2A26c78D34b470d', - decimals: 18 - }, - { - symbol: 'NUG', - name: 'Nuggets Token', - marketSymbol: 'nug', - identifier: 'eth-erc20-nug', - contractAddress: '0x245ef47D4d0505ECF3Ac463F4d81f41ADE8f1fd1', - decimals: 18 - }, - { - symbol: 'NULS', - name: 'NULS', - marketSymbol: 'nuls', - identifier: 'eth-erc20-nuls', - contractAddress: '0xB91318F35Bdb262E9423Bc7c7c2A3A93DD93C92C', - decimals: 18 - }, - { - symbol: 'NxC', - name: 'Nexium', - marketSymbol: 'nxc', - identifier: 'eth-erc20-nxc', - contractAddress: '0x45e42D659D9f9466cD5DF622506033145a9b89Bc', - decimals: 3 - }, - { - symbol: 'NXX', - name: 'NXX', - marketSymbol: 'nxx', - identifier: 'eth-erc20-nxx', - contractAddress: '0x7627de4B93263a6a7570b8dAfa64bae812e5c394', - decimals: 8 - }, - { - symbol: 'NXX OLD', - name: 'NXX OLD', - marketSymbol: 'nxx old', - identifier: 'eth-erc20-nxx old', - contractAddress: '0x5c6183d10A00CD747a6Dbb5F658aD514383e9419', - decimals: 8 - }, - { - symbol: 'OAK', - name: 'OAK', - marketSymbol: 'oak', - identifier: 'eth-erc20-oak', - contractAddress: '0x5e888B83B7287EED4fB7DA7b7d0A0D4c735d94b3', - decimals: 18 - }, - { - symbol: 'OAX', - name: 'OAX', - marketSymbol: 'oax', - identifier: 'eth-erc20-oax', - contractAddress: '0x701C244b988a513c945973dEFA05de933b23Fe1D', - decimals: 18 - }, - { - symbol: 'OCC', - name: 'Original Crypto Coin', - marketSymbol: 'occ', - identifier: 'eth-erc20-occ', - contractAddress: '0x0235fE624e044A05eeD7A43E16E3083bc8A4287A', - decimals: 18 - }, - { - symbol: 'OCN', - name: 'Odyssey', - marketSymbol: 'ocn', - identifier: 'eth-erc20-ocn', - contractAddress: '0x4092678e4E78230F46A1534C0fbc8fA39780892B', - decimals: 18 - }, - { - symbol: 'ODE', - name: 'ODEM Token', - marketSymbol: 'ode', - identifier: 'eth-erc20-ode', - contractAddress: '0xbf52F2ab39e26E0951d2a02b49B7702aBe30406a', - decimals: 18 - }, - { - symbol: 'OHNI', - name: 'OHNI', - marketSymbol: 'ohni', - identifier: 'eth-erc20-ohni', - contractAddress: '0x7F2176cEB16dcb648dc924eff617c3dC2BEfd30d', - decimals: 0 - }, - { - symbol: 'OHNI', - name: 'Ohni', - marketSymbol: 'ohni', - identifier: 'eth-erc20-ohni', - contractAddress: '0x6f539a9456A5BCb6334A1A41207c3788f5825207', - decimals: 18 - }, - { - symbol: 'OJX', - name: 'Ojooo Coin', - marketSymbol: 'ojx', - identifier: 'eth-erc20-ojx', - contractAddress: '0xBeef546ac8a4e0a80DC1E2d696968Ef54138f1d4', - decimals: 18 - }, - { - symbol: 'OLD_MKR', - name: 'MakerDAO', - marketSymbol: 'old_mkr', - identifier: 'eth-erc20-old_mkr', - contractAddress: '0xC66eA802717bFb9833400264Dd12c2bCeAa34a6d', - decimals: 18 - }, - { - symbol: 'OLE', - name: 'Olive', - marketSymbol: 'ole', - identifier: 'eth-erc20-ole', - contractAddress: '0x9d9223436dDD466FC247e9dbbD20207e640fEf58', - decimals: 18 - }, - { - symbol: 'OLT', - name: 'OneLedger Token', - marketSymbol: 'olt', - identifier: 'eth-erc20-olt', - contractAddress: '0x64A60493D888728Cf42616e034a0dfEAe38EFCF0', - decimals: 18 - }, - { - symbol: 'OMG', - name: 'OmiseGO', - marketSymbol: 'omg', - identifier: 'eth-erc20-omg', - contractAddress: '0xd26114cd6EE289AccF82350c8d8487fedB8A0C07', - decimals: 18 - }, - { - symbol: 'OMT', - name: 'OTCMAKER Token', - marketSymbol: 'omt', - identifier: 'eth-erc20-omt', - contractAddress: '0x047187e53477be70DBe8Ea5B799318f2e165052F', - decimals: 18 - }, - { - symbol: 'OMX', - name: 'Shivom', - marketSymbol: 'omx', - identifier: 'eth-erc20-omx', - contractAddress: '0xB5DBC6D3cf380079dF3b27135664b6BCF45D1869', - decimals: 8 - }, - { - symbol: 'ONE', - name: 'Menlo One', - marketSymbol: 'one', - identifier: 'eth-erc20-one', - contractAddress: '0x4D807509aECe24C0fa5A102b6a3B059Ec6E14392', - decimals: 18 - }, - { - symbol: 'ONEK', - name: 'One K Token', - marketSymbol: 'onek', - identifier: 'eth-erc20-onek', - contractAddress: '0xB23be73573bC7E03DB6e5dfc62405368716d28a8', - decimals: 18 - }, - { - symbol: 'ONG', - name: 'SoMee.Social', - marketSymbol: 'ong', - identifier: 'eth-erc20-ong', - contractAddress: '0xd341d1680Eeee3255b8C4c75bCCE7EB57f144dAe', - decimals: 18 - }, - { - symbol: 'ONL', - name: 'On.Live', - marketSymbol: 'onl', - identifier: 'eth-erc20-onl', - contractAddress: '0x6863bE0e7CF7ce860A574760e9020D519a8bDC47', - decimals: 18 - }, - { - symbol: 'OPEN', - name: 'OPEN Platform', - marketSymbol: 'open', - identifier: 'eth-erc20-open', - contractAddress: '0x69c4BB240cF05D51eeab6985Bab35527d04a8C64', - decimals: 8 - }, - { - symbol: 'OPEN', - name: 'OPEN', - marketSymbol: 'open', - identifier: 'eth-erc20-open', - contractAddress: '0xe9dE1C630753A15d7021Cc563429c21d4887506F', - decimals: 8 - }, - { - symbol: 'OPT', - name: 'Opus Foundation', - marketSymbol: 'opt', - identifier: 'eth-erc20-opt', - contractAddress: '0x4355fC160f74328f9b383dF2EC589bB3dFd82Ba0', - decimals: 18 - }, - { - symbol: 'OPTI', - name: 'OptiToken', - marketSymbol: 'opti', - identifier: 'eth-erc20-opti', - contractAddress: '0x832904863978b94802123106e6eB491BDF0Df928', - decimals: 18 - }, - { - symbol: 'ORBS', - name: 'Orbs', - marketSymbol: 'orbs', - identifier: 'eth-erc20-orbs', - contractAddress: '0xff56Cc6b1E6dEd347aA0B7676C85AB0B3D08B0FA', - decimals: 18 - }, - { - symbol: 'ORCA', - name: 'ORCA Token', - marketSymbol: 'orca', - identifier: 'eth-erc20-orca', - contractAddress: '0x6F59e0461Ae5E2799F1fB3847f05a63B16d0DbF8', - decimals: 18 - }, - { - symbol: 'ORI', - name: 'Origami', - marketSymbol: 'ori', - identifier: 'eth-erc20-ori', - contractAddress: '0xd2Fa8f92Ea72AbB35dBD6DECa57173d22db2BA49', - decimals: 18 - }, - { - symbol: 'ORME', - name: 'Ormeus Coin', - marketSymbol: 'orme', - identifier: 'eth-erc20-orme', - contractAddress: '0xc96DF921009B790dfFcA412375251ed1A2b75c60', - decimals: 8 - }, - { - symbol: 'ORME', - name: 'Ormeus Coin', - marketSymbol: 'orme', - identifier: 'eth-erc20-orme', - contractAddress: '0x516E5436bAfdc11083654DE7Bb9b95382d08d5DE', - decimals: 8 - }, - { - symbol: 'ORS', - name: 'Origin Sport', - marketSymbol: 'ors', - identifier: 'eth-erc20-ors', - contractAddress: '0xEB9A4B185816C354dB92DB09cC3B50bE60b901b6', - decimals: 18 - }, - { - symbol: 'OST', - name: "Simple Token 'OST'", - marketSymbol: 'ost', - identifier: 'eth-erc20-ost', - contractAddress: '0x2C4e8f2D746113d0696cE89B35F0d8bF88E0AEcA', - decimals: 18 - }, - { - symbol: 'OTN', - name: 'Open Trading Network', - marketSymbol: 'otn', - identifier: 'eth-erc20-otn', - contractAddress: '0x881Ef48211982D01E2CB7092C915E647Cd40D85C', - decimals: 18 - }, - { - symbol: 'OWN', - name: 'OWNDATA', - marketSymbol: 'own', - identifier: 'eth-erc20-own', - contractAddress: '0x170b275CEd089FffAEBFe927F445a350ED9160DC', - decimals: 8 - }, - { - symbol: 'Ox Fina', - name: 'Ox Fina', - marketSymbol: 'ox fina', - identifier: 'eth-erc20-ox fina', - contractAddress: '0x65A15014964F2102Ff58647e16a16a6B9E14bCF6', - decimals: 3 - }, - { - symbol: 'PAI', - name: 'PCHAIN', - marketSymbol: 'pai', - identifier: 'eth-erc20-pai', - contractAddress: '0xB9bb08AB7E9Fa0A1356bd4A39eC0ca267E03b0b3', - decimals: 18 - }, - { - symbol: 'PAL', - name: 'PolicyPal Network', - marketSymbol: 'pal', - identifier: 'eth-erc20-pal', - contractAddress: '0xfeDAE5642668f8636A11987Ff386bfd215F942EE', - decimals: 18 - }, - { - symbol: 'PARETO', - name: 'PARETO', - marketSymbol: 'pareto', - identifier: 'eth-erc20-pareto', - contractAddress: '0xea5f88E54d982Cbb0c441cde4E79bC305e5b43Bc', - decimals: 18 - }, - { - symbol: 'PASS', - name: 'Blockpass', - marketSymbol: 'pass', - identifier: 'eth-erc20-pass', - contractAddress: '0xeE4458e052B533b1aABD493B5f8c4d85D7B263Dc', - decimals: 6 - }, - { - symbol: 'PASS', - name: 'PASS Token', - marketSymbol: 'pass', - identifier: 'eth-erc20-pass', - contractAddress: '0x77761e63C05aeE6648FDaeaa9B94248351AF9bCd', - decimals: 18 - }, - { - symbol: 'PAT', - name: 'Patron', - marketSymbol: 'pat', - identifier: 'eth-erc20-pat', - contractAddress: '0xF3b3Cad094B89392fcE5faFD40bC03b80F2Bc624', - decimals: 18 - }, - { - symbol: 'PATENTS', - name: 'PATENTS', - marketSymbol: 'patents', - identifier: 'eth-erc20-patents', - contractAddress: '0x694404595e3075A942397F466AAcD462FF1a7BD0', - decimals: 18 - }, - { - symbol: 'PATH', - name: 'PATH', - marketSymbol: 'path', - identifier: 'eth-erc20-path', - contractAddress: '0xF813F3902bBc00A6DCe378634d3B79D84F9803d7', - decimals: 18 - }, - { - symbol: 'PAX', - name: 'Paxos Standard (PAX)', - marketSymbol: 'pax', - identifier: 'eth-erc20-pax', - contractAddress: '0x8E870D67F660D95d5be530380D0eC0bd388289E1', - decimals: 18 - }, - { - symbol: 'PAY', - name: 'TenX', - marketSymbol: 'pay', - identifier: 'eth-erc20-pay', - contractAddress: '0xB97048628DB6B661D4C2aA833e95Dbe1A905B280', - decimals: 18 - }, - { - symbol: 'PBL', - name: 'PBL', - marketSymbol: 'pbl', - identifier: 'eth-erc20-pbl', - contractAddress: '0x55648De19836338549130B1af587F16beA46F66B', - decimals: 18 - }, - { - symbol: 'PBT', - name: 'Primalbase Token (PBT)', - marketSymbol: 'pbt', - identifier: 'eth-erc20-pbt', - contractAddress: '0xF4c07b1865bC326A3c01339492Ca7538FD038Cc0', - decimals: 4 - }, - { - symbol: 'PCH', - name: 'PITCH', - marketSymbol: 'pch', - identifier: 'eth-erc20-pch', - contractAddress: '0xfcAC7A7515e9A9d7619fA77A1fa738111f66727e', - decimals: 18 - }, - { - symbol: 'PCH', - name: 'POPCHAIN', - marketSymbol: 'pch', - identifier: 'eth-erc20-pch', - contractAddress: '0xE3F4b4A5d91e5cB9435B947F090A319737036312', - decimals: 18 - }, - { - symbol: 'PCL', - name: 'Peculium', - marketSymbol: 'pcl', - identifier: 'eth-erc20-pcl', - contractAddress: '0x3618516F45CD3c913F81F9987AF41077932Bc40d', - decimals: 8 - }, - { - symbol: 'PCLOLD', - name: 'PeculiumOLD', - marketSymbol: 'pclold', - identifier: 'eth-erc20-pclold', - contractAddress: '0x53148Bb4551707edF51a1e8d7A93698d18931225', - decimals: 8 - }, - { - symbol: 'PDATA', - name: 'PDATA', - marketSymbol: 'pdata', - identifier: 'eth-erc20-pdata', - contractAddress: '0x0db03B6CDe0B2d427C64a04FeAfd825938368f1F', - decimals: 18 - }, - { - symbol: 'PEG', - name: 'PEG Network Token', - marketSymbol: 'peg', - identifier: 'eth-erc20-peg', - contractAddress: '0x8Ae56a6850a7cbeaC3c3Ab2cB311e7620167eAC8', - decimals: 18 - }, - { - symbol: 'PET', - name: 'PETHEREUM', - marketSymbol: 'pet', - identifier: 'eth-erc20-pet', - contractAddress: '0x5884969Ec0480556E11d119980136a4C17eDDEd1', - decimals: 18 - }, - { - symbol: 'PETRO', - name: 'PETRO', - marketSymbol: 'petro', - identifier: 'eth-erc20-petro', - contractAddress: '0xeC18f898B4076A3E18f1089D33376CC380BDe61D', - decimals: 18 - }, - { - symbol: 'PEXT', - name: 'PEX-Token', - marketSymbol: 'pext', - identifier: 'eth-erc20-pext', - contractAddress: '0x55c2A0C171D920843560594dE3d6EEcC09eFc098', - decimals: 4 - }, - { - symbol: 'PFR', - name: 'Payfair', - marketSymbol: 'pfr', - identifier: 'eth-erc20-pfr', - contractAddress: '0x2FA32a39fc1c399E0Cc7B2935868f5165De7cE97', - decimals: 8 - }, - { - symbol: 'PHI', - name: 'PHI Token', - marketSymbol: 'phi', - identifier: 'eth-erc20-phi', - contractAddress: '0x13C2fab6354d3790D8ece4f0f1a3280b4A25aD96', - decimals: 18 - }, - { - symbol: 'PIPL', - name: 'PIPL Coin', - marketSymbol: 'pipl', - identifier: 'eth-erc20-pipl', - contractAddress: '0xE64509F0bf07ce2d29A7eF19A8A9bc065477C1B4', - decimals: 8 - }, - { - symbol: 'PIT', - name: 'Paypite v2', - marketSymbol: 'pit', - identifier: 'eth-erc20-pit', - contractAddress: '0x0fF161071e627A0E6de138105C73970F86ca7922', - decimals: 18 - }, - { - symbol: 'PIX', - name: 'Lampix', - marketSymbol: 'pix', - identifier: 'eth-erc20-pix', - contractAddress: '0x8eFFd494eB698cc399AF6231fCcd39E08fd20B15', - decimals: 0 - }, - { - symbol: 'PKG', - name: 'PKG Token', - marketSymbol: 'pkg', - identifier: 'eth-erc20-pkg', - contractAddress: '0x02F2D4a04E6E01aCE88bD2Cd632875543b2eF577', - decimals: 18 - }, - { - symbol: 'PKT', - name: 'Playkey', - marketSymbol: 'pkt', - identifier: 'eth-erc20-pkt', - contractAddress: '0x2604FA406Be957E542BEb89E6754fCdE6815e83f', - decimals: 18 - }, - { - symbol: 'PLASMA', - name: 'PLASMA', - marketSymbol: 'plasma', - identifier: 'eth-erc20-plasma', - contractAddress: '0x59416A25628A76b4730eC51486114c32E0B582A1', - decimals: 6 - }, - { - symbol: 'PLAY', - name: 'HeroCoin', - marketSymbol: 'play', - identifier: 'eth-erc20-play', - contractAddress: '0xE477292f1B3268687A29376116B0ED27A9c76170', - decimals: 18 - }, - { - symbol: 'PLBT', - name: 'Polybius', - marketSymbol: 'plbt', - identifier: 'eth-erc20-plbt', - contractAddress: '0x0AfFa06e7Fbe5bC9a764C979aA66E8256A631f02', - decimals: 6 - }, - { - symbol: 'PLR', - name: 'Pillar Project', - marketSymbol: 'plr', - identifier: 'eth-erc20-plr', - contractAddress: '0xe3818504c1B32bF1557b16C238B2E01Fd3149C17', - decimals: 18 - }, - { - symbol: 'PLS', - name: 'DACPLAY Token', - marketSymbol: 'pls', - identifier: 'eth-erc20-pls', - contractAddress: '0xe43ac1714F7394173b15E7CfF31A63d523Ce4fB9', - decimals: 18 - }, - { - symbol: 'PLU', - name: 'Pluton', - marketSymbol: 'plu', - identifier: 'eth-erc20-plu', - contractAddress: '0xD8912C10681D8B21Fd3742244f44658dBA12264E', - decimals: 18 - }, - { - symbol: 'PMA', - name: 'PumaPay', - marketSymbol: 'pma', - identifier: 'eth-erc20-pma', - contractAddress: '0x846C66cf71C43f80403B51fE3906B3599D63336f', - decimals: 18 - }, - { - symbol: 'PMNT', - name: 'Paymon', - marketSymbol: 'pmnt', - identifier: 'eth-erc20-pmnt', - contractAddress: '0x81b4D08645DA11374a03749AB170836E4e539767', - decimals: 9 - }, - { - symbol: 'PNK', - name: 'Pinakion', - marketSymbol: 'pnk', - identifier: 'eth-erc20-pnk', - contractAddress: '0x93ED3FBe21207Ec2E8f2d3c3de6e058Cb73Bc04d', - decimals: 18 - }, - { - symbol: 'POA20', - name: 'POA ERC20 on Foundation', - marketSymbol: 'poa20', - identifier: 'eth-erc20-poa20', - contractAddress: '0x6758B7d441a9739b98552B373703d8d3d14f9e62', - decimals: 18 - }, - { - symbol: 'POE', - name: 'Po.et Tokens', - marketSymbol: 'poe', - identifier: 'eth-erc20-poe', - contractAddress: '0x0e0989b1f9B8A38983c2BA8053269Ca62Ec9B195', - decimals: 8 - }, - { - symbol: 'POIN', - name: 'Potatoin', - marketSymbol: 'poin', - identifier: 'eth-erc20-poin', - contractAddress: '0x43F6a1BE992deE408721748490772B15143CE0a7', - decimals: 0 - }, - { - symbol: 'POLL', - name: 'ClearPoll', - marketSymbol: 'poll', - identifier: 'eth-erc20-poll', - contractAddress: '0x705EE96c1c160842C92c1aeCfCFfccc9C412e3D9', - decimals: 18 - }, - { - symbol: 'POLY', - name: 'Polymath Network', - marketSymbol: 'poly', - identifier: 'eth-erc20-poly', - contractAddress: '0x9992eC3cF6A55b00978cdDF2b27BC6882d88D1eC', - decimals: 18 - }, - { - symbol: 'POOL', - name: 'Stake Pool', - marketSymbol: 'pool', - identifier: 'eth-erc20-pool', - contractAddress: '0x779B7b713C86e3E6774f5040D9cCC2D43ad375F8', - decimals: 8 - }, - { - symbol: 'POP', - name: 'POP Network Token', - marketSymbol: 'pop', - identifier: 'eth-erc20-pop', - contractAddress: '0x5D858bcd53E085920620549214a8b27CE2f04670', - decimals: 18 - }, - { - symbol: 'POS', - name: 'PoSToken', - marketSymbol: 'pos', - identifier: 'eth-erc20-pos', - contractAddress: '0xEe609fE292128Cad03b786DBb9Bc2634Ccdbe7fC', - decimals: 18 - }, - { - symbol: 'POWR', - name: 'PowerLedger', - marketSymbol: 'powr', - identifier: 'eth-erc20-powr', - contractAddress: '0x595832F8FC6BF59c85C527fEC3740A1b7a361269', - decimals: 6 - }, - { - symbol: 'PPP', - name: 'PayPie', - marketSymbol: 'ppp', - identifier: 'eth-erc20-ppp', - contractAddress: '0xc42209aCcC14029c1012fB5680D95fBd6036E2a0', - decimals: 18 - }, - { - symbol: 'PPT', - name: 'Populous', - marketSymbol: 'ppt', - identifier: 'eth-erc20-ppt', - contractAddress: '0xd4fa1460F537bb9085d22C7bcCB5DD450Ef28e3a', - decimals: 8 - }, - { - symbol: 'PRE', - name: 'Presearch', - marketSymbol: 'pre', - identifier: 'eth-erc20-pre', - contractAddress: '0x88A3E4F35D64aAD41A6d4030ac9AFE4356cB84fA', - decimals: 18 - }, - { - symbol: 'PRG', - name: 'Paragon', - marketSymbol: 'prg', - identifier: 'eth-erc20-prg', - contractAddress: '0x7728dFEF5aBd468669EB7f9b48A7f70a501eD29D', - decimals: 6 - }, - { - symbol: 'PRIX', - name: 'Privatix', - marketSymbol: 'prix', - identifier: 'eth-erc20-prix', - contractAddress: '0x3ADfc4999F77D04c8341BAC5F3A76f58DfF5B37A', - decimals: 8 - }, - { - symbol: 'PRL', - name: 'Oyster Pearl', - marketSymbol: 'prl', - identifier: 'eth-erc20-prl', - contractAddress: '0x1844b21593262668B7248d0f57a220CaaBA46ab9', - decimals: 18 - }, - { - symbol: 'PRO', - name: 'Propy', - marketSymbol: 'pro', - identifier: 'eth-erc20-pro', - contractAddress: '0x226bb599a12C826476e3A771454697EA52E9E220', - decimals: 8 - }, - { - symbol: 'PRO', - name: 'Pro', - marketSymbol: 'pro', - identifier: 'eth-erc20-pro', - contractAddress: '0x9041Fe5B3FDEA0f5e4afDC17e75180738D877A01', - decimals: 18 - }, - { - symbol: 'PRON', - name: 'PronCoin', - marketSymbol: 'pron', - identifier: 'eth-erc20-pron', - contractAddress: '0xA3149E0fA0061A9007fAf307074cdCd290f0e2Fd', - decimals: 8 - }, - { - symbol: 'PRPS', - name: 'Purpose', - marketSymbol: 'prps', - identifier: 'eth-erc20-prps', - contractAddress: '0x7641b2Ca9DDD58adDf6e3381c1F994Aac5f1A32f', - decimals: 18 - }, - { - symbol: 'PRPS', - name: 'Purpose', - marketSymbol: 'prps', - identifier: 'eth-erc20-prps', - contractAddress: '0xd94F2778e2B3913C53637Ae60647598bE588c570', - decimals: 18 - }, - { - symbol: 'PRPS', - name: 'Purpose', - marketSymbol: 'prps', - identifier: 'eth-erc20-prps', - contractAddress: '0xE40C374d8805b1dD58CDcEFf998A2F6920Cb52FD', - decimals: 18 - }, - { - symbol: 'PRS', - name: 'Persians', - marketSymbol: 'prs', - identifier: 'eth-erc20-prs', - contractAddress: '0x163733bcc28dbf26B41a8CfA83e369b5B3af741b', - decimals: 18 - }, - { - symbol: 'PRSP', - name: 'PRSP', - marketSymbol: 'prsp', - identifier: 'eth-erc20-prsp', - contractAddress: '0x0C04d4f331DA8dF75f9E2e271E3f3F1494C66C36', - decimals: 9 - }, - { - symbol: 'PST', - name: 'Primas', - marketSymbol: 'pst', - identifier: 'eth-erc20-pst', - contractAddress: '0x5d4ABC77B8405aD177d8ac6682D584ecbFd46CEc', - decimals: 18 - }, - { - symbol: 'PT', - name: 'PornToken', - marketSymbol: 'pt', - identifier: 'eth-erc20-pt', - contractAddress: '0x66497A283E0a007bA3974e837784C6AE323447de', - decimals: 18 - }, - { - symbol: 'PTC', - name: 'ParrotCoin', - marketSymbol: 'ptc', - identifier: 'eth-erc20-ptc', - contractAddress: '0x2a8E98e256f32259b5E5Cb55Dd63C8e891950666', - decimals: 18 - }, - { - symbol: 'PTON', - name: 'PTON', - marketSymbol: 'pton', - identifier: 'eth-erc20-pton', - contractAddress: '0x4946583c5b86E01cCD30c71a05617D06E3E73060', - decimals: 18 - }, - { - symbol: 'PTOY', - name: 'Patientory', - marketSymbol: 'ptoy', - identifier: 'eth-erc20-ptoy', - contractAddress: '0x8Ae4BF2C33a8e667de34B54938B0ccD03Eb8CC06', - decimals: 8 - }, - { - symbol: 'PTT', - name: 'Proton Token', - marketSymbol: 'ptt', - identifier: 'eth-erc20-ptt', - contractAddress: '0x4689a4e169eB39cC9078C0940e21ff1Aa8A39B9C', - decimals: 18 - }, - { - symbol: 'PTWO', - name: 'PornTokenV2', - marketSymbol: 'ptwo', - identifier: 'eth-erc20-ptwo', - contractAddress: '0x5512e1D6A7BE424b4323126B4f9E86D023F95764', - decimals: 18 - }, - { - symbol: 'PUC', - name: 'Pour Coin', - marketSymbol: 'puc', - identifier: 'eth-erc20-puc', - contractAddress: '0xEf6B4cE8C9Bc83744fbcdE2657b32eC18790458A', - decimals: 0 - }, - { - symbol: 'PURC', - name: 'PureCarbon', - marketSymbol: 'purc', - identifier: 'eth-erc20-purc', - contractAddress: '0xe25ff6Eb959BCE67975778e46A47750C243B6B99', - decimals: 18 - }, - { - symbol: 'PXG', - name: 'PlayGame', - marketSymbol: 'pxg', - identifier: 'eth-erc20-pxg', - contractAddress: '0x47e67BA66b0699500f18A53F94E2b9dB3D47437e', - decimals: 18 - }, - { - symbol: 'PXT', - name: 'Populous XBRL Token (PXT)', - marketSymbol: 'pxt', - identifier: 'eth-erc20-pxt', - contractAddress: '0xc14830E53aA344E8c14603A91229A0b925b0B262', - decimals: 8 - }, - { - symbol: 'PYLNT', - name: 'Pylon Network', - marketSymbol: 'pylnt', - identifier: 'eth-erc20-pylnt', - contractAddress: '0x7703C35CfFdC5CDa8D27aa3df2F9ba6964544b6e', - decimals: 18 - }, - { - symbol: 'QASH', - name: 'QASH', - marketSymbol: 'qash', - identifier: 'eth-erc20-qash', - contractAddress: '0x618E75Ac90b12c6049Ba3b27f5d5F8651b0037F6', - decimals: 6 - }, - { - symbol: 'QAU', - name: 'QAU', - marketSymbol: 'qau', - identifier: 'eth-erc20-qau', - contractAddress: '0x671AbBe5CE652491985342e85428EB1b07bC6c64', - decimals: 8 - }, - { - symbol: 'QBIT', - name: 'Qubitica', - marketSymbol: 'qbit', - identifier: 'eth-erc20-qbit', - contractAddress: '0xCb5ea3c190d8f82DEADF7ce5Af855dDbf33e3962', - decimals: 6 - }, - { - symbol: 'QBX', - name: 'qiibeeToken', - marketSymbol: 'qbx', - identifier: 'eth-erc20-qbx', - contractAddress: '0x2467AA6B5A2351416fD4C3DeF8462d841feeecEC', - decimals: 18 - }, - { - symbol: 'QKC', - name: 'QuarkChain', - marketSymbol: 'qkc', - identifier: 'eth-erc20-qkc', - contractAddress: '0xEA26c4aC16D4a5A106820BC8AEE85fd0b7b2b664', - decimals: 18 - }, - { - symbol: 'QNT', - name: 'Quant', - marketSymbol: 'qnt', - identifier: 'eth-erc20-qnt', - contractAddress: '0x4a220E6096B25EADb88358cb44068A3248254675', - decimals: 18 - }, - { - symbol: 'QRG', - name: 'QRG', - marketSymbol: 'qrg', - identifier: 'eth-erc20-qrg', - contractAddress: '0xFFAA5ffc455d9131f8A2713A741fD1960330508B', - decimals: 18 - }, - { - symbol: 'QRL', - name: 'QRL', - marketSymbol: 'qrl', - identifier: 'eth-erc20-qrl', - contractAddress: '0x697beac28B09E122C4332D163985e8a73121b97F', - decimals: 8 - }, - { - symbol: 'QSP', - name: 'Quantstamp Token', - marketSymbol: 'qsp', - identifier: 'eth-erc20-qsp', - contractAddress: '0x99ea4dB9EE77ACD40B119BD1dC4E33e1C070b80d', - decimals: 18 - }, - { - symbol: 'QTQ', - name: "TiiQu's Q Token", - marketSymbol: 'qtq', - identifier: 'eth-erc20-qtq', - contractAddress: '0x2C3C1F05187dBa7A5f2Dd47Dca57281C4d4F183F', - decimals: 18 - }, - { - symbol: 'QTUM', - name: 'Qtum', - marketSymbol: 'qtum', - identifier: 'eth-erc20-qtum', - contractAddress: '0x9a642d6b3368ddc662CA244bAdf32cDA716005BC', - decimals: 18 - }, - { - symbol: 'QUN', - name: 'QunQun', - marketSymbol: 'qun', - identifier: 'eth-erc20-qun', - contractAddress: '0x264Dc2DedCdcbb897561A57CBa5085CA416fb7b4', - decimals: 18 - }, - { - symbol: 'QVT', - name: 'QVT', - marketSymbol: 'qvt', - identifier: 'eth-erc20-qvt', - contractAddress: '0x1183F92A5624D68e85FFB9170F16BF0443B4c242', - decimals: 18 - }, - { - symbol: 'R', - name: 'Revain', - marketSymbol: 'r', - identifier: 'eth-erc20-r', - contractAddress: '0x48f775EFBE4F5EcE6e0DF2f7b5932dF56823B990', - decimals: 0 - }, - { - symbol: 'RAO', - name: 'RadioYo', - marketSymbol: 'rao', - identifier: 'eth-erc20-rao', - contractAddress: '0x45eDb535942a8C84D9f4b5D37e1b25F91Ea4804c', - decimals: 18 - }, - { - symbol: 'RATING', - name: 'DPRating', - marketSymbol: 'rating', - identifier: 'eth-erc20-rating', - contractAddress: '0xE8663A64A96169ff4d95b4299E7ae9a76b905B31', - decimals: 8 - }, - { - symbol: 'RBLX', - name: 'Rublix', - marketSymbol: 'rblx', - identifier: 'eth-erc20-rblx', - contractAddress: '0xFc2C4D8f95002C14eD0a7aA65102Cac9e5953b5E', - decimals: 18 - }, - { - symbol: 'RCN', - name: 'Ripio Credit Network', - marketSymbol: 'rcn', - identifier: 'eth-erc20-rcn', - contractAddress: '0xF970b8E36e23F7fC3FD752EeA86f8Be8D83375A6', - decimals: 18 - }, - { - symbol: 'RCT', - name: 'RealChain', - marketSymbol: 'rct', - identifier: 'eth-erc20-rct', - contractAddress: '0x13f25cd52b21650caa8225C9942337d914C9B030', - decimals: 18 - }, - { - symbol: 'RCT', - name: 'RCT', - marketSymbol: 'rct', - identifier: 'eth-erc20-rct', - contractAddress: '0x2a3Aa9ECA41E720Ed46B5A70D6C37EfA47f768Ac', - decimals: 18 - }, - { - symbol: 'RDN', - name: 'Raiden Network', - marketSymbol: 'rdn', - identifier: 'eth-erc20-rdn', - contractAddress: '0x255Aa6DF07540Cb5d3d297f0D0D4D84cb52bc8e6', - decimals: 18 - }, - { - symbol: 'REA', - name: 'Realisto', - marketSymbol: 'rea', - identifier: 'eth-erc20-rea', - contractAddress: '0x767bA2915EC344015a7938E3eEDfeC2785195D05', - decimals: 18 - }, - { - symbol: 'REAL', - name: 'Real Estate Asset Ledger', - marketSymbol: 'real', - identifier: 'eth-erc20-real', - contractAddress: '0x9214eC02CB71CbA0ADA6896b8dA260736a67ab10', - decimals: 18 - }, - { - symbol: 'REBL', - name: 'Rebellious', - marketSymbol: 'rebl', - identifier: 'eth-erc20-rebl', - contractAddress: '0x5F53f7A8075614b699Baad0bC2c899f4bAd8FBBF', - decimals: 18 - }, - { - symbol: 'RED', - name: 'Red Community Token', - marketSymbol: 'red', - identifier: 'eth-erc20-red', - contractAddress: '0x76960Dccd5a1fe799F7c29bE9F19ceB4627aEb2f', - decimals: 18 - }, - { - symbol: 'REDC', - name: 'RedCab', - marketSymbol: 'redc', - identifier: 'eth-erc20-redc', - contractAddress: '0xB563300A3BAc79FC09B93b6F84CE0d4465A2AC27', - decimals: 18 - }, - { - symbol: 'REF', - name: 'RefToken', - marketSymbol: 'ref', - identifier: 'eth-erc20-ref', - contractAddress: '0x89303500a7Abfb178B274FD89F2469C264951e1f', - decimals: 8 - }, - { - symbol: 'REM', - name: 'Remme', - marketSymbol: 'rem', - identifier: 'eth-erc20-rem', - contractAddress: '0x83984d6142934bb535793A82ADB0a46EF0F66B6d', - decimals: 4 - }, - { - symbol: 'REMI', - name: 'REMI', - marketSymbol: 'remi', - identifier: 'eth-erc20-remi', - contractAddress: '0x13cb85823f78Cff38f0B0E90D3e975b8CB3AAd64', - decimals: 18 - }, - { - symbol: 'REN', - name: 'Republic Token', - marketSymbol: 'ren', - identifier: 'eth-erc20-ren', - contractAddress: '0x408e41876cCCDC0F92210600ef50372656052a38', - decimals: 18 - }, - { - symbol: 'REP', - name: 'Augur', - marketSymbol: 'rep', - identifier: 'eth-erc20-rep', - contractAddress: '0x1985365e9f78359a9B6AD760e32412f4a445E862', - decimals: 18 - }, - { - symbol: 'REP', - name: 'Augur', - marketSymbol: 'rep', - identifier: 'eth-erc20-rep', - contractAddress: '0xE94327D07Fc17907b4DB788E5aDf2ed424adDff6', - decimals: 18 - }, - { - symbol: 'REQ', - name: 'Request Network', - marketSymbol: 'req', - identifier: 'eth-erc20-req', - contractAddress: '0x8f8221aFbB33998d8584A2B05749bA73c37a938a', - decimals: 18 - }, - { - symbol: 'REX', - name: 'imbrex', - marketSymbol: 'rex', - identifier: 'eth-erc20-rex', - contractAddress: '0xf05a9382A4C3F29E2784502754293D88b835109C', - decimals: 18 - }, - { - symbol: 'RFR', - name: 'Refereum', - marketSymbol: 'rfr', - identifier: 'eth-erc20-rfr', - contractAddress: '0xd0929d411954c47438dc1d871dd6081F5C5e149c', - decimals: 4 - }, - { - symbol: 'RGS', - name: 'Rusgas', - marketSymbol: 'rgs', - identifier: 'eth-erc20-rgs', - contractAddress: '0x4c383bDCae52a6e1cb810C76C70d6f31A249eC9B', - decimals: 8 - }, - { - symbol: 'RHOC', - name: 'RChain', - marketSymbol: 'rhoc', - identifier: 'eth-erc20-rhoc', - contractAddress: '0x168296bb09e24A88805CB9c33356536B980D3fC5', - decimals: 8 - }, - { - symbol: 'RING', - name: 'Evolution Land Global Token', - marketSymbol: 'ring', - identifier: 'eth-erc20-ring', - contractAddress: '0x9469D013805bFfB7D3DEBe5E7839237e535ec483', - decimals: 18 - }, - { - symbol: 'RING', - name: 'Evolution Land Global Token', - marketSymbol: 'ring', - identifier: 'eth-erc20-ring', - contractAddress: '0x86E56f3c89a14528858e58B3De48c074538BAf2c', - decimals: 18 - }, - { - symbol: 'RIPT', - name: 'RiptideCoin', - marketSymbol: 'ript', - identifier: 'eth-erc20-ript', - contractAddress: '0xdd007278B667F6bef52fD0a4c23604aA1f96039a', - decimals: 8 - }, - { - symbol: 'RIYA', - name: 'Etheriya', - marketSymbol: 'riya', - identifier: 'eth-erc20-riya', - contractAddress: '0x0b1724cc9FDA0186911EF6a75949e9c0d3F0f2F3', - decimals: 8 - }, - { - symbol: 'RKT', - name: 'Rock', - marketSymbol: 'rkt', - identifier: 'eth-erc20-rkt', - contractAddress: '0x106Aa49295B525fcf959aA75eC3f7dCbF5352f1C', - decimals: 18 - }, - { - symbol: 'RLC', - name: 'IEx.ec', - marketSymbol: 'rlc', - identifier: 'eth-erc20-rlc', - contractAddress: '0x607F4C5BB672230e8672085532f7e901544a7375', - decimals: 9 - }, - { - symbol: 'RLT', - name: 'RouletteToken', - marketSymbol: 'rlt', - identifier: 'eth-erc20-rlt', - contractAddress: '0xcCeD5B8288086BE8c38E23567e684C3740be4D48', - decimals: 10 - }, - { - symbol: 'RLTY', - name: 'SMARTRealty', - marketSymbol: 'rlty', - identifier: 'eth-erc20-rlty', - contractAddress: '0xbe99B09709fc753b09BCf557A992F6605D5997B0', - decimals: 8 - }, - { - symbol: 'RLX', - name: 'Relex', - marketSymbol: 'rlx', - identifier: 'eth-erc20-rlx', - contractAddress: '0x4A42d2c580f83dcE404aCad18dab26Db11a1750E', - decimals: 18 - }, - { - symbol: 'RMC', - name: 'RemiCoin', - marketSymbol: 'rmc', - identifier: 'eth-erc20-rmc', - contractAddress: '0x7Dc4f41294697a7903C4027f6Ac528C5d14cd7eB', - decimals: 8 - }, - { - symbol: 'RMESH', - name: 'RightMesh Token', - marketSymbol: 'rmesh', - identifier: 'eth-erc20-rmesh', - contractAddress: '0x8D5682941cE456900b12d47ac06a88b47C764CE1', - decimals: 18 - }, - { - symbol: 'RNDR', - name: 'Render Token', - marketSymbol: 'rndr', - identifier: 'eth-erc20-rndr', - contractAddress: '0x0996bFb5D057faa237640E2506BE7B4f9C46de0B', - decimals: 18 - }, - { - symbol: 'RNT', - name: 'OneRoot Network', - marketSymbol: 'rnt', - identifier: 'eth-erc20-rnt', - contractAddress: '0xFF603F43946A3A28DF5E6A73172555D8C8b02386', - decimals: 18 - }, - { - symbol: 'RNTB', - name: 'BitRent', - marketSymbol: 'rntb', - identifier: 'eth-erc20-rntb', - contractAddress: '0x1FE70bE734e473e5721ea57C8B5B01e6Caa52686', - decimals: 18 - }, - { - symbol: 'ROC', - name: 'ROC', - marketSymbol: 'roc', - identifier: 'eth-erc20-roc', - contractAddress: '0x1BcBc54166F6bA149934870b60506199b6C9dB6D', - decimals: 10 - }, - { - symbol: 'ROCK', - name: 'Rocket Token', - marketSymbol: 'rock', - identifier: 'eth-erc20-rock', - contractAddress: '0xA40106134c5bF4c41411554e6db99B95A15ed9d8', - decimals: 18 - }, - { - symbol: 'ROCK2', - name: 'ICE ROCK MINING', - marketSymbol: 'rock2', - identifier: 'eth-erc20-rock2', - contractAddress: '0xC16b542ff490e01fcc0DC58a60e1EFdc3e357cA6', - decimals: 0 - }, - { - symbol: 'ROCK2PAY', - name: 'ICE ROCK MINING', - marketSymbol: 'rock2pay', - identifier: 'eth-erc20-rock2pay', - contractAddress: '0x0E3de3B0E3D617FD8D1D8088639bA877feb4d742', - decimals: 18 - }, - { - symbol: 'ROK', - name: 'Rocketchain', - marketSymbol: 'rok', - identifier: 'eth-erc20-rok', - contractAddress: '0xc9De4B7F0C3d991e967158E4D4bFA4b51Ec0b114', - decimals: 18 - }, - { - symbol: 'ROUND', - name: 'ROUND', - marketSymbol: 'round', - identifier: 'eth-erc20-round', - contractAddress: '0x4993CB95c7443bdC06155c5f5688Be9D8f6999a5', - decimals: 18 - }, - { - symbol: 'RPL', - name: 'Rocket Pool', - marketSymbol: 'rpl', - identifier: 'eth-erc20-rpl', - contractAddress: '0xB4EFd85c19999D84251304bDA99E90B92300Bd93', - decimals: 18 - }, - { - symbol: 'RTB', - name: 'AB-Chain RTB', - marketSymbol: 'rtb', - identifier: 'eth-erc20-rtb', - contractAddress: '0xEC491c1088Eae992B7A214efB0a266AD0927A72A', - decimals: 18 - }, - { - symbol: 'RTH', - name: 'Rotharium', - marketSymbol: 'rth', - identifier: 'eth-erc20-rth', - contractAddress: '0x3FD8f39A962eFDA04956981C31AB89FAB5FB8bC8', - decimals: 18 - }, - { - symbol: 'RTN', - name: 'RiderToken', - marketSymbol: 'rtn', - identifier: 'eth-erc20-rtn', - contractAddress: '0x54b293226000ccBFC04DF902eEC567CB4C35a903', - decimals: 18 - }, - { - symbol: 'RUFF', - name: 'Ruff', - marketSymbol: 'ruff', - identifier: 'eth-erc20-ruff', - contractAddress: '0xf278c1CA969095ffddDED020290cf8B5C424AcE2', - decimals: 18 - }, - { - symbol: 'RUNE', - name: 'Rune', - marketSymbol: 'rune', - identifier: 'eth-erc20-rune', - contractAddress: '0xdEE02D94be4929d26f67B64Ada7aCf1914007F10', - decimals: 18 - }, - { - symbol: 'RVL', - name: 'RVL', - marketSymbol: 'rvl', - identifier: 'eth-erc20-rvl', - contractAddress: '0x41f615E24fAbd2b097a320E9E6c1f448cb40521c', - decimals: 18 - }, - { - symbol: 'RVT', - name: 'Rivetz', - marketSymbol: 'rvt', - identifier: 'eth-erc20-rvt', - contractAddress: '0x3d1BA9be9f66B8ee101911bC36D3fB562eaC2244', - decimals: 18 - }, - { - symbol: 'S-A-PAT', - name: 'S-A-PAT', - marketSymbol: 's-a-pat', - identifier: 'eth-erc20-s-a-pat', - contractAddress: '0x1EC8fE51a9B6A3a6C427D17d9ECC3060fbc4a45c', - decimals: 18 - }, - { - symbol: 'S-ETH', - name: 'S-ETH', - marketSymbol: 's-eth', - identifier: 'eth-erc20-s-eth', - contractAddress: '0x3eb91D237e491E0DEE8582c402D85CB440fb6b54', - decimals: 18 - }, - { - symbol: 'SAC', - name: 'Smart Application Chain', - marketSymbol: 'sac', - identifier: 'eth-erc20-sac', - contractAddress: '0xabC1280A0187a2020cC675437aed400185F86Db6', - decimals: 18 - }, - { - symbol: 'SALT', - name: 'Salt Lending Token', - marketSymbol: 'salt', - identifier: 'eth-erc20-salt', - contractAddress: '0x4156D3342D5c385a87D264F90653733592000581', - decimals: 8 - }, - { - symbol: 'SAN', - name: 'Santiment', - marketSymbol: 'san', - identifier: 'eth-erc20-san', - contractAddress: '0x7C5A0CE9267ED19B22F8cae653F198e3E8daf098', - decimals: 18 - }, - { - symbol: 'SCANDI', - name: 'Scandiweb Coin', - marketSymbol: 'scandi', - identifier: 'eth-erc20-scandi', - contractAddress: '0x78fE18e41f436e1981a3a60D1557c8a7a9370461', - decimals: 2 - }, - { - symbol: 'SCL', - name: 'SocialCoin', - marketSymbol: 'scl', - identifier: 'eth-erc20-scl', - contractAddress: '0xd7631787B4dCc87b1254cfd1e5cE48e96823dEe8', - decimals: 8 - }, - { - symbol: 'SCRL', - name: 'SCRL', - marketSymbol: 'scrl', - identifier: 'eth-erc20-scrl', - contractAddress: '0x24DCc881E7Dd730546834452F21872D5cb4b5293', - decimals: 18 - }, - { - symbol: 'SEELE', - name: 'Seele', - marketSymbol: 'seele', - identifier: 'eth-erc20-seele', - contractAddress: '0xB1eeF147028E9f480DbC5ccaA3277D417D1b85F0', - decimals: 18 - }, - { - symbol: 'SENC', - name: 'Sentinel Chain', - marketSymbol: 'senc', - identifier: 'eth-erc20-senc', - contractAddress: '0xA13f0743951B4f6E3e3AA039f682E17279f52bc3', - decimals: 18 - }, - { - symbol: 'SenSatorI', - name: 'SenSatorI Token', - marketSymbol: 'sensatori', - identifier: 'eth-erc20-sensatori', - contractAddress: '0x4cA74185532DC1789527194e5B9c866dD33F4E82', - decimals: 18 - }, - { - symbol: 'SENSE', - name: 'Sensay', - marketSymbol: 'sense', - identifier: 'eth-erc20-sense', - contractAddress: '0x6745fAB6801e376cD24F03572B9C9B0D4EdDDCcf', - decimals: 8 - }, - { - symbol: 'SENT', - name: 'SENTinel', - marketSymbol: 'sent', - identifier: 'eth-erc20-sent', - contractAddress: '0xa44E5137293E855B1b7bC7E2C6f8cD796fFCB037', - decimals: 8 - }, - { - symbol: 'SET', - name: 'SET', - marketSymbol: 'set', - identifier: 'eth-erc20-set', - contractAddress: '0xe06eda7435bA749b047380CEd49121ddE93334Ae', - decimals: 0 - }, - { - symbol: 'SEXY', - name: 'Sexy Token', - marketSymbol: 'sexy', - identifier: 'eth-erc20-sexy', - contractAddress: '0x98F5e9b7F0e33956C0443E81bF7deB8B5b1ed545', - decimals: 18 - }, - { - symbol: 'SGEL', - name: 'SGELDER', - marketSymbol: 'sgel', - identifier: 'eth-erc20-sgel', - contractAddress: '0xa1ccc166faf0E998b3E33225A1A0301B1C86119D', - decimals: 18 - }, - { - symbol: 'SGN', - name: 'Signals Network', - marketSymbol: 'sgn', - identifier: 'eth-erc20-sgn', - contractAddress: '0xB2135AB9695a7678Dd590B1A996CB0f37BCB0718', - decimals: 9 - }, - { - symbol: 'SGP', - name: 'SGPay', - marketSymbol: 'sgp', - identifier: 'eth-erc20-sgp', - contractAddress: '0x33C623a2BAAfEb8D15DfaF3cE44095efec83D72C', - decimals: 18 - }, - { - symbol: 'SGR', - name: 'Sugar Exchange', - marketSymbol: 'sgr', - identifier: 'eth-erc20-sgr', - contractAddress: '0xCB5A05beF3257613E984C17DbcF039952B6d883F', - decimals: 8 - }, - { - symbol: 'SGT', - name: 'SGT', - marketSymbol: 'sgt', - identifier: 'eth-erc20-sgt', - contractAddress: '0xd248B0D48E44aaF9c49aea0312be7E13a6dc1468', - decimals: 1 - }, - { - symbol: 'SGT', - name: 'SelfieYo Gold Token', - marketSymbol: 'sgt', - identifier: 'eth-erc20-sgt', - contractAddress: '0x37427576324fE1f3625c9102674772d7CF71377d', - decimals: 18 - }, - { - symbol: 'SHIP', - name: 'ShipChain', - marketSymbol: 'ship', - identifier: 'eth-erc20-ship', - contractAddress: '0xe25b0BBA01Dc5630312B6A21927E578061A13f55', - decimals: 18 - }, - { - symbol: 'SHIT', - name: 'SHIT', - marketSymbol: 'shit', - identifier: 'eth-erc20-shit', - contractAddress: '0xEF2E9966eb61BB494E5375d5Df8d67B7dB8A780D', - decimals: 0 - }, - { - symbol: 'SHL', - name: 'Oyster Shell', - marketSymbol: 'shl', - identifier: 'eth-erc20-shl', - contractAddress: '0x8542325B72C6D9fC0aD2Ca965A78435413a915A0', - decimals: 18 - }, - { - symbol: 'SHP', - name: 'Sharpe Platform Token', - marketSymbol: 'shp', - identifier: 'eth-erc20-shp', - contractAddress: '0xEF2463099360a085f1f10b076Ed72Ef625497a06', - decimals: 18 - }, - { - symbol: 'SIFT', - name: 'SIFT', - marketSymbol: 'sift', - identifier: 'eth-erc20-sift', - contractAddress: '0x8a187D5285d316bcBC9ADafc08b51d70a0d8e000', - decimals: 0 - }, - { - symbol: 'SIG', - name: 'Signal', - marketSymbol: 'sig', - identifier: 'eth-erc20-sig', - contractAddress: '0x6888a16eA9792c15A4DCF2f6C623D055c8eDe792', - decimals: 18 - }, - { - symbol: 'SKB', - name: 'Sakura Bloom', - marketSymbol: 'skb', - identifier: 'eth-erc20-skb', - contractAddress: '0x4aF328C52921706dCB739F25786210499169AFe6', - decimals: 8 - }, - { - symbol: 'SKE', - name: 'Super Keep Token', - marketSymbol: 'ske', - identifier: 'eth-erc20-ske', - contractAddress: '0x13DB74B3cf512F65C4b91683940B4f3955E05085', - decimals: 8 - }, - { - symbol: 'SKIN', - name: 'SKIN', - marketSymbol: 'skin', - identifier: 'eth-erc20-skin', - contractAddress: '0x2bDC0D42996017fCe214b21607a515DA41A9E0C5', - decimals: 6 - }, - { - symbol: 'SKM', - name: 'Skrumble Network', - marketSymbol: 'skm', - identifier: 'eth-erc20-skm', - contractAddress: '0xd99b8A7fA48E25Cce83B81812220A3E03Bf64e5f', - decimals: 18 - }, - { - symbol: 'SKO1', - name: 'Sikoba', - marketSymbol: 'sko1', - identifier: 'eth-erc20-sko1', - contractAddress: '0x4994e81897a920c0FEA235eb8CEdEEd3c6fFF697', - decimals: 18 - }, - { - symbol: 'SKR', - name: 'SKR Token', - marketSymbol: 'skr', - identifier: 'eth-erc20-skr', - contractAddress: '0x4c382F8E09615AC86E08CE58266CC227e7d4D913', - decimals: 6 - }, - { - symbol: 'SKRP', - name: 'Skraps', - marketSymbol: 'skrp', - identifier: 'eth-erc20-skrp', - contractAddress: '0x324A48eBCbB46e61993931eF9D35F6697CD2901b', - decimals: 18 - }, - { - symbol: 'SKRP', - name: 'Skraps', - marketSymbol: 'skrp', - identifier: 'eth-erc20-skrp', - contractAddress: '0xfdFE8b7aB6CF1bD1E3d14538Ef40686296C42052', - decimals: 18 - }, - { - symbol: 'SKRP', - name: 'Skraps', - marketSymbol: 'skrp', - identifier: 'eth-erc20-skrp', - contractAddress: '0x6E34d8d84764D40f6D7b39cd569Fd017bF53177D', - decimals: 18 - }, - { - symbol: 'SKYM', - name: 'Skymap Token', - marketSymbol: 'skym', - identifier: 'eth-erc20-skym', - contractAddress: '0x7297862B9670fF015192799cc849726c88bf1d77', - decimals: 18 - }, - { - symbol: 'SLT', - name: 'Smartlands', - marketSymbol: 'slt', - identifier: 'eth-erc20-slt', - contractAddress: '0x7A5fF295Dc8239d5C2374E4D894202aAF029Cab6', - decimals: 3 - }, - { - symbol: 'SLY', - name: 'Selfllery', - marketSymbol: 'sly', - identifier: 'eth-erc20-sly', - contractAddress: '0x7928c8aBF1F74eF9F96D4D0a44e3b4209d360785', - decimals: 18 - }, - { - symbol: 'SMART', - name: 'Smart Billions', - marketSymbol: 'smart', - identifier: 'eth-erc20-smart', - contractAddress: '0x6F6DEb5db0C4994A8283A01D6CFeEB27Fc3bBe9C', - decimals: 0 - }, - { - symbol: 'SMS', - name: 'Speed Mining Service', - marketSymbol: 'sms', - identifier: 'eth-erc20-sms', - contractAddress: '0x39013F961c378f02C2b82A6E1d31E9812786FD9D', - decimals: 3 - }, - { - symbol: 'SMT', - name: 'Smart Node', - marketSymbol: 'smt', - identifier: 'eth-erc20-smt', - contractAddress: '0x2dCFAAc11c9EebD8C6C42103Fe9e2a6AD237aF27', - decimals: 18 - }, - { - symbol: 'SMT', - name: 'Social Media Market', - marketSymbol: 'smt', - identifier: 'eth-erc20-smt', - contractAddress: '0x78Eb8DC641077F049f910659b6d580E80dC4d237', - decimals: 8 - }, - { - symbol: 'SMT', - name: 'SmartMesh', - marketSymbol: 'smt', - identifier: 'eth-erc20-smt', - contractAddress: '0x55F93985431Fc9304077687a35A1BA103dC1e081', - decimals: 18 - }, - { - symbol: 'SNBL', - name: 'Snowball', - marketSymbol: 'snbl', - identifier: 'eth-erc20-snbl', - contractAddress: '0x198A87b3114143913d4229Fb0f6D4BCb44aa8AFF', - decimals: 8 - }, - { - symbol: 'SNC', - name: 'SunContract', - marketSymbol: 'snc', - identifier: 'eth-erc20-snc', - contractAddress: '0xF4134146AF2d511Dd5EA8cDB1C4AC88C57D60404', - decimals: 18 - }, - { - symbol: 'SND', - name: 'Sandcoin', - marketSymbol: 'snd', - identifier: 'eth-erc20-snd', - contractAddress: '0xf333b2Ace992ac2bBD8798bF57Bc65a06184afBa', - decimals: 0 - }, - { - symbol: 'SNG', - name: 'SINERGIA', - marketSymbol: 'sng', - identifier: 'eth-erc20-sng', - contractAddress: '0xcFD6Ae8BF13f42DE14867351eAff7A8A3b9FbBe7', - decimals: 8 - }, - { - symbol: 'SNGLS', - name: 'SingularDTV', - marketSymbol: 'sngls', - identifier: 'eth-erc20-sngls', - contractAddress: '0xaeC2E87E0A235266D9C5ADc9DEb4b2E29b54D009', - decimals: 0 - }, - { - symbol: 'SNIP', - name: 'SNIP', - marketSymbol: 'snip', - identifier: 'eth-erc20-snip', - contractAddress: '0x44F588aEeB8C44471439D1270B3603c66a9262F1', - decimals: 18 - }, - { - symbol: 'SNM', - name: 'SONM', - marketSymbol: 'snm', - identifier: 'eth-erc20-snm', - contractAddress: '0x983F6d60db79ea8cA4eB9968C6aFf8cfA04B3c63', - decimals: 18 - }, - { - symbol: 'SNOV', - name: 'Snovian.Space', - marketSymbol: 'snov', - identifier: 'eth-erc20-snov', - contractAddress: '0xBDC5bAC39Dbe132B1E030e898aE3830017D7d969', - decimals: 18 - }, - { - symbol: 'SNT', - name: 'Status Network Token', - marketSymbol: 'snt', - identifier: 'eth-erc20-snt', - contractAddress: '0x744d70FDBE2Ba4CF95131626614a1763DF805B9E', - decimals: 18 - }, - { - symbol: 'SNTR', - name: 'Silent Notary', - marketSymbol: 'sntr', - identifier: 'eth-erc20-sntr', - contractAddress: '0x2859021eE7F2Cb10162E67F33Af2D22764B31aFf', - decimals: 4 - }, - { - symbol: 'SNX', - name: 'Synthetix Network Token', - marketSymbol: 'snx', - identifier: 'eth-erc20-snx', - contractAddress: '0xC011A72400E58ecD99Ee497CF89E3775d4bd732F', - decimals: 18 - }, - { - symbol: 'SOAR', - name: 'Soarcoin', - marketSymbol: 'soar', - identifier: 'eth-erc20-soar', - contractAddress: '0xD65960FAcb8E4a2dFcb2C2212cb2e44a02e2a57E', - decimals: 6 - }, - { - symbol: 'SOC', - name: 'All Sports', - marketSymbol: 'soc', - identifier: 'eth-erc20-soc', - contractAddress: '0x2d0E95bd4795D7aCe0da3C0Ff7b706a5970eb9D3', - decimals: 18 - }, - { - symbol: 'SOL', - name: 'Sola Token', - marketSymbol: 'sol', - identifier: 'eth-erc20-sol', - contractAddress: '0x1F54638b7737193FFd86c19Ec51907A7c41755D8', - decimals: 6 - }, - { - symbol: 'SONIQ', - name: 'Soniq', - marketSymbol: 'soniq', - identifier: 'eth-erc20-soniq', - contractAddress: '0x1C62aCa2b7605Db3606eAcdA7Bc67A1857DDb8FF', - decimals: 18 - }, - { - symbol: 'SOUL', - name: 'CryptoSoul', - marketSymbol: 'soul', - identifier: 'eth-erc20-soul', - contractAddress: '0xBb1f24C0c1554b9990222f036b0AaD6Ee4CAec29', - decimals: 18 - }, - { - symbol: 'SPANK', - name: 'SpankChain', - marketSymbol: 'spank', - identifier: 'eth-erc20-spank', - contractAddress: '0x42d6622deCe394b54999Fbd73D108123806f6a18', - decimals: 18 - }, - { - symbol: 'SPARC', - name: 'SPARC', - marketSymbol: 'sparc', - identifier: 'eth-erc20-sparc', - contractAddress: '0x58bf7df57d9DA7113c4cCb49d8463D4908C735cb', - decimals: 18 - }, - { - symbol: 'SPARTA', - name: 'SPARTA', - marketSymbol: 'sparta', - identifier: 'eth-erc20-sparta', - contractAddress: '0x24AEF3BF1A47561500f9430D74Ed4097C47F51F2', - decimals: 4 - }, - { - symbol: 'SPD', - name: 'SPINDLE', - marketSymbol: 'spd', - identifier: 'eth-erc20-spd', - contractAddress: '0x1dEa979ae76f26071870F824088dA78979eb91C8', - decimals: 18 - }, - { - symbol: 'SPF', - name: 'Sportify', - marketSymbol: 'spf', - identifier: 'eth-erc20-spf', - contractAddress: '0x85089389C14Bd9c77FC2b8F0c3d1dC3363Bf06Ef', - decimals: 18 - }, - { - symbol: 'SPHTX', - name: 'SPHTX', - marketSymbol: 'sphtx', - identifier: 'eth-erc20-sphtx', - contractAddress: '0x3833ddA0AEB6947b98cE454d89366cBA8Cc55528', - decimals: 18 - }, - { - symbol: 'SPICE', - name: 'SPiCE VC Token', - marketSymbol: 'spice', - identifier: 'eth-erc20-spice', - contractAddress: '0x0324dd195D0Cd53F9F07bEe6a48eE7a20bad738f', - decimals: 8 - }, - { - symbol: 'SPN', - name: 'Sapien', - marketSymbol: 'spn', - identifier: 'eth-erc20-spn', - contractAddress: '0x20F7A3DdF244dc9299975b4Da1C39F8D5D75f05A', - decimals: 6 - }, - { - symbol: 'SPX', - name: 'Sp8de', - marketSymbol: 'spx', - identifier: 'eth-erc20-spx', - contractAddress: '0x05aAaA829Afa407D83315cDED1d45EB16025910c', - decimals: 18 - }, - { - symbol: 'SRN', - name: 'Sirin Labs', - marketSymbol: 'srn', - identifier: 'eth-erc20-srn', - contractAddress: '0x68d57c9a1C35f63E2c83eE8e49A64e9d70528D25', - decimals: 18 - }, - { - symbol: 'SS', - name: 'Sharder', - marketSymbol: 'ss', - identifier: 'eth-erc20-ss', - contractAddress: '0xbbFF862d906E348E9946Bfb2132ecB157Da3D4b4', - decimals: 18 - }, - { - symbol: 'SS', - name: 'Sharder', - marketSymbol: 'ss', - identifier: 'eth-erc20-ss', - contractAddress: '0xB15fE5a123e647ba594CEa7A1E648646f95EB4AA', - decimals: 18 - }, - { - symbol: 'SSH', - name: 'StreamShares', - marketSymbol: 'ssh', - identifier: 'eth-erc20-ssh', - contractAddress: '0x6e2050CBFB3eD8A4d39b64cC9f47E711a03a5a89', - decimals: 18 - }, - { - symbol: 'SSP', - name: 'Smartshare', - marketSymbol: 'ssp', - identifier: 'eth-erc20-ssp', - contractAddress: '0x624d520BAB2E4aD83935Fa503fB130614374E850', - decimals: 4 - }, - { - symbol: 'STABIT', - name: 'StabitCoin', - marketSymbol: 'stabit', - identifier: 'eth-erc20-stabit', - contractAddress: '0x4A89cD486fA996ad50c0a63C35c78702f5422a50', - decimals: 3 - }, - { - symbol: 'STAC', - name: 'Starter Coin', - marketSymbol: 'stac', - identifier: 'eth-erc20-stac', - contractAddress: '0x9a005c9a89BD72a4Bd27721E7a09A3c11D2b03C4', - decimals: 18 - }, - { - symbol: 'STACS', - name: 'STACS', - marketSymbol: 'stacs', - identifier: 'eth-erc20-stacs', - contractAddress: '0x286708f069225905194673755F12359e6afF6FE1', - decimals: 18 - }, - { - symbol: 'STAR', - name: 'Star Token', - marketSymbol: 'star', - identifier: 'eth-erc20-star', - contractAddress: '0xF70a642bD387F94380fFb90451C2c81d4Eb82CBc', - decimals: 18 - }, - { - symbol: 'STB', - name: 'STABLE Token', - marketSymbol: 'stb', - identifier: 'eth-erc20-stb', - contractAddress: '0x09BcA6eBAb05Ee2ae945BE4edA51393d94Bf7b99', - decimals: 4 - }, - { - symbol: 'STC', - name: 'StrikeCoin Token', - marketSymbol: 'stc', - identifier: 'eth-erc20-stc', - contractAddress: '0x629aEe55ed49581C33ab27f9403F7992A289ffd5', - decimals: 18 - }, - { - symbol: 'STK', - name: 'STK Token', - marketSymbol: 'stk', - identifier: 'eth-erc20-stk', - contractAddress: '0xaE73B38d1c9A8b274127ec30160a4927C4d71824', - decimals: 18 - }, - { - symbol: 'STN', - name: 'Saturn Network', - marketSymbol: 'stn', - identifier: 'eth-erc20-stn', - contractAddress: '0x599346779e90fc3F5F997b5ea715349820F91571', - decimals: 4 - }, - { - symbol: 'STORJ', - name: 'STORJ', - marketSymbol: 'storj', - identifier: 'eth-erc20-storj', - contractAddress: '0xB64ef51C888972c908CFacf59B47C1AfBC0Ab8aC', - decimals: 8 - }, - { - symbol: 'STORM', - name: 'Storm Token', - marketSymbol: 'storm', - identifier: 'eth-erc20-storm', - contractAddress: '0xD0a4b8946Cb52f0661273bfbC6fD0E0C75Fc6433', - decimals: 18 - }, - { - symbol: 'STP', - name: 'StashPay', - marketSymbol: 'stp', - identifier: 'eth-erc20-stp', - contractAddress: '0xecd570bBf74761b960Fa04Cc10fe2c4e86FfDA36', - decimals: 8 - }, - { - symbol: 'STQ', - name: 'Storiqa', - marketSymbol: 'stq', - identifier: 'eth-erc20-stq', - contractAddress: '0x5c3a228510D246b78a3765C20221Cbf3082b44a4', - decimals: 18 - }, - { - symbol: 'STR', - name: 'Staker', - marketSymbol: 'str', - identifier: 'eth-erc20-str', - contractAddress: '0xBAE235823D7255D9D48635cEd4735227244Cd583', - decimals: 18 - }, - { - symbol: 'STRC', - name: 'STRC', - marketSymbol: 'strc', - identifier: 'eth-erc20-strc', - contractAddress: '0x46492473755e8dF960F8034877F61732D718CE96', - decimals: 8 - }, - { - symbol: 'STU', - name: 'bitJob', - marketSymbol: 'stu', - identifier: 'eth-erc20-stu', - contractAddress: '0x0371A82e4A9d0A4312f3ee2Ac9c6958512891372', - decimals: 18 - }, - { - symbol: 'STX', - name: 'StoxToken', - marketSymbol: 'stx', - identifier: 'eth-erc20-stx', - contractAddress: '0x006BeA43Baa3f7A6f765F14f10A1a1b08334EF45', - decimals: 18 - }, - { - symbol: 'SUB', - name: 'Substratum', - marketSymbol: 'sub', - identifier: 'eth-erc20-sub', - contractAddress: '0x8D75959f1E61EC2571aa72798237101F084DE63a', - decimals: 18 - }, - { - symbol: 'SUB (old)', - name: 'Substratum (old contract)', - marketSymbol: 'sub (old)', - identifier: 'eth-erc20-sub (old)', - contractAddress: '0x12480E24eb5bec1a9D4369CaB6a80caD3c0A377A', - decimals: 2 - }, - { - symbol: 'SUR', - name: 'Suretly', - marketSymbol: 'sur', - identifier: 'eth-erc20-sur', - contractAddress: '0xe120c1ECBfdFeA7F0A8f0Ee30063491E8c26fedf', - decimals: 8 - }, - { - symbol: 'sUSD', - name: 'USD Synth (sUSD)', - marketSymbol: 'susd', - identifier: 'eth-erc20-susd', - contractAddress: '0x57Ab1E02fEE23774580C119740129eAC7081e9D3', - decimals: 18 - }, - { - symbol: 'SVD', - name: 'savedroid', - marketSymbol: 'svd', - identifier: 'eth-erc20-svd', - contractAddress: '0xbdEB4b83251Fb146687fa19D1C660F99411eefe3', - decimals: 18 - }, - { - symbol: 'SWFTC', - name: 'SwftCoin', - marketSymbol: 'swftc', - identifier: 'eth-erc20-swftc', - contractAddress: '0x0bb217E40F8a5Cb79Adf04E1aAb60E5abd0dfC1e', - decimals: 8 - }, - { - symbol: 'SWM', - name: 'Swarm Fund Token', - marketSymbol: 'swm', - identifier: 'eth-erc20-swm', - contractAddress: '0x9e88613418cF03dCa54D6a2cf6Ad934A78C7A17A', - decimals: 18 - }, - { - symbol: 'SWT', - name: 'Swarm City Token', - marketSymbol: 'swt', - identifier: 'eth-erc20-swt', - contractAddress: '0xB9e7F8568e08d5659f5D29C4997173d84CdF2607', - decimals: 18 - }, - { - symbol: 'SXDT', - name: 'Spectre.ai D-Token', - marketSymbol: 'sxdt', - identifier: 'eth-erc20-sxdt', - contractAddress: '0x12B306fA98F4CbB8d4457FdFf3a0A0a56f07cCdf', - decimals: 18 - }, - { - symbol: 'SXUT', - name: 'Spectre.ai U-Token', - marketSymbol: 'sxut', - identifier: 'eth-erc20-sxut', - contractAddress: '0x2C82c73d5B34AA015989462b2948cd616a37641F', - decimals: 18 - }, - { - symbol: 'SYN', - name: 'Synapse', - marketSymbol: 'syn', - identifier: 'eth-erc20-syn', - contractAddress: '0x10B123FdDde003243199aaD03522065dC05827A0', - decimals: 18 - }, - { - symbol: 'TaaS', - name: 'Token-as-a-Service', - marketSymbol: 'taas', - identifier: 'eth-erc20-taas', - contractAddress: '0xE7775A6e9Bcf904eb39DA2b68c5efb4F9360e08C', - decimals: 6 - }, - { - symbol: 'TALAO', - name: 'Talao', - marketSymbol: 'talao', - identifier: 'eth-erc20-talao', - contractAddress: '0x1D4cCC31dAB6EA20f461d329a0562C1c58412515', - decimals: 18 - }, - { - symbol: 'TAN', - name: 'Taklimakan Network', - marketSymbol: 'tan', - identifier: 'eth-erc20-tan', - contractAddress: '0x2C36204a0712A2a50E54A62F7c4F01867e78cB53', - decimals: 18 - }, - { - symbol: 'TAU', - name: 'Lamden Tau', - marketSymbol: 'tau', - identifier: 'eth-erc20-tau', - contractAddress: '0xc27A2F05fa577a83BA0fDb4c38443c0718356501', - decimals: 18 - }, - { - symbol: 'TBC2', - name: 'TBC2', - marketSymbol: 'tbc2', - identifier: 'eth-erc20-tbc2', - contractAddress: '0xFACCD5Fc83c3E4C3c1AC1EF35D15adf06bCF209C', - decimals: 8 - }, - { - symbol: 'TBT', - name: 'TBitBot', - marketSymbol: 'tbt', - identifier: 'eth-erc20-tbt', - contractAddress: '0xAFe60511341a37488de25Bef351952562E31fCc1', - decimals: 8 - }, - { - symbol: 'TBX', - name: 'Tokenbox', - marketSymbol: 'tbx', - identifier: 'eth-erc20-tbx', - contractAddress: '0x3A92bD396aEf82af98EbC0Aa9030D25a23B11C6b', - decimals: 18 - }, - { - symbol: 'TCA', - name: 'TangguoTao Token', - marketSymbol: 'tca', - identifier: 'eth-erc20-tca', - contractAddress: '0xfA0eF5E034CaE1AE752d59bdb8aDcDe37Ed7aB97', - decimals: 18 - }, - { - symbol: 'TCH', - name: 'Thore Cash', - marketSymbol: 'tch', - identifier: 'eth-erc20-tch', - contractAddress: '0x9972A0F24194447E73a7e8b6CD26a52e02DDfAD5', - decimals: 0 - }, - { - symbol: 'TDH', - name: 'TrustedHealth', - marketSymbol: 'tdh', - identifier: 'eth-erc20-tdh', - contractAddress: '0x2a1dbabe65c595B0022e75208C34014139d5d357', - decimals: 18 - }, - { - symbol: 'TEAM', - name: 'TEAM (TokenStars)', - marketSymbol: 'team', - identifier: 'eth-erc20-team', - contractAddress: '0x1c79ab32C66aCAa1e9E81952B8AAa581B43e54E7', - decimals: 4 - }, - { - symbol: 'TEL', - name: 'Telcoin', - marketSymbol: 'tel', - identifier: 'eth-erc20-tel', - contractAddress: '0x85e076361cc813A908Ff672F9BAd1541474402b2', - decimals: 2 - }, - { - symbol: 'TEL', - name: 'Meditel', - marketSymbol: 'tel', - identifier: 'eth-erc20-tel', - contractAddress: '0xEc32A9725C59855d841ba7d8D9c99c84ff754688', - decimals: 18 - }, - { - symbol: 'TEN', - name: 'Tokenomy', - marketSymbol: 'ten', - identifier: 'eth-erc20-ten', - contractAddress: '0xDD16eC0F66E54d453e6756713E533355989040E4', - decimals: 18 - }, - { - symbol: 'TFD', - name: 'TE-FOOD', - marketSymbol: 'tfd', - identifier: 'eth-erc20-tfd', - contractAddress: '0xE5F166c0D8872B68790061317BB6CcA04582C912', - decimals: 18 - }, - { - symbol: 'TFL', - name: 'TrueFlip', - marketSymbol: 'tfl', - identifier: 'eth-erc20-tfl', - contractAddress: '0xa7f976C360ebBeD4465c2855684D1AAE5271eFa9', - decimals: 8 - }, - { - symbol: 'TGAME', - name: 'Truegame', - marketSymbol: 'tgame', - identifier: 'eth-erc20-tgame', - contractAddress: '0xF8e06E4e4A80287FDCa5b02dcCecAa9D0954840F', - decimals: 18 - }, - { - symbol: 'TGT', - name: 'Target Coin', - marketSymbol: 'tgt', - identifier: 'eth-erc20-tgt', - contractAddress: '0xAc3Da587eac229C9896D919aBC235CA4Fd7f72c1', - decimals: 1 - }, - { - symbol: 'THETA', - name: 'Theta Token', - marketSymbol: 'theta', - identifier: 'eth-erc20-theta', - contractAddress: '0x3883f5e181fccaF8410FA61e12b59BAd963fb645', - decimals: 18 - }, - { - symbol: 'THR', - name: 'ThoreCoin', - marketSymbol: 'thr', - identifier: 'eth-erc20-thr', - contractAddress: '0x1Cb3209D45B2a60B7fBCA1cCDBF87f674237A4aa', - decimals: 4 - }, - { - symbol: 'THRT', - name: 'Thrive Token', - marketSymbol: 'thrt', - identifier: 'eth-erc20-thrt', - contractAddress: '0x4f27053F32edA8Af84956437Bc00e5fFa7003287', - decimals: 18 - }, - { - symbol: 'THUG', - name: 'THUG', - marketSymbol: 'thug', - identifier: 'eth-erc20-thug', - contractAddress: '0xfe7B915A0bAA0E79f85c5553266513F7C1c03Ed0', - decimals: 18 - }, - { - symbol: 'TIC', - name: 'Trust Invest', - marketSymbol: 'tic', - identifier: 'eth-erc20-tic', - contractAddress: '0x614b9802D45Aa1bC2282651dC1408632F9027A6e', - decimals: 18 - }, - { - symbol: 'TIC', - name: 'Thingschain', - marketSymbol: 'tic', - identifier: 'eth-erc20-tic', - contractAddress: '0x72430A612Adc007c50e3b6946dBb1Bb0fd3101D1', - decimals: 8 - }, - { - symbol: 'TICO', - name: 'Topinvestmentcoin', - marketSymbol: 'tico', - identifier: 'eth-erc20-tico', - contractAddress: '0xa5dB1d6F7A0D5Bccc17d0bFD39D7AF32d5E5EDc6', - decimals: 5 - }, - { - symbol: 'TICO', - name: 'Topinvestmentcoin', - marketSymbol: 'tico', - identifier: 'eth-erc20-tico', - contractAddress: '0x7F4B2A690605A7cbb66F7AA6885EbD906a5e2E9E', - decimals: 8 - }, - { - symbol: 'TIE', - name: 'Ties.DB', - marketSymbol: 'tie', - identifier: 'eth-erc20-tie', - contractAddress: '0x999967E2Ec8A74B7c8E9dB19E039d920B31d39D0', - decimals: 18 - }, - { - symbol: 'TIG', - name: 'Tigereum', - marketSymbol: 'tig', - identifier: 'eth-erc20-tig', - contractAddress: '0xEee2d00Eb7DEB8Dd6924187f5AA3496B7d06E62A', - decimals: 18 - }, - { - symbol: 'TIME', - name: 'Chronobank', - marketSymbol: 'time', - identifier: 'eth-erc20-time', - contractAddress: '0x6531f133e6DeeBe7F2dcE5A0441aA7ef330B4e53', - decimals: 8 - }, - { - symbol: 'TIO', - name: 'TIO', - marketSymbol: 'tio', - identifier: 'eth-erc20-tio', - contractAddress: '0x80BC5512561c7f85A3A9508c7df7901b370Fa1DF', - decimals: 18 - }, - { - symbol: 'TIX', - name: 'Blocktix', - marketSymbol: 'tix', - identifier: 'eth-erc20-tix', - contractAddress: '0xEa1f346faF023F974Eb5adaf088BbCdf02d761F4', - decimals: 18 - }, - { - symbol: 'TKA', - name: 'Tokia', - marketSymbol: 'tka', - identifier: 'eth-erc20-tka', - contractAddress: '0xdaE1Baf249964bc4b6aC98c3122f0e3E785fd279', - decimals: 18 - }, - { - symbol: 'TKLN', - name: 'Taklimakan Network', - marketSymbol: 'tkln', - identifier: 'eth-erc20-tkln', - contractAddress: '0x0675DAa94725A528b05A3A88635C03EA964BFA7E', - decimals: 18 - }, - { - symbol: 'TKN', - name: 'TokenCard', - marketSymbol: 'tkn', - identifier: 'eth-erc20-tkn', - contractAddress: '0xaAAf91D9b90dF800Df4F55c205fd6989c977E73a', - decimals: 8 - }, - { - symbol: 'TKR', - name: 'TKRToken', - marketSymbol: 'tkr', - identifier: 'eth-erc20-tkr', - contractAddress: '0xB45a50545bEEAB73F38F31E5973768C421805E5E', - decimals: 18 - }, - { - symbol: 'TLX', - name: 'Telex', - marketSymbol: 'tlx', - identifier: 'eth-erc20-tlx', - contractAddress: '0xb3616550aBc8AF79c7A5902DEF9Efa3bC9A95200', - decimals: 8 - }, - { - symbol: 'TMT', - name: 'TRAXIA', - marketSymbol: 'tmt', - identifier: 'eth-erc20-tmt', - contractAddress: '0x3209f98BeBF0149B769ce26D71F7aEA8E435EfEa', - decimals: 18 - }, - { - symbol: 'TMTG', - name: 'TMTG', - marketSymbol: 'tmtg', - identifier: 'eth-erc20-tmtg', - contractAddress: '0x10086399DD8c1e3De736724AF52587a2044c9fA2', - decimals: 18 - }, - { - symbol: 'TNS', - name: 'Transcodium', - marketSymbol: 'tns', - identifier: 'eth-erc20-tns', - contractAddress: '0xb0280743b44bF7db4B6bE482b2Ba7b75E5dA096C', - decimals: 18 - }, - { - symbol: 'TNT', - name: 'Tierion Network Token', - marketSymbol: 'tnt', - identifier: 'eth-erc20-tnt', - contractAddress: '0x08f5a9235B08173b7569F83645d2c7fB55e8cCD8', - decimals: 8 - }, - { - symbol: 'TOK', - name: 'TOKOK', - marketSymbol: 'tok', - identifier: 'eth-erc20-tok', - contractAddress: '0x9a49f02e128a8E989b443a8f94843C0918BF45E7', - decimals: 8 - }, - { - symbol: 'TOMO', - name: 'Tomocoin', - marketSymbol: 'tomo', - identifier: 'eth-erc20-tomo', - contractAddress: '0x8b353021189375591723E7384262F45709A3C3dC', - decimals: 18 - }, - { - symbol: 'TOOR', - name: 'ToorCoin', - marketSymbol: 'toor', - identifier: 'eth-erc20-toor', - contractAddress: '0x8eb965ee9cCFBCE76c0a06264492c0afEfc2826d', - decimals: 18 - }, - { - symbol: 'TRAC', - name: 'OriginTrail', - marketSymbol: 'trac', - identifier: 'eth-erc20-trac', - contractAddress: '0xaA7a9CA87d3694B5755f213B5D04094b8d0F0A6F', - decimals: 18 - }, - { - symbol: 'TRAK', - name: 'TrakInvest', - marketSymbol: 'trak', - identifier: 'eth-erc20-trak', - contractAddress: '0x12759512D326303B45f1ceC8F7B6fd96F387778E', - decimals: 18 - }, - { - symbol: 'TRC', - name: 'The Real Coin', - marketSymbol: 'trc', - identifier: 'eth-erc20-trc', - contractAddress: '0xcB3F902bf97626391bF8bA87264bbC3DC13469be', - decimals: 18 - }, - { - symbol: 'TRCN', - name: 'The Real Coin', - marketSymbol: 'trcn', - identifier: 'eth-erc20-trcn', - contractAddress: '0x566Fd7999B1Fc3988022bD38507A48F0bCf22c77', - decimals: 18 - }, - { - symbol: 'TRCT', - name: 'Tracto', - marketSymbol: 'trct', - identifier: 'eth-erc20-trct', - contractAddress: '0x30ceCB5461A449A90081F5a5F55db4e048397BAB', - decimals: 8 - }, - { - symbol: 'TRDT', - name: 'Trident Group', - marketSymbol: 'trdt', - identifier: 'eth-erc20-trdt', - contractAddress: '0x33f90Dee07c6E8B9682dD20F73E6C358B2ED0f03', - decimals: 0 - }, - { - symbol: 'TRST', - name: 'WeTrust', - marketSymbol: 'trst', - identifier: 'eth-erc20-trst', - contractAddress: '0xCb94be6f13A1182E4A4B6140cb7bf2025d28e41B', - decimals: 6 - }, - { - symbol: 'TRX', - name: 'Tron Lab Token', - marketSymbol: 'trx', - identifier: 'eth-erc20-trx', - contractAddress: '0xf230b790E05390FC8295F4d3F60332c93BEd42e2', - decimals: 6 - }, - { - symbol: 'TSW', - name: 'TeslaWatt', - marketSymbol: 'tsw', - identifier: 'eth-erc20-tsw', - contractAddress: '0x6B87999bE87358065bBdE41e8a0fe0B7b1cd2514', - decimals: 18 - }, - { - symbol: 'TTA', - name: 'Tend Token', - marketSymbol: 'tta', - identifier: 'eth-erc20-tta', - contractAddress: '0xaaB606817809841E8b1168be8779Eeaf6744Ef64', - decimals: 18 - }, - { - symbol: 'TTC', - name: 'TTC Protocol', - marketSymbol: 'ttc', - identifier: 'eth-erc20-ttc', - contractAddress: '0x9389434852b94bbaD4c8AfEd5B7BDBc5Ff0c2275', - decimals: 18 - }, - { - symbol: 'TTU', - name: 'TaTaTu', - marketSymbol: 'ttu', - identifier: 'eth-erc20-ttu', - contractAddress: '0x9CDa8A60dd5AfA156c95Bd974428d91a0812e054', - decimals: 18 - }, - { - symbol: 'TUSD', - name: 'TrueUSD', - marketSymbol: 'tusd', - identifier: 'eth-erc20-tusd', - contractAddress: '0x0000000000085d4780B73119b644AE5ecd22b376', - decimals: 18 - }, - { - symbol: 'TUSD (OLD)', - name: 'TrueUSD', - marketSymbol: 'tusd (old)', - identifier: 'eth-erc20-tusd (old)', - contractAddress: '0x8dd5fbCe2F6a956C3022bA3663759011Dd51e73E', - decimals: 18 - }, - { - symbol: 'TWN', - name: 'The World News', - marketSymbol: 'twn', - identifier: 'eth-erc20-twn', - contractAddress: '0x2eF1aB8a26187C58BB8aAeB11B2fC6D25C5c0716', - decimals: 18 - }, - { - symbol: 'TWNKL', - name: 'Twinkle', - marketSymbol: 'twnkl', - identifier: 'eth-erc20-twnkl', - contractAddress: '0xfbd0d1c77B501796A35D86cF91d65D9778EeE695', - decimals: 3 - }, - { - symbol: 'UBT', - name: 'Unibright', - marketSymbol: 'ubt', - identifier: 'eth-erc20-ubt', - contractAddress: '0x8400D94A5cb0fa0D041a3788e395285d61c9ee5e', - decimals: 8 - }, - { - symbol: 'UCASH', - name: 'U.CASH', - marketSymbol: 'ucash', - identifier: 'eth-erc20-ucash', - contractAddress: '0x92e52a1A235d9A103D970901066CE910AAceFD37', - decimals: 8 - }, - { - symbol: 'UCN', - name: 'UChain', - marketSymbol: 'ucn', - identifier: 'eth-erc20-ucn', - contractAddress: '0xAAf37055188Feee4869dE63464937e683d61b2a1', - decimals: 18 - }, - { - symbol: 'UFR', - name: 'Upfiring', - marketSymbol: 'ufr', - identifier: 'eth-erc20-ufr', - contractAddress: '0xEA097A2b1dB00627B2Fa17460Ad260c016016977', - decimals: 18 - }, - { - symbol: 'UKG', - name: 'UnikoinGold', - marketSymbol: 'ukg', - identifier: 'eth-erc20-ukg', - contractAddress: '0x24692791Bc444c5Cd0b81e3CBCaba4b04Acd1F3B', - decimals: 18 - }, - { - symbol: 'UMKA', - name: 'UMKA', - marketSymbol: 'umka', - identifier: 'eth-erc20-umka', - contractAddress: '0x105d97ef2E723f1cfb24519Bc6fF15a6D091a3F1', - decimals: 4 - }, - { - symbol: 'UMKA', - name: 'UMKA', - marketSymbol: 'umka', - identifier: 'eth-erc20-umka', - contractAddress: '0x8e5afc69f6227A3ad75eD346c8723Bc62ce97123', - decimals: 4 - }, - { - symbol: 'Unicorn', - name: 'Unicorn', - marketSymbol: 'unicorn', - identifier: 'eth-erc20-unicorn', - contractAddress: '0x89205A3A3b2A69De6Dbf7f01ED13B2108B2c43e7', - decimals: 0 - }, - { - symbol: 'UP', - name: 'UpToken', - marketSymbol: 'up', - identifier: 'eth-erc20-up', - contractAddress: '0x6Ba460AB75Cd2c56343b3517ffeBA60748654D26', - decimals: 8 - }, - { - symbol: 'UPP', - name: 'Sentinel Protocol', - marketSymbol: 'upp', - identifier: 'eth-erc20-upp', - contractAddress: '0xC86D054809623432210c107af2e3F619DcFbf652', - decimals: 18 - }, - { - symbol: 'UQC', - name: 'Uquid Coin', - marketSymbol: 'uqc', - identifier: 'eth-erc20-uqc', - contractAddress: '0xD01DB73E047855Efb414e6202098C4Be4Cd2423B', - decimals: 18 - }, - { - symbol: 'URB', - name: 'Urbit Data', - marketSymbol: 'urb', - identifier: 'eth-erc20-urb', - contractAddress: '0x931684139f756C24eC0731E9F74FE50e5548dDeF', - decimals: 18 - }, - { - symbol: 'USDC', - name: 'USD//Coin', - marketSymbol: 'usdc', - identifier: 'eth-erc20-usdc', - contractAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - decimals: 6 - }, - { - symbol: 'USDM', - name: 'Mether (USDM)', - marketSymbol: 'usdm', - identifier: 'eth-erc20-usdm', - contractAddress: '0xD760ADdFb24D9C01Fe4Bfea7475C5e3636684058', - decimals: 2 - }, - { - symbol: 'USDS', - name: 'StableUSD', - marketSymbol: 'usds', - identifier: 'eth-erc20-usds', - contractAddress: '0xA4Bdb11dc0a2bEC88d24A3aa1E6Bb17201112eBe', - decimals: 6 - }, - { - symbol: 'USDT', - name: 'USD Tether (erc20)', - marketSymbol: 'usdt', - identifier: 'eth-erc20-usdt', - contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7', - decimals: 6 - }, - { - symbol: 'UTK', - name: 'UTRUST', - marketSymbol: 'utk', - identifier: 'eth-erc20-utk', - contractAddress: '0x70a72833d6bF7F508C8224CE59ea1Ef3d0Ea3A38', - decimals: 18 - }, - { - symbol: 'UTNP', - name: 'Universa', - marketSymbol: 'utnp', - identifier: 'eth-erc20-utnp', - contractAddress: '0x9e3319636e2126e3c0bc9e3134AEC5e1508A46c7', - decimals: 18 - }, - { - symbol: 'UTT', - name: 'United Traders Token', - marketSymbol: 'utt', - identifier: 'eth-erc20-utt', - contractAddress: '0x16f812Be7FfF02cAF662B85d5d58a5da6572D4Df', - decimals: 8 - }, - { - symbol: 'UUU', - name: 'U Networks', - marketSymbol: 'uuu', - identifier: 'eth-erc20-uuu', - contractAddress: '0x3543638eD4a9006E4840B105944271Bcea15605D', - decimals: 18 - }, - { - symbol: 'VDG', - name: 'VeriDocGlobal', - marketSymbol: 'vdg', - identifier: 'eth-erc20-vdg', - contractAddress: '0x57C75ECCc8557136D32619a191fBCDc88560d711', - decimals: 0 - }, - { - symbol: 'VDOC', - name: 'Duty of Care Token', - marketSymbol: 'vdoc', - identifier: 'eth-erc20-vdoc', - contractAddress: '0x82BD526bDB718C6d4DD2291Ed013A5186cAE2DCa', - decimals: 18 - }, - { - symbol: 'VEE', - name: 'BLOCKv', - marketSymbol: 'vee', - identifier: 'eth-erc20-vee', - contractAddress: '0x340D2bdE5Eb28c1eed91B2f790723E3B160613B7', - decimals: 18 - }, - { - symbol: 'VEN', - name: 'VeChain', - marketSymbol: 'ven', - identifier: 'eth-erc20-ven', - contractAddress: '0xD850942eF8811f2A866692A623011bDE52a462C1', - decimals: 18 - }, - { - symbol: 'VENUS', - name: 'VENUS', - marketSymbol: 'venus', - identifier: 'eth-erc20-venus', - contractAddress: '0xEbeD4fF9fe34413db8fC8294556BBD1528a4DAca', - decimals: 3 - }, - { - symbol: 'VERI', - name: 'Veritaseum', - marketSymbol: 'veri', - identifier: 'eth-erc20-veri', - contractAddress: '0x8f3470A7388c05eE4e7AF3d01D8C722b0FF52374', - decimals: 18 - }, - { - symbol: 'VIB', - name: 'Viberate', - marketSymbol: 'vib', - identifier: 'eth-erc20-vib', - contractAddress: '0x2C974B2d0BA1716E644c1FC59982a89DDD2fF724', - decimals: 18 - }, - { - symbol: 'VIBE', - name: 'VIBE Coin', - marketSymbol: 'vibe', - identifier: 'eth-erc20-vibe', - contractAddress: '0xe8Ff5C9c75dEb346acAc493C463C8950Be03Dfba', - decimals: 18 - }, - { - symbol: 'VIBEX', - name: 'VIBEX Exchange Token', - marketSymbol: 'vibex', - identifier: 'eth-erc20-vibex', - contractAddress: '0x882448f83d90B2bf477Af2eA79327fDEA1335D93', - decimals: 18 - }, - { - symbol: 'VIDT', - name: 'V-ID Token', - marketSymbol: 'vidt', - identifier: 'eth-erc20-vidt', - contractAddress: '0x445f51299Ef3307dBD75036dd896565F5B4BF7A5', - decimals: 18 - }, - { - symbol: 'VIEW', - name: 'Viewly', - marketSymbol: 'view', - identifier: 'eth-erc20-view', - contractAddress: '0xF03f8D65BaFA598611C3495124093c56e8F638f0', - decimals: 18 - }, - { - symbol: 'VIKKY', - name: 'VikkyToken', - marketSymbol: 'vikky', - identifier: 'eth-erc20-vikky', - contractAddress: '0xd2946be786F35c3Cc402C29b323647aBda799071', - decimals: 8 - }, - { - symbol: 'VIN', - name: 'VIN', - marketSymbol: 'vin', - identifier: 'eth-erc20-vin', - contractAddress: '0xF3e014fE81267870624132ef3A646B8E83853a96', - decimals: 18 - }, - { - symbol: 'VIT', - name: 'Vice Industry Token', - marketSymbol: 'vit', - identifier: 'eth-erc20-vit', - contractAddress: '0x23b75Bc7AaF28e2d6628C3f424B3882F8f072a3c', - decimals: 18 - }, - { - symbol: 'VITE', - name: 'Vite', - marketSymbol: 'vite', - identifier: 'eth-erc20-vite', - contractAddress: '0x1b793E49237758dBD8b752AFC9Eb4b329d5Da016', - decimals: 18 - }, - { - symbol: 'VIU', - name: 'Viuly', - marketSymbol: 'viu', - identifier: 'eth-erc20-viu', - contractAddress: '0x519475b31653E46D20cD09F9FdcF3B12BDAcB4f5', - decimals: 18 - }, - { - symbol: 'VLD', - name: 'VETRI', - marketSymbol: 'vld', - identifier: 'eth-erc20-vld', - contractAddress: '0x922aC473A3cC241fD3a0049Ed14536452D58D73c', - decimals: 18 - }, - { - symbol: 'VOC', - name: 'VORMACOIN', - marketSymbol: 'voc', - identifier: 'eth-erc20-voc', - contractAddress: '0xc3bC9Eb71f75Ec439A6b6C8E8b746fCF5b62F703', - decimals: 18 - }, - { - symbol: 'VOISE', - name: 'Voise', - marketSymbol: 'voise', - identifier: 'eth-erc20-voise', - contractAddress: '0x83eEA00D838f92dEC4D1475697B9f4D3537b56E3', - decimals: 8 - }, - { - symbol: 'VRS', - name: 'Veros', - marketSymbol: 'vrs', - identifier: 'eth-erc20-vrs', - contractAddress: '0x92E78dAe1315067a8819EFD6dCA432de9DCdE2e9', - decimals: 6 - }, - { - symbol: 'VRS', - name: 'Veros', - marketSymbol: 'vrs', - identifier: 'eth-erc20-vrs', - contractAddress: '0xeDBaF3c5100302dCddA53269322f3730b1F0416d', - decimals: 5 - }, - { - symbol: 'VSL', - name: 'Vdice', - marketSymbol: 'vsl', - identifier: 'eth-erc20-vsl', - contractAddress: '0x5c543e7AE0A1104f78406C340E9C64FD9fCE5170', - decimals: 18 - }, - { - symbol: 'VUU', - name: 'Vuulr Token', - marketSymbol: 'vuu', - identifier: 'eth-erc20-vuu', - contractAddress: '0x4b96bf1feF93A216914fc843D81207A027ce52b3', - decimals: 18 - }, - { - symbol: 'VZT', - name: 'Vezt', - marketSymbol: 'vzt', - identifier: 'eth-erc20-vzt', - contractAddress: '0x9720b467a710382A232a32F540bDCed7d662a10B', - decimals: 18 - }, - { - symbol: 'WAB', - name: 'WABnetwork', - marketSymbol: 'wab', - identifier: 'eth-erc20-wab', - contractAddress: '0x4BBbC57aF270138Ef2FF2C50DbfAD684e9E0e604', - decimals: 18 - }, - { - symbol: 'WABI', - name: 'Tael', - marketSymbol: 'wabi', - identifier: 'eth-erc20-wabi', - contractAddress: '0x286BDA1413a2Df81731D4930ce2F862a35A609fE', - decimals: 18 - }, - { - symbol: 'WATT', - name: 'WorkChain App Token', - marketSymbol: 'watt', - identifier: 'eth-erc20-watt', - contractAddress: '0x829A4cA1303383F1082B6B1fB937116e4b3b5605', - decimals: 18 - }, - { - symbol: 'WAX', - name: 'WAX', - marketSymbol: 'wax', - identifier: 'eth-erc20-wax', - contractAddress: '0x39Bb259F66E1C59d5ABEF88375979b4D20D98022', - decimals: 8 - }, - { - symbol: 'WBA', - name: 'WeBetCrypto', - marketSymbol: 'wba', - identifier: 'eth-erc20-wba', - contractAddress: '0x74951B677de32D596EE851A233336926e6A2cd09', - decimals: 7 - }, - { - symbol: 'WBTC', - name: 'Wrapped Bitcoin', - marketSymbol: 'wbtc', - identifier: 'eth-erc20-wbtc', - contractAddress: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', - decimals: 8 - }, - { - symbol: 'WCN', - name: 'WorldCoinNetwork', - marketSymbol: 'wcn', - identifier: 'eth-erc20-wcn', - contractAddress: '0x8F936fE0faF0604c9C0Ef2406bde0A65365515d6', - decimals: 18 - }, - { - symbol: 'WCT', - name: 'WePower', - marketSymbol: 'wct', - identifier: 'eth-erc20-wct', - contractAddress: '0x6a0A97E47d15aAd1D132a1Ac79a480E3F2079063', - decimals: 18 - }, - { - symbol: 'WEB', - name: 'Webcoin', - marketSymbol: 'web', - identifier: 'eth-erc20-web', - contractAddress: '0x840fe75ABfaDc0F2d54037829571B2782e919ce4', - decimals: 18 - }, - { - symbol: 'WETH', - name: 'WETH', - marketSymbol: 'weth', - identifier: 'eth-erc20-weth', - contractAddress: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', - decimals: 18 - }, - { - symbol: 'WHEN', - name: 'WHEN Token', - marketSymbol: 'when', - identifier: 'eth-erc20-when', - contractAddress: '0xF4FE95603881D0e07954fD7605E0e9a916e42C44', - decimals: 18 - }, - { - symbol: 'WHO', - name: 'WhoHas', - marketSymbol: 'who', - identifier: 'eth-erc20-who', - contractAddress: '0xe933c0Cd9784414d5F278C114904F5A84b396919', - decimals: 18 - }, - { - symbol: 'WHO', - name: 'WhoHas', - marketSymbol: 'who', - identifier: 'eth-erc20-who', - contractAddress: '0xe200641890772FCe8eE6EDc5354cCEa30ac92F49', - decimals: 18 - }, - { - symbol: 'WIB', - name: 'Wibson Token', - marketSymbol: 'wib', - identifier: 'eth-erc20-wib', - contractAddress: '0x3F17Dd476faF0a4855572F0B6ed5115D9bBA22AD', - decimals: 18 - }, - { - symbol: 'WiC', - name: 'Wi Coin', - marketSymbol: 'wic', - identifier: 'eth-erc20-wic', - contractAddress: '0x5e4ABE6419650CA839Ce5BB7Db422b881a6064bB', - decimals: 18 - }, - { - symbol: 'WIC', - name: 'WickNote', - marketSymbol: 'wic', - identifier: 'eth-erc20-wic', - contractAddress: '0x62CD07D414Ec50B68C7EcAa863a23d344f2d062f', - decimals: 0 - }, - { - symbol: 'WILD', - name: 'WILD Token', - marketSymbol: 'wild', - identifier: 'eth-erc20-wild', - contractAddress: '0xD3C00772B24D997A812249ca637a921e81357701', - decimals: 18 - }, - { - symbol: 'WIN', - name: 'WCOIN', - marketSymbol: 'win', - identifier: 'eth-erc20-win', - contractAddress: '0x899338b84D25aC505a332aDCE7402d697D947494', - decimals: 8 - }, - { - symbol: 'WINGS', - name: 'WINGS', - marketSymbol: 'wings', - identifier: 'eth-erc20-wings', - contractAddress: '0x667088b212ce3d06a1b553a7221E1fD19000d9aF', - decimals: 18 - }, - { - symbol: 'WISH', - name: 'MyWish', - marketSymbol: 'wish', - identifier: 'eth-erc20-wish', - contractAddress: '0x1b22C32cD936cB97C28C5690a0695a82Abf688e6', - decimals: 18 - }, - { - symbol: 'WMK', - name: 'WemarkToken', - marketSymbol: 'wmk', - identifier: 'eth-erc20-wmk', - contractAddress: '0xBFbe5332f172d77811bC6c272844f3e54A7B23bB', - decimals: 18 - }, - { - symbol: 'WNK', - name: 'Woonk', - marketSymbol: 'wnk', - identifier: 'eth-erc20-wnk', - contractAddress: '0xd73A66B8FB26Be8B0AcD7c52Bd325054Ac7d468b', - decimals: 18 - }, - { - symbol: 'WOC', - name: 'WallOfChain', - marketSymbol: 'woc', - identifier: 'eth-erc20-woc', - contractAddress: '0xF9D9702D031407F425a4412682fDc56b07d05262', - decimals: 0 - }, - { - symbol: 'WOLK', - name: 'Wolk Token', - marketSymbol: 'wolk', - identifier: 'eth-erc20-wolk', - contractAddress: '0xF6B55acBBC49f4524Aa48D19281A9A77c54DE10f', - decimals: 18 - }, - { - symbol: 'WOLK', - name: 'WOLK', - marketSymbol: 'wolk', - identifier: 'eth-erc20-wolk', - contractAddress: '0x728781E75735dc0962Df3a51d7Ef47E798A7107E', - decimals: 18 - }, - { - symbol: 'WORK', - name: 'workTOKEN', - marketSymbol: 'work', - identifier: 'eth-erc20-work', - contractAddress: '0xD18e454D844eb0009D32E07A0Cde89E18d64CFb4', - decimals: 18 - }, - { - symbol: 'WORK', - name: 'Aworker', - marketSymbol: 'work', - identifier: 'eth-erc20-work', - contractAddress: '0xA686514FAF7d54289266F483D1e4852C99E13EC7', - decimals: 8 - }, - { - symbol: 'WPC', - name: 'WorldPeaceCoin', - marketSymbol: 'wpc', - identifier: 'eth-erc20-wpc', - contractAddress: '0x62087245087125d3DB5B9A3D713d78E7BBc31e54', - decimals: 18 - }, - { - symbol: 'WPR', - name: 'WePower Token', - marketSymbol: 'wpr', - identifier: 'eth-erc20-wpr', - contractAddress: '0x4CF488387F035FF08c371515562CBa712f9015d4', - decimals: 18 - }, - { - symbol: 'WRC', - name: 'Worldcore', - marketSymbol: 'wrc', - identifier: 'eth-erc20-wrc', - contractAddress: '0x72aDadb447784dd7AB1F472467750fC485e4cb2d', - decimals: 6 - }, - { - symbol: 'WRK', - name: 'WorkCoin', - marketSymbol: 'wrk', - identifier: 'eth-erc20-wrk', - contractAddress: '0x71e8d74fF1C923E369D0e70DFb09866629C4DD35', - decimals: 18 - }, - { - symbol: 'WTC', - name: 'Waltonchain', - marketSymbol: 'wtc', - identifier: 'eth-erc20-wtc', - contractAddress: '0xb7cB1C96dB6B22b0D3d9536E0108d062BD488F74', - decimals: 18 - }, - { - symbol: 'WTT', - name: 'WTT', - marketSymbol: 'wtt', - identifier: 'eth-erc20-wtt', - contractAddress: '0x84119cb33E8F590D75c2D6Ea4e6B0741a7494EDA', - decimals: 0 - }, - { - symbol: 'WYS', - name: 'wystoken', - marketSymbol: 'wys', - identifier: 'eth-erc20-wys', - contractAddress: '0xd8950fDeaa10304B7A7Fd03a2FC66BC39f3c711a', - decimals: 18 - }, - { - symbol: 'WYV', - name: 'WyvernToken', - marketSymbol: 'wyv', - identifier: 'eth-erc20-wyv', - contractAddress: '0x056017c55aE7AE32d12AeF7C679dF83A85ca75Ff', - decimals: 18 - }, - { - symbol: 'X8X', - name: 'X8X', - marketSymbol: 'x8x', - identifier: 'eth-erc20-x8x', - contractAddress: '0x910Dfc18D6EA3D6a7124A6F8B5458F281060fa4c', - decimals: 18 - }, - { - symbol: 'XAUR', - name: 'Xaurum', - marketSymbol: 'xaur', - identifier: 'eth-erc20-xaur', - contractAddress: '0x4DF812F6064def1e5e029f1ca858777CC98D2D81', - decimals: 8 - }, - { - symbol: 'XBL', - name: 'Billionaire Token', - marketSymbol: 'xbl', - identifier: 'eth-erc20-xbl', - contractAddress: '0x49AeC0752E68D0282Db544C677f6BA407BA17ED7', - decimals: 18 - }, - { - symbol: 'XBP', - name: 'BlitzPredict', - marketSymbol: 'xbp', - identifier: 'eth-erc20-xbp', - contractAddress: '0x28dee01D53FED0Edf5f6E310BF8Ef9311513Ae40', - decimals: 18 - }, - { - symbol: 'XCC', - name: 'CoinCrowd', - marketSymbol: 'xcc', - identifier: 'eth-erc20-xcc', - contractAddress: '0x4d829f8C92a6691c56300D020c9e0dB984Cfe2BA', - decimals: 18 - }, - { - symbol: 'XCHF', - name: 'CryptoFranc', - marketSymbol: 'xchf', - identifier: 'eth-erc20-xchf', - contractAddress: '0xB4272071eCAdd69d933AdcD19cA99fe80664fc08', - decimals: 18 - }, - { - symbol: 'XCLR', - name: 'ClearCoin', - marketSymbol: 'xclr', - identifier: 'eth-erc20-xclr', - contractAddress: '0x1E26b3D07E57F453caE30F7DDd2f945f5bF3EF33', - decimals: 8 - }, - { - symbol: 'XDCE', - name: 'XinFin Network', - marketSymbol: 'xdce', - identifier: 'eth-erc20-xdce', - contractAddress: '0x41AB1b6fcbB2fA9DCEd81aCbdeC13Ea6315F2Bf2', - decimals: 18 - }, - { - symbol: 'XES', - name: 'Proxeus', - marketSymbol: 'xes', - identifier: 'eth-erc20-xes', - contractAddress: '0xA017ac5faC5941f95010b12570B812C974469c2C', - decimals: 18 - }, - { - symbol: 'XET', - name: 'ETERNAL TOKEN', - marketSymbol: 'xet', - identifier: 'eth-erc20-xet', - contractAddress: '0x054C64741dBafDC19784505494029823D89c3b13', - decimals: 8 - }, - { - symbol: 'XFS', - name: 'Fanship', - marketSymbol: 'xfs', - identifier: 'eth-erc20-xfs', - contractAddress: '0x16aF5bfb4Ae7E475b9aDC3Bf5Cb2f1E6a50d7940', - decimals: 8 - }, - { - symbol: 'XGG', - name: 'Going Gems', - marketSymbol: 'xgg', - identifier: 'eth-erc20-xgg', - contractAddress: '0xf6b6AA0Ef0f5Edc2C1c5d925477F97eAF66303e7', - decimals: 8 - }, - { - symbol: 'XGM', - name: 'XGM', - marketSymbol: 'xgm', - identifier: 'eth-erc20-xgm', - contractAddress: '0x533ef0984b2FAA227AcC620C67cce12aA39CD8CD', - decimals: 8 - }, - { - symbol: 'XGT', - name: 'XGT', - marketSymbol: 'xgt', - identifier: 'eth-erc20-xgt', - contractAddress: '0x30f4A3e0aB7a76733D8b60b89DD93c3D0b4c9E2f', - decimals: 18 - }, - { - symbol: 'XID', - name: 'Sphere Identity', - marketSymbol: 'xid', - identifier: 'eth-erc20-xid', - contractAddress: '0xB110eC7B1dcb8FAB8dEDbf28f53Bc63eA5BEdd84', - decimals: 8 - }, - { - symbol: 'XMCT', - name: 'XMED Chain', - marketSymbol: 'xmct', - identifier: 'eth-erc20-xmct', - contractAddress: '0x44449Fa4d607F807d1eD4a69ad942971728391C8', - decimals: 18 - }, - { - symbol: 'XMX', - name: 'XMax', - marketSymbol: 'xmx', - identifier: 'eth-erc20-xmx', - contractAddress: '0x0f8c45B896784A1E408526B9300519ef8660209c', - decimals: 8 - }, - { - symbol: 'XNK', - name: 'Ink Protocol', - marketSymbol: 'xnk', - identifier: 'eth-erc20-xnk', - contractAddress: '0xBC86727E770de68B1060C91f6BB6945c73e10388', - decimals: 18 - }, - { - symbol: 'XNN', - name: 'XENON', - marketSymbol: 'xnn', - identifier: 'eth-erc20-xnn', - contractAddress: '0xab95E915c123fdEd5BDfB6325e35ef5515F1EA69', - decimals: 18 - }, - { - symbol: 'XNT', - name: 'XNT', - marketSymbol: 'xnt', - identifier: 'eth-erc20-xnt', - contractAddress: '0x572E6f318056ba0C5d47A422653113843D250691', - decimals: 0 - }, - { - symbol: 'XOV', - name: 'XOVBank', - marketSymbol: 'xov', - identifier: 'eth-erc20-xov', - contractAddress: '0x153eD9CC1b792979d2Bde0BBF45CC2A7e436a5F9', - decimals: 18 - }, - { - symbol: 'XPA', - name: 'XPA', - marketSymbol: 'xpa', - identifier: 'eth-erc20-xpa', - contractAddress: '0x90528aeb3a2B736B780fD1B6C478bB7E1d643170', - decimals: 18 - }, - { - symbol: 'XPAT', - name: 'Pangea Arbitration Token', - marketSymbol: 'xpat', - identifier: 'eth-erc20-xpat', - contractAddress: '0xBB1fA4FdEB3459733bF67EbC6f893003fA976a82', - decimals: 18 - }, - { - symbol: 'XRL', - name: 'XRL', - marketSymbol: 'xrl', - identifier: 'eth-erc20-xrl', - contractAddress: '0xB24754bE79281553dc1adC160ddF5Cd9b74361a4', - decimals: 9 - }, - { - symbol: 'XSC', - name: 'XSC', - marketSymbol: 'xsc', - identifier: 'eth-erc20-xsc', - contractAddress: '0x0F513fFb4926ff82D7F60A05069047AcA295C413', - decimals: 18 - }, - { - symbol: 'XYO', - name: 'XYO', - marketSymbol: 'xyo', - identifier: 'eth-erc20-xyo', - contractAddress: '0x55296f69f40Ea6d20E478533C15A6B08B654E758', - decimals: 18 - }, - { - symbol: 'YEE', - name: 'Yee Token', - marketSymbol: 'yee', - identifier: 'eth-erc20-yee', - contractAddress: '0x922105fAd8153F516bCfB829f56DC097a0E1D705', - decimals: 18 - }, - { - symbol: 'YEED', - name: 'YGGDRASH', - marketSymbol: 'yeed', - identifier: 'eth-erc20-yeed', - contractAddress: '0xcA2796F9F61dc7b238Aab043971e49c6164DF375', - decimals: 18 - }, - { - symbol: 'YEED', - name: 'YEED', - marketSymbol: 'yeed', - identifier: 'eth-erc20-yeed', - contractAddress: '0x6F7A4bac3315B5082F793161a22e26666d22717f', - decimals: 18 - }, - { - symbol: 'YOYOW', - name: 'YOYOW', - marketSymbol: 'yoyow', - identifier: 'eth-erc20-yoyow', - contractAddress: '0xcbeAEc699431857FDB4d37aDDBBdc20E132D4903', - decimals: 18 - }, - { - symbol: 'YUP', - name: 'Crowdholding', - marketSymbol: 'yup', - identifier: 'eth-erc20-yup', - contractAddress: '0xD9A12Cde03a86E800496469858De8581D3A5353d', - decimals: 18 - }, - { - symbol: 'YUPIE', - name: 'YUPIE', - marketSymbol: 'yupie', - identifier: 'eth-erc20-yupie', - contractAddress: '0x0F33bb20a282A7649C7B3AFf644F084a9348e933', - decimals: 18 - }, - { - symbol: 'ZAP', - name: 'ZAP', - marketSymbol: 'zap', - identifier: 'eth-erc20-zap', - contractAddress: '0x6781a0F84c7E9e846DCb84A9a5bd49333067b104', - decimals: 18 - }, - { - symbol: 'ZCN', - name: '0chain', - marketSymbol: 'zcn', - identifier: 'eth-erc20-zcn', - contractAddress: '0xb9EF770B6A5e12E45983C5D80545258aA38F3B78', - decimals: 10 - }, - { - symbol: 'ZCO', - name: 'Zebi', - marketSymbol: 'zco', - identifier: 'eth-erc20-zco', - contractAddress: '0x2008e3057BD734e10AD13c9EAe45Ff132aBc1722', - decimals: 8 - }, - { - symbol: 'ZCS', - name: 'Zeusshield', - marketSymbol: 'zcs', - identifier: 'eth-erc20-zcs', - contractAddress: '0x7A41e0517a5ecA4FdbC7FbebA4D4c47B9fF6DC63', - decimals: 18 - }, - { - symbol: 'ZEUS', - name: 'ZeusNetwork', - marketSymbol: 'zeus', - identifier: 'eth-erc20-zeus', - contractAddress: '0xe7E4279b80D319EDe2889855135A22021baf0907', - decimals: 18 - }, - { - symbol: 'ZIL', - name: 'Zilliqa', - marketSymbol: 'zil', - identifier: 'eth-erc20-zil', - contractAddress: '0x05f4a42e251f2d52b8ed15E9FEdAacFcEF1FAD27', - decimals: 12 - }, - { - symbol: 'ZINC', - name: 'ZINC', - marketSymbol: 'zinc', - identifier: 'eth-erc20-zinc', - contractAddress: '0x4AaC461C86aBfA71e9d00d9a2cde8d74E4E1aeEa', - decimals: 18 - }, - { - symbol: 'ZIP', - name: 'Zipper', - marketSymbol: 'zip', - identifier: 'eth-erc20-zip', - contractAddress: '0xA9d2927d3a04309E008B6af6E2e282AE2952e7fD', - decimals: 18 - }, - { - symbol: 'ZIPT', - name: 'Zippie', - marketSymbol: 'zipt', - identifier: 'eth-erc20-zipt', - contractAddress: '0xEDD7c94FD7B4971b916d15067Bc454b9E1bAD980', - decimals: 18 - }, - { - symbol: 'ZIX', - name: 'ZIX', - marketSymbol: 'zix', - identifier: 'eth-erc20-zix', - contractAddress: '0xf3C092cA8CD6D3d4ca004Dc1d0f1fe8CcAB53599', - decimals: 18 - }, - { - symbol: 'ZLA', - name: 'Zilla', - marketSymbol: 'zla', - identifier: 'eth-erc20-zla', - contractAddress: '0xfd8971d5E8E1740cE2d0A84095fCA4De729d0c16', - decimals: 18 - }, - { - symbol: 'ZMN', - name: 'ZMINE', - marketSymbol: 'zmn', - identifier: 'eth-erc20-zmn', - contractAddress: '0x554FFc77F4251a9fB3c0E3590a6a205f8d4e067D', - decimals: 18 - }, - { - symbol: 'ZPR', - name: 'ZPER', - marketSymbol: 'zpr', - identifier: 'eth-erc20-zpr', - contractAddress: '0xb5b8F5616Fe42d5ceCA3e87F3FddbDd8F496d760', - decimals: 18 - }, - { - symbol: 'ZRX', - name: '0x Project', - marketSymbol: 'zrx', - identifier: 'eth-erc20-zrx', - contractAddress: '0xE41d2489571d322189246DaFA5ebDe1F4699F498', - decimals: 18 - }, - { - symbol: 'ZST', - name: 'Zeus Exchange', - marketSymbol: 'zst', - identifier: 'eth-erc20-zst', - contractAddress: '0xe386B139Ed3715Ca4B18Fd52671bDcea1cdFE4b1', - decimals: 8 - }, - { - symbol: 'ZTX', - name: 'ZTX', - marketSymbol: 'ztx', - identifier: 'eth-erc20-ztx', - contractAddress: '0xE8F9fa977ea585591d9F394681318C16552577fB', - decimals: 18 - }, - { - symbol: 'ZXC', - name: '0xcert Protocol Token', - marketSymbol: 'zxc', - identifier: 'eth-erc20-zxc', - contractAddress: '0x83e2BE8d114F9661221384B3a50d24B96a5653F5', - decimals: 18 - } -] diff --git a/src/providers/scanner/scanner.ts b/src/providers/scanner/scanner.ts deleted file mode 100644 index cbb2e3fb..00000000 --- a/src/providers/scanner/scanner.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { Injectable } from '@angular/core' -import { Platform } from 'ionic-angular' - -declare var QRScanner: any - -@Injectable() -export class ScannerProvider { - public isShowing = false - - constructor(private platform: Platform) {} - - public askForPermission() { - if (this.platform.is('cordova')) { - QRScanner.openSettings() - } - } - - public hasPermission(): Promise { - if (this.platform.is('cordova')) { - return new Promise((resolve, reject) => { - const onDone = (err, status) => { - if (err) { - // here we can handle errors and clean up any loose ends. - console.error('Scanner permission ', err) - reject([false, false]) - } - if (status.authorized) { - console.log('Scanner permission granted') - resolve([true, true]) - } else if (status.denied) { - console.warn('Scanner permission denied') - reject([false, true]) - // The video preview will remain black, and scanning is disabled. We can - // try to ask the user to change their mind, but we'll have to send them - // to their device settings with `QRScanner.openSettings()`. - } else { - console.warn('Scanner permission denied') - reject([false, false]) - // we didn't get permission, but we didn't get permanently denied. (On - // Android, a denial isn't permanent unless the user checks the "Don't - // ask again" box.) We can ask again at the next relevant opportunity. - } - } - QRScanner.prepare(onDone) - }) - } - } - - public scan(successCallback: (text: string) => void = null, errorCallback: (text: string) => void = null) { - const scanCallback = (err, text) => { - if (err) { - console.error('Scanner scan error', err) - if (errorCallback) { - errorCallback(err) - } - } - - console.log('Scanner scan success', text) - successCallback(text) - } - - QRScanner.scan(scanCallback) - } - - public show() { - if (this.platform.is('cordova')) { - if (this.isShowing) { - return - } - this.isShowing = true - QRScanner.show() - } - } - - public stopScan() { - if (this.platform.is('cordova')) { - QRScanner.cancelScan(null) - } - } - - public destroy() { - if (this.platform.is('cordova')) { - this.isShowing = false - QRScanner.destroy() - } - } -} diff --git a/src/providers/scheme-routing/scheme-routing.spec.ts b/src/providers/scheme-routing/scheme-routing.spec.ts deleted file mode 100644 index 2e1bef40..00000000 --- a/src/providers/scheme-routing/scheme-routing.spec.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { async, TestBed } from '@angular/core/testing' -import { NavController, NavParams, Platform, AlertController, App, LoadingController } from 'ionic-angular' -import { StatusBar } from '@ionic-native/status-bar' -import 'jasmine' -import { SplashScreen } from '@ionic-native/splash-screen' - -import { - PlatformMock, - StatusBarMock, - SplashScreenMock, - NavParamsMock, - DeviceProviderMock, - AlertControllerMock -} from '../../../test-config/mocks-ionic' -import { NavControllerMock, AppMock, LoadingControllerMock } from 'ionic-mocks' -import { SchemeRoutingProvider } from './scheme-routing' - -import { SecretsProvider } from '../../providers/secrets/secrets.provider' -import { SecureStorageService } from '../../providers/storage/secure-storage' -import { StorageMock } from '../../../test-config/storage-mock' -import { Storage } from '@ionic/storage' -import { SecureStorageServiceMock } from '../../providers/storage/secure-storage.mock' -import { HttpClientTestingModule } from '@angular/common/http/testing' -import { TranslateModule, TranslateService } from '@ngx-translate/core' -import { HttpClient } from '@angular/common/http' - -describe('SchemeRoutingProvider Provider', () => { - let schemeRoutingProvider: SchemeRoutingProvider - let storageProvider: Storage - let secureStorage: SecureStorageServiceMock - let deviceProvider: DeviceProviderMock - let navController: NavController - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [HttpClientTestingModule, TranslateModule.forRoot()], - providers: [ - SchemeRoutingProvider, - SecretsProvider, - { provide: App, useClass: AppMock }, - { - provide: AlertController, - useValue: AlertControllerMock - }, - { - provide: LoadingController, - useClass: LoadingControllerMock - }, - { provide: SecureStorageService, useClass: SecureStorageServiceMock }, - { provide: Storage, useClass: StorageMock }, - { provide: NavController, useClass: NavControllerMock }, - { provide: NavParams, useClass: NavParamsMock }, - { provide: StatusBar, useClass: StatusBarMock }, - { provide: SplashScreen, useClass: SplashScreenMock }, - { provide: Platform, useClass: PlatformMock }, - TranslateService - ] - }) - })) - - beforeEach(() => { - schemeRoutingProvider = TestBed.get(SchemeRoutingProvider) - storageProvider = TestBed.get(Storage) - secureStorage = TestBed.get(SecureStorageService) - navController = TestBed.get(NavController) - }) - - it('should be created', () => { - expect(schemeRoutingProvider instanceof SchemeRoutingProvider).toBe(true) - }) - - it('should show alert', async done => { - await schemeRoutingProvider.showTranslatedAlert('Test', 'Message', []) - done() - }) - - it('should handle request', async(async () => { - const text: string = 'test' - const callback = () => undefined - try { - await schemeRoutingProvider.handleNewSyncRequest(navController, text, callback) - } catch (e) { - expect(e).toBeDefined() - } - })) -}) diff --git a/src/providers/scheme-routing/scheme-routing.ts b/src/providers/scheme-routing/scheme-routing.ts deleted file mode 100644 index d02c4dd2..00000000 --- a/src/providers/scheme-routing/scheme-routing.ts +++ /dev/null @@ -1,168 +0,0 @@ -import { Injectable } from '@angular/core' -import { AlertController, AlertButton, App, NavController } from 'ionic-angular' -import { AirGapWallet, DeserializedSyncProtocol, UnsignedTransaction, SyncProtocolUtils, EncodedType } from 'airgap-coin-lib' -import { SecretsProvider } from '../secrets/secrets.provider' -import { TransactionDetailPage } from '../../pages/transaction-detail/transaction-detail' -import { handleErrorLocal, ErrorCategory } from '../error-handler/error-handler' -import { TranslateService } from '@ngx-translate/core' - -@Injectable() -export class SchemeRoutingProvider { - private navController: NavController - /* TS 2.7 feature - private syncSchemeHandlers: { - [key in EncodedType]: (deserializedSync: DeserializedSyncProtocol, scanAgainCallback: Function) => Promise - } - */ - private syncSchemeHandlers: ((deserializedSync: DeserializedSyncProtocol, scanAgainCallback: Function) => Promise)[] = [] - - constructor( - protected app: App, - private secretsProvider: SecretsProvider, - private alertCtrl: AlertController, - private translateService: TranslateService - ) { - this.syncSchemeHandlers[EncodedType.WALLET_SYNC] = this.syncTypeNotSupportedAlert.bind(this) - this.syncSchemeHandlers[EncodedType.UNSIGNED_TRANSACTION] = this.handleUnsignedTransaction.bind(this) - this.syncSchemeHandlers[EncodedType.SIGNED_TRANSACTION] = this.syncTypeNotSupportedAlert.bind(this) - - /* TS 2.7 feature - this.syncSchemeHandlers = { - [EncodedType.WALLET_SYNC]: this.syncTypeNotSupportedAlert.bind(this), - [EncodedType.UNSIGNED_TRANSACTION]: this.handleUnsignedTransaction.bind(this), - [EncodedType.SIGNED_TRANSACTION]: this.syncTypeNotSupportedAlert.bind(this) - } - */ - } - - async handleNewSyncRequest( - navCtrl: NavController, - rawString: string, - scanAgainCallback: Function = () => { - /* */ - } - ) { - // wait for secrets to be loaded for sure - await this.secretsProvider.isReady() - - this.navController = navCtrl - const syncProtocol = new SyncProtocolUtils() - - let data: string | undefined - try { - let url: URL = new URL(rawString) - data = url.searchParams.get('d') - } catch (e) { - data = rawString // Fallback to support raw data QRs - } - - try { - const deserializedSync = await syncProtocol.deserialize(data) - - if (deserializedSync.type in EncodedType) { - // Only handle types that we know - return this.syncSchemeHandlers[deserializedSync.type](deserializedSync, scanAgainCallback) - } else { - return this.syncTypeNotSupportedAlert(deserializedSync, scanAgainCallback) - } - } catch (e) { - console.warn('Deserialization of sync failed', e) - // TODO: Log error locally - const cancelButton = { - text: 'tab-wallets.invalid-sync-operation_alert.okay_label', - role: 'cancel', - handler: () => { - scanAgainCallback() - } - } - this.showTranslatedAlert('tab-wallets.invalid-sync-operation_alert.title', 'tab-wallets.invalid-sync-operation_alert.text', [ - cancelButton - ]) - } - } - - private async handleUnsignedTransaction(deserializedSyncProtocol: DeserializedSyncProtocol, scanAgainCallback: Function) { - const unsignedTransaction = deserializedSyncProtocol.payload as UnsignedTransaction - - let correctWallet = this.secretsProvider.findWalletByPublicKeyAndProtocolIdentifier( - unsignedTransaction.publicKey, - deserializedSyncProtocol.protocol - ) - - // If we can't find a wallet for a protocol, we will try to find the "base" wallet and then create a new - // wallet with the right protocol. This way we can sign all ERC20 transactions, but show the right amount - // and fee for all tokens we support. - if (!correctWallet) { - const baseWallet = this.secretsProvider.findBaseWalletByPublicKeyAndProtocolIdentifier( - unsignedTransaction.publicKey, - deserializedSyncProtocol.protocol - ) - - // If the protocol is not supported, use the base protocol for signing - try { - correctWallet = new AirGapWallet( - deserializedSyncProtocol.protocol, - baseWallet.publicKey, - baseWallet.isExtendedPublicKey, - baseWallet.derivationPath - ) - correctWallet.addresses = baseWallet.addresses - } catch (e) { - if (e.message === 'PROTOCOL_NOT_SUPPORTED') { - correctWallet = baseWallet - } - } - } - - if (correctWallet) { - if (this.navController) { - this.navController - .push(TransactionDetailPage, { - transaction: unsignedTransaction, - wallet: correctWallet, - deserializedSync: deserializedSyncProtocol - }) - .catch(handleErrorLocal(ErrorCategory.IONIC_NAVIGATION)) - } - } else { - const cancelButton = { - text: 'tab-wallets.no-secret_alert.okay_label', - role: 'cancel', - handler: () => { - scanAgainCallback() - } - } - - this.showTranslatedAlert('tab-wallets.no-secret_alert.title', 'tab-wallets.no-secret_alert.text', [cancelButton]) - } - } - - private async syncTypeNotSupportedAlert(_deserializedSyncProtocol: DeserializedSyncProtocol, scanAgainCallback: Function) { - // TODO: Log error locally - const cancelButton = { - text: 'tab-wallets.sync-operation-not-supported_alert.okay_label', - role: 'cancel', - handler: () => { - scanAgainCallback() - } - } - this.showTranslatedAlert( - 'tab-wallets.sync-operation-not-supported_alert.title', - 'tab-wallets.sync-operation-not-supported_alert.text', - [cancelButton] - ) - } - - showTranslatedAlert(title: string, message: string, buttons: AlertButton[]): void { - const translationKeys = [title, message, ...buttons.map(button => button.text)] - this.translateService.get(translationKeys).subscribe(values => { - let alert = this.alertCtrl.create({ - title: values[title], - message: values[message], - enableBackdropDismiss: true, - buttons: buttons.map(button => (button.text = values[button.text])) - }) - alert.present().catch(handleErrorLocal(ErrorCategory.IONIC_ALERT)) - }) - } -} diff --git a/src/providers/secrets/secrets.provider.ts b/src/providers/secrets/secrets.provider.ts deleted file mode 100644 index 0dc849e4..00000000 --- a/src/providers/secrets/secrets.provider.ts +++ /dev/null @@ -1,275 +0,0 @@ -import { Injectable, NgZone } from '@angular/core' -import { Storage } from '@ionic/storage' -import { BehaviorSubject } from 'rxjs/BehaviorSubject' - -import { Secret } from '../../models/secret' -import { SecureStorageService } from '../storage/secure-storage' -import { AirGapWallet, getProtocolByIdentifier } from 'airgap-coin-lib' -import { LoadingController, AlertController } from 'ionic-angular' - -import bip39 from 'bip39' -import { handleErrorLocal, ErrorCategory } from '../error-handler/error-handler' -@Injectable() -export class SecretsProvider { - private activeSecret: Secret - private secretsList: Secret[] = [] - public currentSecretsList = new BehaviorSubject(this.secretsList) - private ready: Promise - - constructor( - private secureStorageService: SecureStorageService, - private storage: Storage, - private ngZone: NgZone, - private loadingCtrl: LoadingController, - private alertCtrl: AlertController - ) { - this.ready = this.init() - } - - private async init(): Promise { - const secrets = await this.read() - this.secretsList.push(...secrets.map(obj => Secret.init(obj))) - this.activeSecret = this.secretsList[0] - this.currentSecretsList.next(this.secretsList) // we need to force this update, as [] will not be broadcasted again - } - - public isReady(): Promise { - return this.ready - } - - private read(): Promise { - return new Promise((resolve, reject) => { - this.storage - .get('airgap-secret-list') - .then(rawSecretsPayload => { - // necessary due to double serialization bug we had - let secrets: Secret[] - if (typeof rawSecretsPayload === 'string') { - secrets = JSON.parse(rawSecretsPayload) - } else { - secrets = rawSecretsPayload - } - if (!secrets) { - secrets = [] - } - for (let k = 0; k < secrets.length; k++) { - const secret = secrets[k] - if (secret.wallets) { - for (let i = 0; i < secret.wallets.length; i++) { - const wallet = secret.wallets[i] - let airGapWallet = new AirGapWallet( - wallet.protocolIdentifier, - wallet.publicKey, - wallet.isExtendedPublicKey, - wallet.derivationPath - ) - airGapWallet.addresses = wallet.addresses - secret.wallets[i] = airGapWallet - } - } else { - secrets[k].wallets = [] - } - } - resolve(secrets) - }) - .catch(reject) - }) - } - - addOrUpdateSecret(secret: Secret): Promise { - if (!secret.wallets) { - secret.wallets = [] - } - return new Promise((resolve, reject) => { - if (!secret.secretHex) { - this.secretsList[this.secretsList.findIndex(obj => obj.id === secret.id)] = secret - this.persist() - .then(resolve) - .catch(handleErrorLocal(ErrorCategory.SECURE_STORAGE)) - } else { - this.secureStorageService - .get(secret.id, secret.isParanoia) - .then(secureStorage => { - return secureStorage.setItem(secret.id, secret.secretHex) - }) - .then( - _value => { - secret.flushSecret() - if (this.secretsList.findIndex(obj => obj.id === secret.id) === -1) { - this.ngZone.run(() => { - this.secretsList.push(secret) - this.activeSecret = secret - this.persist() - .then(resolve) - .catch(handleErrorLocal(ErrorCategory.SECURE_STORAGE)) - }) - } else { - this.activeSecret = secret - this.persist() - .then(resolve) - .catch(handleErrorLocal(ErrorCategory.SECURE_STORAGE)) - } - }, - error => { - console.warn(error) - reject(error) - } - ) - } - }) - } - - remove(secret: Secret): Promise { - return new Promise(resolve => { - return this.secureStorageService.get(secret.id, secret.isParanoia).then(secureStorage => { - secureStorage - .removeItem(secret.id) - .then(() => { - this.secretsList.splice(this.secretsList.indexOf(secret), 1) - this.persist() - .then(resolve) - .catch(handleErrorLocal(ErrorCategory.SECURE_STORAGE)) - }) - .catch(handleErrorLocal(ErrorCategory.SECURE_STORAGE)) - }) - }) - } - - retrieveEntropyForSecret(secret: Secret): Promise { - return new Promise(resolve => { - return this.secureStorageService.get(secret.id, secret.isParanoia).then(secureStorage => { - resolve(secureStorage.getItem(secret.id)) - }) - }) - } - - findByPublicKey(pubKey: string): Secret { - for (let secret of this.secretsList) { - let foundWallet = secret.wallets.find(wallet => wallet.publicKey === pubKey) - if (foundWallet !== undefined) { - return secret - } - } - } - - getWallets(): AirGapWallet[] { - const walletList = [] - for (let secret of this.secretsList) { - walletList.push(...secret.wallets) - } - return walletList - } - - removeWallet(wallet: AirGapWallet): Promise { - const secret = this.findByPublicKey(wallet.publicKey) - if (!secret) { - return undefined - } - - secret.wallets.splice( - secret.wallets.findIndex( - findWallet => findWallet.publicKey === wallet.publicKey && findWallet.protocolIdentifier === wallet.protocolIdentifier - ), - 1 - ) - return this.addOrUpdateSecret(secret) - } - - findWalletByPublicKeyAndProtocolIdentifier(pubKey: string, protocolIdentifier: string): AirGapWallet { - const secret = this.findByPublicKey(pubKey) - if (!secret) { - return undefined - } - - let foundWallet = secret.wallets.find(wallet => wallet.publicKey === pubKey && wallet.protocolIdentifier === protocolIdentifier) - if (foundWallet !== undefined) { - return foundWallet - } - } - - findBaseWalletByPublicKeyAndProtocolIdentifier(pubKey: string, protocolIdentifier: string): AirGapWallet | undefined { - const secret = this.findByPublicKey(pubKey) - if (!secret) { - return undefined - } - - return secret.wallets.find(wallet => wallet.publicKey === pubKey && protocolIdentifier.startsWith(wallet.protocolIdentifier)) - } - - getActiveSecret(): Secret { - return this.activeSecret || this.secretsList[0] - } - - setActiveSecret(secret: Secret): any { - this.activeSecret = secret - } - - persist(): Promise { - this.secretsList.forEach(obj => obj.flushSecret()) // make sure there are no secrets in there - return this.storage.set('airgap-secret-list', this.secretsList) - } - - addWallet(protocolIdentifier: string, isHDWallet: boolean, customDerivationPath: string): Promise { - return new Promise((resolve, reject) => { - const loading = this.loadingCtrl.create({ - content: 'Deriving your wallet...' - }) - loading.present().catch(handleErrorLocal(ErrorCategory.IONIC_LOADER)) - - const protocol = getProtocolByIdentifier(protocolIdentifier) - - let secret = this.getActiveSecret() - this.retrieveEntropyForSecret(secret) - .then(entropy => { - let seed = bip39.mnemonicToSeedHex(bip39.entropyToMnemonic(entropy)) - let wallet = new AirGapWallet( - protocol.identifier, - protocol.getPublicKeyFromHexSecret(seed, customDerivationPath), - isHDWallet, - customDerivationPath - ) - wallet - .deriveAddresses(1) - .then(addresses => { - wallet.addresses = addresses - - if ( - secret.wallets.find(obj => obj.publicKey === wallet.publicKey && obj.protocolIdentifier === wallet.protocolIdentifier) === - undefined - ) { - secret.wallets.push(wallet) - resolve(this.addOrUpdateSecret(secret)) - } else { - this.showAlert( - 'Wallet already exists', - 'You already have added this specific wallet. Please change its derivation path to add another address (advanced mode).' - ) - reject() - } - loading.dismiss().catch(handleErrorLocal(ErrorCategory.IONIC_LOADER)) - }) - .catch(handleErrorLocal(ErrorCategory.WALLET_PROVIDER)) - }) - .catch(err => { - this.showAlert('Error', err) - loading.dismiss().catch(handleErrorLocal(ErrorCategory.IONIC_LOADER)) - reject() - }) - }) - } - - showAlert(title: string, message: string) { - let alert = this.alertCtrl.create({ - title, - message, - enableBackdropDismiss: false, - buttons: [ - { - text: 'Okay!', - role: 'cancel' - } - ] - }) - alert.present().catch(handleErrorLocal(ErrorCategory.IONIC_ALERT)) - } -} diff --git a/src/providers/share-url/share-url.ts b/src/providers/share-url/share-url.ts deleted file mode 100644 index d1db5645..00000000 --- a/src/providers/share-url/share-url.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { HttpClient } from '@angular/common/http' -import { Injectable } from '@angular/core' -import { AirGapWallet, DeserializedSyncProtocol, EncodedType, SyncProtocolUtils, SyncWalletRequest } from 'airgap-coin-lib' - -@Injectable() -export class ShareUrlProvider { - constructor(public http: HttpClient) { - // - } - - async generateShareURL(wallet: AirGapWallet): Promise { - const syncProtocol = new SyncProtocolUtils() - - const syncWalletRequest: SyncWalletRequest = { - publicKey: wallet.publicKey, - isExtendedPublicKey: wallet.isExtendedPublicKey, - derivationPath: wallet.derivationPath - } - - const deserializedTxSigningRequest: DeserializedSyncProtocol = { - version: 1, - protocol: wallet.protocolIdentifier, - type: EncodedType.WALLET_SYNC, - payload: syncWalletRequest - } - - const serializedTx = await syncProtocol.serialize(deserializedTxSigningRequest) - - return `airgap-wallet://?d=${serializedTx}` - } -} diff --git a/src/providers/startup-checks/startup-checks.provider.spec.ts b/src/providers/startup-checks/startup-checks.provider.spec.ts deleted file mode 100644 index e611f9df..00000000 --- a/src/providers/startup-checks/startup-checks.provider.spec.ts +++ /dev/null @@ -1,113 +0,0 @@ -import 'jasmine' -import { async, TestBed } from '@angular/core/testing' -import { NavController, NavParams, Platform, ModalController } from 'ionic-angular' -import { StatusBar } from '@ionic-native/status-bar' -import { SplashScreen } from '@ionic-native/splash-screen' - -import { PlatformMock, StatusBarMock, SplashScreenMock, NavParamsMock, DeviceProviderMock } from '../../../test-config/mocks-ionic' -import { NavControllerMock, ModalControllerMock } from 'ionic-mocks' - -import { SecretsProvider } from '../../providers/secrets/secrets.provider' -import { SecureStorageService } from '../../providers/storage/secure-storage' -import { StorageMock } from '../../../test-config/storage-mock' -import { Storage } from '@ionic/storage' -import { SecureStorageServiceMock } from '../../providers/storage/secure-storage.mock' -import { StartupChecksProvider } from './startup-checks.provider' -import { DeviceProvider } from '../device/device' - -describe('StartupCheck Provider', () => { - let startupChecksProvider: StartupChecksProvider - let storageProvider: Storage - let secureStorage: SecureStorageServiceMock - let deviceProvider: DeviceProviderMock - - beforeEach(async(() => { - TestBed.configureTestingModule({ - providers: [ - StartupChecksProvider, - SecretsProvider, - { provide: DeviceProvider, useClass: DeviceProviderMock }, - { provide: ModalController, useClass: ModalControllerMock }, - { provide: SecureStorageService, useClass: SecureStorageServiceMock }, - { provide: Storage, useClass: StorageMock }, - { provide: NavController, useClass: NavControllerMock }, - { provide: NavParams, useClass: NavParamsMock }, - { provide: StatusBar, useClass: StatusBarMock }, - { provide: SplashScreen, useClass: SplashScreenMock }, - { provide: Platform, useClass: PlatformMock } - ] - }) - .compileComponents() - .then(() => { - startupChecksProvider = TestBed.get(StartupChecksProvider) - storageProvider = TestBed.get(Storage) - deviceProvider = TestBed.get(DeviceProvider) - secureStorage = TestBed.get(SecureStorageService) - - secureStorage.isSecure = 1 - deviceProvider.isRooted = 0 - storageProvider.set('DISCLAIMER_INITIAL', true) - storageProvider.set('INTRODUCTION_INITIAL', true) - }) - })) - - it('should be created', () => { - expect(startupChecksProvider instanceof StartupChecksProvider).toBe(true) - }) - - it('should should show root modal if device is rooted', async(() => { - deviceProvider.isRooted = 1 - - startupChecksProvider.initChecks().catch(consequence => { - expect(consequence.name).toBe('rootCheck') - }) - })) - - it('should should show disclaimer modal if the disclaimer has not been accepted yet', async(() => { - storageProvider.set('DISCLAIMER_INITIAL', false) - - startupChecksProvider - .initChecks() - .then(() => { - expect(true).toEqual(false) // we should not get here - }) - .catch(consequence => { - expect(consequence.name).toBe('disclaimerAcceptedCheck') - }) - })) - - it('should should show the introduction modal if the introduction has not been accepted yet', async(() => { - storageProvider.set('INTRODUCTION_INITIAL', false) - - startupChecksProvider - .initChecks() - .then(() => { - expect(true).toEqual(false) // we should not get here - }) - .catch(consequence => { - expect(consequence.name).toBe('introductionAcceptedCheck') - }) - })) - - it('should should show the device security modal if device is not secure', async(() => { - secureStorage.isSecure = 0 - - startupChecksProvider - .initChecks() - .then(() => { - expect(true).toEqual(false) // we should not get here - }) - .catch(consequence => { - expect(consequence.name).toBe('deviceSecureCheck') - }) - })) - - it('should resolve is everything is ok', async(() => { - storageProvider.set('DISCLAIMER_INITIAL', true) - storageProvider.set('INTRODUCTION_INITIAL', true) - secureStorage.isSecure = 1 - deviceProvider.isRooted = 0 - - startupChecksProvider.initChecks() - })) -}) diff --git a/src/providers/startup-checks/startup-checks.provider.ts b/src/providers/startup-checks/startup-checks.provider.ts deleted file mode 100644 index 0dfcf3c5..00000000 --- a/src/providers/startup-checks/startup-checks.provider.ts +++ /dev/null @@ -1,107 +0,0 @@ -import 'jasmine' -import { Injectable } from '@angular/core' -import { IntroductionPage } from '../../pages/introduction/introduction' -import { WarningsModalPage, Warning } from '../../pages/warnings-modal/warnings-modal' -import { DeviceProvider } from '../device/device' -import { ModalController } from 'ionic-angular' -import { Storage } from '@ionic/storage' -import { SecureStorageService } from '../storage/secure-storage' -import { DistributionOnboardingPage } from '../../pages/distribution-onboarding/distribution-onboarding' -import { handleErrorLocal, ErrorCategory } from '../error-handler/error-handler' - -@Injectable() -export class StartupChecksProvider { - checks: { name: string; check: Function; outcome: boolean; consequence: Function }[] - - constructor( - secureStorage: SecureStorageService, - deviceProvider: DeviceProvider, - private modalController: ModalController, - private storage: Storage - ) { - this.checks = [ - { - name: 'rootCheck', - check: () => deviceProvider.checkForRoot(), - outcome: false, - consequence: (cb: Function) => { - this.presentModal(WarningsModalPage, { errorType: Warning.ROOT }, cb) - } - }, - { - name: 'deviceSecureCheck', - check: () => secureStorage.isDeviceSecure(), - outcome: true, - consequence: (cb: Function) => { - this.presentModal(WarningsModalPage, { errorType: Warning.SECURE_STORAGE }, cb) - } - }, - { - name: 'disclaimerAcceptedCheck', - check: () => this.storage.get('DISCLAIMER_INITIAL'), - outcome: true, - consequence: (cb: Function) => { - this.presentModal(WarningsModalPage, { errorType: Warning.INITIAL_DISCLAIMER }, cb) - } - }, - { - name: 'introductionAcceptedCheck', - check: () => this.storage.get('INTRODUCTION_INITIAL'), - outcome: true, - consequence: (cb: Function) => { - this.presentModal(IntroductionPage, {}, cb) - } - }, - { - name: 'electronCheck', - check: (): Promise => { - return new Promise(async resolve => { - const isElectron = await deviceProvider.checkForElectron() - const hasShownDisclaimer = await this.storage.get('DISCLAIMER_ELECTRON') - resolve(!isElectron || hasShownDisclaimer) - }) - }, - outcome: true, - consequence: (cb: Function) => { - this.presentModal(DistributionOnboardingPage, {}, cb) - } - } - ] - } - - presentModal(page: any, modalConfig: any, callback: Function) { - let modal = this.modalController.create(page, modalConfig, { enableBackdropDismiss: false }) - modal.onDidDismiss(_data => callback()) - modal - .present() - .then(() => { - console.log('check modal presented') - }) - .catch(handleErrorLocal(ErrorCategory.IONIC_MODAL)) - } - - initChecks(): Promise { - return new Promise((resolve, reject) => { - this.checks - .reduce((promiseChain, currentTask) => { - return promiseChain.then(chainResults => currentTask.check().then(currentResult => [...chainResults, currentResult])) - }, Promise.resolve([])) - .then(arrayOfResults => { - let failedIndex = arrayOfResults.findIndex((val, index) => { - if (typeof val === 'number') { - val = Boolean(val).valueOf() - } - return val !== this.checks[index].outcome - }) - - if (failedIndex === -1) { - resolve() - return - } - - reject(this.checks[failedIndex]) - }) - .catch(handleErrorLocal(ErrorCategory.INIT_CHECK)) - }) - } -} diff --git a/src/providers/storage/secure-storage.factory.ts b/src/providers/storage/secure-storage.factory.ts deleted file mode 100644 index 68db4a2e..00000000 --- a/src/providers/storage/secure-storage.factory.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Platform } from 'ionic-angular' -import { SecureStorageServiceMock } from './secure-storage.mock' -import { SecureStorageService } from './secure-storage' - -export function SecureStorageFactory(platform: Platform) { - if (platform.is('cordova')) { - return new SecureStorageService() - } else { - return new SecureStorageServiceMock() - } -} diff --git a/src/providers/storage/secure-storage.mock.ts b/src/providers/storage/secure-storage.mock.ts deleted file mode 100644 index 636b7ea6..00000000 --- a/src/providers/storage/secure-storage.mock.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { Injectable } from '@angular/core' -import { SecureStorage } from './secure-storage' -import { handleErrorLocal, ErrorCategory } from '../error-handler/error-handler' - -@Injectable() -export class SecureStorageServiceMock { - isSecure = 1 - - constructor() { - console.log('SecureStorageServiceMock') - } - - isDeviceSecure(): Promise { - return new Promise(resolve => { - console.warn('SecureStorageServiceMock - This Device is NOT secured') - resolve(this.isSecure) - }) - } - - secureDevice(): Promise { - return new Promise(resolve => { - console.warn('SecureStorageServiceMock - This Device is NOT secured') - resolve() - }) - } - - get(alias: string, _isParanoia: boolean): Promise { - const secureStorage: SecureStorage = { - init() { - console.warn('SecureStorageServiceMock') - return new Promise(resolve => { - resolve() - }) - }, - setItem(key: string, value: string): Promise { - console.warn('SecureStorageServiceMock') - localStorage.setItem(alias + '-' + key, value) - return new Promise(resolve => { - resolve() - }) - }, - getItem(key: string): Promise { - console.warn('SecureStorageServiceMock') - const result = localStorage.getItem(alias + '-' + key) - return new Promise(resolve => { - resolve(result) - }) - }, - removeItem: function(key) { - console.warn('SecureStorageServiceMock') - localStorage.removeItem(alias + '-' + key) - return new Promise(resolve => { - resolve() - }) - } - } - - return new Promise(resolve => { - secureStorage - .init() - .then(() => { - resolve(secureStorage) - }) - .catch(handleErrorLocal(ErrorCategory.SECURE_STORAGE)) - }) - } -} diff --git a/src/providers/storage/secure-storage.ts b/src/providers/storage/secure-storage.ts deleted file mode 100644 index 0f6f3a21..00000000 --- a/src/providers/storage/secure-storage.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { Injectable } from '@angular/core' - -declare var window - -interface CordovaSecureStorage { - init(successCallback: Function, errorCallback: Function) - setItem(key: string, value: string, successCallback: Function, errorCallback: Function) - getItem(key: string, successCallback: Function, errorCallback: Function) - removeItem(key: string, successCallback: Function, errorCallback: Function) - isDeviceSecure(successCallback: Function, errorCallback: Function) - secureDevice(successCallback: Function, errorCallback: Function) -} - -export interface SecureStorage { - init(): Promise - setItem(key: string, value: string): Promise - getItem(key: string): Promise - removeItem(key: string): Promise -} - -@Injectable() -export class SecureStorageService { - private create(alias: string, isParanoia: boolean): CordovaSecureStorage { - return new window.SecureStorage(alias, isParanoia) - } - - isDeviceSecure(): Promise { - return new Promise((resolve, reject) => { - this.create('airgap-secure-storage', false).isDeviceSecure(resolve, reject) - }) - } - - secureDevice(): Promise { - return new Promise((resolve, reject) => { - this.create('airgap-secure-storage', false).secureDevice(resolve, reject) - }) - } - - get(alias: string, isParanoia: boolean): Promise { - let secureStorage = this.create(alias, isParanoia) - return new Promise((resolve, reject) => { - secureStorage.init( - () => { - resolve({ - init: function() { - return new Promise((resolve, reject) => { - secureStorage.init(resolve, reject) - }) - }, - setItem: function(key, value) { - return new Promise((resolve, reject) => { - secureStorage.setItem(key, value, resolve, reject) - }) - }, - getItem: function(key) { - return new Promise((resolve, reject) => { - secureStorage.getItem(key, resolve, reject) - }) - }, - removeItem: function(key) { - return new Promise((resolve, reject) => { - secureStorage.removeItem(key, resolve, reject) - }) - } - }) - }, - err => { - reject(err) - } - ) - }) - } -} diff --git a/src/service-worker.js b/src/service-worker.js deleted file mode 100644 index cff0bdf1..00000000 --- a/src/service-worker.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Check out https://googlechromelabs.github.io/sw-toolbox/ for - * more info on how to use sw-toolbox to custom configure your service worker. - */ - -'use strict' -importScripts('./build/sw-toolbox.js') - -self.toolbox.options.cache = { - name: 'ionic-cache' -} - -// pre-cache our key assets -self.toolbox.precache(['./build/main.js', './build/vendor.js', './build/main.css', './build/polyfills.js', 'index.html', 'manifest.json']) - -// dynamically cache any other local assets -self.toolbox.router.any('/*', self.toolbox.fastest) - -// for any other requests go to the network, cache, -// and then only use that cached resource if your user goes offline -self.toolbox.router.default = self.toolbox.networkFirst diff --git a/src/test.ts b/src/test.ts new file mode 100644 index 00000000..f33e106f --- /dev/null +++ b/src/test.ts @@ -0,0 +1,15 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +// tslint:disable:ordered-imports +import 'zone.js/dist/zone-testing' +import { getTestBed } from '@angular/core/testing' +import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing' + +declare const require: any + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()) +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/) +// And load the modules. +context.keys().map(context) diff --git a/src/theme/variables.scss b/src/theme/variables.scss index b96e326e..4b39b39f 100644 --- a/src/theme/variables.scss +++ b/src/theme/variables.scss @@ -1,77 +1,77 @@ // Ionic Variables and Theming. For more info, please see: // http://ionicframework.com/docs/theming/ -// Font path is used to include ionicons, -// roboto, and noto sans fonts -$font-path: '../assets/fonts'; - -// The app direction is used to include -// rtl styles in your app. For more info, please see: -// http://ionicframework.com/docs/theming/rtl-support/ -$app-direction: ltr; - -@import 'ionic.globals'; - -// Shared Variables -// -------------------------------------------------- -// To customize the look and feel of this app, you can override -// the Sass variables found in Ionic's source scss files. -// To view all the possible Ionic variables, see: -// http://ionicframework.com/docs/theming/overriding-ionic-variables/ - -// Named Color Variables -// -------------------------------------------------- -// Named colors makes it easy to reuse colors on various components. -// It's highly recommended to change the default colors -// to match your app's branding. Ionic uses a Sass map of -// colors so you can add, rename and remove colors as needed. -// The "primary" color is the only required color in the map. - -$colors: ( - primary: #f7296e, - secondary: #311b58, - secondary-light: #50239f, - secondary-muted: #3c1a77, - danger: #f53d3d, - light: #f4f4f4, - dark: #222, - white: #fff -); - -// App iOS Variables -// -------------------------------------------------- -// iOS only Sass variables can go here - -// App Material Design Variables -// -------------------------------------------------- -// Material Design only Sass variables can go here - -// App Windows Variables -// -------------------------------------------------- -// Windows only Sass variables can go here - -// App Theme -// -------------------------------------------------- -// Ionic apps can have different themes applied, which can -// then be future customized. This import comes last -// so that the above variables are used and Ionic's -// default are overridden. - -@import 'ionic.theme.default'; - -// Ionicons -// -------------------------------------------------- -// The premium icon font for Ionic. For more info, please see: -// http://ionicframework.com/docs/ionicons/ - -@import 'ionic.ionicons'; - -// Fonts -// -------------------------------------------------- - -@import 'roboto'; -@import 'noto-sans'; - -$label-md-text-color-focused: #d6dceb; - -$item-md-detail-push-show: true; +/** Ionic CSS Variables **/ +:root { + /** primary **/ + --ion-color-primary: #3880ff; + --ion-color-primary-rgb: 56, 128, 255; + --ion-color-primary-contrast: #ffffff; + --ion-color-primary-contrast-rgb: 255, 255, 255; + --ion-color-primary-shade: #3171e0; + --ion-color-primary-tint: #4c8dff; + + /** secondary **/ + --ion-color-secondary: #0cd1e8; + --ion-color-secondary-rgb: 12, 209, 232; + --ion-color-secondary-contrast: #ffffff; + --ion-color-secondary-contrast-rgb: 255, 255, 255; + --ion-color-secondary-shade: #0bb8cc; + --ion-color-secondary-tint: #24d6ea; + + /** tertiary **/ + --ion-color-tertiary: #7044ff; + --ion-color-tertiary-rgb: 112, 68, 255; + --ion-color-tertiary-contrast: #ffffff; + --ion-color-tertiary-contrast-rgb: 255, 255, 255; + --ion-color-tertiary-shade: #633ce0; + --ion-color-tertiary-tint: #7e57ff; + + /** success **/ + --ion-color-success: #10dc60; + --ion-color-success-rgb: 16, 220, 96; + --ion-color-success-contrast: #ffffff; + --ion-color-success-contrast-rgb: 255, 255, 255; + --ion-color-success-shade: #0ec254; + --ion-color-success-tint: #28e070; + + /** warning **/ + --ion-color-warning: #ffce00; + --ion-color-warning-rgb: 255, 206, 0; + --ion-color-warning-contrast: #ffffff; + --ion-color-warning-contrast-rgb: 255, 255, 255; + --ion-color-warning-shade: #e0b500; + --ion-color-warning-tint: #ffd31a; + + /** danger **/ + --ion-color-danger: #f04141; + --ion-color-danger-rgb: 245, 61, 61; + --ion-color-danger-contrast: #ffffff; + --ion-color-danger-contrast-rgb: 255, 255, 255; + --ion-color-danger-shade: #d33939; + --ion-color-danger-tint: #f25454; + + /** dark **/ + --ion-color-dark: #222428; + --ion-color-dark-rgb: 34, 34, 34; + --ion-color-dark-contrast: #ffffff; + --ion-color-dark-contrast-rgb: 255, 255, 255; + --ion-color-dark-shade: #1e2023; + --ion-color-dark-tint: #383a3e; + + /** medium **/ + --ion-color-medium: #989aa2; + --ion-color-medium-rgb: 152, 154, 162; + --ion-color-medium-contrast: #ffffff; + --ion-color-medium-contrast-rgb: 255, 255, 255; + --ion-color-medium-shade: #86888f; + --ion-color-medium-tint: #a2a4ab; + + /** light **/ + --ion-color-light: #f4f5f8; + --ion-color-light-rgb: 244, 244, 244; + --ion-color-light-contrast: #000000; + --ion-color-light-contrast-rgb: 0, 0, 0; + --ion-color-light-shade: #d7d8da; + --ion-color-light-tint: #f5f6f9; +} diff --git a/src/tsconfig.app.json b/src/tsconfig.app.json new file mode 100644 index 00000000..fb7c566b --- /dev/null +++ b/src/tsconfig.app.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/app", + "types": [] + }, + "exclude": ["test.ts", "**/*.spec.ts"] +} diff --git a/src/tsconfig.spec.json b/src/tsconfig.spec.json new file mode 100644 index 00000000..11e185d3 --- /dev/null +++ b/src/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/spec", + "types": ["jasmine", "node"] + }, + "files": ["test.ts", "zone-flags.ts", "polyfills.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} diff --git a/src/tslint.json b/src/tslint.json new file mode 100644 index 00000000..94e945d9 --- /dev/null +++ b/src/tslint.json @@ -0,0 +1,7 @@ +{ + "extends": "../tslint.json", + "rules": { + "directive-selector": [true, "attribute", "app", "camelCase"], + "component-selector": [true, "element", "app", "page", "kebab-case"] + } +} diff --git a/src/validators/mnemonic.validator.ts b/src/validators/mnemonic.validator.ts deleted file mode 100644 index 65e7568d..00000000 --- a/src/validators/mnemonic.validator.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { FormControl } from '@angular/forms' -import * as bip39 from 'bip39' -import { BIP39Signer } from '../models/BIP39Signer' - -export class MnemonicValidator { - static checkMnemonic(mnemonic, wordlist) { - const words = BIP39Signer.prepareMnemonic(mnemonic).split(' ') - - if (words.length % 3 !== 0) throw new Error('invalid mnemonic') - - words.forEach(word => { - const index = wordlist.indexOf(word) - if (index === -1) throw new Error('invalid mnemonic') - }) - } - - static isValidShare(control: FormControl): any { - try { - MnemonicValidator.checkMnemonic(control.value, bip39.wordlists.EN) - } catch (e) { - return { - 'not a social mnemonic share': true - } - } - - return null - } - - static isValid(control: FormControl): any { - if (control.value && BIP39Signer.validateMnemonic(control.value)) { - return null - } - - return { - 'not a mnemonic': true - } - } -} diff --git a/src/zone-flags.ts b/src/zone-flags.ts new file mode 100644 index 00000000..c4b5cdda --- /dev/null +++ b/src/zone-flags.ts @@ -0,0 +1,5 @@ +/** + * Prevents Angular change detection from + * running with certain Web Component callbacks + */ +;(window as any).__Zone_disable_customElements = true diff --git a/test-config/karma-test-shim.js b/test-config/karma-test-shim.js deleted file mode 100755 index 3764018a..00000000 --- a/test-config/karma-test-shim.js +++ /dev/null @@ -1,21 +0,0 @@ -Error.stackTraceLimit = Infinity - -require('core-js/es6') -require('core-js/es7/reflect') - -require('zone.js/dist/zone') -require('zone.js/dist/long-stack-trace-zone') -require('zone.js/dist/proxy') -require('zone.js/dist/sync-test') -require('zone.js/dist/jasmine-patch') -require('zone.js/dist/async-test') -require('zone.js/dist/fake-async-test') - -const appContext = require.context('../src', true, /\.spec\.ts/) - -appContext.keys().forEach(appContext) - -const testing = require('@angular/core/testing') -const browser = require('@angular/platform-browser-dynamic/testing') - -testing.TestBed.initTestEnvironment(browser.BrowserDynamicTestingModule, browser.platformBrowserDynamicTesting()) diff --git a/test-config/karma.conf.js b/test-config/karma.conf.js deleted file mode 100755 index cdd19905..00000000 --- a/test-config/karma.conf.js +++ /dev/null @@ -1,72 +0,0 @@ -var webpackConfig = require('./webpack.test.js') - -// inject chrome headless using puppeteer -process.env.CHROME_BIN = require('puppeteer').executablePath() - -module.exports = function(config) { - var _config = { - basePath: '../', - - frameworks: ['jasmine'], - - files: [ - { - pattern: './test-config/karma-test-shim.js', - watched: true - }, - { - pattern: './src/assets/**/*', - watched: false, - included: false, - served: true, - nocache: false - }, - { pattern: 'node_modules/rxjs/**/*', included: false, watched: false } - ], - - proxies: { - '/assets': '/base/src/assets' - }, - - preprocessors: { - './test-config/karma-test-shim.js': ['webpack', 'sourcemap'] - }, - - webpack: webpackConfig, - - webpackMiddleware: { - stats: 'errors-only' - }, - - webpackServer: { - noInfo: true - }, - - browserConsoleLogOptions: { - level: 'log', - format: '%b %T: %m', - terminal: true - }, - - coverageIstanbulReporter: { - reports: ['text', 'lcovonly'], - fixWebpackSourcePaths: true - }, - - reporters: config.coverage ? ['spec', 'coverage-istanbul'] : ['spec'], - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - autoWatch: true, - browsers: ['ChromeHeadlessNoSandbox'], - customLaunchers: { - ChromeHeadlessNoSandbox: { - base: 'ChromeHeadless', - flags: ['--no-sandbox'] - } - }, - singleRun: false - } - - config.set(_config) -} diff --git a/test-config/mocks-ionic.ts b/test-config/mocks-ionic.ts deleted file mode 100755 index 21ca9603..00000000 --- a/test-config/mocks-ionic.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { StatusBar } from '@ionic-native/status-bar' -import { SplashScreen } from '@ionic-native/splash-screen' - -export const AlertControllerMock = jasmine.createSpyObj('AlertController', { - create: jasmine.createSpyObj('Alert', { - present: () => Promise.resolve() - }) -}) - -export class DeviceProviderMock { - isRooted = 0 - - checkForRoot() { - return Promise.resolve(this.isRooted) - } - - checkForElectron() { - return false - } -} - -export class NavParamsMock { - static params = {} - - public get(key: string): any { - if (NavParamsMock.params[key]) { - return NavParamsMock.params[key] - } - return undefined - } - - static setParams(value) { - NavParamsMock.params = value - } -} - -export class PlatformMock { - public ready(): Promise { - return new Promise(resolve => { - resolve('READY') - }) - } - - public getQueryParam() { - return true - } - - public registerBackButtonAction(fn: Function, priority?: number): Function { - return () => true - } - - public hasFocus(ele: HTMLElement): boolean { - return true - } - - public doc(): HTMLDocument { - return document - } - - public is(): boolean { - return true - } - - public getElementComputedStyle(container: any): any { - return { - paddingLeft: '10', - paddingTop: '10', - paddingRight: '10', - paddingBottom: '10' - } - } - - public onResize(callback: any) { - return callback - } - - public registerListener(ele: any, eventName: string, callback: any): Function { - return () => true - } - - public win(): Window { - return window - } - - public raf(callback: any): number { - return 1 - } - - public timeout(callback: any, timer: number): any { - return setTimeout(callback, timer) - } - - public cancelTimeout(id: any) { - // do nothing - } - - public getActiveElement(): any { - return document['activeElement'] - } -} - -export class StatusBarMock extends StatusBar { - styleDefault() { - return - } -} - -export class SplashScreenMock extends SplashScreen { - hide() { - return - } -} - -export class NavMock { - public pop(): any { - return new Promise(function(resolve: Function): void { - resolve() - }) - } - - public push(): any { - return new Promise(function(resolve: Function): void { - resolve() - }) - } - - public getActive(): any { - return { - instance: { - model: 'something' - } - } - } - - public setRoot(): any { - return true - } - - public registerChildNav(nav: any): void { - return - } -} - -export class DeepLinkerMock {} diff --git a/test-config/protractor-ci.conf.js b/test-config/protractor-ci.conf.js deleted file mode 100644 index 4c44e58a..00000000 --- a/test-config/protractor-ci.conf.js +++ /dev/null @@ -1,11 +0,0 @@ -// Protractor configuration file, see link for more information -// https://github.com/angular/protractor/blob/master/lib/config.ts - -/*global jasmine */ -const baseConfig = require('./protractor.conf') -const SpecReporter = require('jasmine-spec-reporter').SpecReporter - -baseConfig.config.directConnect = false -baseConfig.config.seleniumAddress = 'http://selenium:4444/wd/hub' - -exports.config = baseConfig.config diff --git a/test-config/protractor-docker.conf.js b/test-config/protractor-docker.conf.js deleted file mode 100644 index dd365288..00000000 --- a/test-config/protractor-docker.conf.js +++ /dev/null @@ -1,11 +0,0 @@ -// Protractor configuration file, see link for more information -// https://github.com/angular/protractor/blob/master/lib/config.ts - -/*global jasmine */ -const baseConfig = require('./protractor.conf') -const SpecReporter = require('jasmine-spec-reporter').SpecReporter - -baseConfig.config.directConnect = false -baseConfig.config.seleniumAddress = 'http://localhost:4444/wd/hub' - -exports.config = baseConfig.config diff --git a/test-config/protractor.conf.js b/test-config/protractor.conf.js deleted file mode 100755 index f9889d89..00000000 --- a/test-config/protractor.conf.js +++ /dev/null @@ -1,50 +0,0 @@ -// Protractor configuration file, see link for more information -// https://github.com/angular/protractor/blob/master/lib/config.ts - -/*global jasmine */ -const SpecReporter = require('jasmine-spec-reporter').SpecReporter -const HtmlScreenshotReporter = require('protractor-jasmine2-screenshot-reporter') - -const screenshotReporter = new HtmlScreenshotReporter({ - dest: 'e2e-reports/screenshots', - filename: 'e2e-report.html' -}) - -exports.config = { - allScriptsTimeout: 11000, - specs: ['../e2e/**/*.e2e-spec.ts'], - capabilities: { - browserName: 'chrome', - chromeOptions: { - prefs: { 'profile.managed_default_content_settings.media_stream': 1 }, - args: ['--use-fake-device-for-media-stream', '--use-fake-ui-for-media-stream'] - // args: [ 'no-sandbox', '--headless', '--disable-gpu', '--window-size=375,667' ] - } - }, - directConnect: true, - baseUrl: 'http://localhost:8100/', - framework: 'jasmine', - jasmineNodeOpts: { - showColors: true, - defaultTimeoutInterval: 30000, - print: function() {} - }, - useAllAngular2AppRoots: true, - beforeLaunch: function() { - require('ts-node').register({ - project: 'e2e' - }) - return new Promise(function(resolve) { - screenshotReporter.beforeLaunch(resolve) - }) - }, - onPrepare: function() { - jasmine.getEnv().addReporter(new SpecReporter()) - jasmine.getEnv().addReporter(screenshotReporter) - }, - afterLaunch: function(exitCode) { - return new Promise(function(resolve) { - screenshotReporter.afterLaunch(resolve.bind(this, exitCode)) - }) - } -} diff --git a/test-config/storage-mock.ts b/test-config/storage-mock.ts deleted file mode 100644 index d64d69d3..00000000 --- a/test-config/storage-mock.ts +++ /dev/null @@ -1,33 +0,0 @@ -export class StorageMock { - private data = { - 'airgap-secret-list': [ - { - id: '3e14638e-319b-4280-8c34-6e6f0a10df6e', - label: 'asdsad', - isParanoia: false, - wallets: [ - { - protocolIdentifier: 'eth', - publicKey: '03ea568e601e6e949a3e5c60e0f4ee94383e4b083c5ab64b66e70372df008cbbe6', - isExtendedPublicKey: false, - derivationPath: "m/44'/60'/0'/0/0", - addresses: [] - } - ] - } - ] - } - - get(key: string) { - return new Promise((resolve, reject) => { - resolve(this.data[key]) - }) - } - - set(key: string, value: any) { - return new Promise((resolve, reject) => { - this.data[key] = value - resolve() - }) - } -} diff --git a/test-config/unit-test-helper.ts b/test-config/unit-test-helper.ts deleted file mode 100644 index c0be112e..00000000 --- a/test-config/unit-test-helper.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { ReactiveFormsModule, FormsModule } from '@angular/forms' -import { IonicModule, Platform, NavController } from 'ionic-angular' -import { TestModuleMetadata } from '@angular/core/testing' -import { StorageMock } from './storage-mock' -import { Storage, IonicStorageModule } from '@ionic/storage' -import { AmountConverterPipe } from '../src/components/pipes/amount-converter/amount-converter.pipe' -import { FeeConverterPipe } from '../src/components/pipes/fee-converter/fee-converter.pipe' -import { CommonModule } from '@angular/common' -import { TranslateModule, TranslateLoader, TranslateFakeLoader } from '@ngx-translate/core' -import { MaterialIconsModule } from 'ionic2-material-icons' - -export class UnitHelper { - static testBed(testBed: TestModuleMetadata, useIonicOnlyTestBed = false): TestModuleMetadata { - const mandatoryDeclarations: any[] = [] - const mandatoryImports: any[] = [ - CommonModule, - ReactiveFormsModule, - IonicModule, - FormsModule, - IonicStorageModule.forRoot({ - name: '__test_airgap_storage', - driverOrder: ['localstorage'] - }), - MaterialIconsModule, - TranslateModule.forRoot({ - loader: { provide: TranslateLoader, useClass: TranslateFakeLoader } - }) - ] - const mandatoryProviders: any[] = [NavController, Platform] - - if (!useIonicOnlyTestBed) { - mandatoryProviders.push({ provide: Storage, useClass: StorageMock }) - mandatoryDeclarations.push(AmountConverterPipe, FeeConverterPipe) - mandatoryImports.push() - } - - testBed.declarations = [...(testBed.declarations || []), ...mandatoryDeclarations] - testBed.imports = [...(testBed.imports || []), ...mandatoryImports] - testBed.providers = [...(testBed.providers || []), ...mandatoryProviders] - - return testBed - } -} diff --git a/test-config/wallet-mock.ts b/test-config/wallet-mock.ts deleted file mode 100644 index 2eac399b..00000000 --- a/test-config/wallet-mock.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { AirGapWallet, UnsignedTransaction } from 'airgap-coin-lib' - -class WalletMock { - ethWallet: AirGapWallet = new AirGapWallet( - 'eth', - '03ea568e601e6e949a3e5c60e0f4ee94383e4b083c5ab64b66e70372df008cbbe6', - false, - "m/44'/60'/0'/0/0" - ) - ethTransaction: UnsignedTransaction = { - callback: '', - publicKey: '03ea568e601e6e949a3e5c60e0f4ee94383e4b083c5ab64b66e70372df008cbbe6', - transaction: { - nonce: '0x0', - gasPrice: '0x4a817c800', - gasLimit: '0x5208', - to: '0x4A1E1D37462a422873BFCCb1e705B05CC4bd922e', - value: '0xde0b6b3a7640000', - chainId: 1, - data: '0x' - } - } -} - -export { WalletMock } diff --git a/test-config/webpack.test.js b/test-config/webpack.test.js deleted file mode 100755 index b4c01304..00000000 --- a/test-config/webpack.test.js +++ /dev/null @@ -1,64 +0,0 @@ -const webpack = require('webpack') -const path = require('path') - -module.exports = { - devtool: 'inline-source-map', - - resolve: { - alias: { - '@app/env': path.resolve('./src/environments/environment.test.ts') - }, - extensions: ['.ts', '.js'] - }, - - module: { - rules: [ - { - test: /\.ts$/, - loaders: [ - { - loader: 'ts-loader' - }, - 'angular2-template-loader' - ] - }, - { - test: /.+\.ts$/, - exclude: /(index.ts|mocks.ts|\.spec\.ts$)/, - loader: 'istanbul-instrumenter-loader', - enforce: 'post', - query: { - esModules: true - } - }, - { - test: /\.html$/, - loader: 'html-loader?attrs=false' - }, - { - test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/, - loader: 'null-loader' - } - ] - }, - - plugins: [ - new webpack.ContextReplacementPlugin( - // The (\\|\/) piece accounts for path separators in *nix and Windows - /(ionic-angular)|(angular(\\|\/)core(\\|\/)@angular)/, - root('./src'), // location of your src - {} // a map of your routes - ) - ], - - // fixes missing 'fs' module from vcards-js - node: { - fs: 'empty', - net: 'empty', - tls: 'empty' - } -} - -function root(localPath) { - return path.resolve(__dirname, localPath) -} diff --git a/tsconfig.json b/tsconfig.json index 11c4d495..03728ef3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,21 +1,38 @@ { + "compileOnSave": false, "compilerOptions": { - "allowSyntheticDefaultImports": true, + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, "declaration": false, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "lib": ["dom", "es2015"], "module": "es2015", "moduleResolution": "node", - "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": true, + "downlevelIteration": true, // To enable [].entries() "target": "es5", - "typeRoots": ["./node_modules/@types"], - "types": ["jasmine", "node"] + "typeRoots": ["node_modules/@types"], + "lib": ["es2018", "dom"] + + /* Strict Type-Checking Options */ + // "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, + // "strictNullChecks": true /* Enable strict null checks. */, + // "strictFunctionTypes": true /* Enable strict checking of function types. */, + // "strictBindCallApply": true /* Enable strict 'bind', 'call', and 'apply' methods on functions. */, + // "strictPropertyInitialization": true /* Enable strict checking of property initialization in classes. */, + // "noImplicitThis": true /* Raise error on 'this' expressions with an implied 'any' type. */, + // "alwaysStrict": true /* Parse in strict mode and emit "use strict" for each source file. */, + + /* Additional Checks */ + // "noUnusedLocals": true /* Report errors on unused locals. */, + // "noUnusedParameters": true /* Report errors on unused parameters. */, + // "noImplicitReturns": true /* Report error when not all code paths in function return a value. */, + // "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */ }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules", "src/**/*.spec.ts", "src/**/__tests__/*.ts"], - "compileOnSave": false, - "atom": { - "rewriteTsconfig": false + "angularCompilerOptions": { + "strictInjectionParameters": true, + "fullTemplateTypeCheck": true } } diff --git a/tslint.json b/tslint.json index 2459272a..439a523a 100644 --- a/tslint.json +++ b/tslint.json @@ -1,4 +1,47 @@ { - "extends": "typestrict", - "rulesDirectory": ["tslint-config-prettier"] + "extends": "tslint:recommended", + "rulesDirectory": ["codelyzer"], + "rules": { + "array-type": false, + "arrow-parens": false, + "deprecation": { + "severity": "warn" + }, + "import-blacklist": [true, "rxjs/Rx"], + "interface-name": false, + "max-classes-per-file": false, + "max-line-length": [true, 140], + "member-access": false, + "member-ordering": [ + true, + { + "order": ["static-field", "instance-field", "static-method", "instance-method"] + } + ], + "no-consecutive-blank-lines": false, + "no-console": [true, "debug", "info", "time", "timeEnd", "trace"], + "no-empty": false, + "no-inferrable-types": [true, "ignore-params"], + "no-non-null-assertion": true, + "no-redundant-jsdoc": true, + "no-switch-case-fall-through": true, + "no-use-before-declare": true, + "no-var-requires": false, + "object-literal-key-quotes": [true, "as-needed"], + "object-literal-sort-keys": false, + "ordered-imports": false, + "quotemark": [true, "single"], + "trailing-comma": false, + "no-output-on-prefix": true, + "use-input-property-decorator": true, + "use-output-property-decorator": true, + "use-host-property-decorator": true, + "no-input-rename": true, + "no-output-rename": true, + "use-life-cycle-interface": true, + "use-pipe-transform-interface": true, + "one-variable-per-declaration": false, + "component-class-suffix": [true, "Page", "Component"], + "directive-class-suffix": true + } } diff --git a/uglifyjs.config.js b/uglifyjs.config.js deleted file mode 100644 index eb835774..00000000 --- a/uglifyjs.config.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - /** - * mangle: uglify 2's mangle option - */ - mangle: { - reserved: ['Buffer', 'BigInteger', 'Point', 'ECPubKey', 'ECKey', 'sha512_asm', 'asm', 'ECPair', 'HDNode', 'BigNumber'] - }, - - /** - * compress: uglify 2's compress option - */ - compress: { - toplevel: true, - pure_getters: true - } -}