]> zoso.dev Git - libnemo.git/commitdiff
Version 1.1.0
authorMiro Metsänheimo <miro@metsanheimo.fi>
Sat, 7 Mar 2020 11:43:11 +0000 (13:43 +0200)
committerMiro Metsänheimo <miro@metsanheimo.fi>
Sat, 7 Mar 2020 12:04:14 +0000 (14:04 +0200)
* Separate block signer to it's own class
* Add JSDOC to some functions
* Renamed converter to tools
* Added the ability to sign any strings with the private key

13 files changed:
README.md
index.ts
lib/address-generator.ts
lib/address-importer.ts
lib/bip39-mnemonic.ts
lib/block-signer.ts
lib/signer.ts [new file with mode: 0644]
lib/util/convert.ts
package-lock.json
package.json
test/test.js
tsconfig.json
webpack.config.js

index e1bf58e34df5374b58bd68faafa3bee3595a6220..200c10f8b41c081ae1ac1618498fdc59840cf651 100644 (file)
--- a/README.md
+++ b/README.md
@@ -165,19 +165,31 @@ const signedBlock = block.representative(data, privateKey)
 Supported unit values are RAW, NANO, MRAI, KRAI, RAW.
 
 ```javascript
-import { converter } from 'nanocurrency-web'
+import { tools } from 'nanocurrency-web'
 
 // Convert 1 Nano to RAW
-const converted = converter.convert('1', 'NANO', 'RAW')
+const converted = tools.convert('1', 'NANO', 'RAW')
 
 // Convert 1 RAW to Nano
-const converted = converter.convert('1000000000000000000000000000000', 'RAW', 'NANO')
+const converted = tools.convert('1000000000000000000000000000000', 'RAW', 'NANO')
 ```
 
