├── .gitignore ├── README.md ├── img └── example.png ├── index.js ├── lib ├── fritzl.js ├── golang.js ├── openssl.js └── utils.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.gitignore.io/api/osx,node 2 | # Edit at https://www.gitignore.io/?templates=osx,node 3 | 4 | ### Custom 5 | user-hooks.js 6 | compiled.js 7 | README.html 8 | ### 9 | 10 | ### Node ### 11 | # Logs 12 | logs 13 | *.log 14 | npm-debug.log* 15 | yarn-debug.log* 16 | yarn-error.log* 17 | lerna-debug.log* 18 | 19 | # Diagnostic reports (https://nodejs.org/api/report.html) 20 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 21 | 22 | # Runtime data 23 | pids 24 | *.pid 25 | *.seed 26 | *.pid.lock 27 | 28 | # Directory for instrumented libs generated by jscoverage/JSCover 29 | lib-cov 30 | 31 | # Coverage directory used by tools like istanbul 32 | coverage 33 | *.lcov 34 | 35 | # nyc test coverage 36 | .nyc_output 37 | 38 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 39 | .grunt 40 | 41 | # Bower dependency directory (https://bower.io/) 42 | bower_components 43 | 44 | # node-waf configuration 45 | .lock-wscript 46 | 47 | # Compiled binary addons (https://nodejs.org/api/addons.html) 48 | build/Release 49 | 50 | # Dependency directories 51 | node_modules/ 52 | jspm_packages/ 53 | 54 | # TypeScript v1 declaration files 55 | typings/ 56 | 57 | # TypeScript cache 58 | *.tsbuildinfo 59 | 60 | # Optional npm cache directory 61 | .npm 62 | 63 | # Optional eslint cache 64 | .eslintcache 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variables file 76 | .env 77 | .env.test 78 | 79 | # parcel-bundler cache (https://parceljs.org/) 80 | .cache 81 | 82 | # next.js build output 83 | .next 84 | 85 | # nuxt.js build output 86 | .nuxt 87 | 88 | # rollup.js default build output 89 | dist/ 90 | 91 | # Uncomment the public line if your project uses Gatsby 92 | # https://nextjs.org/blog/next-9-1#public-directory-support 93 | # https://create-react-app.dev/docs/using-the-public-folder/#docsNav 94 | # public 95 | 96 | # Storybook build outputs 97 | .out 98 | .storybook-out 99 | 100 | # vuepress build output 101 | .vuepress/dist 102 | 103 | # Serverless directories 104 | .serverless/ 105 | 106 | # FuseBox cache 107 | .fusebox/ 108 | 109 | # DynamoDB Local files 110 | .dynamodb/ 111 | 112 | # Temporary folders 113 | tmp/ 114 | temp/ 115 | 116 | ### OSX ### 117 | # General 118 | .DS_Store 119 | .AppleDouble 120 | .LSOverride 121 | 122 | # Icon must end with two \r 123 | Icon 124 | 125 | # Thumbnails 126 | ._* 127 | 128 | # Files that might appear in the root of a volume 129 | .DocumentRevisions-V100 130 | .fseventsd 131 | .Spotlight-V100 132 | .TemporaryItems 133 | .Trashes 134 | .VolumeIcon.icns 135 | .com.apple.timemachine.donotpresent 136 | 137 | # Directories potentially created on remote AFP share 138 | .AppleDB 139 | .AppleDesktop 140 | Network Trash Folder 141 | Temporary Items 142 | .apdisk 143 | 144 | # End of https://www.gitignore.io/api/osx,node -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### Fritzl 2 | 3 | - Frida hooks and helpers mostly aimed at finding crypto functions. 4 | 5 | ### How to use 6 | 7 | - Modify the `index.js` to suit your needs. 8 | - Use `npm install` to install the dependencies. 9 | 10 | #### Option 1: Modify Fritzl directly: 11 | 12 | - Use `frida-compile`: `node_modules/.bin/frida-compile index.js -o compiled.js`. 13 | - Load the compiled file: `frida -f -F -l compiled.js`. 14 | 15 | #### Option 2: Include Fritzl 16 | 17 | ```shell 18 | mkdir myproject \ 19 | && cd myproject \ 20 | && npm init -y \ 21 | && npm install --save-dev frida-compile \ 22 | && npm install --save-dev git+https://github.com/FrankSpierings/fritzl.git \ 23 | && touch index.js 24 | ``` 25 | 26 | __Example index.js:__ 27 | ```ts 28 | "use strict"; 29 | 30 | const Fritzl = require('fritzl'); 31 | 32 | var Utils = Fritzl.Utils; 33 | var Golang = Fritzl.Golang; 34 | 35 | Fritzl.disablePinning(); 36 | Fritzl.hookDecryption(); 37 | Fritzl.hookEncryption(); 38 | Fritzl.hookHMAC(); 39 | Fritzl.hookKeygen(); 40 | Fritzl.hookGoEncryption(); 41 | 42 | global.Fritzl = Fritzl; 43 | global.hd = Fritzl.hd; 44 | global.ts = Fritzl.ts; 45 | 46 | console.log('Regex example: ' + JSON.stringify(Golang.findSymbolsByPattern(/decrypt/i), null, 1)); 47 | ``` 48 | 49 | - Compile: `node_modules/.bin/frida-compile index.js -o compiled.js`. 50 | - Usage example: `frida --no-pause -l compiled.js -f $(which curl) -- https://www.google.com` 51 | 52 | ### Notice 53 | 54 | - Use the `Utils.telescope` and `Utils.hexdump` to find pointers in memory. 55 | - You might be able to use the `golang.js` module to hook `Golang` executables (as long as that binary is linked to `libc`). 56 | 57 | ### Steal 58 | 59 | - Grab whatever you want or need from this code. I am a lousy developer, so I am sure you will improve it ;) 60 | 61 | ### Screenshot 62 | 63 | ![Hooking openssl executable](./img/example.png) -------------------------------------------------------------------------------- /img/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrankSpierings/fritzl/e25f9d4864dfcfc0ee40051646e6c8496c6581f1/img/example.png -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /* 2 | This file glues it all together. 3 | */ 4 | "use strict"; 5 | 6 | var Fritzl = require('./lib/fritzl'); 7 | var Golang = require('./lib/golang'); 8 | var Utils = require('./lib/utils'); 9 | 10 | function hd(target, options) { 11 | console.log(Utils.hexdump(target, options)); 12 | } 13 | 14 | function ts(address, max) { 15 | console.log(Utils.telescope(ptr(address), max)); 16 | } 17 | 18 | Fritzl.hd = hd; 19 | Fritzl.ts = ts; 20 | Fritzl.Golang = Golang; 21 | Fritzl.Utils = Utils; 22 | 23 | module.exports = Fritzl; -------------------------------------------------------------------------------- /lib/fritzl.js: -------------------------------------------------------------------------------- 1 | /* 2 | Fritzl provides functionality to abuse OpenSSL functionality. 3 | */ 4 | 5 | "use strict"; 6 | 7 | var Openssl = require('./openssl'); 8 | var Golang = require('./golang'); 9 | var Utils = require('./utils'); 10 | 11 | const Fritzl = { 12 | //Get the output from a BIO stream and clone its contents to a memory stream, 13 | //as well as a Javascrip buffer. 14 | //This might not be such a great idea, depending on the BIO's size, but this 15 | //is currently my best method. It returns a `BIO *mem` and Javascript `buffer`. 16 | BIO_tee: function(bio) { 17 | const BUFSIZE = 4096; 18 | var buffer = Memory.alloc(BUFSIZE); 19 | //Create a memory bio to hold the output 20 | var mem = Openssl.BIO_new(Openssl.BIO_s_mem()); 21 | var len = 0; 22 | var output; 23 | while ((len = Openssl.BIO_read(bio, buffer, BUFSIZE)) > 0) { 24 | if (!output) { 25 | output = buffer.readByteArray(len); 26 | } else { 27 | output = concatArrayBuffers(output, buffer.readByteArray(len)); 28 | } 29 | Openssl.BIO_write(mem, buffer, len); 30 | } 31 | return {bio:mem, buffer:output}; 32 | }, 33 | exportX509: function(x509) { 34 | const BUFSIZE = 4096; 35 | var buffer = Memory.alloc(BUFSIZE); 36 | //Create a memory bio to hold the output 37 | var mem = Openssl.BIO_new(Openssl.BIO_s_mem()); 38 | var len = 0; 39 | var output = ''; 40 | if (Openssl.PEM_write_bio_X509(mem, x509) > 0) { 41 | while (Openssl.BIO_gets(mem, buffer, BUFSIZE) > 0) { 42 | output += buffer.readUtf8String(); 43 | } 44 | } 45 | return output; 46 | }, 47 | exportX509Stack: function(stack) { 48 | var output = []; 49 | for (var i=0; i < Openssl.OPENSSL_sk_num(stack); i++) { 50 | var X509_info_st = Openssl.OPENSSL_sk_value(stack, i); 51 | output.push(this.exportX509(X509_info_st)); 52 | } 53 | return output.join('\n'); 54 | }, 55 | exportPKEY: function(pkey) { 56 | const BUFSIZE = 4096; 57 | var buffer = Memory.alloc(BUFSIZE); 58 | var output = ''; 59 | //Create a memory bio to hold the output 60 | var mem = Openssl.BIO_new(Openssl.BIO_s_mem()); 61 | //Print key information using the OpenSSL API 62 | Openssl.EVP_PKEY_print_private(mem, pkey, 0, ptr(0)); 63 | //Export the public key using OpenSSL API 64 | Openssl.PEM_write_bio_PUBKEY(mem, pkey); 65 | //Export the key using OpenSSL API 66 | Openssl.PEM_write_bio_PrivateKey(mem, pkey, ptr(0), ptr(0), 0, ptr(0), ptr(0)) 67 | //Loop through the bio output and place it in a javascript buffer 68 | while (Openssl.BIO_gets(mem, buffer, BUFSIZE) > 0) { 69 | output += buffer.readUtf8String(); 70 | } 71 | //Clean up bio 72 | Openssl.BIO_free(mem); 73 | //Return the output buffer 74 | return output; 75 | }, 76 | exportRSA: function(rsa) { 77 | const BUFSIZE = 4096; 78 | var buffer = Memory.alloc(BUFSIZE); 79 | var output = ''; 80 | //Create a memory bio to hold the output 81 | var mem = Openssl.BIO_new(Openssl.BIO_s_mem()); 82 | if (rsa != ptr(0)) { 83 | //Export the RSA public key using OpenSSL API 84 | Openssl.PEM_write_bio_RSAPublicKey(mem, rsa); 85 | //Export the RSA private key using OpenSSL API 86 | Openssl.PEM_write_bio_RSAPrivateKey(mem, rsa, ptr(0), ptr(0), 0, ptr(0), ptr(0)); 87 | //Loop through the bio output and place it in a javascript buffer 88 | while (Openssl.BIO_gets(mem, buffer, BUFSIZE) > 0) { 89 | output += buffer.readUtf8String(); 90 | } 91 | } 92 | //Clean up bio 93 | Openssl.BIO_free(mem); 94 | //Return the output buffer 95 | return output; 96 | }, 97 | exportPKEYFromEVP_PKEY_CTX: function(ctx) { 98 | //This is a hack, if the structure changes, this will no longer work! 99 | // https://github.com/openssl/openssl/blob/master/include/crypto/evp.h#L21 100 | var pkey = ctx.add(16).readPointer(); 101 | return this.exportPKEY(pkey); 102 | }, 103 | evpCipherCtxTypeString: function(ctx) { 104 | var pstr = Openssl.OBJ_nid2ln(Openssl.EVP_CIPHER_CTX_nid(ctx)); 105 | if (pstr == null){ 106 | return 'Cipher: unknown'; 107 | } 108 | else { 109 | return 'Cipher: ' + pstr.readUtf8String(); 110 | } 111 | }, 112 | evpCipherTypeString: function(ctx) { 113 | var pstr = Openssl.OBJ_nid2ln(Openssl.EVP_CIPHER_nid(ctx)); 114 | if (pstr == null){ 115 | return 'Cipher: unknown'; 116 | } 117 | else { 118 | return 'Cipher: ' + pstr.readUtf8String(); 119 | } 120 | }, 121 | disablePinning: function() { 122 | var log = function(msg) { 123 | console.log(Utils.colors.green(msg)); 124 | } 125 | 126 | log('[+] Setting hooks to disable pinning'); 127 | 128 | (function() { 129 | var name = 'X509_verify_cert'; 130 | var address = Module.findExportByName(null, name); 131 | if (address != null) { 132 | log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 133 | try { 134 | Interceptor.attach(address, { 135 | onLeave: function(result) { 136 | //Replace the value! 137 | result.replace(1); 138 | log('[+] Setting ' + name + ' to result = ' + result); 139 | }, 140 | }); 141 | } catch (error) { console.error(error); } 142 | } 143 | })(); 144 | 145 | (function() { 146 | var name = 'SSL_set_verify'; 147 | var address = Module.findExportByName(null, name); 148 | if (address != null) { 149 | log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 150 | try { 151 | Interceptor.attach(address, { 152 | onEnter: function(args) { 153 | this.ssl = args[0]; 154 | this.mode = args[1]; 155 | //Replace the value! 156 | args[1] = ptr(0); 157 | log('[+] Setting ' + name + ' to mode = ' + args[1]); 158 | }, 159 | }); 160 | } catch (error) { console.error(error); } 161 | } 162 | })(); 163 | 164 | (function() { 165 | var name = 'EVP_PKEY_verify'; 166 | var address = Module.findExportByName(null, name); 167 | if (address != null) { 168 | log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 169 | try { 170 | Interceptor.attach(address, { 171 | onLeave: function(result) { 172 | //Replace the value! 173 | result.replace(1); 174 | log('[+] Setting ' + name + ' to result = ' + result); 175 | } 176 | }); 177 | } catch (error) { console.error(error); } 178 | } 179 | })(); 180 | 181 | (function() { 182 | var name = 'SSL_get_verify_result'; 183 | var address = Module.findExportByName(null, name); 184 | if (address != null) { 185 | log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 186 | try { 187 | Interceptor.attach(address, { 188 | onLeave: function(result) { 189 | //Replace the value! 190 | result.replace(0); 191 | log('[+] Setting ' + name + ' to result = ' + result); 192 | }, 193 | }); 194 | } catch (error) { console.error(error); } 195 | } 196 | })(); 197 | }, 198 | 199 | hookGoEncryption: function () { 200 | (function() { 201 | var name = 'crypto/aes.NewCipher'; 202 | var address = Golang.findSymbolByName(name); 203 | if (address != null) { 204 | console.log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 205 | try { 206 | Interceptor.attach(address, { 207 | onEnter: function(args) { 208 | this.args = []; 209 | var argp = this.context['rsp'].add(Process.pointerSize); 210 | for (var i=0; i<6; i++) { 211 | this.args.push(argp.readPointer()); 212 | argp = argp.add(Process.pointerSize); 213 | } 214 | }, 215 | onLeave: function(result) { 216 | console.log(name); 217 | var size = this.args[1].toInt32(); 218 | console.log('Key:'); 219 | console.log(Utils.hexdump(this.args[0], {length: size})); 220 | }, 221 | }); 222 | } catch (error) { console.error(error);} 223 | } 224 | })(); 225 | 226 | (function() { 227 | var name = 'crypto/cipher.newCFB'; 228 | var address = Golang.findSymbolByName(name); 229 | if (address != null) { 230 | console.log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 231 | try { 232 | Interceptor.attach(address, { 233 | onEnter: function(args) { 234 | this.args = [] 235 | var argp = this.context['rsp'].add(Process.pointerSize); 236 | for (var i=0; i<10; i++) { 237 | this.args.push(argp.readPointer()); 238 | argp = argp.add(Process.pointerSize); 239 | } 240 | }, 241 | onLeave: function(result) { 242 | console.log(name); 243 | // for (var i in this.args) { 244 | // console.log('arg[' + i + '] ' + Utils.telescope(this.args[i])); 245 | // } 246 | var size = this.args[3].toInt32(); 247 | console.log('IV:'); 248 | console.log(Utils.hexdump(this.args[2], {length: size})); 249 | }, 250 | }); 251 | } 252 | catch (error) { console.error(error);} 253 | } 254 | })(); 255 | 256 | (function() { 257 | var name = 'crypto/cipher.(*cfb).XORKeyStream'; 258 | var address = Golang.findSymbolByName(name); 259 | if (address != null) { 260 | console.log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 261 | try { 262 | Interceptor.attach(address, { 263 | onEnter: function(args) { 264 | this.args = [] 265 | var argp = this.context['rsp'].add(Process.pointerSize); 266 | for (var i=0; i<6; i++) { 267 | this.args.push(argp.readPointer()); 268 | argp = argp.add(Process.pointerSize); 269 | } 270 | }, 271 | onLeave: function(result) { 272 | console.log(name); 273 | var outlen = this.args[2].toInt32(); 274 | outlen = outlen > 64 ? 64 : outlen; 275 | var inlen = this.args[5].toInt32(); 276 | inlen = inlen > 64 ? 64 : inlen; 277 | console.log('Input:' + Utils.hexdump(this.args[4], {length: inlen})); 278 | console.log('Output:' + Utils.hexdump(this.args[1], {length: outlen})); 279 | }, 280 | }); 281 | } 282 | catch (error) { console.error(error);} 283 | } 284 | })(); 285 | }, 286 | 287 | hookKeygen: function() { 288 | (function() { 289 | var name = 'EVP_PKEY_keygen'; 290 | var address = Module.findExportByName(null, name); 291 | if (address != null) { 292 | console.log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 293 | try { 294 | Interceptor.attach(address, { 295 | onEnter: function(args) { 296 | this.args = []; 297 | this.args.push(args[0]); this.args.push(args[1]); 298 | }, 299 | onLeave: function(result) { 300 | console.log(name + '(' + 'ctx=' + this.args[0] + ', ' + 'ppkey=' + this.args[1] + ') = ' + result); 301 | var pkey = this.args[1].readPointer(); 302 | console.log(Utils.colors.red(Fritzl.exportPKEY(pkey))); 303 | }, 304 | }); 305 | } catch (error) { console.error(error);} 306 | } 307 | })(); 308 | 309 | (function() { 310 | var name = 'RSA_generate_key_ex'; 311 | var address = Module.findExportByName(null, name); 312 | if (address != null) { 313 | console.log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 314 | try { 315 | Interceptor.attach(address, { 316 | onEnter: function(args) { 317 | this.args = []; 318 | this.args.push(args[0]); this.args.push(args[1]); this.args.push(args[2]); this.args.push(args[3]); 319 | }, 320 | onLeave: function(result) { 321 | console.log(name + '(' + 'rsa=' + this.args[0] + ', ' + 'bits=' + this.args[1] + ', ' + 'e=' + this.args[2] + ', ' + 'cb=' + this.args[3] + ') = ' + result); 322 | console.log(Utils.colors.red(Fritzl.exportRSA(this.args[0]))); 323 | }, 324 | }); 325 | } 326 | catch (error) { 327 | console.error(error); 328 | } 329 | } 330 | })(); 331 | }, 332 | 333 | hookHMAC: function() { 334 | (function() { 335 | var name = 'HMAC_Init_ex'; 336 | var address = Module.findExportByName(null, name); 337 | if (address != null) { 338 | console.log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 339 | try { 340 | Interceptor.attach(address, { 341 | onEnter: function(args) { 342 | this.args = []; 343 | this.args.push(args[0]); this.args.push(args[1]); this.args.push(args[2]); this.args.push(args[3]); this.args.push(args[4]); 344 | }, 345 | onLeave: function(result) { 346 | console.log(name + '(' + 'ctx=' + this.args[0] + ', ' + 'key=' + this.args[1] + ', ' + 'len=' + this.args[2] + ', ' + 'md=' + this.args[3] + ', ' + 'impl=' + this.args[4] + ') = ' + result); 347 | console.log(Utils.colors.cyan('Key: ')); 348 | console.log(Utils.hexdump(ptr(this.args[1]), {length: this.args[2].toInt32()})); 349 | console.log(Utils.colors.red(Utils.backtrace(this.context))); 350 | }, 351 | }); 352 | } catch (error) { console.error(error);} 353 | } 354 | })(); 355 | 356 | (function() { 357 | var name = 'PKCS5_PBKDF2_HMAC'; 358 | var address = Module.findExportByName(null, name); 359 | if (address != null) { 360 | console.log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 361 | try { 362 | Interceptor.attach(address, { 363 | onEnter: function(args) { 364 | this.args = []; 365 | this.args.push(args[0]); this.args.push(args[1]); this.args.push(args[2]); this.args.push(args[3]); this.args.push(args[4]); this.args.push(args[5]); this.args.push(args[6]); this.args.push(args[7]); 366 | }, 367 | onLeave: function(result) { 368 | console.log(name + '(' + 'pass=' + this.args[0] + ', ' + 'passlen=' + this.args[1] + ', ' + 'salt=' + this.args[2] + ', ' + 'saltlen=' + this.args[3] + ', ' + 'iter=' + this.args[4] + ', ' + 'digest=' + this.args[5] + ', ' + 'keylen=' + this.args[6] + ', ' + 'out=' + this.args[7] + ') = ' + result); 369 | console.log(Utils.colors.cyan('Pass: ' + this.args[0].readUtf8String())); 370 | console.log(Utils.colors.cyan('Salt: ')); 371 | console.log(Utils.colors.cyan(Utils.hexdump(ptr(this.args[2]), {length: this.args[3].toInt32()}))); 372 | console.log(Utils.colors.cyan('Key: ')); 373 | console.log(Utils.hexdump(ptr(this.args[7]), {length: this.args[6].toInt32()})); 374 | console.log(Utils.colors.red(Utils.backtrace(this.context))); 375 | }, 376 | }); 377 | } catch (error) { console.error(error);} 378 | } 379 | })(); 380 | }, 381 | 382 | hookEncryption: function() { 383 | (function() { 384 | var name = 'PKCS7_encrypt'; 385 | var address = Module.findExportByName(null, name); 386 | if (address != null) { 387 | console.log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 388 | try { 389 | Interceptor.attach(address, { 390 | onEnter: function(args) { 391 | var result = Fritzl.BIO_tee(args[1]); 392 | args[1] = result.bio; 393 | 394 | this.args = []; 395 | this.args.push(args[0]);this.args.push(args[1]);this.args.push(args[2]);this.args.push(args[3]); 396 | this.buffer = result.buffer; 397 | }, 398 | onLeave: function(result) { 399 | console.log(name + '(' + 'certs=' + this.args[0] + ', ' + 'in=' + this.args[1] + ', ' + 'cipher=' + this.args[2] + ', ' + 'flags=' + this.args[3] + ') = ' + result); 400 | console.log(Utils.colors.blue('Input stream: ')); 401 | console.log(Utils.hexdump(this.buffer)); 402 | console.log(Utils.colors.yellow("Certificates: \n" + Fritzl.exportX509Stack(this.args[0]))); 403 | console.log(Utils.colors.cyan(Fritzl.evpCipherTypeString(this.args[2]))); 404 | }, 405 | }); 406 | } catch (error) { console.error(error); } 407 | } 408 | })(); 409 | 410 | (function() { 411 | var name = 'RSA_private_encrypt'; 412 | var address = Module.findExportByName(null, name); 413 | if (address != null) { 414 | console.log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 415 | try { 416 | Interceptor.attach(address, { 417 | onEnter: function(args) { 418 | this.args = []; 419 | this.args.push(args[0]); this.args.push(args[1]); this.args.push(args[2]); this.args.push(args[3]); this.args.push(args[4]); 420 | }, 421 | onLeave: function(result) { 422 | console.log(name + '(' + 'flen=' + this.args[0] + ', ' + 'from=' + this.args[1] + ', ' + 'to=' + this.args[2] + ', ' + 'rsa=' + this.args[3] + ', ' + 'padding=' + this.args[4] + ') = ' + result); 423 | console.log(Utils.colors.red(Fritzl.exportRSA(this.args[3]))); 424 | console.log(Utils.colors.cyan('Buffer from: ')); 425 | console.log(Utils.hexdump(ptr(this.args[1]), {length: result.toInt32()})); 426 | }, 427 | }); 428 | } catch (error) { console.error(error);} 429 | } 430 | })(); 431 | 432 | (function() { 433 | var name = 'EVP_EncryptInit_ex'; 434 | var address = Module.findExportByName(null, name); 435 | if (address != null) { 436 | console.log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 437 | try { 438 | Interceptor.attach(address, { 439 | onEnter: function(args) { 440 | this.args = []; 441 | this.args.push(args[0]); this.args.push(args[1]); this.args.push(args[2]); this.args.push(args[3]); this.args.push(args[4]); 442 | }, 443 | onLeave: function(result) { 444 | console.log(name + '(' + 'ctx=' + this.args[0] + ', ' + 'cipher=' + this.args[1] + ', ' + 'impl=' + this.args[2] + ', ' + 'key=' + this.args[3] + ', ' + 'iv=' + this.args[4] + ') = ' + result); 445 | console.log(Utils.colors.blue(Fritzl.evp_ciper_type_str(this.args[0]))); 446 | console.log(Utils.colors.blue('Key:')); 447 | console.log(Utils.hexdump(this.args[3], {length: 32})); 448 | console.log(Utils.colors.blue('IV:')); 449 | console.log(Utils.hexdump(this.args[4], {length: 16})); 450 | }, 451 | }); 452 | } catch (error) { console.error(error);} 453 | } 454 | })(); 455 | 456 | // Too much noise a lot of the time. 457 | // (function() { 458 | // var name = 'EVP_EncryptUpdate'; 459 | // var address = Module.findExportByName(null, name); 460 | // if (address != null) { 461 | // console.log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 462 | // try { 463 | // Interceptor.attach(address, { 464 | // onEnter: function(args) { 465 | // this.args = []; 466 | // this.args.push(args[0]); this.args.push(args[1]); this.args.push(args[2]); this.args.push(args[3]); this.args.push(args[4]); 467 | // }, 468 | // onLeave: function(result) { 469 | // console.log(name + '(' + 'ctx=' + this.args[0] + ', ' + 'out=' + this.args[1] + ', ' + 'outl=' + this.args[2] + ', ' + 'in=' + this.args[3] + ', ' + 'inl=' + this.args[4] + ') = ' + result); 470 | // console.log(Utils.colors.cyan('Buffer in: ')); 471 | // console.log(Utils.hexdump(ptr(this.args[3]), {length: this.args[4].toInt32()})); 472 | // // console.log(Utils.telescope(this.args[0], 10)); 473 | // // console.log(Utils.colors.red(Fritzl.exportPKEYFromEVP_PKEY_CTX(this.args[0]))); 474 | // }, 475 | // }); 476 | // } catch (error) { console.error(error);} 477 | // } 478 | // })(); 479 | 480 | (function() { 481 | var name = 'EVP_EncryptFinal_ex'; 482 | var address = Module.findExportByName(null, name); 483 | if (address != null) { 484 | console.log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 485 | try { 486 | Interceptor.attach(address, { 487 | onEnter: function(args) { 488 | this.args = []; 489 | this.args.push(args[0]); this.args.push(args[1]); this.args.push(args[2]); 490 | }, 491 | onLeave: function(result) { 492 | console.log(name + '(' + 'ctx=' + this.args[0] + ', ' + 'out=' + this.args[1] + ', ' + 'outl=' + this.args[2] + ') = ' + result); 493 | }, 494 | }); 495 | } catch (error) { console.error(error);} 496 | } 497 | })(); 498 | 499 | (function() { 500 | var name = 'EVP_PKEY_encrypt'; 501 | var address = Module.findExportByName(null, name); 502 | if (address != null) { 503 | console.log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 504 | try { 505 | Interceptor.attach(address, { 506 | onEnter: function(args) { 507 | this.args = []; 508 | this.args.push(args[0]); this.args.push(args[1]); this.args.push(args[2]); this.args.push(args[3]); this.args.push(args[4]); 509 | }, 510 | onLeave: function(result) { 511 | console.log(name + '(' + 'ctx=' + this.args[0] + ', ' + 'out=' + this.args[1] + ', ' + 'outlen=' + this.args[2] + ', ' + 'in=' + this.args[3] + ', ' + 'inlen=' + this.args[4] + ') = ' + result); 512 | console.log(Utils.colors.red(Fritzl.exportPKEYFromEVP_PKEY_CTX(this.args[0]))); 513 | console.log(Utils.colors.cyan('Buffer in: ')); 514 | console.log(Utils.hexdump(ptr(this.args[3]), {length: this.args[4].toInt32()})); 515 | }, 516 | }); 517 | } catch (error) { console.error(error);} 518 | } 519 | })(); 520 | }, 521 | 522 | hookDecryption: function() { 523 | (function() { 524 | var name = 'RSA_public_decrypt'; 525 | var address = Module.findExportByName(null, name); 526 | if (address != null) { 527 | console.log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 528 | try { 529 | Interceptor.attach(address, { 530 | onEnter: function(args) { 531 | this.args = []; 532 | this.args.push(args[0]); this.args.push(args[1]); this.args.push(args[2]); this.args.push(args[3]); this.args.push(args[4]); 533 | }, 534 | onLeave: function(result) { 535 | console.log(name + '(' + 'flen=' + this.args[0] + ', ' + 'from=' + this.args[1] + ', ' + 'to=' + this.args[2] + ', ' + 'rsa=' + this.args[3] + ', ' + 'padding=' + this.args[4] + ') = ' + result); 536 | console.log(Utils.colors.red(Fritzl.exportRSA(this.args[3]))); 537 | console.log(Utils.colors.cyan('Buffer to: ')); 538 | console.log(Utils.hexdump(ptr(this.args[2]), {length: result.toInt32()})); 539 | }, 540 | }); 541 | } catch (error) { console.error(error);} 542 | } 543 | })(); 544 | 545 | (function() { 546 | var name = 'EVP_DecryptInit_ex'; 547 | var address = Module.findExportByName(null, name); 548 | if (address != null) { 549 | console.log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 550 | try { 551 | Interceptor.attach(address, { 552 | onEnter: function(args) { 553 | this.args = []; 554 | this.args.push(args[0]); this.args.push(args[1]); this.args.push(args[2]); this.args.push(args[3]); this.args.push(args[4]); 555 | }, 556 | onLeave: function(result) { 557 | console.log(name + '(' + 'ctx=' + this.args[0] + ', ' + 'cipher=' + this.args[1] + ', ' + 'impl=' + this.args[2] + ', ' + 'key=' + this.args[3] + ', ' + 'iv=' + this.args[4] + ') = ' + result); 558 | console.log(Utils.colors.blue(Fritzl.evpCipherCtxTypeString(this.args[0]))); 559 | console.log(Utils.colors.blue('Key:')); 560 | console.log(Utils.hexdump(this.args[3], {length: 32})); 561 | console.log(Utils.colors.blue('IV:')); 562 | console.log(Utils.hexdump(this.args[4], {length: 16})); 563 | }, 564 | }); 565 | } catch (error) { console.error(error);} 566 | } 567 | })(); 568 | 569 | (function() { 570 | var name = 'EVP_DecryptUpdate'; 571 | var address = Module.findExportByName(null, name); 572 | if (address != null) { 573 | console.log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 574 | try { 575 | Interceptor.attach(address, { 576 | onEnter: function(args) { 577 | this.args = []; 578 | this.args.push(args[0]); this.args.push(args[1]); this.args.push(args[2]); this.args.push(args[3]); this.args.push(args[4]); 579 | }, 580 | onLeave: function(result) { 581 | console.log(name + '(' + 'ctx=' + this.args[0] + ', ' + 'out=' + this.args[1] + ', ' + 'outl=' + this.args[2] + ', ' + 'in=' + this.args[3] + ', ' + 'inl=' + this.args[4] + ') = ' + result); 582 | console.log(Utils.colors.cyan('Buffer out: ')); 583 | console.log(Utils.hexdump(ptr(this.args[1]), {length: this.args[2].readUInt()})); 584 | }, 585 | }); 586 | } catch (error) { console.error(error);} 587 | } 588 | })(); 589 | 590 | (function() { 591 | var name = 'EVP_DecryptFinal_ex'; 592 | var address = Module.findExportByName(null, name); 593 | if (address != null) { 594 | console.log('[!] Hooking: ' + name + ' @ 0x' + address.toString(16)); 595 | try { 596 | Interceptor.attach(address, { 597 | onEnter: function(args) { 598 | this.args = []; 599 | this.args.push(args[0]); this.args.push(args[1]); this.args.push(args[2]); 600 | }, 601 | onLeave: function(result) { 602 | console.log(name + '(' + 'ctx=' + this.args[0] + ', ' + 'outm=' + this.args[1] + ', ' + 'outl=' + this.args[2] + ') = ' + result); 603 | console.log(Utils.colors.cyan('Buffer out: ')); 604 | console.log(Utils.hexdump(ptr(this.args[1]), {length: this.args[2].readUInt()})); 605 | }, 606 | }); 607 | } catch (error) { console.error(error);} 608 | } 609 | })(); 610 | 611 | }, 612 | } 613 | 614 | module.exports = Fritzl; -------------------------------------------------------------------------------- /lib/golang.js: -------------------------------------------------------------------------------- 1 | /* 2 | Golang provides functions to interact with Golang based binaries. 3 | */ 4 | 5 | const Golang = { 6 | goSymbolTable: null, 7 | symbolmap: null, 8 | 9 | // This function attempts to find the start of the Go symbol table. 10 | // https://golang.org/src/debug/gosym/symtab.go 11 | findGoSymbolTable: function() { 12 | if (this.goSymbolTable) { 13 | return this.goSymbolTable; 14 | } 15 | const pattern = "FB FF FF FF 00 00"; 16 | var mainmodule = Process.enumerateModules()[0]; 17 | var ranges = Process.enumerateRangesSync('r--'); 18 | for (let i in ranges) { 19 | var range = ranges[i]; 20 | if (range['base'] && range['size'] && 21 | range['file'] && (range['file']['path'] == mainmodule['path'])) { 22 | var matches = Memory.scanSync(range['base'], range['size'], pattern); 23 | if (matches && matches.length > 0) { 24 | for (let i in matches) { 25 | // Check if this is the table by comparing its first entry defined 26 | // address with the defined offset + the found address. 27 | var address = matches[i]['address']; 28 | var entry = address.add(8).add(Process.pointerSize).readPointer(); 29 | var offset = address.add(8).add(Process.pointerSize * 2).readPointer(); 30 | if (address.add(offset).readPointer().compare(entry) == 0) { 31 | this.goSymbolTable = address; 32 | return this.goSymbolTable; 33 | } 34 | }; 35 | } 36 | } 37 | } 38 | return null; 39 | }, 40 | 41 | enumerateSymbolsSync: function() { 42 | if (this.symbolmap) { 43 | return this.symbolmap; 44 | } 45 | var tableBase = this.findGoSymbolTable(); 46 | var output = []; 47 | if(tableBase) { 48 | // Read the header 49 | var headerSize = 8; 50 | var recordSize = Process.pointerSize * 2; 51 | var cursor = tableBase.add(headerSize); 52 | var tableEnd = tableBase.add(cursor.readUInt() * recordSize); 53 | cursor = cursor.add(Process.pointerSize); 54 | // Enumerate the records 55 | while ((cursor.compare(tableEnd) == -1)) { 56 | var offset = cursor.add(Process.pointerSize).readPointer(); 57 | var functionAddress = tableBase.add(offset).readPointer(); 58 | var nameOffset = tableBase.add(offset).add(Process.pointerSize).readU32(); 59 | var name = tableBase.add(nameOffset).readUtf8String(); 60 | output.push({ 61 | address: functionAddress, 62 | name: name, 63 | // table: tableBase.add(offset), 64 | // tableBase: tableBase, 65 | }) 66 | cursor = cursor.add(recordSize); 67 | } 68 | 69 | } 70 | this.symbolmap = output; 71 | return this.symbolmap; 72 | }, 73 | 74 | findSymbolByName: function(name) { 75 | var map = this.enumerateSymbolsSync(); 76 | for (let i in map) { 77 | if (map[i]['name'] === name) { 78 | return map[i]['address']; 79 | } 80 | } 81 | return null; 82 | }, 83 | 84 | findSymbolsByPattern: function(pattern) { 85 | var map = this.enumerateSymbolsSync(); 86 | var output = [] 87 | for (let i in map) { 88 | if (map[i]['name'].match(pattern)) { 89 | output.push(map[i]); 90 | } 91 | } 92 | return output; 93 | }, 94 | }; 95 | 96 | module.exports = Golang; -------------------------------------------------------------------------------- /lib/openssl.js: -------------------------------------------------------------------------------- 1 | /* 2 | Openssl provides the Frida implementation of OpenSSL API definitions. 3 | */ 4 | 5 | "use strict"; 6 | 7 | const Openssl = { 8 | BIO_new: function(BIO_METHOD) { 9 | var name = "BIO_new"; 10 | var address = Module.findExportByName(null, name); 11 | if (address) { 12 | var f = new NativeFunction(address, 'pointer', ['pointer']); 13 | var retval = f(BIO_METHOD); 14 | return retval; 15 | } else { throw("Function '" + name + "' not found"); } 16 | }, 17 | BIO_free: function(a) { 18 | var name = "BIO_free"; 19 | var address = Module.findExportByName(null, name); 20 | if (address) { 21 | var f = new NativeFunction(address, 'int', ['pointer']); 22 | var retval = f(a); 23 | return retval; 24 | } else { throw("Function '" + name + "' not found"); } 25 | }, 26 | BIO_s_mem: function() { 27 | var name = "BIO_s_mem"; 28 | var address = Module.findExportByName(null, name); 29 | if (address) { 30 | var f = new NativeFunction(address, 'pointer', []); 31 | var retval = f(); 32 | return retval; 33 | } else { throw("Function '" + name + "' not found"); } 34 | }, 35 | BIO_gets: function(b, buf, size) { 36 | var name = "BIO_gets"; 37 | var address = Module.findExportByName(null, name); 38 | if (address) { 39 | var f = new NativeFunction(address, 'int', ['pointer', 'pointer', 'int']); 40 | var retval = f(b, buf, size); 41 | return retval; 42 | } else { throw("Function '" + name + "' not found"); } 43 | }, 44 | BIO_read: function(b, buf, len) { 45 | var name = "BIO_read"; 46 | var address = Module.findExportByName(null, name); 47 | if (address) { 48 | var f = new NativeFunction(address, 'int', ['pointer', 'pointer', 'int']); 49 | var retval = f(b, buf, len); 50 | return retval; 51 | } else { throw("Function '" + name + "' not found"); } 52 | }, 53 | BIO_reset: function(b) { 54 | var name = "BIO_reset"; 55 | var address = Module.findExportByName(null, name); 56 | if (address) { 57 | var f = new NativeFunction(address, 'int', ['pointer', 'pointer', 'int']); 58 | var retval = f(b); 59 | return retval; 60 | } else { throw("Function '" + name + "' not found"); } 61 | }, 62 | BIO_write: function(b, buf, len) { 63 | var name = "BIO_write"; 64 | var address = Module.findExportByName(null, name); 65 | if (address) { 66 | var f = new NativeFunction(address, 'int', ['pointer', 'pointer', 'int']); 67 | var retval = f(b, buf, len); 68 | return retval; 69 | } else { throw("Function '" + name + "' not found"); } 70 | }, 71 | OPENSSL_sk_num: function(sk) { 72 | var name = "OPENSSL_sk_num"; 73 | var address = Module.findExportByName(null, name); 74 | if (address) { 75 | var f = new NativeFunction(address, 'int', ['pointer']); 76 | var retval = f(sk); 77 | return retval; 78 | } else { throw("Function '" + name + "' not found"); } 79 | }, 80 | OPENSSL_sk_value: function(sk, idx) { 81 | var name = "OPENSSL_sk_value"; 82 | var address = Module.findExportByName(null, name); 83 | if (address) { 84 | var f = new NativeFunction(address, 'pointer', ['pointer', 'int']); 85 | var retval = f(sk, idx); 86 | return retval; 87 | } else { throw("Function '" + name + "' not found"); } 88 | }, 89 | EVP_PKEY_id: function(pkey) { 90 | var name = "EVP_PKEY_id"; 91 | var address = Module.findExportByName(null, name); 92 | if (address) { 93 | var f = new NativeFunction(address, 'int', ['pointer']); 94 | var retval = f(pkey); 95 | return retval; 96 | } else { throw("Function '" + name + "' not found"); } 97 | }, 98 | EVP_PKEY_get1_RSA: function(pkey) { 99 | var name = "EVP_PKEY_get1_RSA"; 100 | var address = Module.findExportByName(null, name); 101 | if (address) { 102 | var f = new NativeFunction(address, 'pointer', ['pointer']); 103 | var retval = f(pkey); 104 | return retval; 105 | } else { throw("Function '" + name + "' not found"); } 106 | }, 107 | PEM_write_bio_PrivateKey: function(bp, x, enc, kstr, klen, cb, u) { 108 | var name = "PEM_write_bio_PrivateKey"; 109 | var address = Module.findExportByName(null, name); 110 | if (address) { 111 | var f = new NativeFunction(address, 'int', ['pointer', 'pointer', 'pointer', 'pointer', 'int', 'pointer', 'pointer']); 112 | var retval = f(bp, x, enc, kstr, klen, cb, u); 113 | return retval; 114 | } else { throw("Function '" + name + "' not found"); } 115 | }, 116 | PEM_write_bio_PUBKEY: function(bp, x) { 117 | var name = "PEM_write_bio_PUBKEY"; 118 | var address = Module.findExportByName(null, name); 119 | if (address) { 120 | var f = new NativeFunction(address, 'int', ['pointer', 'pointer']); 121 | var retval = f(bp, x); 122 | return retval; 123 | } else { throw("Function '" + name + "' not found"); } 124 | }, 125 | PEM_write_bio_RSAPrivateKey: function(bp, x, enc, kstr, klen, cb, u) { 126 | var name = "PEM_write_bio_RSAPrivateKey"; 127 | var address = Module.findExportByName(null, name); 128 | if (address) { 129 | var f = new NativeFunction(address, 'int', ['pointer', 'pointer', 'pointer', 'pointer', 'int', 'pointer', 'pointer']); 130 | var retval = f(bp, x, enc, kstr, klen, cb, u); 131 | return retval; 132 | } else { throw("Function '" + name + "' not found"); } 133 | }, 134 | PEM_write_bio_RSAPublicKey: function(bp, x) { 135 | var name = "PEM_write_bio_RSAPublicKey"; 136 | var address = Module.findExportByName(null, name); 137 | if (address) { 138 | var f = new NativeFunction(address, 'int', ['pointer', 'pointer']); 139 | var retval = f(bp, x); 140 | return retval; 141 | } else { throw("Function '" + name + "' not found"); } 142 | }, 143 | PEM_write_bio_X509: function(bp, x) { 144 | var name = "PEM_write_bio_X509"; 145 | var address = Module.findExportByName(null, name); 146 | if (address) { 147 | var f = new NativeFunction(address, 'int', ['pointer', 'pointer']); 148 | var retval = f(bp, x); 149 | return retval; 150 | } else { throw("Function '" + name + "' not found"); } 151 | }, 152 | EVP_PKEY_print_private: function(out, pkey, indent, pctx) { 153 | var name = "EVP_PKEY_print_private"; 154 | var address = Module.findExportByName(null, name); 155 | if (address) { 156 | var f = new NativeFunction(address, 'int', ['pointer', 'pointer', 'int', 'pointer']); 157 | var retval = f(out, pkey, indent, pctx); 158 | return retval; 159 | } else { throw("Function '" + name + "' not found"); } 160 | }, 161 | RSA_print: function(bp, x, offset) { 162 | var name = "RSA_print"; 163 | var address = Module.findExportByName(null, name); 164 | if (address) { 165 | var f = new NativeFunction(address, 'int', ['pointer', 'pointer', 'int']); 166 | var retval = f(bp, x, offset); 167 | return retval; 168 | } else { throw("Function '" + name + "' not found"); } 169 | }, 170 | EVP_CIPHER_CTX_nid: function(ctx) { 171 | var name = "EVP_CIPHER_CTX_nid"; 172 | var address = Module.findExportByName(null, name); 173 | if (address) { 174 | var f = new NativeFunction(address, 'int', ['pointer']); 175 | var retval = f(ctx); 176 | return retval; 177 | } else { throw("Function '" + name + "' not found"); } 178 | }, 179 | EVP_CIPHER_nid: function(e) { 180 | var name = "EVP_CIPHER_nid"; 181 | var address = Module.findExportByName(null, name); 182 | if (address) { 183 | var f = new NativeFunction(address, 'int', ['pointer']); 184 | var retval = f(e); 185 | return retval; 186 | } else { throw("Function '" + name + "' not found"); } 187 | }, 188 | OBJ_nid2ln: function(n) { 189 | var name = "OBJ_nid2ln"; 190 | var address = Module.findExportByName(null, name); 191 | if (address) { 192 | var f = new NativeFunction(address, 'pointer', ['int']); 193 | var retval = f(n); 194 | return retval; 195 | } else { throw("Function '" + name + "' not found"); } 196 | }, 197 | } 198 | 199 | module.exports = Openssl; -------------------------------------------------------------------------------- /lib/utils.js: -------------------------------------------------------------------------------- 1 | /* 2 | Utils provides 'random' functionality like a memory telescope and coloring. 3 | */ 4 | 5 | "use strict"; 6 | 7 | const Utils = { 8 | colors: { 9 | red: function(string) { 10 | return '\x1b[31m' + string + '\x1b[0m'; 11 | }, 12 | 13 | green: function(string) { 14 | return '\x1b[32m' + string + '\x1b[0m'; 15 | }, 16 | 17 | yellow: function(string) { 18 | return '\x1b[33m' + string + '\x1b[0m'; 19 | }, 20 | 21 | blue: function(string) { 22 | return '\x1b[34m' + string + '\x1b[0m'; 23 | }, 24 | 25 | cyan: function(string) { 26 | return '\x1b[36m' + string + '\x1b[0m'; 27 | }, 28 | }, 29 | // Concatenates ArrayBuffers. Thank you: gogromat; https://gist.github.com/gogromat/446e962bde1122747cfe 30 | concatArrayBuffers: function() { 31 | var buffers = Array.prototype.slice.call(arguments) 32 | var bl = buffers.map(function(b) { return b.byteLength; }); 33 | var tl = bl.reduce(function(p, c) { return p + c; }, 0); 34 | var output = new Uint8Array(tl); 35 | bl.reduce(function (p, c, i) { 36 | output.set(new Uint8Array(buffers[i]), p); 37 | return p + c; 38 | }, 0); 39 | return output.buffer; 40 | }, 41 | 42 | findExportsByPattern: function(pattern) { 43 | var output = []; 44 | const mods = Process.enumerateModulesSync() 45 | for (var i in mods) { 46 | const exp = Module.enumerateExportsSync(mods[i]['name']); 47 | const found = exp.filter(function (value) { 48 | if (value['name'].match(pattern)) {return value;} 49 | }); 50 | if (found.length > 0) { 51 | output = output.concat(found); 52 | } 53 | } 54 | return output; 55 | }, 56 | 57 | // Colorize str based on protection 'rwx' 58 | colorizeProtection: function(str, protection) { 59 | if (protection.match(/^..x$/)) { 60 | return this.colors.red(str); 61 | } 62 | else if (protection.match(/^.w.$/)) { 63 | return this.colors.blue(str); 64 | } 65 | else if (protection.match(/^r..$/)) { 66 | return this.colors.yellow(str); 67 | } 68 | else { 69 | return this.colors.cyan(str); 70 | } 71 | }, 72 | 73 | islittleEndian: function() { 74 | var a = new Uint32Array([0x12345678]); 75 | var b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength); 76 | return (b[0] == 0x78); 77 | }, 78 | 79 | // Convert a ptr itself into ascii 80 | ptrToAscii: function(address) { 81 | var address = ptr(address); 82 | var output = []; 83 | for (var i=0; i 0x1f) && (b < 0x7f)) { 86 | output.push(this.colors.green(String.fromCharCode(b))); 87 | } else { 88 | output.push(this.colors.red('.')) 89 | } 90 | } 91 | return output.join(''); 92 | }, 93 | 94 | backtrace: function(context) { 95 | return 'Backtrace:\n' + Thread.backtrace(context, Backtracer.FUZZY).map(DebugSymbol.fromAddress).join('\n') + '\n'; 96 | }, 97 | 98 | telescope: function(address, max) { 99 | if (!max) { 100 | max = 1; 101 | } else if (max > 100) {max = 100} 102 | address = ptr(address); 103 | var output = ''; 104 | for (var l=0; l < max; l++) { 105 | var items = this.addressResolve(address.add(Process.pointerSize*l), 6); 106 | var results = []; 107 | var asm = null; 108 | for (var i=0; i < items.length - 1; i++) { 109 | var item = items[i]; 110 | var range = Process.findRangeByAddress(item['address']); 111 | if(range) { 112 | results.push(this.colorizeProtection(item['address'], range.protection)); 113 | // If this is the last actuall address in the items and that range is executable 114 | // add the corresponding assembler instruction. 115 | if ((i == items.length -2 ) && (range.protection.match(/^..x/) && item.asm)) { 116 | asm = this.colors.red(item.asm); 117 | } 118 | } 119 | } 120 | output += results.join(' -> '); 121 | output += (" = " + items[items.length - 1]['address']); 122 | output += (": " + this.ptrToAscii(items[items.length - 1]['address'])); 123 | if (asm) { 124 | output += (" | " + asm); 125 | } 126 | output += '\n'; 127 | } 128 | return output; 129 | }, 130 | 131 | // Recursive function to walk addresses. 132 | addressResolve: function(address, max, stack) { 133 | address = ptr(address); 134 | if (!stack) { 135 | stack = []; 136 | } 137 | if (!max) { 138 | max = 10; 139 | } 140 | if (stack.length >= max) { 141 | return stack; 142 | } 143 | var record = { 144 | address: address, 145 | }; 146 | try { 147 | if (Process.pointerSize == 8) { 148 | record['value'] = address.readU64(); 149 | } else { 150 | record['value'] = address.readU32(); 151 | } 152 | try { 153 | record['string'] = address.readUtf8String(); 154 | } catch (error) {} 155 | try { 156 | var instruction = Instruction.parse(address); 157 | if (instruction) { 158 | var line = ''; 159 | line += instruction['mnemonic'] 160 | line += ' ' 161 | line += instruction['opStr']; 162 | record['asm'] = line; 163 | } 164 | } catch (error) {} 165 | } catch (error) {} 166 | stack.push(record); 167 | if (record['value']) { 168 | stack = this.addressResolve(ptr(record['value']), max, stack); 169 | } 170 | return stack; 171 | }, 172 | 173 | hexdump: function(target, options) { 174 | // Setting default options where required. 175 | options = options || {}; 176 | if (!options.hasOwnProperty('length')) { 177 | options.length = 256; 178 | } 179 | if (!options.hasOwnProperty('addressColors')) { 180 | options.addressColors = true; 181 | } 182 | if (!options.hasOwnProperty('header')) { 183 | options.header = true; 184 | } 185 | if (!options.hasOwnProperty('le')) { 186 | options.le = Utils.islittleEndian(); 187 | } 188 | if ((options.length > 256) && (options.addressColors)) { 189 | console.warn("Warning: applying colors on such a large set will slow down the application!"); 190 | } 191 | 192 | // Check if we received a ptr or a buffer 193 | var address = ptr(0); 194 | var buffer = null; 195 | if (target instanceof ArrayBuffer) { 196 | buffer = target.slice(0, options.length); 197 | } else { 198 | address = ptr(target); 199 | buffer = address.readByteArray(options.length); 200 | } 201 | 202 | const pSize = Process.pointerSize; 203 | const dv = new DataView(buffer); 204 | var byteStrArray = []; 205 | var asciiArray = []; 206 | // var ttotal = 0; 207 | if (options.addressColors) { 208 | for (var di = 0; di < dv.byteLength; di++) { 209 | if (di + (pSize - 1) < dv.byteLength) { 210 | var value; 211 | switch(pSize) { 212 | // Dword 213 | case 4: 214 | value = dv.getUint32(di, options.le); 215 | break; 216 | // Qword 217 | case 8: 218 | const left = dv.getUint32(di, options.le); 219 | const right = dv.getUint32((di+4), options.le); 220 | value = options.le ? left + 2**32*right : 2**32*left + right; 221 | break; 222 | // Are you insane? 223 | default: 224 | throw("Can't handle pointer size '" + pSize + "'"); 225 | return null; 226 | } 227 | // var t0 = performance.now(); 228 | // This is the performance hit! 229 | const range = Process.findRangeByAddress(ptr(value)); 230 | // ttotal += performance.now() - t0; 231 | if (range) { 232 | const protection = range.protection; 233 | for (var bi = di; bi < (di + pSize); bi++) { 234 | // Add the color to each byte in the value 235 | const byte = dv.getUint8(bi) 236 | const byteStr = byte > 15 ? byte.toString(16) : "0" + byte.toString(16); 237 | byteStrArray.push(this.colorizeProtection(byteStr, protection)); 238 | if ((byte > 0x1f) && (byte < 0x7f)) { 239 | asciiArray.push(this.colors.green(String.fromCharCode(byte))); 240 | } else { 241 | asciiArray.push(this.colors.red('.')); 242 | } 243 | } 244 | // The value was found to be an address, 245 | // we can skip this address by setting di to bi-1. 246 | // The loop should be continued to evaluate the next 247 | // possible address. 248 | di = bi - 1; 249 | continue; 250 | } 251 | } 252 | // Either we are nearing the end of the buffer, 253 | // or the value is not within any defined memory range. 254 | // Add the single byte to the byteStrArray buffer. 255 | const byte = dv.getUint8(di); 256 | const byteStr = byte > 15 ? byte.toString(16) : "0" + byte.toString(16); 257 | if ((byte > 0x1f) && (byte < 0x7f)) { 258 | // Set the color for ascii bytes 259 | byteStrArray.push(this.colors.green(byteStr)); 260 | asciiArray.push(this.colors.green(String.fromCharCode(byte))); 261 | } else { 262 | byteStrArray.push(byteStr); 263 | asciiArray.push(this.colors.red('.')); 264 | } 265 | } 266 | // console.log("Checking addresses took " + ttotal + " milliseconds."); 267 | } else { 268 | // No address colors, but we still color ascii bytes. 269 | for (var di = 0; di < dv.byteLength; di++) { 270 | const byte = dv.getUint8(di); 271 | const byteStr = byte > 15 ? byte.toString(16) : "0" + byte.toString(16); 272 | if ((byte > 0x1f) && (byte < 0x7f)) { 273 | byteStrArray.push(this.colors.green(byteStr)); 274 | asciiArray.push(this.colors.green(String.fromCharCode(byte))); 275 | } else { 276 | byteStrArray.push(byteStr); 277 | asciiArray.push(this.colors.red('.')); 278 | } 279 | } 280 | } 281 | 282 | function prepad(s, mod, char) { 283 | var m = s.length % mod; 284 | if (m != 0) { 285 | var padLen = mod - m; 286 | return (char[0].repeat(padLen)) + s; 287 | } 288 | return s; 289 | } 290 | 291 | // There are now two arrays with the information. 292 | // Join them to create a hexdump view 293 | const hexLegend = ' 0 1 2 3 4 5 6 7 8 9 A B C D E F'; 294 | const asciiLegend = '0123456789ABCDEF'; 295 | var output = ['']; 296 | var columnSpace = 2; 297 | var line; 298 | if (options.header) { 299 | line = ''; 300 | line += ' '.repeat(2 + (pSize*2)); // Addresses 301 | line += ' '.repeat(columnSpace); 302 | line += hexLegend; // Bytes 303 | line += ' '.repeat(columnSpace); 304 | line += asciiLegend; // Ascii value 305 | output.push(line); 306 | } 307 | var padlen = 0; 308 | for (var i = 0; i < byteStrArray.length; i+=16) { 309 | if (i + 16 > byteStrArray.length) { 310 | // Needs padding (based on the number of items in the array) 311 | // Note we can't use .length once it is a string, since it might 312 | // containt color characters. 313 | padlen = 16 - (byteStrArray.length % 16); 314 | } 315 | var addr = address.add(i) 316 | var range = Process.findRangeByAddress(addr); 317 | var addrStr = "0x" + prepad(addr.toString(16), (pSize*2), '0'); 318 | if(range) { 319 | addrStr = this.colorizeProtection(addrStr, range['protection']); 320 | } 321 | 322 | line = addrStr; 323 | line += ' '.repeat(columnSpace); 324 | line += byteStrArray.slice(i, i+16).join(' '); 325 | line += ' '.repeat(padlen); 326 | line += ' '.repeat(columnSpace); 327 | line += asciiArray.slice(i, i+16).join(''); 328 | line += ' '.repeat(padlen); 329 | output.push(line); 330 | } 331 | return output.join('\n'); 332 | } 333 | }; 334 | 335 | module.exports = Utils; -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Fritzl", 3 | "version": "0.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.8.3", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", 10 | "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.8.3" 14 | } 15 | }, 16 | "@babel/compat-data": { 17 | "version": "7.9.0", 18 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.0.tgz", 19 | "integrity": "sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==", 20 | "dev": true, 21 | "requires": { 22 | "browserslist": "^4.9.1", 23 | "invariant": "^2.2.4", 24 | "semver": "^5.5.0" 25 | } 26 | }, 27 | "@babel/core": { 28 | "version": "7.9.0", 29 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", 30 | "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", 31 | "dev": true, 32 | "requires": { 33 | "@babel/code-frame": "^7.8.3", 34 | "@babel/generator": "^7.9.0", 35 | "@babel/helper-module-transforms": "^7.9.0", 36 | "@babel/helpers": "^7.9.0", 37 | "@babel/parser": "^7.9.0", 38 | "@babel/template": "^7.8.6", 39 | "@babel/traverse": "^7.9.0", 40 | "@babel/types": "^7.9.0", 41 | "convert-source-map": "^1.7.0", 42 | "debug": "^4.1.0", 43 | "gensync": "^1.0.0-beta.1", 44 | "json5": "^2.1.2", 45 | "lodash": "^4.17.13", 46 | "resolve": "^1.3.2", 47 | "semver": "^5.4.1", 48 | "source-map": "^0.5.0" 49 | } 50 | }, 51 | "@babel/generator": { 52 | "version": "7.9.4", 53 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz", 54 | "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==", 55 | "dev": true, 56 | "requires": { 57 | "@babel/types": "^7.9.0", 58 | "jsesc": "^2.5.1", 59 | "lodash": "^4.17.13", 60 | "source-map": "^0.5.0" 61 | } 62 | }, 63 | "@babel/helper-annotate-as-pure": { 64 | "version": "7.8.3", 65 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", 66 | "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", 67 | "dev": true, 68 | "requires": { 69 | "@babel/types": "^7.8.3" 70 | } 71 | }, 72 | "@babel/helper-builder-binary-assignment-operator-visitor": { 73 | "version": "7.8.3", 74 | "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", 75 | "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", 76 | "dev": true, 77 | "requires": { 78 | "@babel/helper-explode-assignable-expression": "^7.8.3", 79 | "@babel/types": "^7.8.3" 80 | } 81 | }, 82 | "@babel/helper-compilation-targets": { 83 | "version": "7.8.7", 84 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz", 85 | "integrity": "sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw==", 86 | "dev": true, 87 | "requires": { 88 | "@babel/compat-data": "^7.8.6", 89 | "browserslist": "^4.9.1", 90 | "invariant": "^2.2.4", 91 | "levenary": "^1.1.1", 92 | "semver": "^5.5.0" 93 | } 94 | }, 95 | "@babel/helper-create-regexp-features-plugin": { 96 | "version": "7.8.8", 97 | "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz", 98 | "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==", 99 | "dev": true, 100 | "requires": { 101 | "@babel/helper-annotate-as-pure": "^7.8.3", 102 | "@babel/helper-regex": "^7.8.3", 103 | "regexpu-core": "^4.7.0" 104 | } 105 | }, 106 | "@babel/helper-define-map": { 107 | "version": "7.8.3", 108 | "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", 109 | "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", 110 | "dev": true, 111 | "requires": { 112 | "@babel/helper-function-name": "^7.8.3", 113 | "@babel/types": "^7.8.3", 114 | "lodash": "^4.17.13" 115 | } 116 | }, 117 | "@babel/helper-explode-assignable-expression": { 118 | "version": "7.8.3", 119 | "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", 120 | "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", 121 | "dev": true, 122 | "requires": { 123 | "@babel/traverse": "^7.8.3", 124 | "@babel/types": "^7.8.3" 125 | } 126 | }, 127 | "@babel/helper-function-name": { 128 | "version": "7.8.3", 129 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", 130 | "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", 131 | "dev": true, 132 | "requires": { 133 | "@babel/helper-get-function-arity": "^7.8.3", 134 | "@babel/template": "^7.8.3", 135 | "@babel/types": "^7.8.3" 136 | } 137 | }, 138 | "@babel/helper-get-function-arity": { 139 | "version": "7.8.3", 140 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", 141 | "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", 142 | "dev": true, 143 | "requires": { 144 | "@babel/types": "^7.8.3" 145 | } 146 | }, 147 | "@babel/helper-hoist-variables": { 148 | "version": "7.8.3", 149 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", 150 | "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", 151 | "dev": true, 152 | "requires": { 153 | "@babel/types": "^7.8.3" 154 | } 155 | }, 156 | "@babel/helper-member-expression-to-functions": { 157 | "version": "7.8.3", 158 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", 159 | "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", 160 | "dev": true, 161 | "requires": { 162 | "@babel/types": "^7.8.3" 163 | } 164 | }, 165 | "@babel/helper-module-imports": { 166 | "version": "7.8.3", 167 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", 168 | "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", 169 | "dev": true, 170 | "requires": { 171 | "@babel/types": "^7.8.3" 172 | } 173 | }, 174 | "@babel/helper-module-transforms": { 175 | "version": "7.9.0", 176 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", 177 | "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", 178 | "dev": true, 179 | "requires": { 180 | "@babel/helper-module-imports": "^7.8.3", 181 | "@babel/helper-replace-supers": "^7.8.6", 182 | "@babel/helper-simple-access": "^7.8.3", 183 | "@babel/helper-split-export-declaration": "^7.8.3", 184 | "@babel/template": "^7.8.6", 185 | "@babel/types": "^7.9.0", 186 | "lodash": "^4.17.13" 187 | } 188 | }, 189 | "@babel/helper-optimise-call-expression": { 190 | "version": "7.8.3", 191 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", 192 | "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", 193 | "dev": true, 194 | "requires": { 195 | "@babel/types": "^7.8.3" 196 | } 197 | }, 198 | "@babel/helper-plugin-utils": { 199 | "version": "7.8.3", 200 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", 201 | "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", 202 | "dev": true 203 | }, 204 | "@babel/helper-regex": { 205 | "version": "7.8.3", 206 | "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", 207 | "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", 208 | "dev": true, 209 | "requires": { 210 | "lodash": "^4.17.13" 211 | } 212 | }, 213 | "@babel/helper-remap-async-to-generator": { 214 | "version": "7.8.3", 215 | "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", 216 | "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", 217 | "dev": true, 218 | "requires": { 219 | "@babel/helper-annotate-as-pure": "^7.8.3", 220 | "@babel/helper-wrap-function": "^7.8.3", 221 | "@babel/template": "^7.8.3", 222 | "@babel/traverse": "^7.8.3", 223 | "@babel/types": "^7.8.3" 224 | } 225 | }, 226 | "@babel/helper-replace-supers": { 227 | "version": "7.8.6", 228 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz", 229 | "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==", 230 | "dev": true, 231 | "requires": { 232 | "@babel/helper-member-expression-to-functions": "^7.8.3", 233 | "@babel/helper-optimise-call-expression": "^7.8.3", 234 | "@babel/traverse": "^7.8.6", 235 | "@babel/types": "^7.8.6" 236 | } 237 | }, 238 | "@babel/helper-simple-access": { 239 | "version": "7.8.3", 240 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", 241 | "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", 242 | "dev": true, 243 | "requires": { 244 | "@babel/template": "^7.8.3", 245 | "@babel/types": "^7.8.3" 246 | } 247 | }, 248 | "@babel/helper-split-export-declaration": { 249 | "version": "7.8.3", 250 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", 251 | "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", 252 | "dev": true, 253 | "requires": { 254 | "@babel/types": "^7.8.3" 255 | } 256 | }, 257 | "@babel/helper-validator-identifier": { 258 | "version": "7.9.0", 259 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz", 260 | "integrity": "sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==", 261 | "dev": true 262 | }, 263 | "@babel/helper-wrap-function": { 264 | "version": "7.8.3", 265 | "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", 266 | "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", 267 | "dev": true, 268 | "requires": { 269 | "@babel/helper-function-name": "^7.8.3", 270 | "@babel/template": "^7.8.3", 271 | "@babel/traverse": "^7.8.3", 272 | "@babel/types": "^7.8.3" 273 | } 274 | }, 275 | "@babel/helpers": { 276 | "version": "7.9.2", 277 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", 278 | "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", 279 | "dev": true, 280 | "requires": { 281 | "@babel/template": "^7.8.3", 282 | "@babel/traverse": "^7.9.0", 283 | "@babel/types": "^7.9.0" 284 | } 285 | }, 286 | "@babel/highlight": { 287 | "version": "7.9.0", 288 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", 289 | "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", 290 | "dev": true, 291 | "requires": { 292 | "@babel/helper-validator-identifier": "^7.9.0", 293 | "chalk": "^2.0.0", 294 | "js-tokens": "^4.0.0" 295 | } 296 | }, 297 | "@babel/parser": { 298 | "version": "7.9.4", 299 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", 300 | "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", 301 | "dev": true 302 | }, 303 | "@babel/plugin-proposal-async-generator-functions": { 304 | "version": "7.8.3", 305 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", 306 | "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", 307 | "dev": true, 308 | "requires": { 309 | "@babel/helper-plugin-utils": "^7.8.3", 310 | "@babel/helper-remap-async-to-generator": "^7.8.3", 311 | "@babel/plugin-syntax-async-generators": "^7.8.0" 312 | } 313 | }, 314 | "@babel/plugin-proposal-dynamic-import": { 315 | "version": "7.8.3", 316 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz", 317 | "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==", 318 | "dev": true, 319 | "requires": { 320 | "@babel/helper-plugin-utils": "^7.8.3", 321 | "@babel/plugin-syntax-dynamic-import": "^7.8.0" 322 | } 323 | }, 324 | "@babel/plugin-proposal-json-strings": { 325 | "version": "7.8.3", 326 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", 327 | "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", 328 | "dev": true, 329 | "requires": { 330 | "@babel/helper-plugin-utils": "^7.8.3", 331 | "@babel/plugin-syntax-json-strings": "^7.8.0" 332 | } 333 | }, 334 | "@babel/plugin-proposal-nullish-coalescing-operator": { 335 | "version": "7.8.3", 336 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", 337 | "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", 338 | "dev": true, 339 | "requires": { 340 | "@babel/helper-plugin-utils": "^7.8.3", 341 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" 342 | } 343 | }, 344 | "@babel/plugin-proposal-numeric-separator": { 345 | "version": "7.8.3", 346 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", 347 | "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", 348 | "dev": true, 349 | "requires": { 350 | "@babel/helper-plugin-utils": "^7.8.3", 351 | "@babel/plugin-syntax-numeric-separator": "^7.8.3" 352 | } 353 | }, 354 | "@babel/plugin-proposal-object-rest-spread": { 355 | "version": "7.9.0", 356 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz", 357 | "integrity": "sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow==", 358 | "dev": true, 359 | "requires": { 360 | "@babel/helper-plugin-utils": "^7.8.3", 361 | "@babel/plugin-syntax-object-rest-spread": "^7.8.0" 362 | } 363 | }, 364 | "@babel/plugin-proposal-optional-catch-binding": { 365 | "version": "7.8.3", 366 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", 367 | "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", 368 | "dev": true, 369 | "requires": { 370 | "@babel/helper-plugin-utils": "^7.8.3", 371 | "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" 372 | } 373 | }, 374 | "@babel/plugin-proposal-optional-chaining": { 375 | "version": "7.9.0", 376 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", 377 | "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", 378 | "dev": true, 379 | "requires": { 380 | "@babel/helper-plugin-utils": "^7.8.3", 381 | "@babel/plugin-syntax-optional-chaining": "^7.8.0" 382 | } 383 | }, 384 | "@babel/plugin-proposal-unicode-property-regex": { 385 | "version": "7.8.8", 386 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz", 387 | "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==", 388 | "dev": true, 389 | "requires": { 390 | "@babel/helper-create-regexp-features-plugin": "^7.8.8", 391 | "@babel/helper-plugin-utils": "^7.8.3" 392 | } 393 | }, 394 | "@babel/plugin-syntax-async-generators": { 395 | "version": "7.8.4", 396 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", 397 | "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", 398 | "dev": true, 399 | "requires": { 400 | "@babel/helper-plugin-utils": "^7.8.0" 401 | } 402 | }, 403 | "@babel/plugin-syntax-dynamic-import": { 404 | "version": "7.8.3", 405 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", 406 | "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", 407 | "dev": true, 408 | "requires": { 409 | "@babel/helper-plugin-utils": "^7.8.0" 410 | } 411 | }, 412 | "@babel/plugin-syntax-json-strings": { 413 | "version": "7.8.3", 414 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", 415 | "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", 416 | "dev": true, 417 | "requires": { 418 | "@babel/helper-plugin-utils": "^7.8.0" 419 | } 420 | }, 421 | "@babel/plugin-syntax-nullish-coalescing-operator": { 422 | "version": "7.8.3", 423 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", 424 | "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", 425 | "dev": true, 426 | "requires": { 427 | "@babel/helper-plugin-utils": "^7.8.0" 428 | } 429 | }, 430 | "@babel/plugin-syntax-numeric-separator": { 431 | "version": "7.8.3", 432 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz", 433 | "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==", 434 | "dev": true, 435 | "requires": { 436 | "@babel/helper-plugin-utils": "^7.8.3" 437 | } 438 | }, 439 | "@babel/plugin-syntax-object-rest-spread": { 440 | "version": "7.8.3", 441 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", 442 | "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", 443 | "dev": true, 444 | "requires": { 445 | "@babel/helper-plugin-utils": "^7.8.0" 446 | } 447 | }, 448 | "@babel/plugin-syntax-optional-catch-binding": { 449 | "version": "7.8.3", 450 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", 451 | "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", 452 | "dev": true, 453 | "requires": { 454 | "@babel/helper-plugin-utils": "^7.8.0" 455 | } 456 | }, 457 | "@babel/plugin-syntax-optional-chaining": { 458 | "version": "7.8.3", 459 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", 460 | "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", 461 | "dev": true, 462 | "requires": { 463 | "@babel/helper-plugin-utils": "^7.8.0" 464 | } 465 | }, 466 | "@babel/plugin-syntax-top-level-await": { 467 | "version": "7.8.3", 468 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz", 469 | "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==", 470 | "dev": true, 471 | "requires": { 472 | "@babel/helper-plugin-utils": "^7.8.3" 473 | } 474 | }, 475 | "@babel/plugin-transform-arrow-functions": { 476 | "version": "7.8.3", 477 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", 478 | "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", 479 | "dev": true, 480 | "requires": { 481 | "@babel/helper-plugin-utils": "^7.8.3" 482 | } 483 | }, 484 | "@babel/plugin-transform-async-to-generator": { 485 | "version": "7.8.3", 486 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", 487 | "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", 488 | "dev": true, 489 | "requires": { 490 | "@babel/helper-module-imports": "^7.8.3", 491 | "@babel/helper-plugin-utils": "^7.8.3", 492 | "@babel/helper-remap-async-to-generator": "^7.8.3" 493 | } 494 | }, 495 | "@babel/plugin-transform-block-scoped-functions": { 496 | "version": "7.8.3", 497 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", 498 | "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", 499 | "dev": true, 500 | "requires": { 501 | "@babel/helper-plugin-utils": "^7.8.3" 502 | } 503 | }, 504 | "@babel/plugin-transform-block-scoping": { 505 | "version": "7.8.3", 506 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", 507 | "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", 508 | "dev": true, 509 | "requires": { 510 | "@babel/helper-plugin-utils": "^7.8.3", 511 | "lodash": "^4.17.13" 512 | } 513 | }, 514 | "@babel/plugin-transform-classes": { 515 | "version": "7.9.2", 516 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz", 517 | "integrity": "sha512-TC2p3bPzsfvSsqBZo0kJnuelnoK9O3welkUpqSqBQuBF6R5MN2rysopri8kNvtlGIb2jmUO7i15IooAZJjZuMQ==", 518 | "dev": true, 519 | "requires": { 520 | "@babel/helper-annotate-as-pure": "^7.8.3", 521 | "@babel/helper-define-map": "^7.8.3", 522 | "@babel/helper-function-name": "^7.8.3", 523 | "@babel/helper-optimise-call-expression": "^7.8.3", 524 | "@babel/helper-plugin-utils": "^7.8.3", 525 | "@babel/helper-replace-supers": "^7.8.6", 526 | "@babel/helper-split-export-declaration": "^7.8.3", 527 | "globals": "^11.1.0" 528 | } 529 | }, 530 | "@babel/plugin-transform-computed-properties": { 531 | "version": "7.8.3", 532 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", 533 | "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", 534 | "dev": true, 535 | "requires": { 536 | "@babel/helper-plugin-utils": "^7.8.3" 537 | } 538 | }, 539 | "@babel/plugin-transform-destructuring": { 540 | "version": "7.8.8", 541 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.8.tgz", 542 | "integrity": "sha512-eRJu4Vs2rmttFCdhPUM3bV0Yo/xPSdPw6ML9KHs/bjB4bLA5HXlbvYXPOD5yASodGod+krjYx21xm1QmL8dCJQ==", 543 | "dev": true, 544 | "requires": { 545 | "@babel/helper-plugin-utils": "^7.8.3" 546 | } 547 | }, 548 | "@babel/plugin-transform-dotall-regex": { 549 | "version": "7.8.3", 550 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", 551 | "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", 552 | "dev": true, 553 | "requires": { 554 | "@babel/helper-create-regexp-features-plugin": "^7.8.3", 555 | "@babel/helper-plugin-utils": "^7.8.3" 556 | } 557 | }, 558 | "@babel/plugin-transform-duplicate-keys": { 559 | "version": "7.8.3", 560 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", 561 | "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", 562 | "dev": true, 563 | "requires": { 564 | "@babel/helper-plugin-utils": "^7.8.3" 565 | } 566 | }, 567 | "@babel/plugin-transform-exponentiation-operator": { 568 | "version": "7.8.3", 569 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", 570 | "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", 571 | "dev": true, 572 | "requires": { 573 | "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", 574 | "@babel/helper-plugin-utils": "^7.8.3" 575 | } 576 | }, 577 | "@babel/plugin-transform-for-of": { 578 | "version": "7.9.0", 579 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", 580 | "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", 581 | "dev": true, 582 | "requires": { 583 | "@babel/helper-plugin-utils": "^7.8.3" 584 | } 585 | }, 586 | "@babel/plugin-transform-function-name": { 587 | "version": "7.8.3", 588 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", 589 | "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", 590 | "dev": true, 591 | "requires": { 592 | "@babel/helper-function-name": "^7.8.3", 593 | "@babel/helper-plugin-utils": "^7.8.3" 594 | } 595 | }, 596 | "@babel/plugin-transform-literals": { 597 | "version": "7.8.3", 598 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", 599 | "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", 600 | "dev": true, 601 | "requires": { 602 | "@babel/helper-plugin-utils": "^7.8.3" 603 | } 604 | }, 605 | "@babel/plugin-transform-member-expression-literals": { 606 | "version": "7.8.3", 607 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz", 608 | "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==", 609 | "dev": true, 610 | "requires": { 611 | "@babel/helper-plugin-utils": "^7.8.3" 612 | } 613 | }, 614 | "@babel/plugin-transform-modules-amd": { 615 | "version": "7.9.0", 616 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz", 617 | "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==", 618 | "dev": true, 619 | "requires": { 620 | "@babel/helper-module-transforms": "^7.9.0", 621 | "@babel/helper-plugin-utils": "^7.8.3", 622 | "babel-plugin-dynamic-import-node": "^2.3.0" 623 | } 624 | }, 625 | "@babel/plugin-transform-modules-commonjs": { 626 | "version": "7.9.0", 627 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz", 628 | "integrity": "sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==", 629 | "dev": true, 630 | "requires": { 631 | "@babel/helper-module-transforms": "^7.9.0", 632 | "@babel/helper-plugin-utils": "^7.8.3", 633 | "@babel/helper-simple-access": "^7.8.3", 634 | "babel-plugin-dynamic-import-node": "^2.3.0" 635 | } 636 | }, 637 | "@babel/plugin-transform-modules-systemjs": { 638 | "version": "7.9.0", 639 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz", 640 | "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==", 641 | "dev": true, 642 | "requires": { 643 | "@babel/helper-hoist-variables": "^7.8.3", 644 | "@babel/helper-module-transforms": "^7.9.0", 645 | "@babel/helper-plugin-utils": "^7.8.3", 646 | "babel-plugin-dynamic-import-node": "^2.3.0" 647 | } 648 | }, 649 | "@babel/plugin-transform-modules-umd": { 650 | "version": "7.9.0", 651 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", 652 | "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", 653 | "dev": true, 654 | "requires": { 655 | "@babel/helper-module-transforms": "^7.9.0", 656 | "@babel/helper-plugin-utils": "^7.8.3" 657 | } 658 | }, 659 | "@babel/plugin-transform-named-capturing-groups-regex": { 660 | "version": "7.8.3", 661 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", 662 | "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", 663 | "dev": true, 664 | "requires": { 665 | "@babel/helper-create-regexp-features-plugin": "^7.8.3" 666 | } 667 | }, 668 | "@babel/plugin-transform-new-target": { 669 | "version": "7.8.3", 670 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", 671 | "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", 672 | "dev": true, 673 | "requires": { 674 | "@babel/helper-plugin-utils": "^7.8.3" 675 | } 676 | }, 677 | "@babel/plugin-transform-object-super": { 678 | "version": "7.8.3", 679 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", 680 | "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", 681 | "dev": true, 682 | "requires": { 683 | "@babel/helper-plugin-utils": "^7.8.3", 684 | "@babel/helper-replace-supers": "^7.8.3" 685 | } 686 | }, 687 | "@babel/plugin-transform-parameters": { 688 | "version": "7.9.3", 689 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz", 690 | "integrity": "sha512-fzrQFQhp7mIhOzmOtPiKffvCYQSK10NR8t6BBz2yPbeUHb9OLW8RZGtgDRBn8z2hGcwvKDL3vC7ojPTLNxmqEg==", 691 | "dev": true, 692 | "requires": { 693 | "@babel/helper-get-function-arity": "^7.8.3", 694 | "@babel/helper-plugin-utils": "^7.8.3" 695 | } 696 | }, 697 | "@babel/plugin-transform-property-literals": { 698 | "version": "7.8.3", 699 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz", 700 | "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==", 701 | "dev": true, 702 | "requires": { 703 | "@babel/helper-plugin-utils": "^7.8.3" 704 | } 705 | }, 706 | "@babel/plugin-transform-regenerator": { 707 | "version": "7.8.7", 708 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz", 709 | "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==", 710 | "dev": true, 711 | "requires": { 712 | "regenerator-transform": "^0.14.2" 713 | } 714 | }, 715 | "@babel/plugin-transform-reserved-words": { 716 | "version": "7.8.3", 717 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz", 718 | "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==", 719 | "dev": true, 720 | "requires": { 721 | "@babel/helper-plugin-utils": "^7.8.3" 722 | } 723 | }, 724 | "@babel/plugin-transform-runtime": { 725 | "version": "7.9.0", 726 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz", 727 | "integrity": "sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw==", 728 | "dev": true, 729 | "requires": { 730 | "@babel/helper-module-imports": "^7.8.3", 731 | "@babel/helper-plugin-utils": "^7.8.3", 732 | "resolve": "^1.8.1", 733 | "semver": "^5.5.1" 734 | } 735 | }, 736 | "@babel/plugin-transform-shorthand-properties": { 737 | "version": "7.8.3", 738 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", 739 | "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", 740 | "dev": true, 741 | "requires": { 742 | "@babel/helper-plugin-utils": "^7.8.3" 743 | } 744 | }, 745 | "@babel/plugin-transform-spread": { 746 | "version": "7.8.3", 747 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", 748 | "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", 749 | "dev": true, 750 | "requires": { 751 | "@babel/helper-plugin-utils": "^7.8.3" 752 | } 753 | }, 754 | "@babel/plugin-transform-sticky-regex": { 755 | "version": "7.8.3", 756 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", 757 | "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", 758 | "dev": true, 759 | "requires": { 760 | "@babel/helper-plugin-utils": "^7.8.3", 761 | "@babel/helper-regex": "^7.8.3" 762 | } 763 | }, 764 | "@babel/plugin-transform-template-literals": { 765 | "version": "7.8.3", 766 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", 767 | "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", 768 | "dev": true, 769 | "requires": { 770 | "@babel/helper-annotate-as-pure": "^7.8.3", 771 | "@babel/helper-plugin-utils": "^7.8.3" 772 | } 773 | }, 774 | "@babel/plugin-transform-typeof-symbol": { 775 | "version": "7.8.4", 776 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", 777 | "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", 778 | "dev": true, 779 | "requires": { 780 | "@babel/helper-plugin-utils": "^7.8.3" 781 | } 782 | }, 783 | "@babel/plugin-transform-unicode-regex": { 784 | "version": "7.8.3", 785 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", 786 | "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", 787 | "dev": true, 788 | "requires": { 789 | "@babel/helper-create-regexp-features-plugin": "^7.8.3", 790 | "@babel/helper-plugin-utils": "^7.8.3" 791 | } 792 | }, 793 | "@babel/preset-env": { 794 | "version": "7.9.0", 795 | "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz", 796 | "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==", 797 | "dev": true, 798 | "requires": { 799 | "@babel/compat-data": "^7.9.0", 800 | "@babel/helper-compilation-targets": "^7.8.7", 801 | "@babel/helper-module-imports": "^7.8.3", 802 | "@babel/helper-plugin-utils": "^7.8.3", 803 | "@babel/plugin-proposal-async-generator-functions": "^7.8.3", 804 | "@babel/plugin-proposal-dynamic-import": "^7.8.3", 805 | "@babel/plugin-proposal-json-strings": "^7.8.3", 806 | "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", 807 | "@babel/plugin-proposal-numeric-separator": "^7.8.3", 808 | "@babel/plugin-proposal-object-rest-spread": "^7.9.0", 809 | "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", 810 | "@babel/plugin-proposal-optional-chaining": "^7.9.0", 811 | "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", 812 | "@babel/plugin-syntax-async-generators": "^7.8.0", 813 | "@babel/plugin-syntax-dynamic-import": "^7.8.0", 814 | "@babel/plugin-syntax-json-strings": "^7.8.0", 815 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", 816 | "@babel/plugin-syntax-numeric-separator": "^7.8.0", 817 | "@babel/plugin-syntax-object-rest-spread": "^7.8.0", 818 | "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", 819 | "@babel/plugin-syntax-optional-chaining": "^7.8.0", 820 | "@babel/plugin-syntax-top-level-await": "^7.8.3", 821 | "@babel/plugin-transform-arrow-functions": "^7.8.3", 822 | "@babel/plugin-transform-async-to-generator": "^7.8.3", 823 | "@babel/plugin-transform-block-scoped-functions": "^7.8.3", 824 | "@babel/plugin-transform-block-scoping": "^7.8.3", 825 | "@babel/plugin-transform-classes": "^7.9.0", 826 | "@babel/plugin-transform-computed-properties": "^7.8.3", 827 | "@babel/plugin-transform-destructuring": "^7.8.3", 828 | "@babel/plugin-transform-dotall-regex": "^7.8.3", 829 | "@babel/plugin-transform-duplicate-keys": "^7.8.3", 830 | "@babel/plugin-transform-exponentiation-operator": "^7.8.3", 831 | "@babel/plugin-transform-for-of": "^7.9.0", 832 | "@babel/plugin-transform-function-name": "^7.8.3", 833 | "@babel/plugin-transform-literals": "^7.8.3", 834 | "@babel/plugin-transform-member-expression-literals": "^7.8.3", 835 | "@babel/plugin-transform-modules-amd": "^7.9.0", 836 | "@babel/plugin-transform-modules-commonjs": "^7.9.0", 837 | "@babel/plugin-transform-modules-systemjs": "^7.9.0", 838 | "@babel/plugin-transform-modules-umd": "^7.9.0", 839 | "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", 840 | "@babel/plugin-transform-new-target": "^7.8.3", 841 | "@babel/plugin-transform-object-super": "^7.8.3", 842 | "@babel/plugin-transform-parameters": "^7.8.7", 843 | "@babel/plugin-transform-property-literals": "^7.8.3", 844 | "@babel/plugin-transform-regenerator": "^7.8.7", 845 | "@babel/plugin-transform-reserved-words": "^7.8.3", 846 | "@babel/plugin-transform-shorthand-properties": "^7.8.3", 847 | "@babel/plugin-transform-spread": "^7.8.3", 848 | "@babel/plugin-transform-sticky-regex": "^7.8.3", 849 | "@babel/plugin-transform-template-literals": "^7.8.3", 850 | "@babel/plugin-transform-typeof-symbol": "^7.8.4", 851 | "@babel/plugin-transform-unicode-regex": "^7.8.3", 852 | "@babel/preset-modules": "^0.1.3", 853 | "@babel/types": "^7.9.0", 854 | "browserslist": "^4.9.1", 855 | "core-js-compat": "^3.6.2", 856 | "invariant": "^2.2.2", 857 | "levenary": "^1.1.1", 858 | "semver": "^5.5.0" 859 | } 860 | }, 861 | "@babel/preset-modules": { 862 | "version": "0.1.3", 863 | "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", 864 | "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", 865 | "dev": true, 866 | "requires": { 867 | "@babel/helper-plugin-utils": "^7.0.0", 868 | "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", 869 | "@babel/plugin-transform-dotall-regex": "^7.4.4", 870 | "@babel/types": "^7.4.4", 871 | "esutils": "^2.0.2" 872 | } 873 | }, 874 | "@babel/runtime": { 875 | "version": "7.9.2", 876 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", 877 | "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", 878 | "dev": true, 879 | "requires": { 880 | "regenerator-runtime": "^0.13.4" 881 | } 882 | }, 883 | "@babel/runtime-corejs2": { 884 | "version": "7.9.2", 885 | "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.9.2.tgz", 886 | "integrity": "sha512-ayjSOxuK2GaSDJFCtLgHnYjuMyIpViNujWrZo8GUpN60/n7juzJKK5yOo6RFVb0zdU9ACJFK+MsZrUnj3OmXMw==", 887 | "dev": true, 888 | "requires": { 889 | "core-js": "^2.6.5", 890 | "regenerator-runtime": "^0.13.4" 891 | } 892 | }, 893 | "@babel/template": { 894 | "version": "7.8.6", 895 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", 896 | "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", 897 | "dev": true, 898 | "requires": { 899 | "@babel/code-frame": "^7.8.3", 900 | "@babel/parser": "^7.8.6", 901 | "@babel/types": "^7.8.6" 902 | } 903 | }, 904 | "@babel/traverse": { 905 | "version": "7.9.0", 906 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz", 907 | "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==", 908 | "dev": true, 909 | "requires": { 910 | "@babel/code-frame": "^7.8.3", 911 | "@babel/generator": "^7.9.0", 912 | "@babel/helper-function-name": "^7.8.3", 913 | "@babel/helper-split-export-declaration": "^7.8.3", 914 | "@babel/parser": "^7.9.0", 915 | "@babel/types": "^7.9.0", 916 | "debug": "^4.1.0", 917 | "globals": "^11.1.0", 918 | "lodash": "^4.17.13" 919 | } 920 | }, 921 | "@babel/types": { 922 | "version": "7.9.0", 923 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", 924 | "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", 925 | "dev": true, 926 | "requires": { 927 | "@babel/helper-validator-identifier": "^7.9.0", 928 | "lodash": "^4.17.13", 929 | "to-fast-properties": "^2.0.0" 930 | } 931 | }, 932 | "@frida/uglifyify": { 933 | "version": "6.0.1", 934 | "resolved": "https://registry.npmjs.org/@frida/uglifyify/-/uglifyify-6.0.1.tgz", 935 | "integrity": "sha512-a56tMNgOzOP4oMAQaAnnydA7sh5Yv1FXOhJz4JHG68wztn1rDMuKTqvQ3akij5ZeTeGHkxKeyvoW9hjvXBG0+w==", 936 | "dev": true, 937 | "requires": { 938 | "convert-source-map": "^1.6.0", 939 | "minimatch": "^3.0.4", 940 | "terser": "^3.17.0", 941 | "through": "^2.3.8" 942 | } 943 | }, 944 | "JSONStream": { 945 | "version": "1.3.5", 946 | "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", 947 | "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", 948 | "dev": true, 949 | "requires": { 950 | "jsonparse": "^1.2.0", 951 | "through": ">=2.2.7 <3" 952 | } 953 | }, 954 | "acorn": { 955 | "version": "7.1.1", 956 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", 957 | "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", 958 | "dev": true 959 | }, 960 | "acorn-node": { 961 | "version": "1.8.2", 962 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", 963 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", 964 | "dev": true, 965 | "requires": { 966 | "acorn": "^7.0.0", 967 | "acorn-walk": "^7.0.0", 968 | "xtend": "^4.0.2" 969 | } 970 | }, 971 | "acorn-walk": { 972 | "version": "7.1.1", 973 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz", 974 | "integrity": "sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==", 975 | "dev": true 976 | }, 977 | "ansi-regex": { 978 | "version": "2.1.1", 979 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 980 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 981 | "dev": true 982 | }, 983 | "ansi-styles": { 984 | "version": "3.2.1", 985 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 986 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 987 | "dev": true, 988 | "requires": { 989 | "color-convert": "^1.9.0" 990 | } 991 | }, 992 | "any-promise": { 993 | "version": "1.3.0", 994 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 995 | "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", 996 | "dev": true 997 | }, 998 | "anymatch": { 999 | "version": "3.1.1", 1000 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 1001 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 1002 | "dev": true, 1003 | "requires": { 1004 | "normalize-path": "^3.0.0", 1005 | "picomatch": "^2.0.4" 1006 | } 1007 | }, 1008 | "asn1.js": { 1009 | "version": "4.10.1", 1010 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", 1011 | "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", 1012 | "dev": true, 1013 | "requires": { 1014 | "bn.js": "^4.0.0", 1015 | "inherits": "^2.0.1", 1016 | "minimalistic-assert": "^1.0.0" 1017 | } 1018 | }, 1019 | "assert": { 1020 | "version": "1.5.0", 1021 | "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", 1022 | "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", 1023 | "dev": true, 1024 | "requires": { 1025 | "object-assign": "^4.1.1", 1026 | "util": "0.10.3" 1027 | }, 1028 | "dependencies": { 1029 | "inherits": { 1030 | "version": "2.0.1", 1031 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 1032 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", 1033 | "dev": true 1034 | }, 1035 | "util": { 1036 | "version": "0.10.3", 1037 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", 1038 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", 1039 | "dev": true, 1040 | "requires": { 1041 | "inherits": "2.0.1" 1042 | } 1043 | } 1044 | } 1045 | }, 1046 | "babel-code-frame": { 1047 | "version": "6.26.0", 1048 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 1049 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 1050 | "dev": true, 1051 | "requires": { 1052 | "chalk": "^1.1.3", 1053 | "esutils": "^2.0.2", 1054 | "js-tokens": "^3.0.2" 1055 | }, 1056 | "dependencies": { 1057 | "ansi-styles": { 1058 | "version": "2.2.1", 1059 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 1060 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 1061 | "dev": true 1062 | }, 1063 | "chalk": { 1064 | "version": "1.1.3", 1065 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 1066 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 1067 | "dev": true, 1068 | "requires": { 1069 | "ansi-styles": "^2.2.1", 1070 | "escape-string-regexp": "^1.0.2", 1071 | "has-ansi": "^2.0.0", 1072 | "strip-ansi": "^3.0.0", 1073 | "supports-color": "^2.0.0" 1074 | } 1075 | }, 1076 | "js-tokens": { 1077 | "version": "3.0.2", 1078 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 1079 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", 1080 | "dev": true 1081 | }, 1082 | "supports-color": { 1083 | "version": "2.0.0", 1084 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1085 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 1086 | "dev": true 1087 | } 1088 | } 1089 | }, 1090 | "babel-messages": { 1091 | "version": "6.23.0", 1092 | "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", 1093 | "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", 1094 | "dev": true, 1095 | "requires": { 1096 | "babel-runtime": "^6.22.0" 1097 | } 1098 | }, 1099 | "babel-plugin-dynamic-import-node": { 1100 | "version": "2.3.0", 1101 | "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", 1102 | "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", 1103 | "dev": true, 1104 | "requires": { 1105 | "object.assign": "^4.1.0" 1106 | } 1107 | }, 1108 | "babel-plugin-import-to-require": { 1109 | "version": "1.0.0", 1110 | "resolved": "https://registry.npmjs.org/babel-plugin-import-to-require/-/babel-plugin-import-to-require-1.0.0.tgz", 1111 | "integrity": "sha512-dc843CwrFivjO8AVgxcHvxl0cb7J7Ed8ZGFP8+PjH3X1CnyzYtAU1WL1349m9Wc/+oqk4ETx2+cIEO2jlp3XyQ==", 1112 | "dev": true, 1113 | "requires": { 1114 | "babel-template": "^6.26.0" 1115 | } 1116 | }, 1117 | "babel-runtime": { 1118 | "version": "6.26.0", 1119 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 1120 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", 1121 | "dev": true, 1122 | "requires": { 1123 | "core-js": "^2.4.0", 1124 | "regenerator-runtime": "^0.11.0" 1125 | }, 1126 | "dependencies": { 1127 | "regenerator-runtime": { 1128 | "version": "0.11.1", 1129 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", 1130 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", 1131 | "dev": true 1132 | } 1133 | } 1134 | }, 1135 | "babel-template": { 1136 | "version": "6.26.0", 1137 | "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", 1138 | "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", 1139 | "dev": true, 1140 | "requires": { 1141 | "babel-runtime": "^6.26.0", 1142 | "babel-traverse": "^6.26.0", 1143 | "babel-types": "^6.26.0", 1144 | "babylon": "^6.18.0", 1145 | "lodash": "^4.17.4" 1146 | } 1147 | }, 1148 | "babel-traverse": { 1149 | "version": "6.26.0", 1150 | "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 1151 | "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", 1152 | "dev": true, 1153 | "requires": { 1154 | "babel-code-frame": "^6.26.0", 1155 | "babel-messages": "^6.23.0", 1156 | "babel-runtime": "^6.26.0", 1157 | "babel-types": "^6.26.0", 1158 | "babylon": "^6.18.0", 1159 | "debug": "^2.6.8", 1160 | "globals": "^9.18.0", 1161 | "invariant": "^2.2.2", 1162 | "lodash": "^4.17.4" 1163 | }, 1164 | "dependencies": { 1165 | "debug": { 1166 | "version": "2.6.9", 1167 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1168 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1169 | "dev": true, 1170 | "requires": { 1171 | "ms": "2.0.0" 1172 | } 1173 | }, 1174 | "globals": { 1175 | "version": "9.18.0", 1176 | "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", 1177 | "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", 1178 | "dev": true 1179 | }, 1180 | "ms": { 1181 | "version": "2.0.0", 1182 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1183 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1184 | "dev": true 1185 | } 1186 | } 1187 | }, 1188 | "babel-types": { 1189 | "version": "6.26.0", 1190 | "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 1191 | "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", 1192 | "dev": true, 1193 | "requires": { 1194 | "babel-runtime": "^6.26.0", 1195 | "esutils": "^2.0.2", 1196 | "lodash": "^4.17.4", 1197 | "to-fast-properties": "^1.0.3" 1198 | }, 1199 | "dependencies": { 1200 | "to-fast-properties": { 1201 | "version": "1.0.3", 1202 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", 1203 | "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", 1204 | "dev": true 1205 | } 1206 | } 1207 | }, 1208 | "babelify": { 1209 | "version": "10.0.0", 1210 | "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", 1211 | "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", 1212 | "dev": true 1213 | }, 1214 | "babylon": { 1215 | "version": "6.18.0", 1216 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", 1217 | "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", 1218 | "dev": true 1219 | }, 1220 | "balanced-match": { 1221 | "version": "1.0.0", 1222 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 1223 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 1224 | "dev": true 1225 | }, 1226 | "base64-js": { 1227 | "version": "1.3.1", 1228 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 1229 | "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", 1230 | "dev": true 1231 | }, 1232 | "bignumber.js": { 1233 | "version": "9.0.0", 1234 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", 1235 | "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", 1236 | "dev": true 1237 | }, 1238 | "binary-extensions": { 1239 | "version": "2.0.0", 1240 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", 1241 | "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", 1242 | "dev": true 1243 | }, 1244 | "bn.js": { 1245 | "version": "4.11.8", 1246 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", 1247 | "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", 1248 | "dev": true 1249 | }, 1250 | "brace-expansion": { 1251 | "version": "1.1.11", 1252 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1253 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1254 | "dev": true, 1255 | "requires": { 1256 | "balanced-match": "^1.0.0", 1257 | "concat-map": "0.0.1" 1258 | } 1259 | }, 1260 | "braces": { 1261 | "version": "3.0.2", 1262 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1263 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1264 | "dev": true, 1265 | "requires": { 1266 | "fill-range": "^7.0.1" 1267 | } 1268 | }, 1269 | "brorand": { 1270 | "version": "1.1.0", 1271 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 1272 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", 1273 | "dev": true 1274 | }, 1275 | "browser-pack": { 1276 | "version": "6.1.0", 1277 | "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", 1278 | "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", 1279 | "dev": true, 1280 | "requires": { 1281 | "JSONStream": "^1.0.3", 1282 | "combine-source-map": "~0.8.0", 1283 | "defined": "^1.0.0", 1284 | "safe-buffer": "^5.1.1", 1285 | "through2": "^2.0.0", 1286 | "umd": "^3.0.0" 1287 | }, 1288 | "dependencies": { 1289 | "through2": { 1290 | "version": "2.0.5", 1291 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 1292 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 1293 | "dev": true, 1294 | "requires": { 1295 | "readable-stream": "~2.3.6", 1296 | "xtend": "~4.0.1" 1297 | } 1298 | } 1299 | } 1300 | }, 1301 | "browser-resolve": { 1302 | "version": "1.11.3", 1303 | "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", 1304 | "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", 1305 | "dev": true, 1306 | "requires": { 1307 | "resolve": "1.1.7" 1308 | }, 1309 | "dependencies": { 1310 | "resolve": { 1311 | "version": "1.1.7", 1312 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", 1313 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", 1314 | "dev": true 1315 | } 1316 | } 1317 | }, 1318 | "browserify": { 1319 | "version": "16.5.1", 1320 | "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.1.tgz", 1321 | "integrity": "sha512-EQX0h59Pp+0GtSRb5rL6OTfrttlzv+uyaUVlK6GX3w11SQ0jKPKyjC/54RhPR2ib2KmfcELM06e8FxcI5XNU2A==", 1322 | "dev": true, 1323 | "requires": { 1324 | "JSONStream": "^1.0.3", 1325 | "assert": "^1.4.0", 1326 | "browser-pack": "^6.0.1", 1327 | "browser-resolve": "^1.11.0", 1328 | "browserify-zlib": "~0.2.0", 1329 | "buffer": "~5.2.1", 1330 | "cached-path-relative": "^1.0.0", 1331 | "concat-stream": "^1.6.0", 1332 | "console-browserify": "^1.1.0", 1333 | "constants-browserify": "~1.0.0", 1334 | "crypto-browserify": "^3.0.0", 1335 | "defined": "^1.0.0", 1336 | "deps-sort": "^2.0.0", 1337 | "domain-browser": "^1.2.0", 1338 | "duplexer2": "~0.1.2", 1339 | "events": "^2.0.0", 1340 | "glob": "^7.1.0", 1341 | "has": "^1.0.0", 1342 | "htmlescape": "^1.1.0", 1343 | "https-browserify": "^1.0.0", 1344 | "inherits": "~2.0.1", 1345 | "insert-module-globals": "^7.0.0", 1346 | "labeled-stream-splicer": "^2.0.0", 1347 | "mkdirp-classic": "^0.5.2", 1348 | "module-deps": "^6.0.0", 1349 | "os-browserify": "~0.3.0", 1350 | "parents": "^1.0.1", 1351 | "path-browserify": "~0.0.0", 1352 | "process": "~0.11.0", 1353 | "punycode": "^1.3.2", 1354 | "querystring-es3": "~0.2.0", 1355 | "read-only-stream": "^2.0.0", 1356 | "readable-stream": "^2.0.2", 1357 | "resolve": "^1.1.4", 1358 | "shasum": "^1.0.0", 1359 | "shell-quote": "^1.6.1", 1360 | "stream-browserify": "^2.0.0", 1361 | "stream-http": "^3.0.0", 1362 | "string_decoder": "^1.1.1", 1363 | "subarg": "^1.0.0", 1364 | "syntax-error": "^1.1.1", 1365 | "through2": "^2.0.0", 1366 | "timers-browserify": "^1.0.1", 1367 | "tty-browserify": "0.0.1", 1368 | "url": "~0.11.0", 1369 | "util": "~0.10.1", 1370 | "vm-browserify": "^1.0.0", 1371 | "xtend": "^4.0.0" 1372 | }, 1373 | "dependencies": { 1374 | "concat-stream": { 1375 | "version": "1.6.2", 1376 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 1377 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 1378 | "dev": true, 1379 | "requires": { 1380 | "buffer-from": "^1.0.0", 1381 | "inherits": "^2.0.3", 1382 | "readable-stream": "^2.2.2", 1383 | "typedarray": "^0.0.6" 1384 | } 1385 | }, 1386 | "through2": { 1387 | "version": "2.0.5", 1388 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 1389 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 1390 | "dev": true, 1391 | "requires": { 1392 | "readable-stream": "~2.3.6", 1393 | "xtend": "~4.0.1" 1394 | } 1395 | } 1396 | } 1397 | }, 1398 | "browserify-aes": { 1399 | "version": "1.2.0", 1400 | "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", 1401 | "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", 1402 | "dev": true, 1403 | "requires": { 1404 | "buffer-xor": "^1.0.3", 1405 | "cipher-base": "^1.0.0", 1406 | "create-hash": "^1.1.0", 1407 | "evp_bytestokey": "^1.0.3", 1408 | "inherits": "^2.0.1", 1409 | "safe-buffer": "^5.0.1" 1410 | } 1411 | }, 1412 | "browserify-cipher": { 1413 | "version": "1.0.1", 1414 | "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", 1415 | "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", 1416 | "dev": true, 1417 | "requires": { 1418 | "browserify-aes": "^1.0.4", 1419 | "browserify-des": "^1.0.0", 1420 | "evp_bytestokey": "^1.0.0" 1421 | } 1422 | }, 1423 | "browserify-des": { 1424 | "version": "1.0.2", 1425 | "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", 1426 | "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", 1427 | "dev": true, 1428 | "requires": { 1429 | "cipher-base": "^1.0.1", 1430 | "des.js": "^1.0.0", 1431 | "inherits": "^2.0.1", 1432 | "safe-buffer": "^5.1.2" 1433 | } 1434 | }, 1435 | "browserify-rsa": { 1436 | "version": "4.0.1", 1437 | "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", 1438 | "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", 1439 | "dev": true, 1440 | "requires": { 1441 | "bn.js": "^4.1.0", 1442 | "randombytes": "^2.0.1" 1443 | } 1444 | }, 1445 | "browserify-sign": { 1446 | "version": "4.0.4", 1447 | "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", 1448 | "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", 1449 | "dev": true, 1450 | "requires": { 1451 | "bn.js": "^4.1.1", 1452 | "browserify-rsa": "^4.0.0", 1453 | "create-hash": "^1.1.0", 1454 | "create-hmac": "^1.1.2", 1455 | "elliptic": "^6.0.0", 1456 | "inherits": "^2.0.1", 1457 | "parse-asn1": "^5.0.0" 1458 | } 1459 | }, 1460 | "browserify-zlib": { 1461 | "version": "0.2.0", 1462 | "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", 1463 | "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", 1464 | "dev": true, 1465 | "requires": { 1466 | "pako": "~1.0.5" 1467 | } 1468 | }, 1469 | "browserslist": { 1470 | "version": "4.16.6", 1471 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", 1472 | "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", 1473 | "dev": true, 1474 | "requires": { 1475 | "caniuse-lite": "^1.0.30001219", 1476 | "colorette": "^1.2.2", 1477 | "electron-to-chromium": "^1.3.723", 1478 | "escalade": "^3.1.1", 1479 | "node-releases": "^1.1.71" 1480 | }, 1481 | "dependencies": { 1482 | "caniuse-lite": { 1483 | "version": "1.0.30001230", 1484 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", 1485 | "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", 1486 | "dev": true 1487 | }, 1488 | "electron-to-chromium": { 1489 | "version": "1.3.739", 1490 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz", 1491 | "integrity": "sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==", 1492 | "dev": true 1493 | }, 1494 | "node-releases": { 1495 | "version": "1.1.72", 1496 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", 1497 | "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", 1498 | "dev": true 1499 | } 1500 | } 1501 | }, 1502 | "buffer": { 1503 | "version": "5.2.1", 1504 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", 1505 | "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", 1506 | "dev": true, 1507 | "requires": { 1508 | "base64-js": "^1.0.2", 1509 | "ieee754": "^1.1.4" 1510 | } 1511 | }, 1512 | "buffer-from": { 1513 | "version": "1.1.1", 1514 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 1515 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 1516 | "dev": true 1517 | }, 1518 | "buffer-xor": { 1519 | "version": "1.0.3", 1520 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", 1521 | "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", 1522 | "dev": true 1523 | }, 1524 | "builtin-status-codes": { 1525 | "version": "3.0.0", 1526 | "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", 1527 | "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", 1528 | "dev": true 1529 | }, 1530 | "cached-path-relative": { 1531 | "version": "1.0.2", 1532 | "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", 1533 | "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", 1534 | "dev": true 1535 | }, 1536 | "chalk": { 1537 | "version": "2.4.2", 1538 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1539 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1540 | "dev": true, 1541 | "requires": { 1542 | "ansi-styles": "^3.2.1", 1543 | "escape-string-regexp": "^1.0.5", 1544 | "supports-color": "^5.3.0" 1545 | } 1546 | }, 1547 | "chokidar": { 1548 | "version": "3.3.1", 1549 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", 1550 | "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", 1551 | "dev": true, 1552 | "requires": { 1553 | "anymatch": "~3.1.1", 1554 | "braces": "~3.0.2", 1555 | "fsevents": "~2.1.2", 1556 | "glob-parent": "~5.1.0", 1557 | "is-binary-path": "~2.1.0", 1558 | "is-glob": "~4.0.1", 1559 | "normalize-path": "~3.0.0", 1560 | "readdirp": "~3.3.0" 1561 | } 1562 | }, 1563 | "cipher-base": { 1564 | "version": "1.0.4", 1565 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 1566 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", 1567 | "dev": true, 1568 | "requires": { 1569 | "inherits": "^2.0.1", 1570 | "safe-buffer": "^5.0.1" 1571 | } 1572 | }, 1573 | "color-convert": { 1574 | "version": "1.9.3", 1575 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1576 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1577 | "dev": true, 1578 | "requires": { 1579 | "color-name": "1.1.3" 1580 | } 1581 | }, 1582 | "color-name": { 1583 | "version": "1.1.3", 1584 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1585 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1586 | "dev": true 1587 | }, 1588 | "colorette": { 1589 | "version": "1.2.2", 1590 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", 1591 | "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", 1592 | "dev": true 1593 | }, 1594 | "combine-source-map": { 1595 | "version": "0.8.0", 1596 | "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", 1597 | "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", 1598 | "dev": true, 1599 | "requires": { 1600 | "convert-source-map": "~1.1.0", 1601 | "inline-source-map": "~0.6.0", 1602 | "lodash.memoize": "~3.0.3", 1603 | "source-map": "~0.5.3" 1604 | }, 1605 | "dependencies": { 1606 | "convert-source-map": { 1607 | "version": "1.1.3", 1608 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", 1609 | "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", 1610 | "dev": true 1611 | } 1612 | } 1613 | }, 1614 | "commander": { 1615 | "version": "3.0.2", 1616 | "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", 1617 | "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", 1618 | "dev": true 1619 | }, 1620 | "concat-map": { 1621 | "version": "0.0.1", 1622 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1623 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1624 | "dev": true 1625 | }, 1626 | "concat-stream": { 1627 | "version": "2.0.0", 1628 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", 1629 | "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", 1630 | "dev": true, 1631 | "requires": { 1632 | "buffer-from": "^1.0.0", 1633 | "inherits": "^2.0.3", 1634 | "readable-stream": "^3.0.2", 1635 | "typedarray": "^0.0.6" 1636 | }, 1637 | "dependencies": { 1638 | "readable-stream": { 1639 | "version": "3.6.0", 1640 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1641 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1642 | "dev": true, 1643 | "requires": { 1644 | "inherits": "^2.0.3", 1645 | "string_decoder": "^1.1.1", 1646 | "util-deprecate": "^1.0.1" 1647 | } 1648 | } 1649 | } 1650 | }, 1651 | "console-browserify": { 1652 | "version": "1.2.0", 1653 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", 1654 | "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", 1655 | "dev": true 1656 | }, 1657 | "constants-browserify": { 1658 | "version": "1.0.0", 1659 | "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", 1660 | "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", 1661 | "dev": true 1662 | }, 1663 | "convert-source-map": { 1664 | "version": "1.7.0", 1665 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", 1666 | "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", 1667 | "dev": true, 1668 | "requires": { 1669 | "safe-buffer": "~5.1.1" 1670 | } 1671 | }, 1672 | "core-js": { 1673 | "version": "2.6.11", 1674 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", 1675 | "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", 1676 | "dev": true 1677 | }, 1678 | "core-js-compat": { 1679 | "version": "3.6.4", 1680 | "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz", 1681 | "integrity": "sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==", 1682 | "dev": true, 1683 | "requires": { 1684 | "browserslist": "^4.8.3", 1685 | "semver": "7.0.0" 1686 | }, 1687 | "dependencies": { 1688 | "semver": { 1689 | "version": "7.0.0", 1690 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", 1691 | "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", 1692 | "dev": true 1693 | } 1694 | } 1695 | }, 1696 | "core-util-is": { 1697 | "version": "1.0.2", 1698 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1699 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 1700 | "dev": true 1701 | }, 1702 | "create-ecdh": { 1703 | "version": "4.0.3", 1704 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", 1705 | "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", 1706 | "dev": true, 1707 | "requires": { 1708 | "bn.js": "^4.1.0", 1709 | "elliptic": "^6.0.0" 1710 | } 1711 | }, 1712 | "create-hash": { 1713 | "version": "1.2.0", 1714 | "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", 1715 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", 1716 | "dev": true, 1717 | "requires": { 1718 | "cipher-base": "^1.0.1", 1719 | "inherits": "^2.0.1", 1720 | "md5.js": "^1.3.4", 1721 | "ripemd160": "^2.0.1", 1722 | "sha.js": "^2.4.0" 1723 | } 1724 | }, 1725 | "create-hmac": { 1726 | "version": "1.1.7", 1727 | "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", 1728 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", 1729 | "dev": true, 1730 | "requires": { 1731 | "cipher-base": "^1.0.3", 1732 | "create-hash": "^1.1.0", 1733 | "inherits": "^2.0.1", 1734 | "ripemd160": "^2.0.0", 1735 | "safe-buffer": "^5.0.1", 1736 | "sha.js": "^2.4.8" 1737 | } 1738 | }, 1739 | "crypto-browserify": { 1740 | "version": "3.12.0", 1741 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", 1742 | "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", 1743 | "dev": true, 1744 | "requires": { 1745 | "browserify-cipher": "^1.0.0", 1746 | "browserify-sign": "^4.0.0", 1747 | "create-ecdh": "^4.0.0", 1748 | "create-hash": "^1.1.0", 1749 | "create-hmac": "^1.1.0", 1750 | "diffie-hellman": "^5.0.0", 1751 | "inherits": "^2.0.1", 1752 | "pbkdf2": "^3.0.3", 1753 | "public-encrypt": "^4.0.0", 1754 | "randombytes": "^2.0.0", 1755 | "randomfill": "^1.0.3" 1756 | } 1757 | }, 1758 | "dash-ast": { 1759 | "version": "1.0.0", 1760 | "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", 1761 | "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", 1762 | "dev": true 1763 | }, 1764 | "debug": { 1765 | "version": "4.1.1", 1766 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 1767 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 1768 | "dev": true, 1769 | "requires": { 1770 | "ms": "^2.1.1" 1771 | } 1772 | }, 1773 | "define-properties": { 1774 | "version": "1.1.3", 1775 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 1776 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 1777 | "dev": true, 1778 | "requires": { 1779 | "object-keys": "^1.0.12" 1780 | } 1781 | }, 1782 | "defined": { 1783 | "version": "1.0.0", 1784 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 1785 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", 1786 | "dev": true 1787 | }, 1788 | "deps-sort": { 1789 | "version": "2.0.1", 1790 | "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", 1791 | "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", 1792 | "dev": true, 1793 | "requires": { 1794 | "JSONStream": "^1.0.3", 1795 | "shasum-object": "^1.0.0", 1796 | "subarg": "^1.0.0", 1797 | "through2": "^2.0.0" 1798 | }, 1799 | "dependencies": { 1800 | "through2": { 1801 | "version": "2.0.5", 1802 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 1803 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 1804 | "dev": true, 1805 | "requires": { 1806 | "readable-stream": "~2.3.6", 1807 | "xtend": "~4.0.1" 1808 | } 1809 | } 1810 | } 1811 | }, 1812 | "des.js": { 1813 | "version": "1.0.1", 1814 | "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", 1815 | "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", 1816 | "dev": true, 1817 | "requires": { 1818 | "inherits": "^2.0.1", 1819 | "minimalistic-assert": "^1.0.0" 1820 | } 1821 | }, 1822 | "detective": { 1823 | "version": "5.2.0", 1824 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", 1825 | "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", 1826 | "dev": true, 1827 | "requires": { 1828 | "acorn-node": "^1.6.1", 1829 | "defined": "^1.0.0", 1830 | "minimist": "^1.1.1" 1831 | } 1832 | }, 1833 | "diffie-hellman": { 1834 | "version": "5.0.3", 1835 | "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", 1836 | "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", 1837 | "dev": true, 1838 | "requires": { 1839 | "bn.js": "^4.1.0", 1840 | "miller-rabin": "^4.0.0", 1841 | "randombytes": "^2.0.0" 1842 | } 1843 | }, 1844 | "domain-browser": { 1845 | "version": "1.2.0", 1846 | "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", 1847 | "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", 1848 | "dev": true 1849 | }, 1850 | "duplexer2": { 1851 | "version": "0.1.4", 1852 | "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", 1853 | "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", 1854 | "dev": true, 1855 | "requires": { 1856 | "readable-stream": "^2.0.2" 1857 | } 1858 | }, 1859 | "elliptic": { 1860 | "version": "6.5.4", 1861 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", 1862 | "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", 1863 | "dev": true, 1864 | "requires": { 1865 | "bn.js": "^4.11.9", 1866 | "brorand": "^1.1.0", 1867 | "hash.js": "^1.0.0", 1868 | "hmac-drbg": "^1.0.1", 1869 | "inherits": "^2.0.4", 1870 | "minimalistic-assert": "^1.0.1", 1871 | "minimalistic-crypto-utils": "^1.0.1" 1872 | }, 1873 | "dependencies": { 1874 | "bn.js": { 1875 | "version": "4.12.0", 1876 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 1877 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", 1878 | "dev": true 1879 | } 1880 | } 1881 | }, 1882 | "error-ex": { 1883 | "version": "1.3.2", 1884 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 1885 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 1886 | "dev": true, 1887 | "requires": { 1888 | "is-arrayish": "^0.2.1" 1889 | } 1890 | }, 1891 | "escalade": { 1892 | "version": "3.1.1", 1893 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1894 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1895 | "dev": true 1896 | }, 1897 | "escape-string-regexp": { 1898 | "version": "1.0.5", 1899 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1900 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1901 | "dev": true 1902 | }, 1903 | "esmify": { 1904 | "version": "2.1.1", 1905 | "resolved": "https://registry.npmjs.org/esmify/-/esmify-2.1.1.tgz", 1906 | "integrity": "sha512-GyOVgjG7sNyYB5Mbo15Ll4aGrcXZzZ3LI22rbLOjCI7L/wYelzQpBHRZkZkqbPNZ/QIRilcaHqzgNCLcEsi1lQ==", 1907 | "dev": true, 1908 | "requires": { 1909 | "@babel/core": "^7.2.2", 1910 | "@babel/plugin-syntax-async-generators": "^7.2.0", 1911 | "@babel/plugin-syntax-dynamic-import": "^7.2.0", 1912 | "@babel/plugin-syntax-object-rest-spread": "^7.2.0", 1913 | "@babel/plugin-transform-modules-commonjs": "^7.2.0", 1914 | "babel-plugin-import-to-require": "^1.0.0", 1915 | "cached-path-relative": "^1.0.2", 1916 | "concat-stream": "^1.6.2", 1917 | "duplexer2": "^0.1.4", 1918 | "through2": "^2.0.5" 1919 | }, 1920 | "dependencies": { 1921 | "concat-stream": { 1922 | "version": "1.6.2", 1923 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 1924 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 1925 | "dev": true, 1926 | "requires": { 1927 | "buffer-from": "^1.0.0", 1928 | "inherits": "^2.0.3", 1929 | "readable-stream": "^2.2.2", 1930 | "typedarray": "^0.0.6" 1931 | } 1932 | }, 1933 | "through2": { 1934 | "version": "2.0.5", 1935 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 1936 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 1937 | "dev": true, 1938 | "requires": { 1939 | "readable-stream": "~2.3.6", 1940 | "xtend": "~4.0.1" 1941 | } 1942 | } 1943 | } 1944 | }, 1945 | "esutils": { 1946 | "version": "2.0.3", 1947 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1948 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1949 | "dev": true 1950 | }, 1951 | "events": { 1952 | "version": "2.1.0", 1953 | "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", 1954 | "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", 1955 | "dev": true 1956 | }, 1957 | "evp_bytestokey": { 1958 | "version": "1.0.3", 1959 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", 1960 | "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", 1961 | "dev": true, 1962 | "requires": { 1963 | "md5.js": "^1.3.4", 1964 | "safe-buffer": "^5.1.1" 1965 | } 1966 | }, 1967 | "fast-safe-stringify": { 1968 | "version": "2.0.7", 1969 | "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", 1970 | "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", 1971 | "dev": true 1972 | }, 1973 | "fill-range": { 1974 | "version": "7.0.1", 1975 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1976 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1977 | "dev": true, 1978 | "requires": { 1979 | "to-regex-range": "^5.0.1" 1980 | } 1981 | }, 1982 | "frida-any-promise": { 1983 | "version": "2.0.0", 1984 | "resolved": "https://registry.npmjs.org/frida-any-promise/-/frida-any-promise-2.0.0.tgz", 1985 | "integrity": "sha512-UbQZMmq7JybTSLBBhsoBfR6R0ydi4t7l0D9ttD4MGUKOxrNlUzCJEw0vw+ubSLok9MNXTZ63MBrPUNJRKhAnrg==", 1986 | "dev": true 1987 | }, 1988 | "frida-buffer": { 1989 | "version": "1.0.7", 1990 | "resolved": "https://registry.npmjs.org/frida-buffer/-/frida-buffer-1.0.7.tgz", 1991 | "integrity": "sha512-7/7SuGI411k7JuQPIjETS07oa9h95E39kA8ky3/8D2ybL7XhVR1s6LPo/q8ew6zeWYQ1x52ZHhJGyoOAfWUJBA==", 1992 | "dev": true, 1993 | "requires": { 1994 | "buffer": "^5.3.0" 1995 | }, 1996 | "dependencies": { 1997 | "buffer": { 1998 | "version": "5.5.0", 1999 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.5.0.tgz", 2000 | "integrity": "sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==", 2001 | "dev": true, 2002 | "requires": { 2003 | "base64-js": "^1.0.2", 2004 | "ieee754": "^1.1.4" 2005 | } 2006 | } 2007 | } 2008 | }, 2009 | "frida-compile": { 2010 | "version": "9.3.0", 2011 | "resolved": "https://registry.npmjs.org/frida-compile/-/frida-compile-9.3.0.tgz", 2012 | "integrity": "sha512-CTYqztKhJ0MRXZCjXxORRQao24wjYJ2cX6Mi4OmJvA4b2Vwyt57Je45aJsZhaLs0I1kndyo28Ikr3gHlemN2kw==", 2013 | "dev": true, 2014 | "requires": { 2015 | "@babel/core": "^7.5.5", 2016 | "@babel/plugin-transform-runtime": "^7.5.5", 2017 | "@babel/preset-env": "^7.5.5", 2018 | "@babel/runtime-corejs2": "^7.5.5", 2019 | "@frida/uglifyify": "^6.0.1", 2020 | "babelify": "^10.0.0", 2021 | "bignumber.js": "^9.0.0", 2022 | "browserify": "^16.2.3", 2023 | "chalk": "^2.4.1", 2024 | "chokidar": "^3.0.0", 2025 | "commander": "^3.0.0", 2026 | "concat-stream": "^2.0.0", 2027 | "esmify": "^2.1.1", 2028 | "frida-any-promise": "^2.0.0", 2029 | "frida-buffer": "^1.0.7", 2030 | "frida-fs": "^3.0.0", 2031 | "frida-http": "^3.0.0", 2032 | "frida-net": "^3.0.1", 2033 | "frida-process": "^3.0.1", 2034 | "mkdirp": "^0.5.1", 2035 | "mold-source-map": "^0.4.0", 2036 | "node-notifier": "^5.1.2", 2037 | "through2": "^3.0.1", 2038 | "tsify": "^4.0.0", 2039 | "typescript": "^3.5.1" 2040 | } 2041 | }, 2042 | "frida-fs": { 2043 | "version": "3.0.1", 2044 | "resolved": "https://registry.npmjs.org/frida-fs/-/frida-fs-3.0.1.tgz", 2045 | "integrity": "sha512-lbf3CYySo6jNw82EUAWYe31f1wbgIARdnzHDIdDrrxowBS19xvrZSYMYHqw2iJWkTOzJ4ueoF6WGF85QtCsM4g==", 2046 | "dev": true 2047 | }, 2048 | "frida-http": { 2049 | "version": "3.0.0", 2050 | "resolved": "https://registry.npmjs.org/frida-http/-/frida-http-3.0.0.tgz", 2051 | "integrity": "sha512-3jyuQx6vEMcmbnmSR4QzzdcLERhrjR90Gjg/wtYD7wUxZMwMxasfFeqmcLQ+exLNTwD+dI9HquGByuSn3h+9rw==", 2052 | "dev": true, 2053 | "requires": { 2054 | "http-parser-js": "^0.5.1" 2055 | } 2056 | }, 2057 | "frida-net": { 2058 | "version": "3.0.1", 2059 | "resolved": "https://registry.npmjs.org/frida-net/-/frida-net-3.0.1.tgz", 2060 | "integrity": "sha512-N4wu2120FZQC9YZsKWoGnfGlSwVPI9VcQW48kYccuYKhXfMWTnKnDZRA3MJ7sxMMX4zrOkihe9vtHw1aoBCqAg==", 2061 | "dev": true, 2062 | "requires": { 2063 | "ipaddr.js": "^1.9.1" 2064 | } 2065 | }, 2066 | "frida-process": { 2067 | "version": "3.0.1", 2068 | "resolved": "https://registry.npmjs.org/frida-process/-/frida-process-3.0.1.tgz", 2069 | "integrity": "sha512-TigqmU3Y4XNkJi1bYIC6lT3dUSVRMzyjguIvlHs8XH9+39ykRztgoARJd6vH2+n58OeQFs03MlQiW/KI5q6jVQ==", 2070 | "dev": true 2071 | }, 2072 | "fs.realpath": { 2073 | "version": "1.0.0", 2074 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2075 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 2076 | "dev": true 2077 | }, 2078 | "fsevents": { 2079 | "version": "2.1.2", 2080 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", 2081 | "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", 2082 | "dev": true, 2083 | "optional": true 2084 | }, 2085 | "function-bind": { 2086 | "version": "1.1.1", 2087 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 2088 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 2089 | "dev": true 2090 | }, 2091 | "gensync": { 2092 | "version": "1.0.0-beta.1", 2093 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", 2094 | "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", 2095 | "dev": true 2096 | }, 2097 | "get-assigned-identifiers": { 2098 | "version": "1.2.0", 2099 | "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", 2100 | "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", 2101 | "dev": true 2102 | }, 2103 | "glob": { 2104 | "version": "7.1.6", 2105 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 2106 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 2107 | "dev": true, 2108 | "requires": { 2109 | "fs.realpath": "^1.0.0", 2110 | "inflight": "^1.0.4", 2111 | "inherits": "2", 2112 | "minimatch": "^3.0.4", 2113 | "once": "^1.3.0", 2114 | "path-is-absolute": "^1.0.0" 2115 | } 2116 | }, 2117 | "glob-parent": { 2118 | "version": "5.1.2", 2119 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2120 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2121 | "dev": true, 2122 | "requires": { 2123 | "is-glob": "^4.0.1" 2124 | } 2125 | }, 2126 | "globals": { 2127 | "version": "11.12.0", 2128 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 2129 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 2130 | "dev": true 2131 | }, 2132 | "growly": { 2133 | "version": "1.3.0", 2134 | "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", 2135 | "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", 2136 | "dev": true 2137 | }, 2138 | "has": { 2139 | "version": "1.0.3", 2140 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2141 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2142 | "dev": true, 2143 | "requires": { 2144 | "function-bind": "^1.1.1" 2145 | } 2146 | }, 2147 | "has-ansi": { 2148 | "version": "2.0.0", 2149 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 2150 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 2151 | "dev": true, 2152 | "requires": { 2153 | "ansi-regex": "^2.0.0" 2154 | } 2155 | }, 2156 | "has-flag": { 2157 | "version": "3.0.0", 2158 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 2159 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 2160 | "dev": true 2161 | }, 2162 | "has-symbols": { 2163 | "version": "1.0.1", 2164 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 2165 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", 2166 | "dev": true 2167 | }, 2168 | "hash-base": { 2169 | "version": "3.0.4", 2170 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", 2171 | "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", 2172 | "dev": true, 2173 | "requires": { 2174 | "inherits": "^2.0.1", 2175 | "safe-buffer": "^5.0.1" 2176 | } 2177 | }, 2178 | "hash.js": { 2179 | "version": "1.1.7", 2180 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 2181 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 2182 | "dev": true, 2183 | "requires": { 2184 | "inherits": "^2.0.3", 2185 | "minimalistic-assert": "^1.0.1" 2186 | } 2187 | }, 2188 | "hmac-drbg": { 2189 | "version": "1.0.1", 2190 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 2191 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 2192 | "dev": true, 2193 | "requires": { 2194 | "hash.js": "^1.0.3", 2195 | "minimalistic-assert": "^1.0.0", 2196 | "minimalistic-crypto-utils": "^1.0.1" 2197 | } 2198 | }, 2199 | "htmlescape": { 2200 | "version": "1.1.1", 2201 | "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", 2202 | "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", 2203 | "dev": true 2204 | }, 2205 | "http-parser-js": { 2206 | "version": "0.5.2", 2207 | "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.2.tgz", 2208 | "integrity": "sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ==", 2209 | "dev": true 2210 | }, 2211 | "https-browserify": { 2212 | "version": "1.0.0", 2213 | "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", 2214 | "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", 2215 | "dev": true 2216 | }, 2217 | "ieee754": { 2218 | "version": "1.1.13", 2219 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 2220 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", 2221 | "dev": true 2222 | }, 2223 | "inflight": { 2224 | "version": "1.0.6", 2225 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2226 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 2227 | "dev": true, 2228 | "requires": { 2229 | "once": "^1.3.0", 2230 | "wrappy": "1" 2231 | } 2232 | }, 2233 | "inherits": { 2234 | "version": "2.0.4", 2235 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2236 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2237 | "dev": true 2238 | }, 2239 | "inline-source-map": { 2240 | "version": "0.6.2", 2241 | "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", 2242 | "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", 2243 | "dev": true, 2244 | "requires": { 2245 | "source-map": "~0.5.3" 2246 | } 2247 | }, 2248 | "insert-module-globals": { 2249 | "version": "7.2.0", 2250 | "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", 2251 | "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", 2252 | "dev": true, 2253 | "requires": { 2254 | "JSONStream": "^1.0.3", 2255 | "acorn-node": "^1.5.2", 2256 | "combine-source-map": "^0.8.0", 2257 | "concat-stream": "^1.6.1", 2258 | "is-buffer": "^1.1.0", 2259 | "path-is-absolute": "^1.0.1", 2260 | "process": "~0.11.0", 2261 | "through2": "^2.0.0", 2262 | "undeclared-identifiers": "^1.1.2", 2263 | "xtend": "^4.0.0" 2264 | }, 2265 | "dependencies": { 2266 | "concat-stream": { 2267 | "version": "1.6.2", 2268 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 2269 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 2270 | "dev": true, 2271 | "requires": { 2272 | "buffer-from": "^1.0.0", 2273 | "inherits": "^2.0.3", 2274 | "readable-stream": "^2.2.2", 2275 | "typedarray": "^0.0.6" 2276 | } 2277 | }, 2278 | "through2": { 2279 | "version": "2.0.5", 2280 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 2281 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 2282 | "dev": true, 2283 | "requires": { 2284 | "readable-stream": "~2.3.6", 2285 | "xtend": "~4.0.1" 2286 | } 2287 | } 2288 | } 2289 | }, 2290 | "invariant": { 2291 | "version": "2.2.4", 2292 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", 2293 | "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", 2294 | "dev": true, 2295 | "requires": { 2296 | "loose-envify": "^1.0.0" 2297 | } 2298 | }, 2299 | "ipaddr.js": { 2300 | "version": "1.9.1", 2301 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 2302 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 2303 | "dev": true 2304 | }, 2305 | "is-arrayish": { 2306 | "version": "0.2.1", 2307 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 2308 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 2309 | "dev": true 2310 | }, 2311 | "is-binary-path": { 2312 | "version": "2.1.0", 2313 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 2314 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2315 | "dev": true, 2316 | "requires": { 2317 | "binary-extensions": "^2.0.0" 2318 | } 2319 | }, 2320 | "is-buffer": { 2321 | "version": "1.1.6", 2322 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 2323 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 2324 | "dev": true 2325 | }, 2326 | "is-extglob": { 2327 | "version": "2.1.1", 2328 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2329 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 2330 | "dev": true 2331 | }, 2332 | "is-glob": { 2333 | "version": "4.0.1", 2334 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 2335 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 2336 | "dev": true, 2337 | "requires": { 2338 | "is-extglob": "^2.1.1" 2339 | } 2340 | }, 2341 | "is-number": { 2342 | "version": "7.0.0", 2343 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2344 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2345 | "dev": true 2346 | }, 2347 | "is-utf8": { 2348 | "version": "0.2.1", 2349 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 2350 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", 2351 | "dev": true 2352 | }, 2353 | "is-wsl": { 2354 | "version": "1.1.0", 2355 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", 2356 | "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", 2357 | "dev": true 2358 | }, 2359 | "isarray": { 2360 | "version": "1.0.0", 2361 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 2362 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 2363 | "dev": true 2364 | }, 2365 | "isexe": { 2366 | "version": "2.0.0", 2367 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2368 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 2369 | "dev": true 2370 | }, 2371 | "js-tokens": { 2372 | "version": "4.0.0", 2373 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2374 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2375 | "dev": true 2376 | }, 2377 | "jsesc": { 2378 | "version": "2.5.2", 2379 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 2380 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 2381 | "dev": true 2382 | }, 2383 | "json-stable-stringify": { 2384 | "version": "0.0.1", 2385 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", 2386 | "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", 2387 | "dev": true, 2388 | "requires": { 2389 | "jsonify": "~0.0.0" 2390 | } 2391 | }, 2392 | "json5": { 2393 | "version": "2.1.3", 2394 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", 2395 | "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", 2396 | "dev": true, 2397 | "requires": { 2398 | "minimist": "^1.2.5" 2399 | } 2400 | }, 2401 | "jsonify": { 2402 | "version": "0.0.0", 2403 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 2404 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", 2405 | "dev": true 2406 | }, 2407 | "jsonparse": { 2408 | "version": "1.3.1", 2409 | "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", 2410 | "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", 2411 | "dev": true 2412 | }, 2413 | "labeled-stream-splicer": { 2414 | "version": "2.0.2", 2415 | "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", 2416 | "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", 2417 | "dev": true, 2418 | "requires": { 2419 | "inherits": "^2.0.1", 2420 | "stream-splicer": "^2.0.0" 2421 | } 2422 | }, 2423 | "leven": { 2424 | "version": "3.1.0", 2425 | "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", 2426 | "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", 2427 | "dev": true 2428 | }, 2429 | "levenary": { 2430 | "version": "1.1.1", 2431 | "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", 2432 | "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", 2433 | "dev": true, 2434 | "requires": { 2435 | "leven": "^3.1.0" 2436 | } 2437 | }, 2438 | "lodash": { 2439 | "version": "4.17.21", 2440 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2441 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 2442 | "dev": true 2443 | }, 2444 | "lodash.memoize": { 2445 | "version": "3.0.4", 2446 | "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", 2447 | "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", 2448 | "dev": true 2449 | }, 2450 | "loose-envify": { 2451 | "version": "1.4.0", 2452 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 2453 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 2454 | "dev": true, 2455 | "requires": { 2456 | "js-tokens": "^3.0.0 || ^4.0.0" 2457 | } 2458 | }, 2459 | "md5.js": { 2460 | "version": "1.3.5", 2461 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", 2462 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", 2463 | "dev": true, 2464 | "requires": { 2465 | "hash-base": "^3.0.0", 2466 | "inherits": "^2.0.1", 2467 | "safe-buffer": "^5.1.2" 2468 | } 2469 | }, 2470 | "miller-rabin": { 2471 | "version": "4.0.1", 2472 | "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", 2473 | "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", 2474 | "dev": true, 2475 | "requires": { 2476 | "bn.js": "^4.0.0", 2477 | "brorand": "^1.0.1" 2478 | } 2479 | }, 2480 | "minimalistic-assert": { 2481 | "version": "1.0.1", 2482 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 2483 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", 2484 | "dev": true 2485 | }, 2486 | "minimalistic-crypto-utils": { 2487 | "version": "1.0.1", 2488 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 2489 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", 2490 | "dev": true 2491 | }, 2492 | "minimatch": { 2493 | "version": "3.0.4", 2494 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2495 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2496 | "dev": true, 2497 | "requires": { 2498 | "brace-expansion": "^1.1.7" 2499 | } 2500 | }, 2501 | "minimist": { 2502 | "version": "1.2.5", 2503 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 2504 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 2505 | "dev": true 2506 | }, 2507 | "mkdirp": { 2508 | "version": "0.5.5", 2509 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 2510 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 2511 | "dev": true, 2512 | "requires": { 2513 | "minimist": "^1.2.5" 2514 | } 2515 | }, 2516 | "mkdirp-classic": { 2517 | "version": "0.5.2", 2518 | "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz", 2519 | "integrity": "sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==", 2520 | "dev": true 2521 | }, 2522 | "module-deps": { 2523 | "version": "6.2.2", 2524 | "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.2.tgz", 2525 | "integrity": "sha512-a9y6yDv5u5I4A+IPHTnqFxcaKr4p50/zxTjcQJaX2ws9tN/W6J6YXnEKhqRyPhl494dkcxx951onSKVezmI+3w==", 2526 | "dev": true, 2527 | "requires": { 2528 | "JSONStream": "^1.0.3", 2529 | "browser-resolve": "^1.7.0", 2530 | "cached-path-relative": "^1.0.2", 2531 | "concat-stream": "~1.6.0", 2532 | "defined": "^1.0.0", 2533 | "detective": "^5.2.0", 2534 | "duplexer2": "^0.1.2", 2535 | "inherits": "^2.0.1", 2536 | "parents": "^1.0.0", 2537 | "readable-stream": "^2.0.2", 2538 | "resolve": "^1.4.0", 2539 | "stream-combiner2": "^1.1.1", 2540 | "subarg": "^1.0.0", 2541 | "through2": "^2.0.0", 2542 | "xtend": "^4.0.0" 2543 | }, 2544 | "dependencies": { 2545 | "concat-stream": { 2546 | "version": "1.6.2", 2547 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 2548 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 2549 | "dev": true, 2550 | "requires": { 2551 | "buffer-from": "^1.0.0", 2552 | "inherits": "^2.0.3", 2553 | "readable-stream": "^2.2.2", 2554 | "typedarray": "^0.0.6" 2555 | } 2556 | }, 2557 | "through2": { 2558 | "version": "2.0.5", 2559 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 2560 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 2561 | "dev": true, 2562 | "requires": { 2563 | "readable-stream": "~2.3.6", 2564 | "xtend": "~4.0.1" 2565 | } 2566 | } 2567 | } 2568 | }, 2569 | "mold-source-map": { 2570 | "version": "0.4.0", 2571 | "resolved": "https://registry.npmjs.org/mold-source-map/-/mold-source-map-0.4.0.tgz", 2572 | "integrity": "sha1-z2fgsxxHq5uttcnCVlGGISe7gxc=", 2573 | "dev": true, 2574 | "requires": { 2575 | "convert-source-map": "^1.1.0", 2576 | "through": "~2.2.7" 2577 | }, 2578 | "dependencies": { 2579 | "through": { 2580 | "version": "2.2.7", 2581 | "resolved": "https://registry.npmjs.org/through/-/through-2.2.7.tgz", 2582 | "integrity": "sha1-bo4hIAGR1OtqmfbwEN9Gqhxusr0=", 2583 | "dev": true 2584 | } 2585 | } 2586 | }, 2587 | "ms": { 2588 | "version": "2.1.2", 2589 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2590 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2591 | "dev": true 2592 | }, 2593 | "node-notifier": { 2594 | "version": "5.4.3", 2595 | "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", 2596 | "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", 2597 | "dev": true, 2598 | "requires": { 2599 | "growly": "^1.3.0", 2600 | "is-wsl": "^1.1.0", 2601 | "semver": "^5.5.0", 2602 | "shellwords": "^0.1.1", 2603 | "which": "^1.3.0" 2604 | } 2605 | }, 2606 | "normalize-path": { 2607 | "version": "3.0.0", 2608 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2609 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2610 | "dev": true 2611 | }, 2612 | "object-assign": { 2613 | "version": "4.1.1", 2614 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2615 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 2616 | "dev": true 2617 | }, 2618 | "object-keys": { 2619 | "version": "1.1.1", 2620 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2621 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 2622 | "dev": true 2623 | }, 2624 | "object.assign": { 2625 | "version": "4.1.0", 2626 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 2627 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 2628 | "dev": true, 2629 | "requires": { 2630 | "define-properties": "^1.1.2", 2631 | "function-bind": "^1.1.1", 2632 | "has-symbols": "^1.0.0", 2633 | "object-keys": "^1.0.11" 2634 | } 2635 | }, 2636 | "once": { 2637 | "version": "1.4.0", 2638 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2639 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2640 | "dev": true, 2641 | "requires": { 2642 | "wrappy": "1" 2643 | } 2644 | }, 2645 | "os-browserify": { 2646 | "version": "0.3.0", 2647 | "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", 2648 | "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", 2649 | "dev": true 2650 | }, 2651 | "pako": { 2652 | "version": "1.0.11", 2653 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", 2654 | "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", 2655 | "dev": true 2656 | }, 2657 | "parents": { 2658 | "version": "1.0.1", 2659 | "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", 2660 | "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", 2661 | "dev": true, 2662 | "requires": { 2663 | "path-platform": "~0.11.15" 2664 | } 2665 | }, 2666 | "parse-asn1": { 2667 | "version": "5.1.5", 2668 | "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", 2669 | "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", 2670 | "dev": true, 2671 | "requires": { 2672 | "asn1.js": "^4.0.0", 2673 | "browserify-aes": "^1.0.0", 2674 | "create-hash": "^1.1.0", 2675 | "evp_bytestokey": "^1.0.0", 2676 | "pbkdf2": "^3.0.3", 2677 | "safe-buffer": "^5.1.1" 2678 | } 2679 | }, 2680 | "parse-json": { 2681 | "version": "2.2.0", 2682 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 2683 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 2684 | "dev": true, 2685 | "requires": { 2686 | "error-ex": "^1.2.0" 2687 | } 2688 | }, 2689 | "path-browserify": { 2690 | "version": "0.0.1", 2691 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", 2692 | "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", 2693 | "dev": true 2694 | }, 2695 | "path-is-absolute": { 2696 | "version": "1.0.1", 2697 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2698 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2699 | "dev": true 2700 | }, 2701 | "path-parse": { 2702 | "version": "1.0.6", 2703 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 2704 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 2705 | "dev": true 2706 | }, 2707 | "path-platform": { 2708 | "version": "0.11.15", 2709 | "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", 2710 | "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", 2711 | "dev": true 2712 | }, 2713 | "pbkdf2": { 2714 | "version": "3.0.17", 2715 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", 2716 | "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", 2717 | "dev": true, 2718 | "requires": { 2719 | "create-hash": "^1.1.2", 2720 | "create-hmac": "^1.1.4", 2721 | "ripemd160": "^2.0.1", 2722 | "safe-buffer": "^5.0.1", 2723 | "sha.js": "^2.4.8" 2724 | } 2725 | }, 2726 | "picomatch": { 2727 | "version": "2.2.2", 2728 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 2729 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 2730 | "dev": true 2731 | }, 2732 | "private": { 2733 | "version": "0.1.8", 2734 | "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", 2735 | "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", 2736 | "dev": true 2737 | }, 2738 | "process": { 2739 | "version": "0.11.10", 2740 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 2741 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", 2742 | "dev": true 2743 | }, 2744 | "process-nextick-args": { 2745 | "version": "2.0.1", 2746 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 2747 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 2748 | "dev": true 2749 | }, 2750 | "public-encrypt": { 2751 | "version": "4.0.3", 2752 | "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", 2753 | "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", 2754 | "dev": true, 2755 | "requires": { 2756 | "bn.js": "^4.1.0", 2757 | "browserify-rsa": "^4.0.0", 2758 | "create-hash": "^1.1.0", 2759 | "parse-asn1": "^5.0.0", 2760 | "randombytes": "^2.0.1", 2761 | "safe-buffer": "^5.1.2" 2762 | } 2763 | }, 2764 | "punycode": { 2765 | "version": "1.4.1", 2766 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2767 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 2768 | "dev": true 2769 | }, 2770 | "querystring": { 2771 | "version": "0.2.0", 2772 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 2773 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", 2774 | "dev": true 2775 | }, 2776 | "querystring-es3": { 2777 | "version": "0.2.1", 2778 | "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", 2779 | "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", 2780 | "dev": true 2781 | }, 2782 | "randombytes": { 2783 | "version": "2.1.0", 2784 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 2785 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 2786 | "dev": true, 2787 | "requires": { 2788 | "safe-buffer": "^5.1.0" 2789 | } 2790 | }, 2791 | "randomfill": { 2792 | "version": "1.0.4", 2793 | "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", 2794 | "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", 2795 | "dev": true, 2796 | "requires": { 2797 | "randombytes": "^2.0.5", 2798 | "safe-buffer": "^5.1.0" 2799 | } 2800 | }, 2801 | "read-only-stream": { 2802 | "version": "2.0.0", 2803 | "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", 2804 | "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", 2805 | "dev": true, 2806 | "requires": { 2807 | "readable-stream": "^2.0.2" 2808 | } 2809 | }, 2810 | "readable-stream": { 2811 | "version": "2.3.7", 2812 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 2813 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 2814 | "dev": true, 2815 | "requires": { 2816 | "core-util-is": "~1.0.0", 2817 | "inherits": "~2.0.3", 2818 | "isarray": "~1.0.0", 2819 | "process-nextick-args": "~2.0.0", 2820 | "safe-buffer": "~5.1.1", 2821 | "string_decoder": "~1.1.1", 2822 | "util-deprecate": "~1.0.1" 2823 | }, 2824 | "dependencies": { 2825 | "string_decoder": { 2826 | "version": "1.1.1", 2827 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2828 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2829 | "dev": true, 2830 | "requires": { 2831 | "safe-buffer": "~5.1.0" 2832 | } 2833 | } 2834 | } 2835 | }, 2836 | "readdirp": { 2837 | "version": "3.3.0", 2838 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", 2839 | "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", 2840 | "dev": true, 2841 | "requires": { 2842 | "picomatch": "^2.0.7" 2843 | } 2844 | }, 2845 | "regenerate": { 2846 | "version": "1.4.0", 2847 | "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", 2848 | "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", 2849 | "dev": true 2850 | }, 2851 | "regenerate-unicode-properties": { 2852 | "version": "8.2.0", 2853 | "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", 2854 | "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", 2855 | "dev": true, 2856 | "requires": { 2857 | "regenerate": "^1.4.0" 2858 | } 2859 | }, 2860 | "regenerator-runtime": { 2861 | "version": "0.13.5", 2862 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", 2863 | "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", 2864 | "dev": true 2865 | }, 2866 | "regenerator-transform": { 2867 | "version": "0.14.4", 2868 | "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", 2869 | "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", 2870 | "dev": true, 2871 | "requires": { 2872 | "@babel/runtime": "^7.8.4", 2873 | "private": "^0.1.8" 2874 | } 2875 | }, 2876 | "regexpu-core": { 2877 | "version": "4.7.0", 2878 | "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", 2879 | "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", 2880 | "dev": true, 2881 | "requires": { 2882 | "regenerate": "^1.4.0", 2883 | "regenerate-unicode-properties": "^8.2.0", 2884 | "regjsgen": "^0.5.1", 2885 | "regjsparser": "^0.6.4", 2886 | "unicode-match-property-ecmascript": "^1.0.4", 2887 | "unicode-match-property-value-ecmascript": "^1.2.0" 2888 | } 2889 | }, 2890 | "regjsgen": { 2891 | "version": "0.5.1", 2892 | "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", 2893 | "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", 2894 | "dev": true 2895 | }, 2896 | "regjsparser": { 2897 | "version": "0.6.4", 2898 | "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", 2899 | "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", 2900 | "dev": true, 2901 | "requires": { 2902 | "jsesc": "~0.5.0" 2903 | }, 2904 | "dependencies": { 2905 | "jsesc": { 2906 | "version": "0.5.0", 2907 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", 2908 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", 2909 | "dev": true 2910 | } 2911 | } 2912 | }, 2913 | "resolve": { 2914 | "version": "1.15.1", 2915 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", 2916 | "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", 2917 | "dev": true, 2918 | "requires": { 2919 | "path-parse": "^1.0.6" 2920 | } 2921 | }, 2922 | "ripemd160": { 2923 | "version": "2.0.2", 2924 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", 2925 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", 2926 | "dev": true, 2927 | "requires": { 2928 | "hash-base": "^3.0.0", 2929 | "inherits": "^2.0.1" 2930 | } 2931 | }, 2932 | "safe-buffer": { 2933 | "version": "5.1.2", 2934 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2935 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2936 | "dev": true 2937 | }, 2938 | "semver": { 2939 | "version": "5.7.1", 2940 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2941 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 2942 | "dev": true 2943 | }, 2944 | "sha.js": { 2945 | "version": "2.4.11", 2946 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 2947 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 2948 | "dev": true, 2949 | "requires": { 2950 | "inherits": "^2.0.1", 2951 | "safe-buffer": "^5.0.1" 2952 | } 2953 | }, 2954 | "shasum": { 2955 | "version": "1.0.2", 2956 | "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", 2957 | "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", 2958 | "dev": true, 2959 | "requires": { 2960 | "json-stable-stringify": "~0.0.0", 2961 | "sha.js": "~2.4.4" 2962 | } 2963 | }, 2964 | "shasum-object": { 2965 | "version": "1.0.0", 2966 | "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", 2967 | "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", 2968 | "dev": true, 2969 | "requires": { 2970 | "fast-safe-stringify": "^2.0.7" 2971 | } 2972 | }, 2973 | "shell-quote": { 2974 | "version": "1.7.2", 2975 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", 2976 | "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", 2977 | "dev": true 2978 | }, 2979 | "shellwords": { 2980 | "version": "0.1.1", 2981 | "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", 2982 | "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", 2983 | "dev": true 2984 | }, 2985 | "simple-concat": { 2986 | "version": "1.0.0", 2987 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", 2988 | "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", 2989 | "dev": true 2990 | }, 2991 | "source-map": { 2992 | "version": "0.5.7", 2993 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2994 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 2995 | "dev": true 2996 | }, 2997 | "source-map-support": { 2998 | "version": "0.5.16", 2999 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", 3000 | "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", 3001 | "dev": true, 3002 | "requires": { 3003 | "buffer-from": "^1.0.0", 3004 | "source-map": "^0.6.0" 3005 | }, 3006 | "dependencies": { 3007 | "source-map": { 3008 | "version": "0.6.1", 3009 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3010 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3011 | "dev": true 3012 | } 3013 | } 3014 | }, 3015 | "stream-browserify": { 3016 | "version": "2.0.2", 3017 | "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", 3018 | "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", 3019 | "dev": true, 3020 | "requires": { 3021 | "inherits": "~2.0.1", 3022 | "readable-stream": "^2.0.2" 3023 | } 3024 | }, 3025 | "stream-combiner2": { 3026 | "version": "1.1.1", 3027 | "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", 3028 | "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", 3029 | "dev": true, 3030 | "requires": { 3031 | "duplexer2": "~0.1.0", 3032 | "readable-stream": "^2.0.2" 3033 | } 3034 | }, 3035 | "stream-http": { 3036 | "version": "3.1.0", 3037 | "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.0.tgz", 3038 | "integrity": "sha512-cuB6RgO7BqC4FBYzmnvhob5Do3wIdIsXAgGycHJnW+981gHqoYcYz9lqjJrk8WXRddbwPuqPYRl+bag6mYv4lw==", 3039 | "dev": true, 3040 | "requires": { 3041 | "builtin-status-codes": "^3.0.0", 3042 | "inherits": "^2.0.1", 3043 | "readable-stream": "^3.0.6", 3044 | "xtend": "^4.0.0" 3045 | }, 3046 | "dependencies": { 3047 | "readable-stream": { 3048 | "version": "3.6.0", 3049 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 3050 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 3051 | "dev": true, 3052 | "requires": { 3053 | "inherits": "^2.0.3", 3054 | "string_decoder": "^1.1.1", 3055 | "util-deprecate": "^1.0.1" 3056 | } 3057 | } 3058 | } 3059 | }, 3060 | "stream-splicer": { 3061 | "version": "2.0.1", 3062 | "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", 3063 | "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", 3064 | "dev": true, 3065 | "requires": { 3066 | "inherits": "^2.0.1", 3067 | "readable-stream": "^2.0.2" 3068 | } 3069 | }, 3070 | "string_decoder": { 3071 | "version": "1.3.0", 3072 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 3073 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 3074 | "dev": true, 3075 | "requires": { 3076 | "safe-buffer": "~5.2.0" 3077 | }, 3078 | "dependencies": { 3079 | "safe-buffer": { 3080 | "version": "5.2.0", 3081 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 3082 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", 3083 | "dev": true 3084 | } 3085 | } 3086 | }, 3087 | "strip-ansi": { 3088 | "version": "3.0.1", 3089 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 3090 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 3091 | "dev": true, 3092 | "requires": { 3093 | "ansi-regex": "^2.0.0" 3094 | } 3095 | }, 3096 | "strip-bom": { 3097 | "version": "2.0.0", 3098 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", 3099 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", 3100 | "dev": true, 3101 | "requires": { 3102 | "is-utf8": "^0.2.0" 3103 | } 3104 | }, 3105 | "strip-json-comments": { 3106 | "version": "2.0.1", 3107 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 3108 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 3109 | "dev": true 3110 | }, 3111 | "subarg": { 3112 | "version": "1.0.0", 3113 | "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", 3114 | "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", 3115 | "dev": true, 3116 | "requires": { 3117 | "minimist": "^1.1.0" 3118 | } 3119 | }, 3120 | "supports-color": { 3121 | "version": "5.5.0", 3122 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 3123 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 3124 | "dev": true, 3125 | "requires": { 3126 | "has-flag": "^3.0.0" 3127 | } 3128 | }, 3129 | "syntax-error": { 3130 | "version": "1.4.0", 3131 | "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", 3132 | "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", 3133 | "dev": true, 3134 | "requires": { 3135 | "acorn-node": "^1.2.0" 3136 | } 3137 | }, 3138 | "terser": { 3139 | "version": "3.17.0", 3140 | "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", 3141 | "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", 3142 | "dev": true, 3143 | "requires": { 3144 | "commander": "^2.19.0", 3145 | "source-map": "~0.6.1", 3146 | "source-map-support": "~0.5.10" 3147 | }, 3148 | "dependencies": { 3149 | "commander": { 3150 | "version": "2.20.3", 3151 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 3152 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 3153 | "dev": true 3154 | }, 3155 | "source-map": { 3156 | "version": "0.6.1", 3157 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3158 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3159 | "dev": true 3160 | } 3161 | } 3162 | }, 3163 | "through": { 3164 | "version": "2.3.8", 3165 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 3166 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 3167 | "dev": true 3168 | }, 3169 | "through2": { 3170 | "version": "3.0.1", 3171 | "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", 3172 | "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", 3173 | "dev": true, 3174 | "requires": { 3175 | "readable-stream": "2 || 3" 3176 | } 3177 | }, 3178 | "timers-browserify": { 3179 | "version": "1.4.2", 3180 | "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", 3181 | "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", 3182 | "dev": true, 3183 | "requires": { 3184 | "process": "~0.11.0" 3185 | } 3186 | }, 3187 | "to-fast-properties": { 3188 | "version": "2.0.0", 3189 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 3190 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 3191 | "dev": true 3192 | }, 3193 | "to-regex-range": { 3194 | "version": "5.0.1", 3195 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3196 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3197 | "dev": true, 3198 | "requires": { 3199 | "is-number": "^7.0.0" 3200 | } 3201 | }, 3202 | "tsconfig": { 3203 | "version": "5.0.3", 3204 | "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-5.0.3.tgz", 3205 | "integrity": "sha1-X0J45wGACWeo/Dg/0ZZIh48qbjo=", 3206 | "dev": true, 3207 | "requires": { 3208 | "any-promise": "^1.3.0", 3209 | "parse-json": "^2.2.0", 3210 | "strip-bom": "^2.0.0", 3211 | "strip-json-comments": "^2.0.0" 3212 | } 3213 | }, 3214 | "tsify": { 3215 | "version": "4.0.1", 3216 | "resolved": "https://registry.npmjs.org/tsify/-/tsify-4.0.1.tgz", 3217 | "integrity": "sha512-ClznEI+pmwY5wmD0J7HCSVERwkD+l71ch3Dqyod2JuQLEsFaiNDI+vPjaGadsuVFVvmzgoI7HghrBtWsSmCDHQ==", 3218 | "dev": true, 3219 | "requires": { 3220 | "convert-source-map": "^1.1.0", 3221 | "fs.realpath": "^1.0.0", 3222 | "object-assign": "^4.1.0", 3223 | "semver": "^5.6.0", 3224 | "through2": "^2.0.0", 3225 | "tsconfig": "^5.0.3" 3226 | }, 3227 | "dependencies": { 3228 | "through2": { 3229 | "version": "2.0.5", 3230 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 3231 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 3232 | "dev": true, 3233 | "requires": { 3234 | "readable-stream": "~2.3.6", 3235 | "xtend": "~4.0.1" 3236 | } 3237 | } 3238 | } 3239 | }, 3240 | "tty-browserify": { 3241 | "version": "0.0.1", 3242 | "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", 3243 | "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", 3244 | "dev": true 3245 | }, 3246 | "typedarray": { 3247 | "version": "0.0.6", 3248 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 3249 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 3250 | "dev": true 3251 | }, 3252 | "typescript": { 3253 | "version": "3.8.3", 3254 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", 3255 | "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", 3256 | "dev": true 3257 | }, 3258 | "umd": { 3259 | "version": "3.0.3", 3260 | "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", 3261 | "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", 3262 | "dev": true 3263 | }, 3264 | "undeclared-identifiers": { 3265 | "version": "1.1.3", 3266 | "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", 3267 | "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", 3268 | "dev": true, 3269 | "requires": { 3270 | "acorn-node": "^1.3.0", 3271 | "dash-ast": "^1.0.0", 3272 | "get-assigned-identifiers": "^1.2.0", 3273 | "simple-concat": "^1.0.0", 3274 | "xtend": "^4.0.1" 3275 | } 3276 | }, 3277 | "unicode-canonical-property-names-ecmascript": { 3278 | "version": "1.0.4", 3279 | "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", 3280 | "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", 3281 | "dev": true 3282 | }, 3283 | "unicode-match-property-ecmascript": { 3284 | "version": "1.0.4", 3285 | "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", 3286 | "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", 3287 | "dev": true, 3288 | "requires": { 3289 | "unicode-canonical-property-names-ecmascript": "^1.0.4", 3290 | "unicode-property-aliases-ecmascript": "^1.0.4" 3291 | } 3292 | }, 3293 | "unicode-match-property-value-ecmascript": { 3294 | "version": "1.2.0", 3295 | "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", 3296 | "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", 3297 | "dev": true 3298 | }, 3299 | "unicode-property-aliases-ecmascript": { 3300 | "version": "1.1.0", 3301 | "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", 3302 | "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", 3303 | "dev": true 3304 | }, 3305 | "url": { 3306 | "version": "0.11.0", 3307 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 3308 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", 3309 | "dev": true, 3310 | "requires": { 3311 | "punycode": "1.3.2", 3312 | "querystring": "0.2.0" 3313 | }, 3314 | "dependencies": { 3315 | "punycode": { 3316 | "version": "1.3.2", 3317 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 3318 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", 3319 | "dev": true 3320 | } 3321 | } 3322 | }, 3323 | "util": { 3324 | "version": "0.10.4", 3325 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", 3326 | "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", 3327 | "dev": true, 3328 | "requires": { 3329 | "inherits": "2.0.3" 3330 | }, 3331 | "dependencies": { 3332 | "inherits": { 3333 | "version": "2.0.3", 3334 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 3335 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 3336 | "dev": true 3337 | } 3338 | } 3339 | }, 3340 | "util-deprecate": { 3341 | "version": "1.0.2", 3342 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3343 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 3344 | "dev": true 3345 | }, 3346 | "vm-browserify": { 3347 | "version": "1.1.2", 3348 | "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", 3349 | "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", 3350 | "dev": true 3351 | }, 3352 | "which": { 3353 | "version": "1.3.1", 3354 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 3355 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 3356 | "dev": true, 3357 | "requires": { 3358 | "isexe": "^2.0.0" 3359 | } 3360 | }, 3361 | "wrappy": { 3362 | "version": "1.0.2", 3363 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3364 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3365 | "dev": true 3366 | }, 3367 | "xtend": { 3368 | "version": "4.0.2", 3369 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 3370 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 3371 | "dev": true 3372 | } 3373 | } 3374 | } 3375 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Fritzl", 3 | "version": "0.0.1", 4 | "description": "Frida hooks and helpers mostly aimed at finding crypto functions.", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "devDependencies": { 13 | "frida-compile": "^9.3.0" 14 | } 15 | } 16 | --------------------------------------------------------------------------------