+#### Signing any data with the private key
+
+For example implementing client side login with the password being the user's e-mail signed with their private key
+
+```javascript
+import { tools } from 'nanocurrency-web'
+
+const privateKey = '781186FB9EF17DB6E3D1056550D9FAE5D5BBADA6A6BC370E4CBB938B1DC71DA3';
+const signed = tools.sign(privateKey, 'foo@bar.com')
+```
+
+
 ### In web
 
 ```html
-<script src="https://unpkg.com/nanocurrency-web@1.0.6" type="text/javascript"></script>
+<script src="https://unpkg.com/nanocurrency-web@1.1.0" type="text/javascript"></script>
 <script type="text/javascript">
     NanocurrencyWeb.wallet.generate(...);
 </script>
index 59836450ac5dfa999588c923061b62f58005bbd8..e6099b9aa17ab0be72ddd7775fc9e45b49799941 100644 (file)
--- a/index.ts
+++ b/index.ts
@@ -3,9 +3,12 @@ import AddressImporter, { Account, Wallet } from './lib/address-importer'
 import BlockSigner, { SendBlock, ReceiveBlock, RepresentativeBlock, SignedBlock } from './lib/block-signer'
 import BigNumber from 'bignumber.js'
 import NanoConverter from './lib/nano-converter'
+import Signer from './lib/signer'
+import Convert from './lib/util/convert'
 
 const generator = new AddressGenerator()
 const importer = new AddressImporter()
+const signer = new Signer();
 const wallet = {
 
        /**
@@ -162,7 +165,7 @@ const block = {
 
 }
 
-const converter = {
+const tools = {
 
        /**
         * Convert Nano values
@@ -173,14 +176,25 @@ const converter = {
         * @param {string} inputUnit The unit of the input value
         * @param {string} outputUnit The unit you wish to convert to
         */
-       convert: (input: string | BigNumber, inputUnit: string, outputUnit: string) => {
+       convert: (input: string | BigNumber, inputUnit: string, outputUnit: string): string => {
                return NanoConverter.convert(input, inputUnit, outputUnit)
        },
 
+       /**
+        * Sign any strings with the user's private key
+        * 
+        * @param {string} privateKey The private key to sign with
+        * @param {...string} input Data to sign
+        */
+       sign: (privateKey: string, ...input: string[]): string => {
+               const data = input.map(Convert.stringToHex)
+               return signer.sign(privateKey, ...data);
+       },
+
 }
 
 export {
        wallet,
        block,
-       converter,
+       tools,
 }
index c03f27e7efe2ae40cdf8f4eb5a0dd7cdf270990c..708fff6169efa744d64a402041e170c619d7a92a 100644 (file)
@@ -9,7 +9,8 @@ export default class AddressGenerator {
        /**
         * Generates the wallet
         *
-        * @param {String} seedPassword Password for the seed
+        * @param {string} [entropy] - (Optional) Custom entropy if the caller doesn't want a default generated entropy
+        * @param {string} [seedPassword] - (Optional) Password for the seed
         */
        generateWallet(entropy = '', seedPassword: string = ''): Wallet {
                const bip39 = new Bip39Mnemonic(seedPassword)
index ea57594a3508fbd862776db513c36aca3eb07f71..cbad1116e85402afe5af816ea2148373fa92dca8 100644 (file)
@@ -5,6 +5,13 @@ import NanoAddress from './nano-address'
 
 export default class AddressImporter {
 
+       /**
+        * Import a wallet using a mnemonic phrase
+        * 
+        * @param {string} mnemonic - The mnemonic words to import the wallet from 
+        * @param {string} [seedPassword] - (Optional) The password to use to secure the mnemonic
+        * @returns {Wallet} - The wallet derived from the mnemonic phrase
+        */
        fromMnemonic(mnemonic: string, seedPassword = ''): Wallet {
                const bip39 = new Bip39Mnemonic(seedPassword)
                if (!bip39.validateMnemonic(mnemonic)) {
@@ -15,6 +22,14 @@ export default class AddressImporter {
                return this.nano(seed, 0, 0, mnemonic)
        }
 
+       /**
+        * Import a wallet using a seed
+        * 
+        * @param {string} seed - The seed to import the wallet from 
+        * @param {number} [from] - (Optional) The start index of the private keys to derive from
+        * @param {number} [to] - (Optional) The end index of the private keys to derive to
+        * @returns {Wallet} The wallet derived from the mnemonic phrase
+        */
        fromSeed(seed: string, from = 0, to = 0): Wallet {
                if (seed.length !== 128) {
                        throw new Error('Invalid seed length, must be a 128 byte hexadecimal string')
@@ -27,8 +42,12 @@ export default class AddressImporter {
        }
 
        /**
-        * Generates the wallet
-        * @param {String} seedPassword Password for the seed
+        * Derives the private keys
+        * 
+        * @param {string} seed - The seed to use for private key derivation
+        * @param {number} from - The start index of private keys to derive from
+        * @param {number} to - The end index of private keys to derive to
+        * @param {string} [mnemonic] - (Optional) the mnemonic phrase to return with the wallet
         */
        private nano(seed: string, from: number, to: number, mnemonic?: string): Wallet {
                const accounts = []
index 931d25c36f10e6d0cc15e728871ef8d0fce81bab..6adf53319e9a8833c878c32cb0e6a325290857b5 100644 (file)
@@ -13,7 +13,13 @@ export default class Bip39Mnemonic {
                this.password = password
        }
 
-       createWallet = (entropy: string): { mnemonic: string, seed: string } => {
+       /**
+        * Creates a new wallet
+        * 
+        * @param {string} [entropy] - (Optional) the entropy to use instead of generating
+        * @returns {MnemonicSeed} The mnemonic phrase and a seed derived from the (generated) entropy
+        */
+       createWallet = (entropy: string): MnemonicSeed => {
                if (entropy) {
                        if (entropy.length !== 64) {
                                throw new Error('Invalid entropy length, must be a 64 byte hexadecimal string')
@@ -45,6 +51,12 @@ export default class Bip39Mnemonic {
                }
        }
 
+       /**
+        * Validates a mnemonic phrase
+        * 
+        * @param {string} mnemonic - The mnemonic phrase to validate
+        * @returns {boolean} Is the mnemonic phrase valid
+        */
        validateMnemonic = (mnemonic: string): boolean => {
                const wordArray = Util.normalizeUTF8(mnemonic).split(' ')
                if (wordArray.length % 3 !== 0) {
@@ -104,3 +116,8 @@ export default class Bip39Mnemonic {
        }
 
 }
+
+interface MnemonicSeed {
+       mnemonic: string,
+       seed: string,
+}
index e9e2bed90e11bc419445624a412e248370b0919d..369ddaca60fe8970d3e6cd073d2463d03c210c0c 100644 (file)
@@ -1,19 +1,28 @@
-import BigNumber from 'bignumber.js'
 import Ed25519 from './ed25519'
 import Convert from './util/convert'
 import NanoAddress from './nano-address'
 import NanoConverter from './nano-converter'
+import Signer from './signer'
 
+import BigNumber from 'bignumber.js'
 //@ts-ignore
-import { blake2b, blake2bInit, blake2bUpdate, blake2bFinal } from 'blakejs'
+import { blake2b } from 'blakejs'
 
 export default class BlockSigner {
 
        nanoAddress = new NanoAddress()
        ed25519 = new Ed25519()
+       signer = new Signer()
 
-       preamble = 0x6.toString().padStart(64, '0')
+       preamble: string = 0x6.toString().padStart(64, '0')
 
+       /**
+        * Sign a receive block
+        * 
+        * @param {ReceiveBlock} data The data required to sign a receive block
+        * @param {string} privateKey Private key to sign the data with
+        * @returns {SignedBlock} the signed block to publish to the blockchain
+        */
        receive(data: ReceiveBlock, privateKey: string): SignedBlock {
                const validateInputRaw = (input: string) => !!input && !isNaN(+input)
                if (!validateInputRaw(data.walletBalanceRaw)) {
@@ -57,9 +66,14 @@ export default class BlockSigner {
                const link = data.transactionHash
                const representative = this.nanoAddressToHexString(data.representativeAddress)
 
-               const signatureBytes = this.ed25519.sign(
-                       this.generateHash(this.preamble, account, data.frontier, representative, newBalanceHex, link),
-                       Convert.hex2ab(privateKey))
+               const signature = this.signer.sign(
+                               privateKey,
+                               this.preamble,
+                               account,
+                               data.frontier,
+                               representative,
+                               newBalanceHex,
+                               link)
 
                return {
                        type: 'state',
@@ -68,11 +82,18 @@ export default class BlockSigner {
                        representative: data.representativeAddress,
                        balance: newBalanceRaw,
                        link: link,
-                       signature: Convert.ab2hex(signatureBytes),
+                       signature: signature,
                        work: data.work,
                }
        }
 
+       /**
+        * Sign a send block
+        * 
+        * @param {SendBlock} data The data required to sign a send block
+        * @param {string} privateKey Private key to sign the data with
+        * @returns {SignedBlock} the signed block to publish to the blockchain
+        */
        send(data: SendBlock, privateKey: string): SignedBlock {
                const validateInputRaw = (input: string) => !!input && !isNaN(+input)
                if (!validateInputRaw(data.walletBalanceRaw)) {
@@ -96,11 +117,11 @@ export default class BlockSigner {
                }
 
                if (!data.frontier) {
-                       throw new Error('No frontier')
+                       throw new Error('Frontier is not set')
                }
 
                if (!data.work) {
-                       throw new Error('No work')
+                       throw new Error('Work is not set')
                }
 
                if (!privateKey) {
@@ -116,9 +137,14 @@ export default class BlockSigner {
                const link = this.nanoAddressToHexString(data.toAddress)
                const representative = this.nanoAddressToHexString(data.representativeAddress)
 
-               const signatureBytes = this.ed25519.sign(
-                       this.generateHash(this.preamble, account, data.frontier, representative, newBalanceHex, link),
-                       Convert.hex2ab(privateKey))
+               const signature = this.signer.sign(
+                               privateKey,
+                               this.preamble,
+                               account,
+                               data.frontier,
+                               representative,
+                               newBalanceHex,
+                               link)
 
                return {
                        type: 'state',
@@ -127,22 +153,11 @@ export default class BlockSigner {
                        representative: data.representativeAddress,
                        balance: newBalanceRaw,
                        link: link,
-                       signature: Convert.ab2hex(signatureBytes),
+                       signature: signature,
                        work: data.work,
                }
        }
 
-       private generateHash(preamble: string, account: string, previous: string, representative: string, balance: string, link: string) {
-               const ctx = blake2bInit(32, undefined)
-               blake2bUpdate(ctx, Convert.hex2ab(preamble))
-               blake2bUpdate(ctx, Convert.hex2ab(account))
-               blake2bUpdate(ctx, Convert.hex2ab(previous))
-               blake2bUpdate(ctx, Convert.hex2ab(representative))
-               blake2bUpdate(ctx, Convert.hex2ab(balance))
-               blake2bUpdate(ctx, Convert.hex2ab(link))
-               return blake2bFinal(ctx)
-       }
-
        private nanoAddressToHexString(addr: string): string {
                addr = addr.slice(-60)
                const isValid = /^[13456789abcdefghijkmnopqrstuwxyz]+$/.test(addr)
@@ -154,9 +169,9 @@ export default class BlockSigner {
                                const key = Convert.ab2hex(keyBytes).toUpperCase()
                                return key
                        }
-                       throw new Error('Checksum mismatch')
+                       throw new Error('Checksum mismatch in address')
                } else {
-                       throw new Error('Illegal characters')
+                       throw new Error('Illegal characters in address')
                }
        }
 
diff --git a/lib/signer.ts b/lib/signer.ts
new file mode 100644 (file)
index 0000000..a353d98
--- /dev/null
@@ -0,0 +1,35 @@
+import Convert from './util/convert'
+import Ed25519 from './ed25519'
+
+//@ts-ignore
+import { blake2bInit, blake2bUpdate, blake2bFinal } from 'blakejs'
+
+export default class Signer {
+       
+       ed25519 = new Ed25519()
+
+       /**
+        * Signs any data using the ed25519 signature system
+        * 
+        * @param privateKey Private key to sign the data with
+        * @param data Data to sign
+        */
+       sign(privateKey: string, ...data: string[]): string {
+               const signature = this.ed25519.sign(
+                       this.generateHash(data),
+                       Convert.hex2ab(privateKey))
+               return Convert.ab2hex(signature)
+       }
+
+       /**
+        * Creates a blake2b hash of the input data
+        * 
+        * @param data Data to hash
+        */
+       private generateHash(data: string[]): Uint8Array {
+               const ctx = blake2bInit(32, undefined)
+               data.forEach(str => blake2bUpdate(ctx, Convert.hex2ab(str)))
+               return blake2bFinal(ctx)
+       }
+
+}
\ No newline at end of file
index 63dba1b97dae5934e4fa4251b026bbee45dc7fbe..46f16bccd61b06f167be98f5d796491d0ca3439b 100644 (file)
@@ -105,4 +105,8 @@ export default class Convert {
                return parseInt(bin, 2).toString(16)
        }
 
+       static stringToHex = (str: string): string => {
+               return [...str].map(c => c.charCodeAt(0).toString(16)).join('')
+       }
+
 }
index 513be6043bc5dde462d824b4383e933fd43c41d9..1360ea48ca510eae5146b6c64528d26026726564 100644 (file)
@@ -1,6 +1,6 @@
 {
        "name": "nanocurrency-web",
-       "version": "1.0.6",
+       "version": "1.1.0",
        "lockfileVersion": 1,
        "requires": true,
        "dependencies": {
@@ -61,7 +61,7 @@
                        "dev": true,
                        "requires": {
                                "@webassemblyjs/ast": "1.8.5",
-                               "mamacro": "0.0.3"
+                               "mamacro": "^0.0.3"
                        }
                },
                "@webassemblyjs/helper-wasm-bytecode": {
@@ -88,7 +88,7 @@
                        "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==",
                        "dev": true,
                        "requires": {
-                               "@xtuc/ieee754": "1.2.0"
+                               "@xtuc/ieee754": "^1.2.0"
                        }
                },
                "@webassemblyjs/leb128": {
                        "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
                        "dev": true,
                        "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"
+                               "fast-deep-equal": "^2.0.1",
+                               "fast-json-stable-stringify": "^2.0.0",
+                               "json-schema-traverse": "^0.4.1",
+                               "uri-js": "^4.2.2"
                        }
                },
                "ajv-errors": {
                        "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
                        "dev": true,
                        "requires": {
-                               "color-convert": "1.9.3"
+                               "color-convert": "^1.9.0"
                        }
                },
                "anymatch": {
                        "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
                        "dev": true,
                        "requires": {
-                               "micromatch": "3.1.10",
-                               "normalize-path": "2.1.1"
+                               "micromatch": "^3.1.4",
+                               "normalize-path": "^2.1.1"
                        },
                        "dependencies": {
                                "braces": {
                                        "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
                                        "dev": true,
                                        "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"
+                                               "arr-flatten": "^1.1.0",
+                                               "array-unique": "^0.3.2",
+                                               "extend-shallow": "^2.0.1",
+                                               "fill-range": "^4.0.0",
+                                               "isobject": "^3.0.1",
+                                               "repeat-element": "^1.1.2",
+                                               "snapdragon": "^0.8.1",
+                                               "snapdragon-node": "^2.0.1",
+                                               "split-string": "^3.0.2",
+                                               "to-regex": "^3.0.1"
                                        },
                                        "dependencies": {
                                                "extend-shallow": {
                                                        "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
                                                        "dev": true,
                                                        "requires": {
-                                                               "is-extendable": "0.1.1"
+                                                               "is-extendable": "^0.1.0"
                                                        }
                                                }
                                        }
                                        "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
                                        "dev": true,
                                        "requires": {
-                                               "extend-shallow": "2.0.1",
-                                               "is-number": "3.0.0",
-                                               "repeat-string": "1.6.1",
-                                               "to-regex-range": "2.1.1"
+                                               "extend-shallow": "^2.0.1",
+                                               "is-number": "^3.0.0",
+                                               "repeat-string": "^1.6.1",
+                                               "to-regex-range": "^2.1.0"
                                        },
                                        "dependencies": {
                                                "extend-shallow": {
                                                        "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
                                                        "dev": true,
                                                        "requires": {
-                                                               "is-extendable": "0.1.1"
+                                                               "is-extendable": "^0.1.0"
                                                        }
                                                }
                                        }
                                        "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
                                        "dev": true,
                                        "requires": {
-                                               "kind-of": "3.2.2"
+                                               "kind-of": "^3.0.2"
                                        },
                                        "dependencies": {
                                                "kind-of": {
                                                        "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                                                        "dev": true,
                                                        "requires": {
-                                                               "is-buffer": "1.1.6"
+                                                               "is-buffer": "^1.1.5"
                                                        }
                                                }
                                        }
                                        "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
                                        "dev": true,
                                        "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"
+                                               "arr-diff": "^4.0.0",
+                                               "array-unique": "^0.3.2",
+                                               "braces": "^2.3.1",
+                                               "define-property": "^2.0.2",
+                                               "extend-shallow": "^3.0.2",
+                                               "extglob": "^2.0.4",
+                                               "fragment-cache": "^0.2.1",
+                                               "kind-of": "^6.0.2",
+                                               "nanomatch": "^1.2.9",
+                                               "object.pick": "^1.3.0",
+                                               "regex-not": "^1.0.0",
+                                               "snapdragon": "^0.8.1",
+                                               "to-regex": "^3.0.2"
                                        }
                                },
                                "normalize-path": {
                                        "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
                                        "dev": true,
                                        "requires": {
-                                               "remove-trailing-separator": "1.1.0"
+                                               "remove-trailing-separator": "^1.0.1"
                                        }
                                },
                                "to-regex-range": {
                                        "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
                                        "dev": true,
                                        "requires": {
-                                               "is-number": "3.0.0",
-                                               "repeat-string": "1.6.1"
+                                               "is-number": "^3.0.0",
+                                               "repeat-string": "^1.6.1"
                                        }
                                }
                        }
                        "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
                        "dev": true,
                        "requires": {
-                               "sprintf-js": "1.0.3"
+                               "sprintf-js": "~1.0.2"
                        }
                },
                "arr-diff": {
                        "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
                        "dev": true,
                        "requires": {
-                               "bn.js": "4.11.8",
-                               "inherits": "2.0.4",
-                               "minimalistic-assert": "1.0.1"
+                               "bn.js": "^4.0.0",
+                               "inherits": "^2.0.1",
+                               "minimalistic-assert": "^1.0.0"
                        }
                },
                "assert": {
                        "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
                        "dev": true,
                        "requires": {
-                               "object-assign": "4.1.1",
+                               "object-assign": "^4.1.1",
                                "util": "0.10.3"
                        },
                        "dependencies": {
                        "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
                        "dev": true,
                        "requires": {
-                               "cache-base": "1.0.1",
-                               "class-utils": "0.3.6",
-                               "component-emitter": "1.3.0",
-                               "define-property": "1.0.0",
-                               "isobject": "3.0.1",
-                               "mixin-deep": "1.3.2",
-                               "pascalcase": "0.1.1"
+                               "cache-base": "^1.0.1",
+                               "class-utils": "^0.3.5",
+                               "component-emitter": "^1.2.1",
+                               "define-property": "^1.0.0",
+                               "isobject": "^3.0.1",
+                               "mixin-deep": "^1.2.0",
+                               "pascalcase": "^0.1.1"
                        },
                        "dependencies": {
                                "define-property": {
                                        "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
                                        "dev": true,
                                        "requires": {
-                                               "is-descriptor": "1.0.2"
+                                               "is-descriptor": "^1.0.0"
                                        }
                                },
                                "is-accessor-descriptor": {
                                        "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
                                        "dev": true,
                                        "requires": {
-                                               "kind-of": "6.0.2"
+                                               "kind-of": "^6.0.0"
                                        }
                                },
                                "is-data-descriptor": {
                                        "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
                                        "dev": true,
                                        "requires": {
-                                               "kind-of": "6.0.2"
+                                               "kind-of": "^6.0.0"
                                        }
                                },
                                "is-descriptor": {
                                        "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"
+                                               "is-accessor-descriptor": "^1.0.0",
+                                               "is-data-descriptor": "^1.0.0",
+                                               "kind-of": "^6.0.2"
                                        }
                                }
                        }
                        "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
                        "dev": true,
                        "requires": {
-                               "balanced-match": "1.0.0",
+                               "balanced-match": "^1.0.0",
                                "concat-map": "0.0.1"
                        }
                },
                        "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
                        "dev": true,
                        "requires": {
-                               "fill-range": "7.0.1"
+                               "fill-range": "^7.0.1"
                        }
                },
                "brorand": {
                        "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
                        "dev": true,
                        "requires": {
-                               "buffer-xor": "1.0.3",
-                               "cipher-base": "1.0.4",
-                               "create-hash": "1.2.0",
-                               "evp_bytestokey": "1.0.3",
-                               "inherits": "2.0.4",
-                               "safe-buffer": "5.1.2"
+                               "buffer-xor": "^1.0.3",
+                               "cipher-base": "^1.0.0",
+                               "create-hash": "^1.1.0",
+                               "evp_bytestokey": "^1.0.3",
+                               "inherits": "^2.0.1",
+                               "safe-buffer": "^5.0.1"
                        }
                },
                "browserify-cipher": {
                        "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
                        "dev": true,
                        "requires": {
-                               "browserify-aes": "1.2.0",
-                               "browserify-des": "1.0.2",
-                               "evp_bytestokey": "1.0.3"
+                               "browserify-aes": "^1.0.4",
+                               "browserify-des": "^1.0.0",
+                               "evp_bytestokey": "^1.0.0"
                        }
                },
                "browserify-des": {
                        "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
                        "dev": true,
                        "requires": {
-                               "cipher-base": "1.0.4",
-                               "des.js": "1.0.0",
-                               "inherits": "2.0.4",
-                               "safe-buffer": "5.1.2"
+                               "cipher-base": "^1.0.1",
+                               "des.js": "^1.0.0",
+                               "inherits": "^2.0.1",
+                               "safe-buffer": "^5.1.2"
                        }
                },
                "browserify-rsa": {
                        "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
                        "dev": true,
                        "requires": {
-                               "bn.js": "4.11.8",
-                               "randombytes": "2.1.0"
+                               "bn.js": "^4.1.0",
+                               "randombytes": "^2.0.1"
                        }
                },
                "browserify-sign": {
                        "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
                        "dev": true,
                        "requires": {
-                               "bn.js": "4.11.8",
-                               "browserify-rsa": "4.0.1",
-                               "create-hash": "1.2.0",
-                               "create-hmac": "1.1.7",
-                               "elliptic": "6.5.1",
-                               "inherits": "2.0.4",
-                               "parse-asn1": "5.1.5"
+                               "bn.js": "^4.1.1",
+                               "browserify-rsa": "^4.0.0",
+                               "create-hash": "^1.1.0",
+                               "create-hmac": "^1.1.2",
+                               "elliptic": "^6.0.0",
+                               "inherits": "^2.0.1",
+                               "parse-asn1": "^5.0.0"
                        }
                },
                "browserify-zlib": {
                        "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
                        "dev": true,
                        "requires": {
-                               "pako": "1.0.10"
+                               "pako": "~1.0.5"
                        }
                },
                "buffer": {
                        "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
                        "dev": true,
                        "requires": {
-                               "base64-js": "1.3.1",
-                               "ieee754": "1.1.13",
-                               "isarray": "1.0.0"
+                               "base64-js": "^1.0.2",
+                               "ieee754": "^1.1.4",
+                               "isarray": "^1.0.0"
                        }
                },
                "buffer-from": {
                        "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==",
                        "dev": true,
                        "requires": {
-                               "bluebird": "3.7.0",
-                               "chownr": "1.1.3",
-                               "figgy-pudding": "3.5.1",
-                               "glob": "7.1.4",
-                               "graceful-fs": "4.2.2",
-                               "infer-owner": "1.0.4",
-                               "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.7.1",
-                               "ssri": "6.0.1",
-                               "unique-filename": "1.1.1",
-                               "y18n": "4.0.0"
+                               "bluebird": "^3.5.5",
+                               "chownr": "^1.1.1",
+                               "figgy-pudding": "^3.5.1",
+                               "glob": "^7.1.4",
+                               "graceful-fs": "^4.1.15",
+                               "infer-owner": "^1.0.3",
+                               "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": {
                                "glob": {
                                        "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
                                        "dev": true,
                                        "requires": {
-                                               "fs.realpath": "1.0.0",
-                                               "inflight": "1.0.6",
-                                               "inherits": "2.0.4",
-                                               "minimatch": "3.0.4",
-                                               "once": "1.4.0",
-                                               "path-is-absolute": "1.0.1"
+                                               "fs.realpath": "^1.0.0",
+                                               "inflight": "^1.0.4",
+                                               "inherits": "2",
+                                               "minimatch": "^3.0.4",
+                                               "once": "^1.3.0",
+                                               "path-is-absolute": "^1.0.0"
                                        }
                                }
                        }
                        "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
                        "dev": true,
                        "requires": {
-                               "collection-visit": "1.0.0",
-                               "component-emitter": "1.3.0",
-                               "get-value": "2.0.6",
-                               "has-value": "1.0.0",
-                               "isobject": "3.0.1",
-                               "set-value": "2.0.1",
-                               "to-object-path": "0.3.0",
-                               "union-value": "1.0.1",
-                               "unset-value": "1.0.0"
+                               "collection-visit": "^1.0.0",
+                               "component-emitter": "^1.2.1",
+                               "get-value": "^2.0.6",
+                               "has-value": "^1.0.0",
+                               "isobject": "^3.0.1",
+                               "set-value": "^2.0.0",
+                               "to-object-path": "^0.3.0",
+                               "union-value": "^1.0.0",
+                               "unset-value": "^1.0.0"
                        }
                },
                "camelcase": {
                        "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
                        "dev": true,
                        "requires": {
-                               "assertion-error": "1.1.0",
-                               "check-error": "1.0.2",
-                               "deep-eql": "3.0.1",
-                               "get-func-name": "2.0.0",
-                               "pathval": "1.1.0",
-                               "type-detect": "4.0.8"
+                               "assertion-error": "^1.1.0",
+                               "check-error": "^1.0.2",
+                               "deep-eql": "^3.0.1",
+                               "get-func-name": "^2.0.0",
+                               "pathval": "^1.1.0",
+                               "type-detect": "^4.0.5"
                        }
                },
                "chalk": {
                        "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
                        "dev": true,
                        "requires": {
-                               "ansi-styles": "3.2.1",
-                               "escape-string-regexp": "1.0.5",
-                               "supports-color": "5.5.0"
+                               "ansi-styles": "^3.2.1",
+                               "escape-string-regexp": "^1.0.5",
+                               "supports-color": "^5.3.0"
                        },
                        "dependencies": {
                                "supports-color": {
                                        "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
                                        "dev": true,
                                        "requires": {
-                                               "has-flag": "3.0.0"
+                                               "has-flag": "^3.0.0"
                                        }
                                }
                        }
                        "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
                        "dev": true,
                        "requires": {
-                               "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.4",
-                               "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.2.0"
+                               "anymatch": "^2.0.0",
+                               "async-each": "^1.0.1",
+                               "braces": "^2.3.2",
+                               "fsevents": "^1.2.7",
+                               "glob-parent": "^3.1.0",
+                               "inherits": "^2.0.3",
+                               "is-binary-path": "^1.0.0",
+                               "is-glob": "^4.0.0",
+                               "normalize-path": "^3.0.0",
+                               "path-is-absolute": "^1.0.0",
+                               "readdirp": "^2.2.1",
+                               "upath": "^1.1.1"
                        },
                        "dependencies": {
                                "braces": {
                                        "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
                                        "dev": true,
                                        "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"
+                                               "arr-flatten": "^1.1.0",
+                                               "array-unique": "^0.3.2",
+                                               "extend-shallow": "^2.0.1",
+                                               "fill-range": "^4.0.0",
+                                               "isobject": "^3.0.1",
+                                               "repeat-element": "^1.1.2",
+                                               "snapdragon": "^0.8.1",
+                                               "snapdragon-node": "^2.0.1",
+                                               "split-string": "^3.0.2",
+                                               "to-regex": "^3.0.1"
                                        }
                                },
                                "extend-shallow": {
                                        "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
                                        "dev": true,
                                        "requires": {
-                                               "is-extendable": "0.1.1"
+                                               "is-extendable": "^0.1.0"
                                        }
                                },
                                "fill-range": {
                                        "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
                                        "dev": true,
                                        "requires": {
-                                               "extend-shallow": "2.0.1",
-                                               "is-number": "3.0.0",
-                                               "repeat-string": "1.6.1",
-                                               "to-regex-range": "2.1.1"
+                                               "extend-shallow": "^2.0.1",
+                                               "is-number": "^3.0.0",
+                                               "repeat-string": "^1.6.1",
+                                               "to-regex-range": "^2.1.0"
                                        }
                                },
                                "is-buffer": {
                                        "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
                                        "dev": true,
                                        "requires": {
-                                               "kind-of": "3.2.2"
+                                               "kind-of": "^3.0.2"
                                        }
                                },
                                "kind-of": {
                                        "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                                        "dev": true,
                                        "requires": {
-                                               "is-buffer": "1.1.6"
+                                               "is-buffer": "^1.1.5"
                                        }
                                },
                                "to-regex-range": {
                                        "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
                                        "dev": true,
                                        "requires": {
-                                               "is-number": "3.0.0",
-                                               "repeat-string": "1.6.1"
+                                               "is-number": "^3.0.0",
+                                               "repeat-string": "^1.6.1"
                                        }
                                }
                        }
                        "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
                        "dev": true,
                        "requires": {
-                               "tslib": "1.10.0"
+                               "tslib": "^1.9.0"
                        }
                },
                "cipher-base": {
                        "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
                        "dev": true,
                        "requires": {
-                               "inherits": "2.0.4",
-                               "safe-buffer": "5.1.2"
+                               "inherits": "^2.0.1",
+                               "safe-buffer": "^5.0.1"
                        }
                },
                "class-utils": {
                        "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
                        "dev": true,
                        "requires": {
-                               "arr-union": "3.1.0",
-                               "define-property": "0.2.5",
-                               "isobject": "3.0.1",
-                               "static-extend": "0.1.2"
+                               "arr-union": "^3.1.0",
+                               "define-property": "^0.2.5",
+                               "isobject": "^3.0.0",
+                               "static-extend": "^0.1.1"
                        },
                        "dependencies": {
                                "define-property": {
                                        "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
                                        "dev": true,
                                        "requires": {
-                                               "is-descriptor": "0.1.6"
+                                               "is-descriptor": "^0.1.0"
                                        }
                                }
                        }
                        "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
                        "dev": true,
                        "requires": {
-                               "string-width": "3.1.0",
-                               "strip-ansi": "5.2.0",
-                               "wrap-ansi": "5.1.0"
+                               "string-width": "^3.1.0",
+                               "strip-ansi": "^5.2.0",
+                               "wrap-ansi": "^5.1.0"
                        },
                        "dependencies": {
                                "ansi-regex": {
                                        "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
                                        "dev": true,
                                        "requires": {
-                                               "emoji-regex": "7.0.3",
-                                               "is-fullwidth-code-point": "2.0.0",
-                                               "strip-ansi": "5.2.0"
+                                               "emoji-regex": "^7.0.1",
+                                               "is-fullwidth-code-point": "^2.0.0",
+                                               "strip-ansi": "^5.1.0"
                                        }
                                },
                                "strip-ansi": {
                                        "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
                                        "dev": true,
                                        "requires": {
-                                               "ansi-regex": "4.1.0"
+                                               "ansi-regex": "^4.1.0"
                                        }
                                }
                        }
                        "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
                        "dev": true,
                        "requires": {
-                               "map-visit": "1.0.0",
-                               "object-visit": "1.0.1"
+                               "map-visit": "^1.0.0",
+                               "object-visit": "^1.0.0"
                        }
                },
                "color-convert": {
                        "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
                        "dev": true,
                        "requires": {
-                               "buffer-from": "1.1.1",
-                               "inherits": "2.0.4",
-                               "readable-stream": "2.3.6",
-                               "typedarray": "0.0.6"
+                               "buffer-from": "^1.0.0",
+                               "inherits": "^2.0.3",
+                               "readable-stream": "^2.2.2",
+                               "typedarray": "^0.0.6"
                        }
                },
                "console-browserify": {
                        "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
                        "dev": true,
                        "requires": {
-                               "date-now": "0.1.4"
+                               "date-now": "^0.1.4"
                        }
                },
                "constants-browserify": {
                        "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.7.1",
-                               "run-queue": "1.0.3"
+                               "aproba": "^1.1.1",
+                               "fs-write-stream-atomic": "^1.0.8",
+                               "iferr": "^0.1.5",
+                               "mkdirp": "^0.5.1",
+                               "rimraf": "^2.5.4",
+                               "run-queue": "^1.0.0"
                        }
                },
                "copy-descriptor": {
                        "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
                        "dev": true,
                        "requires": {
-                               "bn.js": "4.11.8",
-                               "elliptic": "6.5.1"
+                               "bn.js": "^4.1.0",
+                               "elliptic": "^6.0.0"
                        }
                },
                "create-hash": {
                        "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
                        "dev": true,
                        "requires": {
-                               "cipher-base": "1.0.4",
-                               "inherits": "2.0.4",
-                               "md5.js": "1.3.5",
-                               "ripemd160": "2.0.2",
-                               "sha.js": "2.4.11"
+                               "cipher-base": "^1.0.1",
+                               "inherits": "^2.0.1",
+                               "md5.js": "^1.3.4",
+                               "ripemd160": "^2.0.1",
+                               "sha.js": "^2.4.0"
                        }
                },
                "create-hmac": {
                        "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
                        "dev": true,
                        "requires": {
-                               "cipher-base": "1.0.4",
-                               "create-hash": "1.2.0",
-                               "inherits": "2.0.4",
-                               "ripemd160": "2.0.2",
-                               "safe-buffer": "5.1.2",
-                               "sha.js": "2.4.11"
+                               "cipher-base": "^1.0.3",
+                               "create-hash": "^1.1.0",
+                               "inherits": "^2.0.1",
+                               "ripemd160": "^2.0.0",
+                               "safe-buffer": "^5.0.1",
+                               "sha.js": "^2.4.8"
                        }
                },
                "cross-spawn": {
                        "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
                        "dev": true,
                        "requires": {
-                               "nice-try": "1.0.5",
-                               "path-key": "2.0.1",
-                               "semver": "5.7.1",
-                               "shebang-command": "1.2.0",
-                               "which": "1.3.1"
+                               "nice-try": "^1.0.4",
+                               "path-key": "^2.0.1",
+                               "semver": "^5.5.0",
+                               "shebang-command": "^1.2.0",
+                               "which": "^1.2.9"
                        }
                },
                "crypto-browserify": {
                        "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.4",
-                               "pbkdf2": "3.0.17",
-                               "public-encrypt": "4.0.3",
-                               "randombytes": "2.1.0",
-                               "randomfill": "1.0.4"
+                               "browserify-cipher": "^1.0.0",
+                               "browserify-sign": "^4.0.0",
+                               "create-ecdh": "^4.0.0",
+                               "create-hash": "^1.1.0",
+                               "create-hmac": "^1.1.0",
+                               "diffie-hellman": "^5.0.0",
+                               "inherits": "^2.0.1",
+                               "pbkdf2": "^3.0.3",
+                               "public-encrypt": "^4.0.0",
+                               "randombytes": "^2.0.0",
+                               "randomfill": "^1.0.3"
                        }
                },
                "crypto-js": {
-                       "version": "3.1.9-1",
-                       "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz",
-                       "integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg="
+                       "version": "4.0.0",
+                       "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz",
+                       "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg=="
                },
                "cyclist": {
                        "version": "1.0.1",
                        "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
                        "dev": true,
                        "requires": {
-                               "ms": "2.1.1"
+                               "ms": "^2.1.1"
                        }
                },
                "decamelize": {
                        "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
                        "dev": true,
                        "requires": {
-                               "type-detect": "4.0.8"
+                               "type-detect": "^4.0.0"
                        }
                },
                "define-properties": {
                        "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
                        "dev": true,
                        "requires": {
-                               "object-keys": "1.1.1"
+                               "object-keys": "^1.0.12"
                        }
                },
                "define-property": {
                        "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
                        "dev": true,
                        "requires": {
-                               "is-descriptor": "1.0.2",
-                               "isobject": "3.0.1"
+                               "is-descriptor": "^1.0.2",
+                               "isobject": "^3.0.1"
                        },
                        "dependencies": {
                                "is-accessor-descriptor": {
                                        "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
                                        "dev": true,
                                        "requires": {
-                                               "kind-of": "6.0.2"
+                                               "kind-of": "^6.0.0"
                                        }
                                },
                                "is-data-descriptor": {
                                        "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
                                        "dev": true,
                                        "requires": {
-                                               "kind-of": "6.0.2"
+                                               "kind-of": "^6.0.0"
                                        }
                                },
                                "is-descriptor": {
                                        "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"
+                                               "is-accessor-descriptor": "^1.0.0",
+                                               "is-data-descriptor": "^1.0.0",
+                                               "kind-of": "^6.0.2"
                                        }
                                }
                        }
                        "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
                        "dev": true,
                        "requires": {
-                               "inherits": "2.0.4",
-                               "minimalistic-assert": "1.0.1"
+                               "inherits": "^2.0.1",
+                               "minimalistic-assert": "^1.0.0"
                        }
                },
                "detect-file": {
                        "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
                        "dev": true,
                        "requires": {
-                               "bn.js": "4.11.8",
-                               "miller-rabin": "4.0.1",
-                               "randombytes": "2.1.0"
+                               "bn.js": "^4.1.0",
+                               "miller-rabin": "^4.0.0",
+                               "randombytes": "^2.0.0"
                        }
                },
                "domain-browser": {
                        "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
                        "dev": true,
                        "requires": {
-                               "end-of-stream": "1.4.4",
-                               "inherits": "2.0.4",
-                               "readable-stream": "2.3.6",
-                               "stream-shift": "1.0.0"
+                               "end-of-stream": "^1.0.0",
+                               "inherits": "^2.0.1",
+                               "readable-stream": "^2.0.0",
+                               "stream-shift": "^1.0.0"
                        }
                },
                "elliptic": {
                        "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==",
                        "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.4",
-                               "minimalistic-assert": "1.0.1",
-                               "minimalistic-crypto-utils": "1.0.1"
+                               "bn.js": "^4.4.0",
+                               "brorand": "^1.0.1",
+                               "hash.js": "^1.0.0",
+                               "hmac-drbg": "^1.0.0",
+                               "inherits": "^2.0.1",
+                               "minimalistic-assert": "^1.0.0",
+                               "minimalistic-crypto-utils": "^1.0.0"
                        }
                },
                "emoji-regex": {
                        "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
                        "dev": true,
                        "requires": {
-                               "once": "1.4.0"
+                               "once": "^1.4.0"
                        }
                },
                "enhanced-resolve": {
                        "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==",
                        "dev": true,
                        "requires": {
-                               "graceful-fs": "4.2.2",
-                               "memory-fs": "0.5.0",
-                               "tapable": "1.1.3"
+                               "graceful-fs": "^4.1.2",
+                               "memory-fs": "^0.5.0",
+                               "tapable": "^1.0.0"
                        }
                },
                "errno": {
                        "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
                        "dev": true,
                        "requires": {
-                               "prr": "1.0.1"
+                               "prr": "~1.0.1"
                        }
                },
                "es-abstract": {
                        "integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==",
                        "dev": true,
                        "requires": {
-                               "es-to-primitive": "1.2.0",
-                               "function-bind": "1.1.1",
-                               "has": "1.0.3",
-                               "has-symbols": "1.0.0",
-                               "is-callable": "1.1.4",
-                               "is-regex": "1.0.4",
-                               "object-inspect": "1.6.0",
-                               "object-keys": "1.1.1",
-                               "string.prototype.trimleft": "2.1.0",
-                               "string.prototype.trimright": "2.1.0"
+                               "es-to-primitive": "^1.2.0",
+                               "function-bind": "^1.1.1",
+                               "has": "^1.0.3",
+                               "has-symbols": "^1.0.0",
+                               "is-callable": "^1.1.4",
+                               "is-regex": "^1.0.4",
+                               "object-inspect": "^1.6.0",
+                               "object-keys": "^1.1.1",
+                               "string.prototype.trimleft": "^2.1.0",
+                               "string.prototype.trimright": "^2.1.0"
                        }
                },
                "es-to-primitive": {
                        "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
                        "dev": true,
                        "requires": {
-                               "is-callable": "1.1.4",
-                               "is-date-object": "1.0.1",
-                               "is-symbol": "1.0.2"
+                               "is-callable": "^1.1.4",
+                               "is-date-object": "^1.0.1",
+                               "is-symbol": "^1.0.2"
                        }
                },
                "escape-string-regexp": {
                        "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
                        "dev": true,
                        "requires": {
-                               "esrecurse": "4.2.1",
-                               "estraverse": "4.3.0"
+                               "esrecurse": "^4.1.0",
+                               "estraverse": "^4.1.1"
                        }
                },
                "esprima": {
                        "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
                        "dev": true,
                        "requires": {
-                               "estraverse": "4.3.0"
+                               "estraverse": "^4.1.0"
                        }
                },
                "estraverse": {
                        "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
                        "dev": true,
                        "requires": {
-                               "md5.js": "1.3.5",
-                               "safe-buffer": "5.1.2"
+                               "md5.js": "^1.3.4",
+                               "safe-buffer": "^5.1.1"
                        }
                },
                "execa": {
                        "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"
+                               "cross-spawn": "^6.0.0",
+                               "get-stream": "^4.0.0",
+                               "is-stream": "^1.1.0",
+                               "npm-run-path": "^2.0.0",
+                               "p-finally": "^1.0.0",
+                               "signal-exit": "^3.0.0",
+                               "strip-eof": "^1.0.0"
                        }
                },
                "expand-brackets": {
                        "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
                        "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"
+                               "debug": "^2.3.3",
+                               "define-property": "^0.2.5",
+                               "extend-shallow": "^2.0.1",
+                               "posix-character-classes": "^0.1.0",
+                               "regex-not": "^1.0.0",
+                               "snapdragon": "^0.8.1",
+                               "to-regex": "^3.0.1"
                        },
                        "dependencies": {
                                "debug": {
                                        "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
                                        "dev": true,
                                        "requires": {
-                                               "is-descriptor": "0.1.6"
+                                               "is-descriptor": "^0.1.0"
                                        }
                                },
                                "extend-shallow": {
                                        "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
                                        "dev": true,
                                        "requires": {
-                                               "is-extendable": "0.1.1"
+                                               "is-extendable": "^0.1.0"
                                        }
                                },
                                "ms": {
                        "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
                        "dev": true,
                        "requires": {
-                               "homedir-polyfill": "1.0.3"
+                               "homedir-polyfill": "^1.0.1"
                        }
                },
                "extend-shallow": {
                        "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
                        "dev": true,
                        "requires": {
-                               "assign-symbols": "1.0.0",
-                               "is-extendable": "1.0.1"
+                               "assign-symbols": "^1.0.0",
+                               "is-extendable": "^1.0.1"
                        },
                        "dependencies": {
                                "is-extendable": {
                                        "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
                                        "dev": true,
                                        "requires": {
-                                               "is-plain-object": "2.0.4"
+                                               "is-plain-object": "^2.0.4"
                                        }
                                }
                        }
                        "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"
+                               "array-unique": "^0.3.2",
+                               "define-property": "^1.0.0",
+                               "expand-brackets": "^2.1.4",
+                               "extend-shallow": "^2.0.1",
+                               "fragment-cache": "^0.2.1",
+                               "regex-not": "^1.0.0",
+                               "snapdragon": "^0.8.1",
+                               "to-regex": "^3.0.1"
                        },
                        "dependencies": {
                                "define-property": {
                                        "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
                                        "dev": true,
                                        "requires": {
-                                               "is-descriptor": "1.0.2"
+                                               "is-descriptor": "^1.0.0"
                                        }
                                },
                                "extend-shallow": {
                                        "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
                                        "dev": true,
                                        "requires": {
-                                               "is-extendable": "0.1.1"
+                                               "is-extendable": "^0.1.0"
                                        }
                                },
                                "is-accessor-descriptor": {
                                        "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
                                        "dev": true,
                                        "requires": {
-                                               "kind-of": "6.0.2"
+                                               "kind-of": "^6.0.0"
                                        }
                                },
                                "is-data-descriptor": {
                                        "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
                                        "dev": true,
                                        "requires": {
-                                               "kind-of": "6.0.2"
+                                               "kind-of": "^6.0.0"
                                        }
                                },
                                "is-descriptor": {
                                        "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"
+                                               "is-accessor-descriptor": "^1.0.0",
+                                               "is-data-descriptor": "^1.0.0",
+                                               "kind-of": "^6.0.2"
                                        }
                                }
                        }
                        "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
                        "dev": true,
                        "requires": {
-                               "to-regex-range": "5.0.1"
+                               "to-regex-range": "^5.0.1"
                        }
                },
                "find-cache-dir": {
                        "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
                        "dev": true,
                        "requires": {
-                               "commondir": "1.0.1",
-                               "make-dir": "2.1.0",
-                               "pkg-dir": "3.0.0"
+                               "commondir": "^1.0.1",
+                               "make-dir": "^2.0.0",
+                               "pkg-dir": "^3.0.0"
                        }
                },
                "find-up": {
                        "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
                        "dev": true,
                        "requires": {
-                               "locate-path": "3.0.0"
+                               "locate-path": "^3.0.0"
                        }
                },
                "findup-sync": {
                        "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
                        "dev": true,
                        "requires": {
-                               "detect-file": "1.0.0",
-                               "is-glob": "4.0.1",
-                               "micromatch": "3.1.10",
-                               "resolve-dir": "1.0.1"
+                               "detect-file": "^1.0.0",
+                               "is-glob": "^4.0.0",
+                               "micromatch": "^3.0.4",
+                               "resolve-dir": "^1.0.1"
                        },
                        "dependencies": {
                                "braces": {
                                        "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
                                        "dev": true,
                                        "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"
+                                               "arr-flatten": "^1.1.0",
+                                               "array-unique": "^0.3.2",
+                                               "extend-shallow": "^2.0.1",
+                                               "fill-range": "^4.0.0",
+                                               "isobject": "^3.0.1",
+                                               "repeat-element": "^1.1.2",
+                                               "snapdragon": "^0.8.1",
+                                               "snapdragon-node": "^2.0.1",
+                                               "split-string": "^3.0.2",
+                                               "to-regex": "^3.0.1"
                                        },
                                        "dependencies": {
                                                "extend-shallow": {
                                                        "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
                                                        "dev": true,
                                                        "requires": {
-                                                               "is-extendable": "0.1.1"
+                                                               "is-extendable": "^0.1.0"
                                                        }
                                                }
                                        }
                                        "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
                                        "dev": true,
                                        "requires": {
-                                               "extend-shallow": "2.0.1",
-                                               "is-number": "3.0.0",
-                                               "repeat-string": "1.6.1",
-                                               "to-regex-range": "2.1.1"
+                                               "extend-shallow": "^2.0.1",
+                                               "is-number": "^3.0.0",
+                                               "repeat-string": "^1.6.1",
+                                               "to-regex-range": "^2.1.0"
                                        },
                                        "dependencies": {
                                                "extend-shallow": {
                                                        "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
                                                        "dev": true,
                                                        "requires": {
-                                                               "is-extendable": "0.1.1"
+                                                               "is-extendable": "^0.1.0"
                                                        }
                                                }
                                        }
                                        "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
                                        "dev": true,
                                        "requires": {
-                                               "kind-of": "3.2.2"
+                                               "kind-of": "^3.0.2"
                                        },
                                        "dependencies": {
                                                "kind-of": {
                                                        "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                                                        "dev": true,
                                                        "requires": {
-                                                               "is-buffer": "1.1.6"
+                                                               "is-buffer": "^1.1.5"
                                                        }
                                                }
                                        }
                                        "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
                                        "dev": true,
                                        "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"
+                                               "arr-diff": "^4.0.0",
+                                               "array-unique": "^0.3.2",
+                                               "braces": "^2.3.1",
+                                               "define-property": "^2.0.2",
+                                               "extend-shallow": "^3.0.2",
+                                               "extglob": "^2.0.4",
+                                               "fragment-cache": "^0.2.1",
+                                               "kind-of": "^6.0.2",
+                                               "nanomatch": "^1.2.9",
+                                               "object.pick": "^1.3.0",
+                                               "regex-not": "^1.0.0",
+                                               "snapdragon": "^0.8.1",
+                                               "to-regex": "^3.0.2"
                                        }
                                },
                                "to-regex-range": {
                                        "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
                                        "dev": true,
                                        "requires": {
-                                               "is-number": "3.0.0",
-                                               "repeat-string": "1.6.1"
+                                               "is-number": "^3.0.0",
+                                               "repeat-string": "^1.6.1"
                                        }
                                }
                        }
                        "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==",
                        "dev": true,
                        "requires": {
-                               "is-buffer": "2.0.4"
+                               "is-buffer": "~2.0.3"
                        }
                },
                "flush-write-stream": {
                        "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
                        "dev": true,
                        "requires": {
-                               "inherits": "2.0.4",
-                               "readable-stream": "2.3.6"
+                               "inherits": "^2.0.3",
+                               "readable-stream": "^2.3.6"
                        }
                },
                "for-in": {
                        "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
                        "dev": true,
                        "requires": {
-                               "map-cache": "0.2.2"
+                               "map-cache": "^0.2.2"
                        }
                },
                "from2": {
                        "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
                        "dev": true,
                        "requires": {
-                               "inherits": "2.0.4",
-                               "readable-stream": "2.3.6"
+                               "inherits": "^2.0.1",
+                               "readable-stream": "^2.0.0"
                        }
                },
                "fs-write-stream-atomic": {
                        "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
                        "dev": true,
                        "requires": {
-                               "graceful-fs": "4.2.2",
-                               "iferr": "0.1.5",
-                               "imurmurhash": "0.1.4",
-                               "readable-stream": "2.3.6"
+                               "graceful-fs": "^4.1.2",
+                               "iferr": "^0.1.5",
+                               "imurmurhash": "^0.1.4",
+                               "readable-stream": "1 || 2"
                        }
                },
                "fs.realpath": {
                        "dev": true,
                        "optional": true,
                        "requires": {
-                               "nan": "2.14.0",
-                               "node-pre-gyp": "0.12.0"
+                               "nan": "^2.12.1",
+                               "node-pre-gyp": "^0.12.0"
                        },
                        "dependencies": {
                                "abbrev": {
                                "ansi-regex": {
                                        "version": "2.1.1",
                                        "bundled": true,
-                                       "dev": true
+                                       "dev": true,
+                                       "optional": true
                                },
                                "aproba": {
                                        "version": "1.2.0",
                                        "dev": true,
                                        "optional": true,
                                        "requires": {
-                                               "delegates": "1.0.0",
-                                               "readable-stream": "2.3.6"
+                                               "delegates": "^1.0.0",
+                                               "readable-stream": "^2.0.6"
                                        }
                                },
                                "balanced-match": {
                                        "version": "1.0.0",
                                        "bundled": true,
-                                       "dev": true
+                                       "dev": true,
+                                       "optional": true
                                },
                                "brace-expansion": {
                                        "version": "1.1.11",
                                        "bundled": true,
                                        "dev": true,
+                                       "optional": true,
                                        "requires": {
-                                               "balanced-match": "1.0.0",
+                                               "balanced-match": "^1.0.0",
                                                "concat-map": "0.0.1"
                                        }
                                },
                                "code-point-at": {
                                        "version": "1.1.0",
                                        "bundled": true,
-                                       "dev": true
+                                       "dev": true,
+                                       "optional": true
                                },
                                "concat-map": {
                                        "version": "0.0.1",
                                        "bundled": true,
-                                       "dev": true
+                                       "dev": true,
+                                       "optional": true
                                },
                                "console-control-strings": {
                                        "version": "1.1.0",
                                        "bundled": true,
-                                       "dev": true
+                                       "dev": true,
+                                       "optional": true
                                },
                                "core-util-is": {
                                        "version": "1.0.2",
                                        "dev": true,
                                        "optional": true,
                                        "requires": {
-                                               "ms": "2.1.1"
+                                               "ms": "^2.1.1"
                                        }
                                },
                                "deep-extend": {
                                        "dev": true,
                                        "optional": true,
                                        "requires": {
-                                               "minipass": "2.3.5"
+                                               "minipass": "^2.2.1"
                                        }
                                },
                                "fs.realpath": {
                                        "dev": 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.3"
+                                               "aproba": "^1.0.3",
+                                               "console-control-strings": "^1.0.0",
+                                               "has-unicode": "^2.0.0",
+                                               "object-assign": "^4.1.0",
+                                               "signal-exit": "^3.0.0",
+                                               "string-width": "^1.0.1",
+                                               "strip-ansi": "^3.0.1",
+                                               "wide-align": "^1.1.0"
                                        }
                                },
                                "glob": {
                                        "dev": 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"
+                                               "fs.realpath": "^1.0.0",
+                                               "inflight": "^1.0.4",
+                                               "inherits": "2",
+                                               "minimatch": "^3.0.4",
+                                               "once": "^1.3.0",
+                                               "path-is-absolute": "^1.0.0"
                                        }
                                },
                                "has-unicode": {
                                        "dev": true,
                                        "optional": true,
                                        "requires": {
-                                               "safer-buffer": "2.1.2"
+                                               "safer-buffer": ">= 2.1.2 < 3"
                                        }
                                },
                                "ignore-walk": {
                                        "dev": true,
                                        "optional": true,
                                        "requires": {
-                                               "minimatch": "3.0.4"
+                                               "minimatch": "^3.0.4"
                                        }
                                },
                                "inflight": {
                                        "dev": true,
                                        "optional": true,
                                        "requires": {
-                                               "once": "1.4.0",
-                                               "wrappy": "1.0.2"
+                                               "once": "^1.3.0",
+                                               "wrappy": "1"
                                        }
                                },
                                "inherits": {
                                        "version": "2.0.3",
                                        "bundled": true,
-                                       "dev": true
+                                       "dev": true,
+                                       "optional": true
                                },
                                "ini": {
                                        "version": "1.3.5",
                                        "version": "1.0.0",
                                        "bundled": true,
                                        "dev": true,
+                                       "optional": true,
                                        "requires": {
-                                               "number-is-nan": "1.0.1"
+                                               "number-is-nan": "^1.0.0"
                                        }
                                },
                                "isarray": {
                                        "version": "3.0.4",
                                        "bundled": true,
                                        "dev": true,
+                                       "optional": true,
                                        "requires": {
-                                               "brace-expansion": "1.1.11"
+                                               "brace-expansion": "^1.1.7"
                                        }
                                },
                                "minimist": {
                                        "version": "0.0.8",
                                        "bundled": true,
-                                       "dev": true
+                                       "dev": true,
+                                       "optional": true
                                },
                                "minipass": {
                                        "version": "2.3.5",
                                        "bundled": true,
                                        "dev": true,
+                                       "optional": true,
                                        "requires": {
-                                               "safe-buffer": "5.1.2",
-                                               "yallist": "3.0.3"
+                                               "safe-buffer": "^5.1.2",
+                                               "yallist": "^3.0.0"
                                        }
                                },
                                "minizlib": {
                                        "dev": true,
                                        "optional": true,
                                        "requires": {
-                                               "minipass": "2.3.5"
+                                               "minipass": "^2.2.1"
                                        }
                                },
                                "mkdirp": {
                                        "version": "0.5.1",
                                        "bundled": true,
                                        "dev": true,
+                                       "optional": true,
                                        "requires": {
                                                "minimist": "0.0.8"
                                        }
                                        "dev": true,
                                        "optional": true,
                                        "requires": {
-                                               "debug": "4.1.1",
-                                               "iconv-lite": "0.4.24",
-                                               "sax": "1.2.4"
+                                               "debug": "^4.1.0",
+                                               "iconv-lite": "^0.4.4",
+                                               "sax": "^1.2.4"
                                        }
                                },
                                "node-pre-gyp": {
                                        "dev": true,
                                        "optional": true,
                                        "requires": {
-                                               "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"
+                                               "detect-libc": "^1.0.2",
+                                               "mkdirp": "^0.5.1",
+                                               "needle": "^2.2.1",
+                                               "nopt": "^4.0.1",
+                                               "npm-packlist": "^1.1.6",
+                                               "npmlog": "^4.0.2",
+                                               "rc": "^1.2.7",
+                                               "rimraf": "^2.6.1",
+                                               "semver": "^5.3.0",
+                                               "tar": "^4"
                                        }
                                },
                                "nopt": {
                                        "dev": true,
                                        "optional": true,
                                        "requires": {
-                                               "abbrev": "1.1.1",
-                                               "osenv": "0.1.5"
+                                               "abbrev": "1",
+                                               "osenv": "^0.1.4"
                                        }
                                },
                                "npm-bundled": {
                                        "dev": true,
                                        "optional": true,
                                        "requires": {
-                                               "ignore-walk": "3.0.1",
-                                               "npm-bundled": "1.0.6"
+                                               "ignore-walk": "^3.0.1",
+                                               "npm-bundled": "^1.0.1"
                                        }
                                },
                                "npmlog": {
                                        "dev": true,
                                        "optional": true,
                                        "requires": {
-                                               "are-we-there-yet": "1.1.5",
-                                               "console-control-strings": "1.1.0",
-                                               "gauge": "2.7.4",
-                                               "set-blocking": "2.0.0"
+                                               "are-we-there-yet": "~1.1.2",
+                                               "console-control-strings": "~1.1.0",
+                                               "gauge": "~2.7.3",
+                                               "set-blocking": "~2.0.0"
                                        }
                                },
                                "number-is-nan": {
                                        "version": "1.0.1",
                                        "bundled": true,
-                                       "dev": true
+                                       "dev": true,
+                                       "optional": true
                                },
                                "object-assign": {
                                        "version": "4.1.1",
                                        "version": "1.4.0",
                                        "bundled": true,
                                        "dev": true,
+                                       "optional": true,
                                        "requires": {
-                                               "wrappy": "1.0.2"
+                                               "wrappy": "1"
                                        }
                                },
                                "os-homedir": {
                                        "dev": true,
                                        "optional": true,
                                        "requires": {
-                                               "os-homedir": "1.0.2",
-                                               "os-tmpdir": "1.0.2"
+                                               "os-homedir": "^1.0.0",
+                                               "os-tmpdir": "^1.0.0"
                                        }
                                },
                                "path-is-absolute": {
                                        "dev": true,
                                        "optional": true,
                                        "requires": {
-                                               "deep-extend": "0.6.0",
-                                               "ini": "1.3.5",
-                                               "minimist": "1.2.0",
-                                               "strip-json-comments": "2.0.1"
+                                               "deep-extend": "^0.6.0",
+                                               "ini": "~1.3.0",
+                                               "minimist": "^1.2.0",
+                                               "strip-json-comments": "~2.0.1"
                                        },
                                        "dependencies": {
                                                "minimist": {
                                        "dev": 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.2",
-                                               "string_decoder": "1.1.1",
-                                               "util-deprecate": "1.0.2"
+                                               "core-util-is": "~1.0.0",
+                                               "inherits": "~2.0.3",
+                                               "isarray": "~1.0.0",
+                                               "process-nextick-args": "~2.0.0",
+                                               "safe-buffer": "~5.1.1",
+                                               "string_decoder": "~1.1.1",
+                                               "util-deprecate": "~1.0.1"
                                        }
                                },
                                "rimraf": {
                                        "dev": true,
                                        "optional": true,
                                        "requires": {
-                                               "glob": "7.1.3"
+                                               "glob": "^7.1.3"
                                        }
                                },
                                "safe-buffer": {
                                        "version": "5.1.2",
                                        "bundled": true,
-                                       "dev": true
+                                       "dev": true,
+                                       "optional": true
                                },
                                "safer-buffer": {
                                        "version": "2.1.2",
                                        "version": "1.0.2",
                                        "bundled": true,
                                        "dev": true,
+                                       "optional": true,
                                        "requires": {
-                                               "code-point-at": "1.1.0",
-                                               "is-fullwidth-code-point": "1.0.0",
-                                               "strip-ansi": "3.0.1"
+                                               "code-point-at": "^1.0.0",
+                                               "is-fullwidth-code-point": "^1.0.0",
+                                               "strip-ansi": "^3.0.0"
                                        }
                                },
                                "string_decoder": {
                                        "dev": true,
                                        "optional": true,
                                        "requires": {
-                                               "safe-buffer": "5.1.2"
+                                               "safe-buffer": "~5.1.0"
                                        }
                                },
                                "strip-ansi": {
                                        "version": "3.0.1",
                                        "bundled": true,
                                        "dev": true,
+                                       "optional": true,
                                        "requires": {
-                                               "ansi-regex": "2.1.1"
+                                               "ansi-regex": "^2.0.0"
                                        }
                                },
                                "strip-json-comments": {
                                        "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"
+                                               "chownr": "^1.1.1",
+                                               "fs-minipass": "^1.2.5",
+                                               "minipass": "^2.3.4",
+                                               "minizlib": "^1.1.1",
+                                               "mkdirp": "^0.5.0",
+                                               "safe-buffer": "^5.1.2",
+                                               "yallist": "^3.0.2"
                                        }
                                },
                                "util-deprecate": {
                                        "dev": true,
                                        "optional": true,
                                        "requires": {
-                                               "string-width": "1.0.2"
+                                               "string-width": "^1.0.2 || 2"
                                        }
                                },
                                "wrappy": {
                                        "version": "1.0.2",
                                        "bundled": true,
-                                       "dev": true
+                                       "dev": true,
+                                       "optional": true
                                },
                                "yallist": {
                                        "version": "3.0.3",
                                        "bundled": true,
-                                       "dev": true
+                                       "dev": true,
+                                       "optional": true
                                }
                        }
                },
                        "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
                        "dev": true,
                        "requires": {
-                               "pump": "3.0.0"
+                               "pump": "^3.0.0"
                        }
                },
                "get-value": {
                        "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
                        "dev": true,
                        "requires": {
-                               "fs.realpath": "1.0.0",
-                               "inflight": "1.0.6",
-                               "inherits": "2.0.4",
-                               "minimatch": "3.0.4",
-                               "once": "1.4.0",
-                               "path-is-absolute": "1.0.1"
+                               "fs.realpath": "^1.0.0",
+                               "inflight": "^1.0.4",
+                               "inherits": "2",
+                               "minimatch": "^3.0.4",
+                               "once": "^1.3.0",
+                               "path-is-absolute": "^1.0.0"
                        }
                },
                "glob-parent": {
                        "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
                        "dev": true,
                        "requires": {
-                               "is-glob": "3.1.0",
-                               "path-dirname": "1.0.2"
+                               "is-glob": "^3.1.0",
+                               "path-dirname": "^1.0.0"
                        },
                        "dependencies": {
                                "is-glob": {
                                        "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
                                        "dev": true,
                                        "requires": {
-                                               "is-extglob": "2.1.1"
+                                               "is-extglob": "^2.1.0"
                                        }
                                }
                        }
                        "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
                        "dev": true,
                        "requires": {
-                               "global-prefix": "3.0.0"
+                               "global-prefix": "^3.0.0"
                        },
                        "dependencies": {
                                "global-prefix": {
                                        "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
                                        "dev": true,
                                        "requires": {
-                                               "ini": "1.3.5",
-                                               "kind-of": "6.0.2",
-                                               "which": "1.3.1"
+                                               "ini": "^1.3.5",
+                                               "kind-of": "^6.0.2",
+                                               "which": "^1.3.1"
                                        }
                                }
                        }
                        "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
                        "dev": true,
                        "requires": {
-                               "expand-tilde": "2.0.2",
-                               "homedir-polyfill": "1.0.3",
-                               "ini": "1.3.5",
-                               "is-windows": "1.0.2",
-                               "which": "1.3.1"
+                               "expand-tilde": "^2.0.2",
+                               "homedir-polyfill": "^1.0.1",
+                               "ini": "^1.3.4",
+                               "is-windows": "^1.0.1",
+                               "which": "^1.2.14"
                        }
                },
                "graceful-fs": {
                        "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
                        "dev": true,
                        "requires": {
-                               "function-bind": "1.1.1"
+                               "function-bind": "^1.1.1"
                        }
                },
                "has-flag": {
                        "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
                        "dev": true,
                        "requires": {
-                               "get-value": "2.0.6",
-                               "has-values": "1.0.0",
-                               "isobject": "3.0.1"
+                               "get-value": "^2.0.6",
+                               "has-values": "^1.0.0",
+                               "isobject": "^3.0.0"
                        }
                },
                "has-values": {
                        "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
                        "dev": true,
                        "requires": {
-                               "is-number": "3.0.0",
-                               "kind-of": "4.0.0"
+                               "is-number": "^3.0.0",
+                               "kind-of": "^4.0.0"
                        },
                        "dependencies": {
                                "is-buffer": {
                                        "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
                                        "dev": true,
                                        "requires": {
-                                               "kind-of": "3.2.2"
+                                               "kind-of": "^3.0.2"
                                        },
                                        "dependencies": {
                                                "kind-of": {
                                                        "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                                                        "dev": true,
                                                        "requires": {
-                                                               "is-buffer": "1.1.6"
+                                                               "is-buffer": "^1.1.5"
                                                        }
                                                }
                                        }
                                        "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
                                        "dev": true,
                                        "requires": {
-                                               "is-buffer": "1.1.6"
+                                               "is-buffer": "^1.1.5"
                                        }
                                }
                        }
                        "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
                        "dev": true,
                        "requires": {
-                               "inherits": "2.0.4",
-                               "safe-buffer": "5.1.2"
+                               "inherits": "^2.0.1",
+                               "safe-buffer": "^5.0.1"
                        }
                },
                "hash.js": {
                        "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
                        "dev": true,
                        "requires": {
-                               "inherits": "2.0.4",
-                               "minimalistic-assert": "1.0.1"
+                               "inherits": "^2.0.3",
+                               "minimalistic-assert": "^1.0.1"
                        }
                },
                "he": {
                        "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
                        "dev": true,
                        "requires": {
-                               "hash.js": "1.1.7",
-                               "minimalistic-assert": "1.0.1",
-                               "minimalistic-crypto-utils": "1.0.1"
+                               "hash.js": "^1.0.3",
+                               "minimalistic-assert": "^1.0.0",
+                               "minimalistic-crypto-utils": "^1.0.1"
                        }
                },
                "homedir-polyfill": {
                        "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
                        "dev": true,
                        "requires": {
-                               "parse-passwd": "1.0.0"
+                               "parse-passwd": "^1.0.0"
                        }
                },
                "https-browserify": {
                        "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
                        "dev": true,
                        "requires": {
-                               "pkg-dir": "3.0.0",
-                               "resolve-cwd": "2.0.0"
+                               "pkg-dir": "^3.0.0",
+                               "resolve-cwd": "^2.0.0"
                        }
                },
                "imurmurhash": {
                        "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
                        "dev": true,
                        "requires": {
-                               "once": "1.4.0",
-                               "wrappy": "1.0.2"
+                               "once": "^1.3.0",
+                               "wrappy": "1"
                        }
                },
                "inherits": {
                        "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
                        "dev": true,
                        "requires": {
-                               "kind-of": "3.2.2"
+                               "kind-of": "^3.0.2"
                        },
                        "dependencies": {
                                "is-buffer": {
                                        "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                                        "dev": true,
                                        "requires": {
-                                               "is-buffer": "1.1.6"
+                                               "is-buffer": "^1.1.5"
                                        }
                                }
                        }
                        "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
                        "dev": true,
                        "requires": {
-                               "binary-extensions": "1.13.1"
+                               "binary-extensions": "^1.0.0"
                        }
                },
                "is-buffer": {
                        "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
                        "dev": true,
                        "requires": {
-                               "kind-of": "3.2.2"
+                               "kind-of": "^3.0.2"
                        },
                        "dependencies": {
                                "is-buffer": {
                                        "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                                        "dev": true,
                                        "requires": {
-                                               "is-buffer": "1.1.6"
+                                               "is-buffer": "^1.1.5"
                                        }
                                }
                        }
                        "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
                        "dev": true,
                        "requires": {
-                               "is-accessor-descriptor": "0.1.6",
-                               "is-data-descriptor": "0.1.4",
-                               "kind-of": "5.1.0"
+                               "is-accessor-descriptor": "^0.1.6",
+                               "is-data-descriptor": "^0.1.4",
+                               "kind-of": "^5.0.0"
                        },
                        "dependencies": {
                                "kind-of": {
                        "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
                        "dev": true,
                        "requires": {
-                               "is-extglob": "2.1.1"
+                               "is-extglob": "^2.1.1"
                        }
                },
                "is-number": {
                        "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
                        "dev": true,
                        "requires": {
-                               "isobject": "3.0.1"
+                               "isobject": "^3.0.1"
                        }
                },
                "is-regex": {
                        "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
                        "dev": true,
                        "requires": {
-                               "has": "1.0.3"
+                               "has": "^1.0.1"
                        }
                },
                "is-stream": {
                        "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
                        "dev": true,
                        "requires": {
-                               "has-symbols": "1.0.0"
+                               "has-symbols": "^1.0.0"
                        }
                },
                "is-windows": {
                        "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
                        "dev": true,
                        "requires": {
-                               "argparse": "1.0.10",
-                               "esprima": "4.0.1"
+                               "argparse": "^1.0.7",
+                               "esprima": "^4.0.0"
                        }
                },
                "json-parse-better-errors": {
                        "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
                        "dev": true,
                        "requires": {
-                               "minimist": "1.2.0"
+                               "minimist": "^1.2.0"
                        },
                        "dependencies": {
                                "minimist": {
                        "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
                        "dev": true,
                        "requires": {
-                               "invert-kv": "2.0.0"
+                               "invert-kv": "^2.0.0"
                        }
                },
                "loader-runner": {
                        "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
                        "dev": true,
                        "requires": {
-                               "big.js": "5.2.2",
-                               "emojis-list": "2.1.0",
-                               "json5": "1.0.1"
+                               "big.js": "^5.2.2",
+                               "emojis-list": "^2.0.0",
+                               "json5": "^1.0.1"
                        }
                },
                "locate-path": {
                        "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
                        "dev": true,
                        "requires": {
-                               "p-locate": "3.0.0",
-                               "path-exists": "3.0.0"
+                               "p-locate": "^3.0.0",
+                               "path-exists": "^3.0.0"
                        }
                },
                "lodash": {
                        "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
                        "dev": true,
                        "requires": {
-                               "chalk": "2.4.2"
+                               "chalk": "^2.0.1"
                        }
                },
                "lru-cache": {
                        "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
                        "dev": true,
                        "requires": {
-                               "yallist": "3.1.1"
+                               "yallist": "^3.0.2"
                        }
                },
                "make-dir": {
                        "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
                        "dev": true,
                        "requires": {
-                               "pify": "4.0.1",
-                               "semver": "5.7.1"
+                               "pify": "^4.0.1",
+                               "semver": "^5.6.0"
                        }
                },
                "mamacro": {
                        "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
                        "dev": true,
                        "requires": {
-                               "p-defer": "1.0.0"
+                               "p-defer": "^1.0.0"
                        }
                },
                "map-cache": {
                        "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
                        "dev": true,
                        "requires": {
-                               "object-visit": "1.0.1"
+                               "object-visit": "^1.0.0"
                        }
                },
                "md5.js": {
                        "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
                        "dev": true,
                        "requires": {
-                               "hash-base": "3.0.4",
-                               "inherits": "2.0.4",
-                               "safe-buffer": "5.1.2"
+                               "hash-base": "^3.0.0",
+                               "inherits": "^2.0.1",
+                               "safe-buffer": "^5.1.2"
                        }
                },
                "mem": {
                        "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
                        "dev": true,
                        "requires": {
-                               "map-age-cleaner": "0.1.3",
-                               "mimic-fn": "2.1.0",
-                               "p-is-promise": "2.1.0"
+                               "map-age-cleaner": "^0.1.1",
+                               "mimic-fn": "^2.0.0",
+                               "p-is-promise": "^2.0.0"
                        }
                },
                "memory-fs": {
                        "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
                        "dev": true,
                        "requires": {
-                               "errno": "0.1.7",
-                               "readable-stream": "2.3.6"
+                               "errno": "^0.1.3",
+                               "readable-stream": "^2.0.1"
                        }
                },
                "micromatch": {
                        "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
                        "dev": true,
                        "requires": {
-                               "braces": "3.0.2",
-                               "picomatch": "2.0.7"
+                               "braces": "^3.0.1",
+                               "picomatch": "^2.0.5"
                        }
                },
                "miller-rabin": {
                        "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
                        "dev": true,
                        "requires": {
-                               "bn.js": "4.11.8",
-                               "brorand": "1.1.0"
+                               "bn.js": "^4.0.0",
+                               "brorand": "^1.0.1"
                        }
                },
                "mimic-fn": {
                        "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
                        "dev": true,
                        "requires": {
-                               "brace-expansion": "1.1.11"
+                               "brace-expansion": "^1.1.7"
                        }
                },
                "minimist": {
                        "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
                        "dev": true,
                        "requires": {
-                               "concat-stream": "1.6.2",
-                               "duplexify": "3.7.1",
-                               "end-of-stream": "1.4.4",
-                               "flush-write-stream": "1.1.1",
-                               "from2": "2.3.0",
-                               "parallel-transform": "1.2.0",
-                               "pump": "3.0.0",
-                               "pumpify": "1.5.1",
-                               "stream-each": "1.2.3",
-                               "through2": "2.0.5"
+                               "concat-stream": "^1.5.0",
+                               "duplexify": "^3.4.2",
+                               "end-of-stream": "^1.1.0",
+                               "flush-write-stream": "^1.0.0",
+                               "from2": "^2.1.0",
+                               "parallel-transform": "^1.1.0",
+                               "pump": "^3.0.0",
+                               "pumpify": "^1.3.3",
+                               "stream-each": "^1.1.0",
+                               "through2": "^2.0.0"
                        }
                },
                "mixin-deep": {
                        "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
                        "dev": true,
                        "requires": {
-                               "for-in": "1.0.2",
-                               "is-extendable": "1.0.1"
+                               "for-in": "^1.0.2",
+                               "is-extendable": "^1.0.1"
                        },
                        "dependencies": {
                                "is-extendable": {
                                        "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
                                        "dev": true,
                                        "requires": {
-                                               "is-plain-object": "2.0.4"
+                                               "is-plain-object": "^2.0.4"
                                        }
                                }
                        }
                        "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
                        "dev": true,
                        "requires": {
-                               "aproba": "1.2.0",
-                               "copy-concurrently": "1.0.5",
-                               "fs-write-stream-atomic": "1.0.10",
-                               "mkdirp": "0.5.1",
-                               "rimraf": "2.7.1",
-                               "run-queue": "1.0.3"
+                               "aproba": "^1.1.1",
+                               "copy-concurrently": "^1.0.0",
+                               "fs-write-stream-atomic": "^1.0.8",
+                               "mkdirp": "^0.5.1",
+                               "rimraf": "^2.5.4",
+                               "run-queue": "^1.0.3"
                        }
                },
                "ms": {
                        "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
                        "dev": true,
                        "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"
+                               "arr-diff": "^4.0.0",
+                               "array-unique": "^0.3.2",
+                               "define-property": "^2.0.2",
+                               "extend-shallow": "^3.0.2",
+                               "fragment-cache": "^0.2.1",
+                               "is-windows": "^1.0.2",
+                               "kind-of": "^6.0.2",
+                               "object.pick": "^1.3.0",
+                               "regex-not": "^1.0.0",
+                               "snapdragon": "^0.8.1",
+                               "to-regex": "^3.0.1"
                        }
                },
                "neo-async": {
                        "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==",
                        "dev": true,
                        "requires": {
-                               "object.getownpropertydescriptors": "2.0.3",
-                               "semver": "5.7.1"
+                               "object.getownpropertydescriptors": "^2.0.3",
+                               "semver": "^5.7.0"
                        }
                },
                "node-libs-browser": {
                        "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
                        "dev": true,
                        "requires": {
-                               "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",
+                               "assert": "^1.1.1",
+                               "browserify-zlib": "^0.2.0",
+                               "buffer": "^4.3.0",
+                               "console-browserify": "^1.1.0",
+                               "constants-browserify": "^1.0.0",
+                               "crypto-browserify": "^3.11.0",
+                               "domain-browser": "^1.1.1",
+                               "events": "^3.0.0",
+                               "https-browserify": "^1.0.0",
+                               "os-browserify": "^0.3.0",
                                "path-browserify": "0.0.1",
-                               "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.11",
+                               "process": "^0.11.10",
+                               "punycode": "^1.2.4",
+                               "querystring-es3": "^0.2.0",
+                               "readable-stream": "^2.3.3",
+                               "stream-browserify": "^2.0.1",
+                               "stream-http": "^2.7.2",
+                               "string_decoder": "^1.0.0",
+                               "timers-browserify": "^2.0.4",
                                "tty-browserify": "0.0.0",
-                               "url": "0.11.0",
-                               "util": "0.11.1",
-                               "vm-browserify": "1.1.0"
+                               "url": "^0.11.0",
+                               "util": "^0.11.0",
+                               "vm-browserify": "^1.0.1"
                        },
                        "dependencies": {
                                "punycode": {
                        "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
                        "dev": true,
                        "requires": {
-                               "path-key": "2.0.1"
+                               "path-key": "^2.0.0"
                        }
                },
                "object-assign": {
                        "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
                        "dev": true,
                        "requires": {
-                               "copy-descriptor": "0.1.1",
-                               "define-property": "0.2.5",
-                               "kind-of": "3.2.2"
+                               "copy-descriptor": "^0.1.0",
+                               "define-property": "^0.2.5",
+                               "kind-of": "^3.0.3"
                        },
                        "dependencies": {
                                "define-property": {
                                        "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
                                        "dev": true,
                                        "requires": {
-                                               "is-descriptor": "0.1.6"
+                                               "is-descriptor": "^0.1.0"
                                        }
                                },
                                "is-buffer": {
                                        "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                                        "dev": true,
                                        "requires": {
-                                               "is-buffer": "1.1.6"
+                                               "is-buffer": "^1.1.5"
                                        }
                                }
                        }
                        "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
                        "dev": true,
                        "requires": {
-                               "isobject": "3.0.1"
+                               "isobject": "^3.0.0"
                        }
                },
                "object.assign": {
                        "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
                        "dev": true,
                        "requires": {
-                               "define-properties": "1.1.3",
-                               "function-bind": "1.1.1",
-                               "has-symbols": "1.0.0",
-                               "object-keys": "1.1.1"
+                               "define-properties": "^1.1.2",
+                               "function-bind": "^1.1.1",
+                               "has-symbols": "^1.0.0",
+                               "object-keys": "^1.0.11"
                        }
                },
                "object.getownpropertydescriptors": {
                        "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
                        "dev": true,
                        "requires": {
-                               "define-properties": "1.1.3",
-                               "es-abstract": "1.15.0"
+                               "define-properties": "^1.1.2",
+                               "es-abstract": "^1.5.1"
                        }
                },
                "object.pick": {
                        "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
                        "dev": true,
                        "requires": {
-                               "isobject": "3.0.1"
+                               "isobject": "^3.0.1"
                        }
                },
                "once": {
                        "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
                        "dev": true,
                        "requires": {
-                               "wrappy": "1.0.2"
+                               "wrappy": "1"
                        }
                },
                "os-browserify": {
                        "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
                        "dev": true,
                        "requires": {
-                               "execa": "1.0.0",
-                               "lcid": "2.0.0",
-                               "mem": "4.3.0"
+                               "execa": "^1.0.0",
+                               "lcid": "^2.0.0",
+                               "mem": "^4.0.0"
                        }
                },
                "p-defer": {
                        "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
                        "dev": true,
                        "requires": {
-                               "p-try": "2.2.0"
+                               "p-try": "^2.0.0"
                        }
                },
                "p-locate": {
                        "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
                        "dev": true,
                        "requires": {
-                               "p-limit": "2.2.1"
+                               "p-limit": "^2.0.0"
                        }
                },
                "p-try": {
                        "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
                        "dev": true,
                        "requires": {
-                               "cyclist": "1.0.1",
-                               "inherits": "2.0.4",
-                               "readable-stream": "2.3.6"
+                               "cyclist": "^1.0.1",
+                               "inherits": "^2.0.3",
+                               "readable-stream": "^2.1.5"
                        }
                },
                "parse-asn1": {
                        "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
                        "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"
+                               "asn1.js": "^4.0.0",
+                               "browserify-aes": "^1.0.0",
+                               "create-hash": "^1.1.0",
+                               "evp_bytestokey": "^1.0.0",
+                               "pbkdf2": "^3.0.3",
+                               "safe-buffer": "^5.1.1"
                        }
                },
                "parse-passwd": {
                        "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
                        "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"
+                               "create-hash": "^1.1.2",
+                               "create-hmac": "^1.1.4",
+                               "ripemd160": "^2.0.1",
+                               "safe-buffer": "^5.0.1",
+                               "sha.js": "^2.4.8"
                        }
                },
                "picomatch": {
                        "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
                        "dev": true,
                        "requires": {
-                               "find-up": "3.0.0"
+                               "find-up": "^3.0.0"
                        }
                },
                "posix-character-classes": {
                        "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
                        "dev": true,
                        "requires": {
-                               "bn.js": "4.11.8",
-                               "browserify-rsa": "4.0.1",
-                               "create-hash": "1.2.0",
-                               "parse-asn1": "5.1.5",
-                               "randombytes": "2.1.0",
-                               "safe-buffer": "5.1.2"
+                               "bn.js": "^4.1.0",
+                               "browserify-rsa": "^4.0.0",
+                               "create-hash": "^1.1.0",
+                               "parse-asn1": "^5.0.0",
+                               "randombytes": "^2.0.1",
+                               "safe-buffer": "^5.1.2"
                        }
                },
                "pump": {
                        "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
                        "dev": true,
                        "requires": {
-                               "end-of-stream": "1.4.4",
-                               "once": "1.4.0"
+                               "end-of-stream": "^1.1.0",
+                               "once": "^1.3.1"
                        }
                },
                "pumpify": {
                        "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
                        "dev": true,
                        "requires": {
-                               "duplexify": "3.7.1",
-                               "inherits": "2.0.4",
-                               "pump": "2.0.1"
+                               "duplexify": "^3.6.0",
+                               "inherits": "^2.0.3",
+                               "pump": "^2.0.0"
                        },
                        "dependencies": {
                                "pump": {
                                        "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
                                        "dev": true,
                                        "requires": {
-                                               "end-of-stream": "1.4.4",
-                                               "once": "1.4.0"
+                                               "end-of-stream": "^1.1.0",
+                                               "once": "^1.3.1"
                                        }
                                }
                        }
                        "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
                        "dev": true,
                        "requires": {
-                               "safe-buffer": "5.1.2"
+                               "safe-buffer": "^5.1.0"
                        }
                },
                "randomfill": {
                        "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
                        "dev": true,
                        "requires": {
-                               "randombytes": "2.1.0",
-                               "safe-buffer": "5.1.2"
+                               "randombytes": "^2.0.5",
+                               "safe-buffer": "^5.1.0"
                        }
                },
                "readable-stream": {
                        "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
                        "dev": true,
                        "requires": {
-                               "core-util-is": "1.0.2",
-                               "inherits": "2.0.4",
-                               "isarray": "1.0.0",
-                               "process-nextick-args": "2.0.1",
-                               "safe-buffer": "5.1.2",
-                               "string_decoder": "1.1.1",
-                               "util-deprecate": "1.0.2"
+                               "core-util-is": "~1.0.0",
+                               "inherits": "~2.0.3",
+                               "isarray": "~1.0.0",
+                               "process-nextick-args": "~2.0.0",
+                               "safe-buffer": "~5.1.1",
+                               "string_decoder": "~1.1.1",
+                               "util-deprecate": "~1.0.1"
                        }
                },
                "readdirp": {
                        "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
                        "dev": true,
                        "requires": {
-                               "graceful-fs": "4.2.2",
-                               "micromatch": "3.1.10",
-                               "readable-stream": "2.3.6"
+                               "graceful-fs": "^4.1.11",
+                               "micromatch": "^3.1.10",
+                               "readable-stream": "^2.0.2"
                        },
                        "dependencies": {
                                "braces": {
                                        "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
                                        "dev": true,
                                        "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"
+                                               "arr-flatten": "^1.1.0",
+                                               "array-unique": "^0.3.2",
+                                               "extend-shallow": "^2.0.1",
+                                               "fill-range": "^4.0.0",
+                                               "isobject": "^3.0.1",
+                                               "repeat-element": "^1.1.2",
+                                               "snapdragon": "^0.8.1",
+                                               "snapdragon-node": "^2.0.1",
+                                               "split-string": "^3.0.2",
+                                               "to-regex": "^3.0.1"
                                        },
                                        "dependencies": {
                                                "extend-shallow": {
                                                        "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
                                                        "dev": true,
                                                        "requires": {
-                                                               "is-extendable": "0.1.1"
+                                                               "is-extendable": "^0.1.0"
                                                        }
                                                }
                                        }
                                        "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
                                        "dev": true,
                                        "requires": {
-                                               "extend-shallow": "2.0.1",
-                                               "is-number": "3.0.0",
-                                               "repeat-string": "1.6.1",
-                                               "to-regex-range": "2.1.1"
+                                               "extend-shallow": "^2.0.1",
+                                               "is-number": "^3.0.0",
+                                               "repeat-string": "^1.6.1",
+                                               "to-regex-range": "^2.1.0"
                                        },
                                        "dependencies": {
                                                "extend-shallow": {
                                                        "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
                                                        "dev": true,
                                                        "requires": {
-                                                               "is-extendable": "0.1.1"
+                                                               "is-extendable": "^0.1.0"
                                                        }
                                                }
                                        }
                                        "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
                                        "dev": true,
                                        "requires": {
-                                               "kind-of": "3.2.2"
+                                               "kind-of": "^3.0.2"
                                        },
                                        "dependencies": {
                                                "kind-of": {
                                                        "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                                                        "dev": true,
                                                        "requires": {
-                                                               "is-buffer": "1.1.6"
+                                                               "is-buffer": "^1.1.5"
                                                        }
                                                }
                                        }
                                        "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
                                        "dev": true,
                                        "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"
+                                               "arr-diff": "^4.0.0",
+                                               "array-unique": "^0.3.2",
+                                               "braces": "^2.3.1",
+                                               "define-property": "^2.0.2",
+                                               "extend-shallow": "^3.0.2",
+                                               "extglob": "^2.0.4",
+                                               "fragment-cache": "^0.2.1",
+                                               "kind-of": "^6.0.2",
+                                               "nanomatch": "^1.2.9",
+                                               "object.pick": "^1.3.0",
+                                               "regex-not": "^1.0.0",
+                                               "snapdragon": "^0.8.1",
+                                               "to-regex": "^3.0.2"
                                        }
                                },
                                "to-regex-range": {
                                        "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
                                        "dev": true,
                                        "requires": {
-                                               "is-number": "3.0.0",
-                                               "repeat-string": "1.6.1"
+                                               "is-number": "^3.0.0",
+                                               "repeat-string": "^1.6.1"
                                        }
                                }
                        }
                        "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
                        "dev": true,
                        "requires": {
-                               "extend-shallow": "3.0.2",
-                               "safe-regex": "1.1.0"
+                               "extend-shallow": "^3.0.2",
+                               "safe-regex": "^1.1.0"
                        }
                },
                "remove-trailing-separator": {
                        "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
                        "dev": true,
                        "requires": {
-                               "resolve-from": "3.0.0"
+                               "resolve-from": "^3.0.0"
                        }
                },
                "resolve-dir": {
                        "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
                        "dev": true,
                        "requires": {
-                               "expand-tilde": "2.0.2",
-                               "global-modules": "1.0.0"
+                               "expand-tilde": "^2.0.0",
+                               "global-modules": "^1.0.0"
                        },
                        "dependencies": {
                                "global-modules": {
                                        "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
                                        "dev": true,
                                        "requires": {
-                                               "global-prefix": "1.0.2",
-                                               "is-windows": "1.0.2",
-                                               "resolve-dir": "1.0.1"
+                                               "global-prefix": "^1.0.1",
+                                               "is-windows": "^1.0.1",
+                                               "resolve-dir": "^1.0.0"
                                        }
                                }
                        }
                        "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
                        "dev": true,
                        "requires": {
-                               "glob": "7.1.3"
+                               "glob": "^7.1.3"
                        }
                },
                "ripemd160": {
                        "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
                        "dev": true,
                        "requires": {
-                               "hash-base": "3.0.4",
-                               "inherits": "2.0.4"
+                               "hash-base": "^3.0.0",
+                               "inherits": "^2.0.1"
                        }
                },
                "run-queue": {
                        "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
                        "dev": true,
                        "requires": {
-                               "aproba": "1.2.0"
+                               "aproba": "^1.1.1"
                        }
                },
                "safe-buffer": {
                        "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
                        "dev": true,
                        "requires": {
-                               "ret": "0.1.15"
+                               "ret": "~0.1.10"
                        }
                },
                "schema-utils": {
                        "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
                        "dev": true,
                        "requires": {
-                               "ajv": "6.10.2",
-                               "ajv-errors": "1.0.1",
-                               "ajv-keywords": "3.4.1"
+                               "ajv": "^6.1.0",
+                               "ajv-errors": "^1.0.0",
+                               "ajv-keywords": "^3.1.0"
                        }
                },
                "semver": {
                        "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
                        "dev": true,
                        "requires": {
-                               "extend-shallow": "2.0.1",
-                               "is-extendable": "0.1.1",
-                               "is-plain-object": "2.0.4",
-                               "split-string": "3.1.0"
+                               "extend-shallow": "^2.0.1",
+                               "is-extendable": "^0.1.1",
+                               "is-plain-object": "^2.0.3",
+                               "split-string": "^3.0.1"
                        },
                        "dependencies": {
                                "extend-shallow": {
                                        "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
                                        "dev": true,
                                        "requires": {
-                                               "is-extendable": "0.1.1"
+                                               "is-extendable": "^0.1.0"
                                        }
                                }
                        }
                        "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
                        "dev": true,
                        "requires": {
-                               "inherits": "2.0.4",
-                               "safe-buffer": "5.1.2"
+                               "inherits": "^2.0.1",
+                               "safe-buffer": "^5.0.1"
                        }
                },
                "shebang-command": {
                        "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
                        "dev": true,
                        "requires": {
-                               "shebang-regex": "1.0.0"
+                               "shebang-regex": "^1.0.0"
                        }
                },
                "shebang-regex": {
                        "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
                        "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"
+                               "base": "^0.11.1",
+                               "debug": "^2.2.0",
+                               "define-property": "^0.2.5",
+                               "extend-shallow": "^2.0.1",
+                               "map-cache": "^0.2.2",
+                               "source-map": "^0.5.6",
+                               "source-map-resolve": "^0.5.0",
+                               "use": "^3.1.0"
                        },
                        "dependencies": {
                                "debug": {
                                        "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
                                        "dev": true,
                                        "requires": {
-                                               "is-descriptor": "0.1.6"
+                                               "is-descriptor": "^0.1.0"
                                        }
                                },
                                "extend-shallow": {
                                        "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
                                        "dev": true,
                                        "requires": {
-                                               "is-extendable": "0.1.1"
+                                               "is-extendable": "^0.1.0"
                                        }
                                },
                                "ms": {
                        "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
                        "dev": true,
                        "requires": {
-                               "define-property": "1.0.0",
-                               "isobject": "3.0.1",
-                               "snapdragon-util": "3.0.1"
+                               "define-property": "^1.0.0",
+                               "isobject": "^3.0.0",
+                               "snapdragon-util": "^3.0.1"
                        },
                        "dependencies": {
                                "define-property": {
                                        "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
                                        "dev": true,
                                        "requires": {
-                                               "is-descriptor": "1.0.2"
+                                               "is-descriptor": "^1.0.0"
                                        }
                                },
                                "is-accessor-descriptor": {
                                        "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
                                        "dev": true,
                                        "requires": {
-                                               "kind-of": "6.0.2"
+                                               "kind-of": "^6.0.0"
                                        }
                                },
                                "is-data-descriptor": {
                                        "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
                                        "dev": true,
                                        "requires": {
-                                               "kind-of": "6.0.2"
+                                               "kind-of": "^6.0.0"
                                        }
                                },
                                "is-descriptor": {
                                        "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"
+                                               "is-accessor-descriptor": "^1.0.0",
+                                               "is-data-descriptor": "^1.0.0",
+                                               "kind-of": "^6.0.2"
                                        }
                                }
                        }
                        "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
                        "dev": true,
                        "requires": {
-                               "kind-of": "3.2.2"
+                               "kind-of": "^3.2.0"
                        },
                        "dependencies": {
                                "is-buffer": {
                                        "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                                        "dev": true,
                                        "requires": {
-                                               "is-buffer": "1.1.6"
+                                               "is-buffer": "^1.1.5"
                                        }
                                }
                        }
                        "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
                        "dev": true,
                        "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"
+                               "atob": "^2.1.1",
+                               "decode-uri-component": "^0.2.0",
+                               "resolve-url": "^0.2.1",
+                               "source-map-url": "^0.4.0",
+                               "urix": "^0.1.0"
                        }
                },
                "source-map-support": {
                        "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
                        "dev": true,
                        "requires": {
-                               "buffer-from": "1.1.1",
-                               "source-map": "0.6.1"
+                               "buffer-from": "^1.0.0",
+                               "source-map": "^0.6.0"
                        },
                        "dependencies": {
                                "source-map": {
                        "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
                        "dev": true,
                        "requires": {
-                               "extend-shallow": "3.0.2"
+                               "extend-shallow": "^3.0.0"
                        }
                },
                "sprintf-js": {
                        "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
                        "dev": true,
                        "requires": {
-                               "figgy-pudding": "3.5.1"
+                               "figgy-pudding": "^3.5.1"
                        }
                },
                "static-extend": {
                        "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
                        "dev": true,
                        "requires": {
-                               "define-property": "0.2.5",
-                               "object-copy": "0.1.0"
+                               "define-property": "^0.2.5",
+                               "object-copy": "^0.1.0"
                        },
                        "dependencies": {
                                "define-property": {
                                        "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
                                        "dev": true,
                                        "requires": {
-                                               "is-descriptor": "0.1.6"
+                                               "is-descriptor": "^0.1.0"
                                        }
                                }
                        }
                        "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
                        "dev": true,
                        "requires": {
-                               "inherits": "2.0.4",
-                               "readable-stream": "2.3.6"
+                               "inherits": "~2.0.1",
+                               "readable-stream": "^2.0.2"
                        }
                },
                "stream-each": {
                        "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
                        "dev": true,
                        "requires": {
-                               "end-of-stream": "1.4.4",
-                               "stream-shift": "1.0.0"
+                               "end-of-stream": "^1.1.0",
+                               "stream-shift": "^1.0.0"
                        }
                },
                "stream-http": {
                        "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
                        "dev": true,
                        "requires": {
-                               "builtin-status-codes": "3.0.0",
-                               "inherits": "2.0.4",
-                               "readable-stream": "2.3.6",
-                               "to-arraybuffer": "1.0.1",
-                               "xtend": "4.0.2"
+                               "builtin-status-codes": "^3.0.0",
+                               "inherits": "^2.0.1",
+                               "readable-stream": "^2.3.6",
+                               "to-arraybuffer": "^1.0.0",
+                               "xtend": "^4.0.0"
                        }
                },
                "stream-shift": {
                        "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
                        "dev": true,
                        "requires": {
-                               "is-fullwidth-code-point": "2.0.0",
-                               "strip-ansi": "4.0.0"
+                               "is-fullwidth-code-point": "^2.0.0",
+                               "strip-ansi": "^4.0.0"
                        }
                },
                "string.prototype.trimleft": {
                        "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==",
                        "dev": true,
                        "requires": {
-                               "define-properties": "1.1.3",
-                               "function-bind": "1.1.1"
+                               "define-properties": "^1.1.3",
+                               "function-bind": "^1.1.1"
                        }
                },
                "string.prototype.trimright": {
                        "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==",
                        "dev": true,
                        "requires": {
-                               "define-properties": "1.1.3",
-                               "function-bind": "1.1.1"
+                               "define-properties": "^1.1.3",
+                               "function-bind": "^1.1.1"
                        }
                },
                "string_decoder": {
                        "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
                        "dev": true,
                        "requires": {
-                               "safe-buffer": "5.1.2"
+                               "safe-buffer": "~5.1.0"
                        }
                },
                "strip-ansi": {
                        "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
                        "dev": true,
                        "requires": {
-                               "ansi-regex": "3.0.0"
+                               "ansi-regex": "^3.0.0"
                        }
                },
                "strip-eof": {
                        "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==",
                        "dev": true,
                        "requires": {
-                               "has-flag": "3.0.0"
+                               "has-flag": "^3.0.0"
                        }
                },
                "tapable": {
                        "integrity": "sha512-otmIRlRVmLChAWsnSFNO0Bfk6YySuBp6G9qrHiJwlLDd4mxe2ta4sjI7TzIR+W1nBMjilzrMcPOz9pSusgx3hQ==",
                        "dev": true,
                        "requires": {
-                               "commander": "2.20.3",
-                               "source-map": "0.6.1",
-                               "source-map-support": "0.5.13"
+                               "commander": "^2.20.0",
+                               "source-map": "~0.6.1",
+                               "source-map-support": "~0.5.12"
                        },
                        "dependencies": {
                                "source-map": {
                        "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==",
                        "dev": true,
                        "requires": {
-                               "cacache": "12.0.3",
-                               "find-cache-dir": "2.1.0",
-                               "is-wsl": "1.1.0",
-                               "schema-utils": "1.0.0",
-                               "serialize-javascript": "1.9.1",
-                               "source-map": "0.6.1",
-                               "terser": "4.3.8",
-                               "webpack-sources": "1.4.3",
-                               "worker-farm": "1.7.0"
+                               "cacache": "^12.0.2",
+                               "find-cache-dir": "^2.1.0",
+                               "is-wsl": "^1.1.0",
+                               "schema-utils": "^1.0.0",
+                               "serialize-javascript": "^1.7.0",
+                               "source-map": "^0.6.1",
+                               "terser": "^4.1.2",
+                               "webpack-sources": "^1.4.0",
+                               "worker-farm": "^1.7.0"
                        },
                        "dependencies": {
                                "source-map": {
                        "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
                        "dev": true,
                        "requires": {
-                               "readable-stream": "2.3.6",
-                               "xtend": "4.0.2"
+                               "readable-stream": "~2.3.6",
+                               "xtend": "~4.0.1"
                        }
                },
                "timers-browserify": {
                        "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
                        "dev": true,
                        "requires": {
-                               "setimmediate": "1.0.5"
+                               "setimmediate": "^1.0.4"
                        }
                },
                "to-arraybuffer": {
                        "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
                        "dev": true,
                        "requires": {
-                               "kind-of": "3.2.2"
+                               "kind-of": "^3.0.2"
                        },
                        "dependencies": {
                                "is-buffer": {
                                        "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                                        "dev": true,
                                        "requires": {
-                                               "is-buffer": "1.1.6"
+                                               "is-buffer": "^1.1.5"
                                        }
                                }
                        }
                        "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"
+                               "define-property": "^2.0.2",
+                               "extend-shallow": "^3.0.2",
+                               "regex-not": "^1.0.2",
+                               "safe-regex": "^1.1.0"
                        }
                },
                "to-regex-range": {
                        "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
                        "dev": true,
                        "requires": {
-                               "is-number": "7.0.0"
+                               "is-number": "^7.0.0"
                        }
                },
                "ts-loader": {
                        "integrity": "sha512-Da8h3fD+HiZ9GvZJydqzk3mTC9nuOKYlJcpuk+Zv6Y1DPaMvBL+56GRzZFypx2cWrZFMsQr869+Ua2slGoLxvQ==",
                        "dev": true,
                        "requires": {
-                               "chalk": "2.4.2",
-                               "enhanced-resolve": "4.1.1",
-                               "loader-utils": "1.2.3",
-                               "micromatch": "4.0.2",
-                               "semver": "6.3.0"
+                               "chalk": "^2.3.0",
+                               "enhanced-resolve": "^4.0.0",
+                               "loader-utils": "^1.0.2",
+                               "micromatch": "^4.0.0",
+                               "semver": "^6.0.0"
                        },
                        "dependencies": {
                                "semver": {
                        "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
                        "dev": true,
                        "requires": {
-                               "arr-union": "3.1.0",
-                               "get-value": "2.0.6",
-                               "is-extendable": "0.1.1",
-                               "set-value": "2.0.1"
+                               "arr-union": "^3.1.0",
+                               "get-value": "^2.0.6",
+                               "is-extendable": "^0.1.1",
+                               "set-value": "^2.0.1"
                        }
                },
                "unique-filename": {
                        "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
                        "dev": true,
                        "requires": {
-                               "unique-slug": "2.0.2"
+                               "unique-slug": "^2.0.0"
                        }
                },
                "unique-slug": {
                        "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
                        "dev": true,
                        "requires": {
-                               "imurmurhash": "0.1.4"
+                               "imurmurhash": "^0.1.4"
                        }
                },
                "unset-value": {
                        "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
                        "dev": true,
                        "requires": {
-                               "has-value": "0.3.1",
-                               "isobject": "3.0.1"
+                               "has-value": "^0.3.1",
+                               "isobject": "^3.0.0"
                        },
                        "dependencies": {
                                "has-value": {
                                        "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
                                        "dev": true,
                                        "requires": {
-                                               "get-value": "2.0.6",
-                                               "has-values": "0.1.4",
-                                               "isobject": "2.1.0"
+                                               "get-value": "^2.0.3",
+                                               "has-values": "^0.1.4",
+                                               "isobject": "^2.0.0"
                                        },
                                        "dependencies": {
                                                "isobject": {
                        "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
                        "dev": true,
                        "requires": {
-                               "punycode": "2.1.1"
+                               "punycode": "^2.1.0"
                        }
                },
                "urix": {
                        "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
                        "dev": true,
                        "requires": {
-                               "chokidar": "2.1.8",
-                               "graceful-fs": "4.2.2",
-                               "neo-async": "2.6.1"
+                               "chokidar": "^2.0.2",
+                               "graceful-fs": "^4.1.2",
+                               "neo-async": "^2.5.0"
                        }
                },
                "webpack": {
                                "@webassemblyjs/helper-module-context": "1.8.5",
                                "@webassemblyjs/wasm-edit": "1.8.5",
                                "@webassemblyjs/wasm-parser": "1.8.5",
-                               "acorn": "6.3.0",
-                               "ajv": "6.10.2",
-                               "ajv-keywords": "3.4.1",
-                               "chrome-trace-event": "1.0.2",
-                               "enhanced-resolve": "4.1.1",
-                               "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.1",
-                               "schema-utils": "1.0.0",
-                               "tapable": "1.1.3",
-                               "terser-webpack-plugin": "1.4.1",
-                               "watchpack": "1.6.0",
-                               "webpack-sources": "1.4.3"
+                               "acorn": "^6.2.1",
+                               "ajv": "^6.10.2",
+                               "ajv-keywords": "^3.4.1",
+                               "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.1",
+                               "schema-utils": "^1.0.0",
+                               "tapable": "^1.1.3",
+                               "terser-webpack-plugin": "^1.4.1",
+                               "watchpack": "^1.6.0",
+                               "webpack-sources": "^1.4.1"
                        },
                        "dependencies": {
                                "braces": {
                                        "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
                                        "dev": true,
                                        "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"
+                                               "arr-flatten": "^1.1.0",
+                                               "array-unique": "^0.3.2",
+                                               "extend-shallow": "^2.0.1",
+                                               "fill-range": "^4.0.0",
+                                               "isobject": "^3.0.1",
+                                               "repeat-element": "^1.1.2",
+                                               "snapdragon": "^0.8.1",
+                                               "snapdragon-node": "^2.0.1",
+                                               "split-string": "^3.0.2",
+                                               "to-regex": "^3.0.1"
                                        },
                                        "dependencies": {
                                                "extend-shallow": {
                                                        "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
                                                        "dev": true,
                                                        "requires": {
-                                                               "is-extendable": "0.1.1"
+                                                               "is-extendable": "^0.1.0"
                                                        }
                                                }
                                        }
                                        "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
                                        "dev": true,
                                        "requires": {
-                                               "extend-shallow": "2.0.1",
-                                               "is-number": "3.0.0",
-                                               "repeat-string": "1.6.1",
-                                               "to-regex-range": "2.1.1"
+                                               "extend-shallow": "^2.0.1",
+                                               "is-number": "^3.0.0",
+                                               "repeat-string": "^1.6.1",
+                                               "to-regex-range": "^2.1.0"
                                        },
                                        "dependencies": {
                                                "extend-shallow": {
                                                        "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
                                                        "dev": true,
                                                        "requires": {
-                                                               "is-extendable": "0.1.1"
+                                                               "is-extendable": "^0.1.0"
                                                        }
                                                }
                                        }
                                        "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
                                        "dev": true,
                                        "requires": {
-                                               "kind-of": "3.2.2"
+                                               "kind-of": "^3.0.2"
                                        },
                                        "dependencies": {
                                                "kind-of": {
                                                        "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
                                                        "dev": true,
                                                        "requires": {
-                                                               "is-buffer": "1.1.6"
+                                                               "is-buffer": "^1.1.5"
                                                        }
                                                }
                                        }
                                        "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
                                        "dev": true,
                                        "requires": {
-                                               "errno": "0.1.7",
-                                               "readable-stream": "2.3.6"
+                                               "errno": "^0.1.3",
+                                               "readable-stream": "^2.0.1"
                                        }
                                },
                                "micromatch": {
                                        "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
                                        "dev": true,
                                        "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"
+                                               "arr-diff": "^4.0.0",
+                                               "array-unique": "^0.3.2",
+                                               "braces": "^2.3.1",
+                                               "define-property": "^2.0.2",
+                                               "extend-shallow": "^3.0.2",
+                                               "extglob": "^2.0.4",
+                                               "fragment-cache": "^0.2.1",
+                                               "kind-of": "^6.0.2",
+                                               "nanomatch": "^1.2.9",
+                                               "object.pick": "^1.3.0",
+                                               "regex-not": "^1.0.0",
+                                               "snapdragon": "^0.8.1",
+                                               "to-regex": "^3.0.2"
                                        }
                                },
                                "to-regex-range": {
                                        "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
                                        "dev": true,
                                        "requires": {
-                                               "is-number": "3.0.0",
-                                               "repeat-string": "1.6.1"
+                                               "is-number": "^3.0.0",
+                                               "repeat-string": "^1.6.1"
                                        }
                                }
                        }
                                        "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
                                        "dev": true,
                                        "requires": {
-                                               "graceful-fs": "4.2.2",
-                                               "memory-fs": "0.4.1",
-                                               "tapable": "1.1.3"
+                                               "graceful-fs": "^4.1.2",
+                                               "memory-fs": "^0.4.0",
+                                               "tapable": "^1.0.0"
                                        }
                                },
                                "memory-fs": {
                                        "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
                                        "dev": true,
                                        "requires": {
-                                               "errno": "0.1.7",
-                                               "readable-stream": "2.3.6"
+                                               "errno": "^0.1.3",
+                                               "readable-stream": "^2.0.1"
                                        }
                                },
                                "string-width": {
                                        "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
                                        "dev": true,
                                        "requires": {
-                                               "emoji-regex": "7.0.3",
-                                               "is-fullwidth-code-point": "2.0.0",
-                                               "strip-ansi": "5.2.0"
+                                               "emoji-regex": "^7.0.1",
+                                               "is-fullwidth-code-point": "^2.0.0",
+                                               "strip-ansi": "^5.1.0"
                                        }
                                },
                                "strip-ansi": {
                                        "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
                                        "dev": true,
                                        "requires": {
-                                               "ansi-regex": "4.1.0"
+                                               "ansi-regex": "^4.1.0"
                                        }
                                },
                                "supports-color": {
                                        "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
                                        "dev": true,
                                        "requires": {
-                                               "has-flag": "3.0.0"
+                                               "has-flag": "^3.0.0"
                                        }
                                },
                                "yargs": {
                                        "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==",
                                        "dev": true,
                                        "requires": {
-                                               "cliui": "5.0.0",
-                                               "find-up": "3.0.0",
-                                               "get-caller-file": "2.0.5",
-                                               "os-locale": "3.1.0",
-                                               "require-directory": "2.1.1",
-                                               "require-main-filename": "2.0.0",
-                                               "set-blocking": "2.0.0",
-                                               "string-width": "3.1.0",
-                                               "which-module": "2.0.0",
-                                               "y18n": "4.0.0",
-                                               "yargs-parser": "13.1.1"
+                                               "cliui": "^5.0.0",
+                                               "find-up": "^3.0.0",
+                                               "get-caller-file": "^2.0.1",
+                                               "os-locale": "^3.1.0",
+                                               "require-directory": "^2.1.1",
+                                               "require-main-filename": "^2.0.0",
+                                               "set-blocking": "^2.0.0",
+                                               "string-width": "^3.0.0",
+                                               "which-module": "^2.0.0",
+                                               "y18n": "^4.0.0",
+                                               "yargs-parser": "^13.1.0"
                                        }
                                }
                        }
                        "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
                        "dev": true,
                        "requires": {
-                               "source-list-map": "2.0.1",
-                               "source-map": "0.6.1"
+                               "source-list-map": "^2.0.0",
+                               "source-map": "~0.6.1"
                        },
                        "dependencies": {
                                "source-map": {
                        "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
                        "dev": true,
                        "requires": {
-                               "isexe": "2.0.0"
+                               "isexe": "^2.0.0"
                        }
                },
                "which-module": {
                        "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
                        "dev": true,
                        "requires": {
-                               "string-width": "2.1.1"
+                               "string-width": "^1.0.2 || 2"
                        }
                },
                "worker-farm": {
                        "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
                        "dev": true,
                        "requires": {
-                               "errno": "0.1.7"
+                               "errno": "~0.1.7"
                        }
                },
                "wrap-ansi": {
                        "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
                        "dev": true,
                        "requires": {
-                               "ansi-styles": "3.2.1",
-                               "string-width": "3.1.0",
-                               "strip-ansi": "5.2.0"
+                               "ansi-styles": "^3.2.0",
+                               "string-width": "^3.0.0",
+                               "strip-ansi": "^5.0.0"
                        },
                        "dependencies": {
                                "ansi-regex": {
                                        "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
                                        "dev": true,
                                        "requires": {
-                                               "emoji-regex": "7.0.3",
-                                               "is-fullwidth-code-point": "2.0.0",
-                                               "strip-ansi": "5.2.0"
+                                               "emoji-regex": "^7.0.1",
+                                               "is-fullwidth-code-point": "^2.0.0",
+                                               "strip-ansi": "^5.1.0"
                                        }
                                },
                                "strip-ansi": {
                                        "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
                                        "dev": true,
                                        "requires": {
-                                               "ansi-regex": "4.1.0"
+                                               "ansi-regex": "^4.1.0"
                                        }
                                }
                        }
                        "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==",
                        "dev": true,
                        "requires": {
-                               "cliui": "5.0.0",
-                               "find-up": "3.0.0",
-                               "get-caller-file": "2.0.5",
-                               "require-directory": "2.1.1",
-                               "require-main-filename": "2.0.0",
-                               "set-blocking": "2.0.0",
-                               "string-width": "3.1.0",
-                               "which-module": "2.0.0",
-                               "y18n": "4.0.0",
-                               "yargs-parser": "13.1.1"
+                               "cliui": "^5.0.0",
+                               "find-up": "^3.0.0",
+                               "get-caller-file": "^2.0.1",
+                               "require-directory": "^2.1.1",
+                               "require-main-filename": "^2.0.0",
+                               "set-blocking": "^2.0.0",
+                               "string-width": "^3.0.0",
+                               "which-module": "^2.0.0",
+                               "y18n": "^4.0.0",
+                               "yargs-parser": "^13.1.1"
                        },
                        "dependencies": {
                                "ansi-regex": {
                                        "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
                                        "dev": true,
                                        "requires": {
-                                               "emoji-regex": "7.0.3",
-                                               "is-fullwidth-code-point": "2.0.0",
-                                               "strip-ansi": "5.2.0"
+                                               "emoji-regex": "^7.0.1",
+                                               "is-fullwidth-code-point": "^2.0.0",
+                                               "strip-ansi": "^5.1.0"
                                        }
                                },
                                "strip-ansi": {
                                        "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
                                        "dev": true,
                                        "requires": {
-                                               "ansi-regex": "4.1.0"
+                                               "ansi-regex": "^4.1.0"
                                        }
                                }
                        }
                        "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
                        "dev": true,
                        "requires": {
-                               "camelcase": "5.3.1",
-                               "decamelize": "1.2.0"
+                               "camelcase": "^5.0.0",
+                               "decamelize": "^1.2.0"
                        }
                },
                "yargs-unparser": {
                        "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==",
                        "dev": true,
                        "requires": {
-                               "flat": "4.1.0",
-                               "lodash": "4.17.15",
-                               "yargs": "13.3.0"
+                               "flat": "^4.1.0",
+                               "lodash": "^4.17.15",
+                               "yargs": "^13.3.0"
                        }
                }
        }
index 5530a26b3dbae5e1cd0ebde68e32de4506144427..59ba0e0f5fba1c58b04cab35a2f89c322e5ec628 100644 (file)
@@ -1,6 +1,6 @@
 {
        "name": "nanocurrency-web",
-       "version": "1.0.6",
+       "version": "1.1.0",
        "description": "Toolkit for Nano cryptocurrency client side offline integrations",
        "author": "Miro Metsänheimo <miro@metsanheimo.fi>",
        "license": "MIT",
@@ -32,7 +32,7 @@
        "dependencies": {
                "bignumber.js": "9.0.0",
                "blakejs": "1.1.0",
-               "crypto-js": "3.1.9-1"
+               "crypto-js": "4.0.0"
        },
        "devDependencies": {
                "@types/node": "12.7.12",
index cdaed487f2d005917c10c26564bf3756333500ff..c67bd7acfc9e35935a90e6a4d18b21850edb326e 100644 (file)
@@ -1,7 +1,7 @@
 'use strict'
 
 const expect = require('chai').expect
-const { wallet, block, converter } = require('../dist/index')
+const { wallet, block, tools } = require('../dist/index')
 
 // WARNING: Do not send any funds to the test vectors below
 describe('generate wallet test', () => {
@@ -158,13 +158,27 @@ describe('block signing tests using official test vectors', () => {
 describe('unit conversion tests', () => {
 
        it('should convert nano to raw', () => {
-               const result = converter.convert('1', 'NANO', 'RAW')
+               const result = tools.convert('1', 'NANO', 'RAW')
                expect(result).to.equal('1000000000000000000000000000000')
        })
 
        it('should convert raw to nano', () => {
-               const result = converter.convert('1000000000000000000000000000000', 'RAW', 'NANO')
+               const result = tools.convert('1000000000000000000000000000000', 'RAW', 'NANO')
                expect(result).to.equal('1.000000000000000')
        })
 
 })
+
+describe('Signer tests', () => {
+
+       it('should sign data with a single parameter', () => {
+               const result = tools.sign('781186FB9EF17DB6E3D1056550D9FAE5D5BBADA6A6BC370E4CBB938B1DC71DA3', 'miro@metsanheimo.fi')
+               expect(result).to.equal('0ede9f287b7d58a053aa9ad84419c856ac39ec4c2453098ef19abf9638b07b1993e0cd3747723aada71602e92e781060dc3b91c410d32def1b4780a62fd0eb02')
+       })
+
+       it('should sign data with multiple parameters', () => {
+               const result = tools.sign('781186FB9EF17DB6E3D1056550D9FAE5D5BBADA6A6BC370E4CBB938B1DC71DA3', 'miro@metsanheimo.fi', 'somePassword')
+               expect(result).to.equal('a7b88357a160f54cf4db2826c86483eb60e66e8ccb36f9a37f3fb636c9d80f7b59d1fba88d0be27f85ac3fcbe5c6e13f911d7e5b713e86fb8e9a635932a2af05')
+       })
+
+})
index 440093c199a6e7284573000ad59c583a68c4b202..021ed899d7d5ba667ec741a517a55e35c1da7a7b 100644 (file)
@@ -16,4 +16,4 @@
                        "es2017"
                ]
        }
-}
\ No newline at end of file
+}
index 0a41b3e56939fc659dcc93bd0bc1b911eba85ac8..4c5890d70a49c43fb0b7ba10b36c6fe08ce21984 100644 (file)
@@ -21,4 +21,4 @@ module.exports = {
                libraryTarget: 'var',
                library: 'NanocurrencyWeb',
        },
-}
\ No newline at end of file
+}